From 4db5c8f4850d5195fe27a580f25a9be94a9f2da3 Mon Sep 17 00:00:00 2001 From: xujiacheng Date: Thu, 13 Sep 2018 16:08:21 +0800 Subject: [PATCH 1/5] IRISHUB-317,IRISHUB-318: realize the depositProcedureParameter and its UnitTest --- modules/gov/gov_params.go | 79 ++++++++++++++++++++++++++++++++++ modules/gov/gov_params_test.go | 62 ++++++++++++++++++++++++++ modules/gov/msgs_test.go | 4 +- modules/parameter/parameter.go | 14 +++--- 4 files changed, 150 insertions(+), 9 deletions(-) create mode 100644 modules/gov/gov_params.go create mode 100644 modules/gov/gov_params_test.go diff --git a/modules/gov/gov_params.go b/modules/gov/gov_params.go new file mode 100644 index 000000000..1023f5085 --- /dev/null +++ b/modules/gov/gov_params.go @@ -0,0 +1,79 @@ +package gov + +import ( + "encoding/json" + "fmt" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/x/params" +) + +var DepositProcedureParameter DepositProcedureParam + +type DepositProcedureParam struct { + Value DepositProcedure + ps params.Setter + pg params.Getter +} + +func (param *DepositProcedureParam) InitGenesis() { + param.Value = DepositProcedure{ + MinDeposit: sdk.Coins{sdk.NewInt64Coin("iris", 10)}, + MaxDepositPeriod: 1440} +} + +func (param *DepositProcedureParam) SetReadWriter(setter params.Setter) { + param.ps = setter + param.pg = setter.Getter +} + +func (param *DepositProcedureParam) GetStoreKey() string { + return "Gov/gov/depositProcedure" + +} + +func (param *DepositProcedureParam) SaveValue(ctx sdk.Context) { + param.ps.Set(ctx, param.GetStoreKey(), param.Value) +} + +func (param *DepositProcedureParam) LoadValue(ctx sdk.Context) bool { + err := param.pg.Get(ctx, param.GetStoreKey(), ¶m.Value) + if err != nil { + return false + } + return true +} + +func (param *DepositProcedureParam) ToJson() string { + jsonBytes, _ := json.Marshal(param.Value) + return string(jsonBytes) +} + +func (param *DepositProcedureParam) Update(ctx sdk.Context, jsonStr string) { + if err := json.Unmarshal([]byte(jsonStr), ¶m.Value); err == nil { + param.SaveValue(ctx) + } +} + +func (param *DepositProcedureParam) Valid(jsonStr string) sdk.Error { + + var err error + + if err = json.Unmarshal([]byte(jsonStr), ¶m.Value); err == nil { + + if param.Value.MinDeposit[0].Denom != "iris" { + return sdk.NewError(DefaultCodespace, 102, fmt.Sprintf("It should be iris ")) + } + + if param.Value.MinDeposit[0].Amount.GT(sdk.NewInt(10)) && param.Value.MinDeposit[0].Amount.LT(sdk.NewInt(20000)) { + return sdk.NewError(DefaultCodespace, 102, fmt.Sprintf("MinDepositAmount should be larger than 10 and less than 20000")) + } + + if param.Value.MaxDepositPeriod > 20 && param.Value.MaxDepositPeriod < 20000 { + return sdk.NewError(DefaultCodespace, 102, fmt.Sprintf("MaxDepositPeriod should be larger than 20 and less than 20000")) + } + + return nil + + } + return sdk.NewError(DefaultCodespace, 101, fmt.Sprintf("Json is not valid")) +} diff --git a/modules/gov/gov_params_test.go b/modules/gov/gov_params_test.go new file mode 100644 index 000000000..bd409ce1c --- /dev/null +++ b/modules/gov/gov_params_test.go @@ -0,0 +1,62 @@ +package gov + +import ( + "github.com/cosmos/cosmos-sdk/store" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/wire" + "github.com/cosmos/cosmos-sdk/x/params" + "github.com/stretchr/testify/require" + abci "github.com/tendermint/tendermint/abci/types" + dbm "github.com/tendermint/tendermint/libs/db" + "github.com/tendermint/tendermint/libs/log" + "testing" +) + +func defaultContext(key sdk.StoreKey) sdk.Context { + db := dbm.NewMemDB() + cms := store.NewCommitMultiStore(db) + cms.MountStoreWithDB(key, sdk.StoreTypeIAVL, db) + cms.LoadLatestVersion() + ctx := sdk.NewContext(cms, abci.Header{}, false, log.NewNopLogger()) + return ctx +} + +func TestDepositProcedureParam(t *testing.T) { + skey := sdk.NewKVStoreKey("params") + ctx := defaultContext(skey) + paramKeeper := params.NewKeeper(wire.NewCodec(), skey) + + p1 := DepositProcedure{ + MinDeposit: sdk.Coins{sdk.NewInt64Coin("iris", 10)}, + MaxDepositPeriod: 1440} + + p2 := DepositProcedure{ + MinDeposit: sdk.Coins{sdk.NewInt64Coin("iris", 30)}, + MaxDepositPeriod: 1440} + + DepositProcedureParameter.SetReadWriter(paramKeeper.Setter()) + find := DepositProcedureParameter.LoadValue(ctx) + require.Equal(t, find,false) + + DepositProcedureParameter.InitGenesis() + + require.Equal(t, p1, DepositProcedureParameter.Value) + require.Equal(t, DepositProcedureParameter.ToJson(), "{\"min_deposit\":[{\"denom\":\"iris\",\"amount\":\"10\"}],\"max_deposit_period\":1440}") + DepositProcedureParameter.Update(ctx, "{\"min_deposit\":[{\"denom\":\"iris\",\"amount\":\"30\"}],\"max_deposit_period\":1440}") + require.NotEqual(t, p1, DepositProcedureParameter.Value) + require.Equal(t, p2, DepositProcedureParameter.Value) + + result := DepositProcedureParameter.Valid("{\"min_deposit\":[{\"denom\":\"atom\",\"amount\":\"30\"}],\"max_deposit_period\":1440}") + require.Error(t, result) + + DepositProcedureParameter.InitGenesis() + require.Equal(t, p1, DepositProcedureParameter.Value) + DepositProcedureParameter.LoadValue(ctx) + require.Equal(t, p2, DepositProcedureParameter.Value) + +} + + + + + diff --git a/modules/gov/msgs_test.go b/modules/gov/msgs_test.go index 6d2b8bb38..19abe85d6 100644 --- a/modules/gov/msgs_test.go +++ b/modules/gov/msgs_test.go @@ -39,8 +39,10 @@ func TestMsgSubmitProposal(t *testing.T) { {"Test Proposal", "the purpose of this proposal is to test", ProposalTypeText, addrs[0], coinsMulti, true}, } + var params Params + for i, tc := range tests { - msg := NewMsgSubmitProposal(tc.title, tc.description, tc.proposalType, tc.proposerAddr, tc.initialDeposit) + msg := NewMsgSubmitProposal(tc.title, tc.description, tc.proposalType, tc.proposerAddr, tc.initialDeposit, params) if tc.expectPass { require.Nil(t, msg.ValidateBasic(), "test: %v", i) } else { diff --git a/modules/parameter/parameter.go b/modules/parameter/parameter.go index 0f4e5cb60..7ad038141 100644 --- a/modules/parameter/parameter.go +++ b/modules/parameter/parameter.go @@ -1,15 +1,17 @@ package parameter -import( - sdk "github.com/cosmos/cosmos-sdk/types" +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/x/params" ) type Parameter interface { - InitGenesis() GetStoreKey() string + SetReadWriter(setter params.Setter) + SaveValue(ctx sdk.Context) LoadValue(ctx sdk.Context) bool @@ -20,7 +22,6 @@ type SignalParameter interface { } type GovParameter interface { - Parameter Valid(json string) error @@ -28,15 +29,12 @@ type GovParameter interface { Update(ctx sdk.Context, json string) ToJson() string - } type GovArrayParameter interface { - GovParameter LoadValueByKey(ctx sdk.Context, key string) bool Insert(ctx sdk.Context, json string) - -} +} \ No newline at end of file From c9eda4b7e528d90e434a798188a0fbb3441c2eac Mon Sep 17 00:00:00 2001 From: xujiacheng Date: Thu, 13 Sep 2018 22:11:08 +0800 Subject: [PATCH 2/5] IRISHUB-317: add the input parameter to the InitGenesis() --- modules/gov/gov_params.go | 12 ++++++++---- modules/gov/gov_params_test.go | 16 +++++++--------- modules/parameter/parameter.go | 2 +- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/modules/gov/gov_params.go b/modules/gov/gov_params.go index 1023f5085..e9082d052 100644 --- a/modules/gov/gov_params.go +++ b/modules/gov/gov_params.go @@ -15,10 +15,14 @@ type DepositProcedureParam struct { pg params.Getter } -func (param *DepositProcedureParam) InitGenesis() { - param.Value = DepositProcedure{ - MinDeposit: sdk.Coins{sdk.NewInt64Coin("iris", 10)}, - MaxDepositPeriod: 1440} +func (param *DepositProcedureParam) InitGenesis(genesisState interface{}) { + if value, ok := genesisState.(DepositProcedure); ok { + param.Value = value + } else { + param.Value = DepositProcedure{ + MinDeposit: sdk.Coins{sdk.NewInt64Coin("iris", 10)}, + MaxDepositPeriod: 1440} + } } func (param *DepositProcedureParam) SetReadWriter(setter params.Setter) { diff --git a/modules/gov/gov_params_test.go b/modules/gov/gov_params_test.go index bd409ce1c..dc494305f 100644 --- a/modules/gov/gov_params_test.go +++ b/modules/gov/gov_params_test.go @@ -36,11 +36,11 @@ func TestDepositProcedureParam(t *testing.T) { DepositProcedureParameter.SetReadWriter(paramKeeper.Setter()) find := DepositProcedureParameter.LoadValue(ctx) - require.Equal(t, find,false) - - DepositProcedureParameter.InitGenesis() + require.Equal(t, find, false) + DepositProcedureParameter.InitGenesis(nil) require.Equal(t, p1, DepositProcedureParameter.Value) + require.Equal(t, DepositProcedureParameter.ToJson(), "{\"min_deposit\":[{\"denom\":\"iris\",\"amount\":\"10\"}],\"max_deposit_period\":1440}") DepositProcedureParameter.Update(ctx, "{\"min_deposit\":[{\"denom\":\"iris\",\"amount\":\"30\"}],\"max_deposit_period\":1440}") require.NotEqual(t, p1, DepositProcedureParameter.Value) @@ -49,14 +49,12 @@ func TestDepositProcedureParam(t *testing.T) { result := DepositProcedureParameter.Valid("{\"min_deposit\":[{\"denom\":\"atom\",\"amount\":\"30\"}],\"max_deposit_period\":1440}") require.Error(t, result) - DepositProcedureParameter.InitGenesis() + DepositProcedureParameter.InitGenesis(p2) + require.Equal(t, p2, DepositProcedureParameter.Value) + DepositProcedureParameter.InitGenesis(p1) require.Equal(t, p1, DepositProcedureParameter.Value) + DepositProcedureParameter.LoadValue(ctx) require.Equal(t, p2, DepositProcedureParameter.Value) } - - - - - diff --git a/modules/parameter/parameter.go b/modules/parameter/parameter.go index 7ad038141..2e87e2057 100644 --- a/modules/parameter/parameter.go +++ b/modules/parameter/parameter.go @@ -6,7 +6,7 @@ import ( ) type Parameter interface { - InitGenesis() + InitGenesis(interface{}) GetStoreKey() string From 9f1d11a2921a451112e3c590291553201ab16324 Mon Sep 17 00:00:00 2001 From: xujiacheng Date: Fri, 14 Sep 2018 10:00:17 +0800 Subject: [PATCH 3/5] IRISHUB-317:refactor the structure of gov_params --- modules/gov/errors.go | 2 +- modules/gov/{ => params}/gov_params.go | 29 +++++++++++---------- modules/gov/{ => params}/gov_params_test.go | 7 ++--- 3 files changed, 20 insertions(+), 18 deletions(-) rename modules/gov/{ => params}/gov_params.go (64%) rename modules/gov/{ => params}/gov_params_test.go (94%) diff --git a/modules/gov/errors.go b/modules/gov/errors.go index 0825e00f8..da91bac1b 100644 --- a/modules/gov/errors.go +++ b/modules/gov/errors.go @@ -46,7 +46,7 @@ func ErrAddressNotStaked(codespace sdk.CodespaceType, address sdk.AccAddress) sd return sdk.NewError(codespace, CodeAddressNotStaked, fmt.Sprintf("Address %s is not staked and is thus ineligible to vote", address)) } -func ErrInvalidTitle(codespace sdk.CodespaceType, title string) sdk.Error { +func ErrInvalidTitle(codespace sdk.CodespaceType, title string) sdk.Error { return sdk.NewError(codespace, CodeInvalidTitle, fmt.Sprintf("Proposal Title '%s' is not valid", title)) } diff --git a/modules/gov/gov_params.go b/modules/gov/params/gov_params.go similarity index 64% rename from modules/gov/gov_params.go rename to modules/gov/params/gov_params.go index e9082d052..0c212e3fc 100644 --- a/modules/gov/gov_params.go +++ b/modules/gov/params/gov_params.go @@ -1,33 +1,34 @@ -package gov +package GovParams import ( "encoding/json" "fmt" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/params" + "github.com/irisnet/irishub/modules/gov" ) var DepositProcedureParameter DepositProcedureParam type DepositProcedureParam struct { - Value DepositProcedure - ps params.Setter - pg params.Getter + Value gov.DepositProcedure + psetter params.Setter + pgetter params.Getter } func (param *DepositProcedureParam) InitGenesis(genesisState interface{}) { - if value, ok := genesisState.(DepositProcedure); ok { + if value, ok := genesisState.(gov.DepositProcedure); ok { param.Value = value } else { - param.Value = DepositProcedure{ + param.Value = gov.DepositProcedure{ MinDeposit: sdk.Coins{sdk.NewInt64Coin("iris", 10)}, MaxDepositPeriod: 1440} } } func (param *DepositProcedureParam) SetReadWriter(setter params.Setter) { - param.ps = setter - param.pg = setter.Getter + param.psetter = setter + param.pgetter = setter.Getter } func (param *DepositProcedureParam) GetStoreKey() string { @@ -36,11 +37,11 @@ func (param *DepositProcedureParam) GetStoreKey() string { } func (param *DepositProcedureParam) SaveValue(ctx sdk.Context) { - param.ps.Set(ctx, param.GetStoreKey(), param.Value) + param.psetter.Set(ctx, param.GetStoreKey(), param.Value) } func (param *DepositProcedureParam) LoadValue(ctx sdk.Context) bool { - err := param.pg.Get(ctx, param.GetStoreKey(), ¶m.Value) + err := param.pgetter.Get(ctx, param.GetStoreKey(), ¶m.Value) if err != nil { return false } @@ -65,19 +66,19 @@ func (param *DepositProcedureParam) Valid(jsonStr string) sdk.Error { if err = json.Unmarshal([]byte(jsonStr), ¶m.Value); err == nil { if param.Value.MinDeposit[0].Denom != "iris" { - return sdk.NewError(DefaultCodespace, 102, fmt.Sprintf("It should be iris ")) + return sdk.NewError(gov.DefaultCodespace, 102, fmt.Sprintf("It should be iris ")) } if param.Value.MinDeposit[0].Amount.GT(sdk.NewInt(10)) && param.Value.MinDeposit[0].Amount.LT(sdk.NewInt(20000)) { - return sdk.NewError(DefaultCodespace, 102, fmt.Sprintf("MinDepositAmount should be larger than 10 and less than 20000")) + return sdk.NewError(gov.DefaultCodespace, 102, fmt.Sprintf("MinDepositAmount should be larger than 10 and less than 20000")) } if param.Value.MaxDepositPeriod > 20 && param.Value.MaxDepositPeriod < 20000 { - return sdk.NewError(DefaultCodespace, 102, fmt.Sprintf("MaxDepositPeriod should be larger than 20 and less than 20000")) + return sdk.NewError(gov.DefaultCodespace, 102, fmt.Sprintf("MaxDepositPeriod should be larger than 20 and less than 20000")) } return nil } - return sdk.NewError(DefaultCodespace, 101, fmt.Sprintf("Json is not valid")) + return sdk.NewError(gov.DefaultCodespace, 101, fmt.Sprintf("Json is not valid")) } diff --git a/modules/gov/gov_params_test.go b/modules/gov/params/gov_params_test.go similarity index 94% rename from modules/gov/gov_params_test.go rename to modules/gov/params/gov_params_test.go index dc494305f..eb5b742fc 100644 --- a/modules/gov/gov_params_test.go +++ b/modules/gov/params/gov_params_test.go @@ -1,10 +1,11 @@ -package gov +package GovParams import ( "github.com/cosmos/cosmos-sdk/store" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/wire" "github.com/cosmos/cosmos-sdk/x/params" + "github.com/irisnet/irishub/modules/gov" "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" dbm "github.com/tendermint/tendermint/libs/db" @@ -26,11 +27,11 @@ func TestDepositProcedureParam(t *testing.T) { ctx := defaultContext(skey) paramKeeper := params.NewKeeper(wire.NewCodec(), skey) - p1 := DepositProcedure{ + p1 := gov.DepositProcedure{ MinDeposit: sdk.Coins{sdk.NewInt64Coin("iris", 10)}, MaxDepositPeriod: 1440} - p2 := DepositProcedure{ + p2 := gov.DepositProcedure{ MinDeposit: sdk.Coins{sdk.NewInt64Coin("iris", 30)}, MaxDepositPeriod: 1440} From 29e37cb49805541c2364a8bdad8af99cec6c709b Mon Sep 17 00:00:00 2001 From: xujiacheng Date: Fri, 14 Sep 2018 10:08:03 +0800 Subject: [PATCH 4/5] IRISHUB-317:make the errors readable --- modules/gov/errors.go | 4 ++++ modules/gov/params/gov_params.go | 8 ++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/modules/gov/errors.go b/modules/gov/errors.go index da91bac1b..a59672b21 100644 --- a/modules/gov/errors.go +++ b/modules/gov/errors.go @@ -21,6 +21,10 @@ const ( CodeInvalidVote sdk.CodeType = 9 CodeInvalidGenesis sdk.CodeType = 10 CodeInvalidProposalStatus sdk.CodeType = 11 + CodeInvalidMinDeposit sdk.CodeType = 100 + CodeInvalidMinDepositDenom sdk.CodeType = 101 + CodeInvalidMinDepositAmount sdk.CodeType = 102 + CodeInvalidDepositPeriod sdk.CodeType = 103 ) //---------------------------------------- diff --git a/modules/gov/params/gov_params.go b/modules/gov/params/gov_params.go index 0c212e3fc..146addd9c 100644 --- a/modules/gov/params/gov_params.go +++ b/modules/gov/params/gov_params.go @@ -66,19 +66,19 @@ func (param *DepositProcedureParam) Valid(jsonStr string) sdk.Error { if err = json.Unmarshal([]byte(jsonStr), ¶m.Value); err == nil { if param.Value.MinDeposit[0].Denom != "iris" { - return sdk.NewError(gov.DefaultCodespace, 102, fmt.Sprintf("It should be iris ")) + return sdk.NewError(gov.DefaultCodespace, gov.CodeInvalidMinDepositDenom, fmt.Sprintf("It should be iris ")) } if param.Value.MinDeposit[0].Amount.GT(sdk.NewInt(10)) && param.Value.MinDeposit[0].Amount.LT(sdk.NewInt(20000)) { - return sdk.NewError(gov.DefaultCodespace, 102, fmt.Sprintf("MinDepositAmount should be larger than 10 and less than 20000")) + return sdk.NewError(gov.DefaultCodespace, gov.CodeInvalidMinDepositAmount, fmt.Sprintf("MinDepositAmount should be larger than 10 and less than 20000")) } if param.Value.MaxDepositPeriod > 20 && param.Value.MaxDepositPeriod < 20000 { - return sdk.NewError(gov.DefaultCodespace, 102, fmt.Sprintf("MaxDepositPeriod should be larger than 20 and less than 20000")) + return sdk.NewError(gov.DefaultCodespace, gov.CodeInvalidDepositPeriod, fmt.Sprintf("MaxDepositPeriod should be larger than 20 and less than 20000")) } return nil } - return sdk.NewError(gov.DefaultCodespace, 101, fmt.Sprintf("Json is not valid")) + return sdk.NewError(gov.DefaultCodespace, gov.CodeInvalidMinDeposit, fmt.Sprintf("Json is not valid")) } From 72c8e4d874744f9b228a1ff79934b05bd488dbe9 Mon Sep 17 00:00:00 2001 From: xujiacheng Date: Fri, 14 Sep 2018 10:10:56 +0800 Subject: [PATCH 5/5] IRISHUB-317:change the package name --- modules/gov/params/gov_params.go | 2 +- modules/gov/params/gov_params_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/gov/params/gov_params.go b/modules/gov/params/gov_params.go index 146addd9c..deda1e77e 100644 --- a/modules/gov/params/gov_params.go +++ b/modules/gov/params/gov_params.go @@ -1,4 +1,4 @@ -package GovParams +package govparams import ( "encoding/json" diff --git a/modules/gov/params/gov_params_test.go b/modules/gov/params/gov_params_test.go index eb5b742fc..a7e93e95a 100644 --- a/modules/gov/params/gov_params_test.go +++ b/modules/gov/params/gov_params_test.go @@ -1,4 +1,4 @@ -package GovParams +package govparams import ( "github.com/cosmos/cosmos-sdk/store"