Skip to content

Commit

Permalink
Fix distribution test
Browse files Browse the repository at this point in the history
  • Loading branch information
iKapitonau committed May 3, 2024
1 parent d38af28 commit e83395d
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 77 deletions.
21 changes: 11 additions & 10 deletions x/compute/internal/keeper/distribution_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)

Expand All @@ -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")
Expand Down
117 changes: 50 additions & 67 deletions x/compute/internal/keeper/query_plugins.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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"
Expand Down Expand Up @@ -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"}
}
}
Expand Down Expand Up @@ -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), &params)
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), &params)
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) {
Expand Down

0 comments on commit e83395d

Please sign in to comment.