diff --git a/CHANGELOG.md b/CHANGELOG.md index a7a1fea4..5ca61127 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,10 @@ Contains all the PRs that improved the code without changing the behaviors. ### Added - Update outdated dependencies +- fixed old expirations are not removed +- fixed not delegate being used in msg open contract +- fixed the recipient’s IsTransferable field is overwritten to false in MsgClaimThorchain +- fixed genesis state validation # v1.0.5-Prerelease ### Added diff --git a/test/regression/mnt/exports/suites_contracts_pay-as-you-go.json b/test/regression/mnt/exports/suites_contracts_pay-as-you-go.json index b8455667..fc33feb2 100644 --- a/test/regression/mnt/exports/suites_contracts_pay-as-you-go.json +++ b/test/regression/mnt/exports/suites_contracts_pay-as-you-go.json @@ -25,7 +25,7 @@ { "authorization": "STRICT", "client": "tarkeopub1addwnpepq2res6tu0m73ulk5sepgp6g3y37schfgymxy8z6l3lc78k7ju9u45yajwem", - "delegate": "", + "delegate": "tarkeopub1addwnpepq2res6tu0m73ulk5sepgp6g3y37schfgymxy8z6l3lc78k7ju9u45yajwem", "deposit": "3", "duration": "10", "height": "2", diff --git a/test/regression/mnt/exports/suites_contracts_subscription.json b/test/regression/mnt/exports/suites_contracts_subscription.json index dc0ba4ba..d15707b8 100644 --- a/test/regression/mnt/exports/suites_contracts_subscription.json +++ b/test/regression/mnt/exports/suites_contracts_subscription.json @@ -4,14 +4,6 @@ "app_state": { "arkeo": { "contract_expiration_sets": [ - { - "contract_set": { - "contract_ids": [ - "1" - ] - }, - "height": "12" - }, { "contract_set": { "contract_ids": [ @@ -25,7 +17,7 @@ { "authorization": "STRICT", "client": "tarkeopub1addwnpepq2res6tu0m73ulk5sepgp6g3y37schfgymxy8z6l3lc78k7ju9u45yajwem", - "delegate": "", + "delegate": "tarkeopub1addwnpepq2res6tu0m73ulk5sepgp6g3y37schfgymxy8z6l3lc78k7ju9u45yajwem", "deposit": "100", "duration": "10", "height": "2", @@ -46,7 +38,7 @@ { "authorization": "OPEN", "client": "tarkeopub1addwnpepq2res6tu0m73ulk5sepgp6g3y37schfgymxy8z6l3lc78k7ju9u45yajwem", - "delegate": "", + "delegate": "tarkeopub1addwnpepq2res6tu0m73ulk5sepgp6g3y37schfgymxy8z6l3lc78k7ju9u45yajwem", "deposit": "20", "duration": "5", "height": "16", diff --git a/test/regression/mnt/exports/suites_sentinel_contracts.json b/test/regression/mnt/exports/suites_sentinel_contracts.json index 0e52183d..ffc7c25a 100644 --- a/test/regression/mnt/exports/suites_sentinel_contracts.json +++ b/test/regression/mnt/exports/suites_sentinel_contracts.json @@ -3,21 +3,12 @@ "app_name": "arkeo", "app_state": { "arkeo": { - "contract_expiration_sets": [ - { - "contract_set": { - "contract_ids": [ - "1" - ] - }, - "height": "12" - } - ], + "contract_expiration_sets": [], "contracts": [ { "authorization": "STRICT", "client": "tarkeopub1addwnpepq2res6tu0m73ulk5sepgp6g3y37schfgymxy8z6l3lc78k7ju9u45yajwem", - "delegate": "", + "delegate": "tarkeopub1addwnpepq2res6tu0m73ulk5sepgp6g3y37schfgymxy8z6l3lc78k7ju9u45yajwem", "deposit": "100", "duration": "10", "height": "2", diff --git a/x/arkeo/keeper/manager.go b/x/arkeo/keeper/manager.go index 9aaa0596..b4e598b3 100644 --- a/x/arkeo/keeper/manager.go +++ b/x/arkeo/keeper/manager.go @@ -196,6 +196,7 @@ func (mgr Manager) ContractEndBlock(ctx cosmos.Context) error { ctx.Logger().Error("unable to settle contract", "id", contractId, "error", err) continue } + mgr.keeper.RemoveContractExpirationSet(ctx, contract.Expiration()) } return nil diff --git a/x/arkeo/keeper/msg_server_close_contract.go b/x/arkeo/keeper/msg_server_close_contract.go index d0b9132a..3d77bfc5 100644 --- a/x/arkeo/keeper/msg_server_close_contract.go +++ b/x/arkeo/keeper/msg_server_close_contract.go @@ -90,6 +90,8 @@ func (k msgServer) CloseContractHandle(ctx cosmos.Context, msg *types.MsgCloseCo } if contract.IsPayAsYouGo() { + + k.RemoveContractExpirationSet(ctx, contract.Expiration()) // add a new expiration return deposit to user newHeight := ctx.BlockHeight() + contract.SettlementDuration expirationSet, err := k.GetContractExpirationSet(ctx, newHeight) diff --git a/x/arkeo/keeper/msg_server_open_contract.go b/x/arkeo/keeper/msg_server_open_contract.go index 875fa7d0..e9e08bc9 100644 --- a/x/arkeo/keeper/msg_server_open_contract.go +++ b/x/arkeo/keeper/msg_server_open_contract.go @@ -126,6 +126,12 @@ func (k msgServer) OpenContractValidate(ctx cosmos.Context, msg *types.MsgOpenCo } func (k msgServer) OpenContractHandle(ctx cosmos.Context, msg *types.MsgOpenContract) error { + + // set back client as delegate if delegate is empty + if msg.Delegate == "" { + msg.Delegate = msg.Client + } + openCost := k.FetchConfig(ctx, configs.OpenContractCost) if openCost > 0 { if err := k.SendFromAccountToModule(ctx, msg.MustGetSigner(), types.ModuleName, getCoins(openCost)); err != nil { diff --git a/x/arkeo/types/errors.go b/x/arkeo/types/errors.go index 1f275beb..5ba69922 100644 --- a/x/arkeo/types/errors.go +++ b/x/arkeo/types/errors.go @@ -41,4 +41,6 @@ var ( ErrInvariantMaxSupply = errors.Register(ModuleName, 32, "max supply invariant") ErrInvalidAuthorization = errors.Register(ModuleName, 33, "invalid authorization") ErrInvalidVersion = errors.Register(ModuleName, 34, "version cannot be zero or lower") + ErrInvalidBlocksPerYear = errors.Register(ModuleName, 37, "blocks per year cannot be zero or lower") + ErrInvalidEmissionCurve = errors.Register(ModuleName, 38, "emissionCurve set is invalid") ) diff --git a/x/arkeo/types/genesis_test.go b/x/arkeo/types/genesis_test.go index 56cde35c..47a4a118 100644 --- a/x/arkeo/types/genesis_test.go +++ b/x/arkeo/types/genesis_test.go @@ -20,8 +20,9 @@ func TestGenesisState_Validate(t *testing.T) { valid: true, }, { - desc: "valid genesis state", + desc: "valid genesis state", genState: &types.GenesisState{ + Params: types.DefaultParams(), // this line is used by starport scaffolding # types/genesis/validField }, diff --git a/x/arkeo/types/params.go b/x/arkeo/types/params.go index 656ce4f4..eac24cc4 100644 --- a/x/arkeo/types/params.go +++ b/x/arkeo/types/params.go @@ -1,6 +1,7 @@ package types import ( + "cosmossdk.io/errors" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" "gopkg.in/yaml.v2" ) @@ -32,6 +33,14 @@ func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { // Validate validates the set of params func (p Params) Validate() error { + if p.BlockPerYear <= 0 { + return errors.Wrap(ErrInvalidBlocksPerYear, "BlockPerYear must be greater than zero") + } + + if p.EmissionCurve <= 0 { + return errors.Wrap(ErrInvalidEmissionCurve, "EmissionCurve must be greater than ") + } + return nil } diff --git a/x/claim/keeper/msg_server_claim_thorchain.go b/x/claim/keeper/msg_server_claim_thorchain.go index 7a3a059c..9ab7b534 100644 --- a/x/claim/keeper/msg_server_claim_thorchain.go +++ b/x/claim/keeper/msg_server_claim_thorchain.go @@ -42,6 +42,7 @@ func (k msgServer) ClaimThorchain(goCtx context.Context, msg *types.MsgClaimThor AmountClaim: amountClaim, AmountVote: amountVote, AmountDelegate: amountDelegate, + IsTransferable: toAddressClaimRecord.IsTransferable, } emptyClaimRecord := types.ClaimRecord{ Chain: types.ARKEO, diff --git a/x/claim/keeper/msg_server_claim_thorchain_test.go b/x/claim/keeper/msg_server_claim_thorchain_test.go index 2add8579..4f635cd7 100644 --- a/x/claim/keeper/msg_server_claim_thorchain_test.go +++ b/x/claim/keeper/msg_server_claim_thorchain_test.go @@ -29,6 +29,7 @@ func TestClaimThorchainTestnetAddress(t *testing.T) { AmountClaim: sdk.NewInt64Coin(types.DefaultClaimDenom, 100), AmountVote: sdk.NewInt64Coin(types.DefaultClaimDenom, 100), AmountDelegate: sdk.NewInt64Coin(types.DefaultClaimDenom, 100), + IsTransferable: false, } claimRecordTo := types.ClaimRecord{ Chain: types.ARKEO, @@ -36,6 +37,7 @@ func TestClaimThorchainTestnetAddress(t *testing.T) { AmountClaim: sdk.NewInt64Coin(types.DefaultClaimDenom, 100), AmountVote: sdk.NewInt64Coin(types.DefaultClaimDenom, 100), AmountDelegate: sdk.NewInt64Coin(types.DefaultClaimDenom, 100), + IsTransferable: true, } err = keepers.ClaimKeeper.SetClaimRecord(sdkCtx, claimRecordFrom) require.NoError(t, err) @@ -70,6 +72,7 @@ func TestClaimThorchainTestnetAddress(t *testing.T) { claimRecordTo, err = keepers.ClaimKeeper.GetClaimRecord(sdkCtx, toAddr.String(), types.ARKEO) require.NoError(t, err) require.True(t, !claimRecordTo.IsEmpty()) + require.Equal(t, claimRecordTo.IsTransferable, true) require.Equal(t, claimRecordTo.Address, toAddr.String()) require.Equal(t, claimRecordTo.Chain, types.ARKEO) diff --git a/x/claim/types/params.go b/x/claim/types/params.go index 6e2519e3..2f77d328 100644 --- a/x/claim/types/params.go +++ b/x/claim/types/params.go @@ -66,6 +66,22 @@ func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { // Validate validates the set of params func (p Params) Validate() error { + if err := validateClaimDenom(p.ClaimDenom); err != nil { + return err + } + + if err := validateAirdropStartTime(p.AirdropStartTime); err != nil { + return err + } + + if err := validateDurationUntilDecay(p.DurationUntilDecay); err != nil { + return err + } + + if err := validateDurationOfDecay(p.DurationOfDecay); err != nil { + return err + } + return nil }