Skip to content

Commit 08aa3d4

Browse files
update token destribution inside accumulator
1 parent 0a59a0a commit 08aa3d4

File tree

6 files changed

+47
-12
lines changed

6 files changed

+47
-12
lines changed

x/accumulator/genesis.go

-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,5 @@ func ExportGenesis(ctx sdk.Context, k keeper.Keeper) *types.GenesisState {
1818
genesis.Params = k.GetParams(ctx)
1919

2020
// this line is used by starport scaffolding # genesis/module/export
21-
2221
return genesis
2322
}

x/accumulator/keeper/keeper.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ type (
2121
GetParams(c sdk.Context) types.Params
2222
SetParams(c sdk.Context, params types.Params)
2323
Params(c context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error)
24-
DistributeValidatorsPool(ctx sdk.Context, amount sdk.Coins) error
24+
DistributeTokens(ctx sdk.Context, fromPool string, isSentToModule bool, amount sdk.Coins, receiverModule string, receiverAddress *sdk.AccAddress) error
2525
}
2626

2727
BaseKeeper struct {

x/accumulator/keeper/token_distribution.go

+40-7
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,23 @@ import (
44
"cosmossdk.io/errors"
55
sdk "github.com/cosmos/cosmos-sdk/types"
66
"github.com/cosmos/cosmos-sdk/x/accumulator/types"
7-
minttypes "github.com/cosmos/cosmos-sdk/x/mint/types"
87
)
98

10-
func (k BaseKeeper) DistributeValidatorsPool(ctx sdk.Context, amount sdk.Coins) error {
11-
return k.distributeTokens(ctx, types.ValidatorPoolName, minttypes.ModuleName, amount)
12-
}
13-
14-
func (k BaseKeeper) distributeTokens(ctx sdk.Context, fromPool string, receiverModule string, amount sdk.Coins) error {
9+
func (k BaseKeeper) DistributeTokens(ctx sdk.Context, fromPool string, isSentToModule bool, amount sdk.Coins, receiverModule string, receiverAddress *sdk.AccAddress) error {
1510
poolAddress := GetPoolAddress(fromPool)
1611
if poolAddress == nil {
1712
return types.ErrInvalidPool
1813
}
1914

20-
return k.sendFromAddressToModule(ctx, poolAddress, receiverModule, amount)
15+
if isSentToModule {
16+
return k.sendFromAddressToModule(ctx, poolAddress, receiverModule, amount)
17+
}
18+
19+
if receiverAddress == nil {
20+
return types.ErrInvalidReceiver
21+
}
22+
return k.sendFromAddressToAddress(ctx, poolAddress, *receiverAddress, amount)
23+
2124
}
2225

2326
func (k BaseKeeper) sendFromAddressToModule(ctx sdk.Context, poolAddress sdk.AccAddress, receiverAddress string, amount sdk.Coins) error {
@@ -36,3 +39,33 @@ func (k BaseKeeper) sendFromAddressToModule(ctx sdk.Context, poolAddress sdk.Acc
3639

3740
return nil
3841
}
42+
43+
func (k BaseKeeper) sendFromAddressToAddress(ctx sdk.Context, poolAddress sdk.AccAddress, receiverAddress sdk.AccAddress, amount sdk.Coins) error {
44+
err := k.bankKeeper.SendCoinsFromAccountToModule(
45+
ctx,
46+
poolAddress,
47+
types.ModuleName,
48+
amount,
49+
)
50+
51+
if err != nil {
52+
err = errors.Wrap(err, "sending native coins to module")
53+
k.Logger(ctx).Error(err.Error())
54+
return err
55+
}
56+
57+
err = k.bankKeeper.SendCoinsFromModuleToAccount(
58+
ctx,
59+
types.ModuleName,
60+
receiverAddress,
61+
amount,
62+
)
63+
64+
if err != nil {
65+
err = errors.Wrap(err, "sending native coins to module")
66+
k.Logger(ctx).Error(err.Error())
67+
return err
68+
}
69+
70+
return nil
71+
}

x/accumulator/types/errors.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,6 @@ import (
88

99
// x/accumulator module sentinel errors
1010
var (
11-
ErrInvalidPool = sdkerrors.Register(ModuleName, 1100, "invalid pool address")
11+
ErrInvalidPool = sdkerrors.Register(ModuleName, 1100, "invalid pool address")
12+
ErrInvalidReceiver = sdkerrors.Register(ModuleName, 1101, "invalid receiver address")
1213
)

x/mint/keeper/keeper.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package keeper
33
import (
44
"cosmossdk.io/math"
55
"github.com/cosmos/cosmos-sdk/types/errors"
6+
accumulatortypes "github.com/cosmos/cosmos-sdk/x/accumulator/types"
67
"github.com/tendermint/tendermint/libs/log"
78

89
"github.com/cosmos/cosmos-sdk/codec"
@@ -79,7 +80,8 @@ func (k Keeper) BondedRatio(ctx sdk.Context) sdk.Dec {
7980
}
8081

8182
func (k Keeper) SendFromAccumulator(ctx sdk.Context, amount sdk.Coins) error {
82-
if err := k.accumulatorKeeper.DistributeValidatorsPool(ctx, amount); err != nil {
83+
err := k.accumulatorKeeper.DistributeTokens(ctx, accumulatortypes.ValidatorPoolName, true, amount, types.ModuleName, nil)
84+
if err != nil {
8385
err = errors.Wrap(err, "failed to call accumulator module")
8486
k.Logger(sdk.UnwrapSDKContext(ctx)).Error(err.Error())
8587
return err

x/mint/types/expected_keepers.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,5 +30,5 @@ type BankKeeper interface {
3030
}
3131

3232
type AccumulatorKeeper interface {
33-
DistributeValidatorsPool(ctx sdk.Context, amount sdk.Coins) error
33+
DistributeTokens(ctx sdk.Context, fromPool string, isSentToModule bool, amount sdk.Coins, receiverModule string, receiverAddress *sdk.AccAddress) error
3434
}

0 commit comments

Comments
 (0)