diff --git a/x/compute/internal/keeper/distribution_test.go b/x/compute/internal/keeper/distribution_test.go index 9c484a2aa..9740153b6 100644 --- a/x/compute/internal/keeper/distribution_test.go +++ b/x/compute/internal/keeper/distribution_test.go @@ -6,13 +6,14 @@ import ( "os" "testing" + "cosmossdk.io/math" "github.com/scrtlabs/SecretNetwork/x/compute/internal/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/x/staking" + stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" ) @@ -34,36 +35,36 @@ func TestDistributionRewards(t *testing.T) { transferPortSource = MockIBCTransferKeeper{GetPortFn: func(ctx sdk.Context) string { return "myTransferPort" }} - encoders := DefaultEncoders(transferPortSource, encodingConfig.Marshaler) + encoders := DefaultEncoders(transferPortSource, encodingConfig.Codec) ctx, keepers := CreateTestInput(t, false, SupportedFeatures, &encoders, nil) accKeeper, stakingKeeper, keeper, distKeeper := keepers.AccountKeeper, keepers.StakingKeeper, keepers.WasmKeeper, keepers.DistKeeper valAddr := addValidator(ctx, stakingKeeper, accKeeper, keeper.bankKeeper, sdk.NewInt64Coin("stake", 100)) ctx = nextBlock(ctx, stakingKeeper, keeper) - v, found := stakingKeeper.GetValidator(ctx, valAddr) - assert.True(t, found) - assert.Equal(t, v.GetDelegatorShares(), sdk.NewDec(100)) + v, err := stakingKeeper.GetValidator(ctx, valAddr) + assert.True(t, err == nil) + assert.Equal(t, v.GetDelegatorShares(), math.LegacyNewDec(100)) depositCoin := sdk.NewInt64Coin(sdk.DefaultBondDenom, 5_000_000_000) deposit := sdk.NewCoins(depositCoin) - creator, creatorPrivKey := CreateFakeFundedAccount(ctx, accKeeper, keeper.bankKeeper, deposit) + creator, creatorPrivKey, _ := CreateFakeFundedAccount(ctx, accKeeper, keeper.bankKeeper, deposit, 8000) require.Equal(t, keeper.bankKeeper.GetBalance(ctx, creator, sdk.DefaultBondDenom), depositCoin) delTokens := sdk.TokensFromConsensusPower(1000, sdk.DefaultPowerReduction) - msg2 := stakingtypes.NewMsgDelegate(creator, valAddr, + msg2 := stakingtypes.NewMsgDelegate(creator.String(), valAddr.String(), sdk.NewCoin(sdk.DefaultBondDenom, delTokens)) require.Equal(t, uint64(2), distKeeper.GetValidatorHistoricalReferenceCount(ctx)) - sh := staking.NewHandler(stakingKeeper) + sh := stakingkeeper.NewMsgServerImpl(&stakingKeeper) - res2, err := sh(ctx, msg2) + res2, err := sh.Delegate(ctx, msg2) require.NoError(t, err) require.NotNil(t, res2) require.NoError(t, err) - distKeeper.AllocateTokensToValidator(ctx, v, sdk.NewDecCoins(sdk.NewDecCoin("stake", sdk.NewInt(100)))) + distKeeper.AllocateTokensToValidator(ctx, v, sdk.NewDecCoins(sdk.NewDecCoin("stake", math.NewInt(100)))) // upload staking derivates code govCode, err := os.ReadFile("./testdata/dist.wasm") diff --git a/x/compute/internal/keeper/query_plugins.go b/x/compute/internal/keeper/query_plugins.go index a4cd9d689..3610ddc3c 100644 --- a/x/compute/internal/keeper/query_plugins.go +++ b/x/compute/internal/keeper/query_plugins.go @@ -3,6 +3,7 @@ package keeper import ( "encoding/json" "fmt" + "strings" channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" "github.com/scrtlabs/SecretNetwork/x/compute/internal/types" @@ -11,6 +12,7 @@ import ( "github.com/cosmos/cosmos-sdk/baseapp" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" distrkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper" + distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1" mintkeeper "github.com/cosmos/cosmos-sdk/x/mint/keeper" @@ -356,59 +358,42 @@ func MintQuerier(keeper mintkeeper.Keeper) func(ctx sdk.Context, request *wasmTy func DistQuerier(keeper distrkeeper.Keeper) func(ctx sdk.Context, request *wasmTypes.DistQuery) ([]byte, error) { return func(ctx sdk.Context, request *wasmTypes.DistQuery) ([]byte, error) { - // TODO: rewrite the function - /* - if request.Rewards != nil { - addr, err := sdk.AccAddressFromBech32(request.Rewards.Delegator) - if err != nil { - return nil, sdkerrors.ErrInvalidAddress.Wrap(request.Rewards.Delegator) - } - - params := distrtypes.NewQueryDelegatorParams(addr) - - jsonParams, _ := json.Marshal(params) - - req := abci.RequestQuery{ - Data: jsonParams, - } - // keeper.DelegationTotalRewards(ctx, distrtypes.QueryDelegationTotalRewardsRequest{ - // DelegatorAddress: request.Rewards.Delegator, - // }) - route := []string{distrtypes.QueryDelegatorTotalRewards} - - query, err := distrkeeper.NewQuerier(keeper, codec.NewLegacyAmino())(ctx, route, req) - if err != nil { - return nil, sdkerrors.ErrUnknownRequest.Wrap(err.Error()) - } + if request.Rewards != nil { + req := distrtypes.QueryDelegationTotalRewardsRequest{ + DelegatorAddress: request.Rewards.Delegator, + } - var res wasmTypes.RewardsResponse + response, err := distrkeeper.NewQuerier(keeper).DelegationTotalRewards(ctx, &req) + if err != nil { + return nil, sdkerrors.ErrUnknownRequest.Wrap(err.Error()) + } - err = json.Unmarshal(query, &res) - if err != nil { - return nil, sdkerrors.ErrJSONMarshal.Wrap(err.Error()) - } + var res wasmTypes.RewardsResponse + res.Rewards = make([]wasmTypes.Rewards, len(response.Rewards)) - for i, valRewards := range res.Rewards { - res.Rewards[i].Validator = valRewards.Validator - for j, valReward := range valRewards.Reward { - // this is here so we can remove fractions of uscrt from the result - res.Rewards[i].Reward[j].Amount = strings.Split(valReward.Amount, ".")[0] - res.Rewards[i].Reward[j].Denom = valReward.Denom - } + for i, valRewards := range response.Rewards { + res.Rewards[i].Validator = valRewards.ValidatorAddress + res.Rewards[i].Reward = make([]wasmTypes.Coin, len(valRewards.Reward)) + for j, valReward := range valRewards.Reward { + // this is here so we can remove fractions of uscrt from the result + res.Rewards[i].Reward[j].Amount = strings.Split(valReward.Amount.String(), ".")[0] + res.Rewards[i].Reward[j].Denom = valReward.Denom } + } - for i, val := range res.Total { - res.Total[i].Amount = strings.Split(val.Amount, ".")[0] - res.Total[i].Denom = val.Denom - } + res.Total = make([]wasmTypes.Coin, len(response.Total)) + for i, val := range response.Total { + res.Total[i].Amount = strings.Split(val.Amount.String(), ".")[0] + res.Total[i].Denom = val.Denom + } - ret, err := json.Marshal(res) - if err != nil { - return nil, sdkerrors.ErrJSONMarshal.Wrap(err.Error()) - } + ret, err := json.Marshal(res) + if err != nil { + return nil, sdkerrors.ErrJSONMarshal.Wrap(err.Error()) + } - return ret, nil - }*/ + return ret, nil + } return nil, wasmTypes.UnsupportedRequest{Kind: "unknown DistQuery variant"} } } @@ -679,30 +664,28 @@ func sdkToFullDelegation(ctx sdk.Context, keeper stakingkeeper.Keeper, distKeepe // FIXME: simplify this enormously when // https://github.com/cosmos/cosmos-sdk/issues/7466 is merged func getAccumulatedRewards(ctx sdk.Context, distKeeper distrkeeper.Keeper, delegation stakingtypes.Delegation) ([]wasmTypes.Coin, error) { - /* - // Try to get *delegator* reward info! + // Try to get *delegator* reward info! - params := distrtypes.QueryDelegationRewardsRequest{ - DelegatorAddress: delegation.DelegatorAddress, - ValidatorAddress: delegation.ValidatorAddress, - } - cache, _ := ctx.CacheContext() - // TODO: rewrite the function - qres, err := distKeeper.Querier.DelegationRewards(sdk.WrapSDKContext(cache), ¶ms) - if err != nil { - return nil, err - } + params := distrtypes.QueryDelegationRewardsRequest{ + DelegatorAddress: delegation.DelegatorAddress, + ValidatorAddress: delegation.ValidatorAddress, + } + cache, _ := ctx.CacheContext() + querier := distrkeeper.NewQuerier(distKeeper) + qres, err := querier.DelegationRewards(sdk.WrapSDKContext(cache), ¶ms) + if err != nil { + return nil, err + } - // now we have it, convert it into wasmTypes - rewards := make([]wasmTypes.Coin, len(qres.Rewards)) - for i, r := range qres.Rewards { - rewards[i] = wasmTypes.Coin{ - Denom: r.Denom, - Amount: r.Amount.TruncateInt().String(), - } + // now we have it, convert it into wasmTypes + rewards := make([]wasmTypes.Coin, len(qres.Rewards)) + for i, r := range qres.Rewards { + rewards[i] = wasmTypes.Coin{ + Denom: r.Denom, + Amount: r.Amount.TruncateInt().String(), } - return rewards, nil*/ - return nil, nil + } + return rewards, nil } func WasmQuerier(wasm *Keeper) func(ctx sdk.Context, request *wasmTypes.WasmQuery, queryDepth uint32) ([]byte, error) { diff --git a/x/compute/internal/keeper/secret_contracts_migrate_test.go b/x/compute/internal/keeper/secret_contracts_migrate_test.go index 219170bdc..1645a36ca 100644 --- a/x/compute/internal/keeper/secret_contracts_migrate_test.go +++ b/x/compute/internal/keeper/secret_contracts_migrate_test.go @@ -13,6 +13,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" + storetypes "cosmossdk.io/store/types" + v010types "github.com/scrtlabs/SecretNetwork/go-cosmwasm/types/v010" "github.com/scrtlabs/SecretNetwork/x/compute/internal/types" @@ -988,7 +990,7 @@ func TestAllocateOnHeapFailBecauseGasLimitAfterMigrate(t *testing.T) { defer func() { r := recover() require.NotNil(t, r) - _, ok := r.(sdk.ErrorOutOfGas) + _, ok := r.(storetypes.ErrorOutOfGas) require.True(t, ok, "%+v", r) }() @@ -1124,7 +1126,7 @@ func TestBankMsgSendAfterMigrate(t *testing.T) { isSuccuss: false, balancesBefore: "5000assaf,200000denom 5000assaf,5000denom", balancesAfter: "4998assaf,199998denom 5000assaf,5000denom", - errorMsg: "encrypted: dispatch: submessages: 2denom is smaller than 3denom: insufficient funds", + errorMsg: "encrypted: dispatch: submessages: spendable balance 2denom is smaller than 3denom: insufficient funds", }, { description: "non-existing denom", @@ -1132,7 +1134,7 @@ func TestBankMsgSendAfterMigrate(t *testing.T) { isSuccuss: false, balancesBefore: "5000assaf,200000denom 5000assaf,5000denom", balancesAfter: "4998assaf,199998denom 5000assaf,5000denom", - errorMsg: "encrypted: dispatch: submessages: 0blabla is smaller than 1blabla: insufficient funds", + errorMsg: "encrypted: dispatch: submessages: spendable balance 0blabla is smaller than 1blabla: insufficient funds", }, { description: "none", @@ -1225,7 +1227,7 @@ func TestSendFundsAfterMigrate(t *testing.T) { description: "one, missing", coinsToSend: `20one`, isSuccess: false, - errorMsg: "0one is smaller than 20one: insufficient funds", + errorMsg: "spendable balance 0one is smaller than 20one: insufficient funds", balancesBefore: "5000another", balancesAfter: "5000another", destinationBalancesAfter: "", @@ -1234,7 +1236,7 @@ func TestSendFundsAfterMigrate(t *testing.T) { description: "one, not enough", coinsToSend: `20one`, isSuccess: false, - errorMsg: "19one is smaller than 20one: insufficient funds", + errorMsg: "spendable balance 19one is smaller than 20one: insufficient funds", balancesBefore: "5000another,19one", balancesAfter: "5000another,19one", destinationBalancesAfter: "", @@ -1259,7 +1261,7 @@ func TestSendFundsAfterMigrate(t *testing.T) { description: "multi-coin, missing one", coinsToSend: `130assaf,15denom`, isSuccess: false, - errorMsg: "0assaf is smaller than 130assaf: insufficient funds", + errorMsg: "spendable balance 0assaf is smaller than 130assaf: insufficient funds", balancesBefore: "200000denom", balancesAfter: "200000denom", destinationBalancesAfter: "", @@ -1268,7 +1270,7 @@ func TestSendFundsAfterMigrate(t *testing.T) { description: "multi-coin, not enough of one of them", coinsToSend: `130assaf,15denom`, isSuccess: false, - errorMsg: "10denom is smaller than 15denom: insufficient funds", + errorMsg: "spendable balance 10denom is smaller than 15denom: insufficient funds", balancesBefore: "5000assaf,10denom", balancesAfter: "5000assaf,10denom", destinationBalancesAfter: "", @@ -1277,7 +1279,7 @@ func TestSendFundsAfterMigrate(t *testing.T) { description: "multi-coin, not enough of all of them", coinsToSend: `130assaf,15denom`, isSuccess: false, - errorMsg: "12assaf is smaller than 130assaf: insufficient funds", + errorMsg: "spendable balance 12assaf is smaller than 130assaf: insufficient funds", balancesBefore: "12assaf,10denom", balancesAfter: "12assaf,10denom", destinationBalancesAfter: "", @@ -1286,8 +1288,8 @@ func TestSendFundsAfterMigrate(t *testing.T) { t.Run(test.description, func(t *testing.T) { ctx, keeper, helperWallet, helperPrivKey, _, _ := setupBasicTest(t, sdk.NewCoins(sdk.NewInt64Coin("assaf", 5000))) - fundingWallet, fundingWalletPrivKey := CreateFakeFundedAccount(ctx, keeper.accountKeeper, keeper.bankKeeper, stringToCoins(test.balancesBefore)) - receivingWallet, _ := CreateFakeFundedAccount(ctx, keeper.accountKeeper, keeper.bankKeeper, sdk.NewCoins()) + fundingWallet, fundingWalletPrivKey, _ := CreateFakeFundedAccount(ctx, keeper.accountKeeper, keeper.bankKeeper, stringToCoins(test.balancesBefore), 9912) + receivingWallet, _, _ := CreateFakeFundedAccount(ctx, keeper.accountKeeper, keeper.bankKeeper, sdk.NewCoins(), 9913) // verify that the account was funded correctly fundingWalletCoinsBefore := keeper.bankKeeper.GetAllBalances(ctx, fundingWallet) @@ -3571,7 +3573,7 @@ func TestAllocateOnHeapFailBecauseGasLimitDuringMigrate(t *testing.T) { defer func() { r := recover() require.NotNil(t, r) - _, ok := r.(sdk.ErrorOutOfGas) + _, ok := r.(storetypes.ErrorOutOfGas) require.True(t, ok, "%+v", r) }() @@ -3701,7 +3703,7 @@ func TestBankMsgSendDuringMigrate(t *testing.T) { isSuccuss: false, balancesBefore: "5000assaf,200000denom 5000assaf,5000denom", balancesAfter: "4998assaf,199998denom 5000assaf,5000denom", - errorMsg: "encrypted: dispatch: submessages: 2denom is smaller than 3denom: insufficient funds", + errorMsg: "encrypted: dispatch: submessages: spendable balance 2denom is smaller than 3denom: insufficient funds", }, { description: "non-existing denom", @@ -3709,7 +3711,7 @@ func TestBankMsgSendDuringMigrate(t *testing.T) { isSuccuss: false, balancesBefore: "5000assaf,200000denom 5000assaf,5000denom", balancesAfter: "4998assaf,199998denom 5000assaf,5000denom", - errorMsg: "encrypted: dispatch: submessages: 0blabla is smaller than 1blabla: insufficient funds", + errorMsg: "encrypted: dispatch: submessages: spendable balance 0blabla is smaller than 1blabla: insufficient funds", }, { description: "none", diff --git a/x/compute/internal/keeper/secret_contracts_submsgs_test.go b/x/compute/internal/keeper/secret_contracts_submsgs_test.go index 8bee29a99..8f28e31e3 100644 --- a/x/compute/internal/keeper/secret_contracts_submsgs_test.go +++ b/x/compute/internal/keeper/secret_contracts_submsgs_test.go @@ -6,6 +6,7 @@ import ( "math" "testing" + stypes "cosmossdk.io/store/types" v010cosmwasm "github.com/scrtlabs/SecretNetwork/go-cosmwasm/types/v010" "github.com/stretchr/testify/require" @@ -1479,7 +1480,7 @@ func TestSubmessageGasExceedingMessageGas(t *testing.T) { defer func() { r := recover() require.NotNil(t, r) - _, ok := r.(sdk.ErrorOutOfGas) + _, ok := r.(stypes.ErrorOutOfGas) require.True(t, ok, "%+v", r) }() _, _, _, _, _ = initHelper(t, keeper, ctx, codeID, walletA, nil, privKeyA, `{"measure_gas_for_submessage":{"id":0}}`, false, true, defaultGasForTests) @@ -1491,7 +1492,7 @@ func TestReplyGasExceedingMessageGas(t *testing.T) { defer func() { r := recover() require.NotNil(t, r) - _, ok := r.(sdk.ErrorOutOfGas) + _, ok := r.(stypes.ErrorOutOfGas) require.True(t, ok, "%+v", r) }() _, _, _, _, _ = initHelper(t, keeper, ctx, codeID, walletA, nil, privKeyA, `{"measure_gas_for_submessage":{"id":2600}}`, false, true, defaultGasForTests)