mirror of
https://github.com/0glabs/0g-chain.git
synced 2024-12-24 15:25:18 +00:00
remove x/community references (#1454)
* remove new community pool from earn * remove x/community from kavadist * remove overridden community-pool query
This commit is contained in:
parent
0d38ce77a1
commit
05a705be79
25
app/app.go
25
app/app.go
@ -93,7 +93,6 @@ import (
|
||||
|
||||
"github.com/kava-labs/kava/app/ante"
|
||||
kavaparams "github.com/kava-labs/kava/app/params"
|
||||
kavadistrquery "github.com/kava-labs/kava/app/query/distribution"
|
||||
"github.com/kava-labs/kava/x/auction"
|
||||
auctionkeeper "github.com/kava-labs/kava/x/auction/keeper"
|
||||
auctiontypes "github.com/kava-labs/kava/x/auction/types"
|
||||
@ -608,7 +607,7 @@ func NewApp(
|
||||
&app.liquidKeeper,
|
||||
&hardKeeper,
|
||||
&savingsKeeper,
|
||||
communitytypes.ModuleAccountName,
|
||||
&app.distrKeeper,
|
||||
)
|
||||
|
||||
// x/community's deposit/withdraw to lend proposals depend on hard keeper.
|
||||
@ -624,7 +623,7 @@ func NewApp(
|
||||
kavadistSubspace,
|
||||
app.bankKeeper,
|
||||
app.accountKeeper,
|
||||
app.communityKeeper,
|
||||
app.distrKeeper,
|
||||
app.loadBlockedMaccAddrs(),
|
||||
)
|
||||
|
||||
@ -972,25 +971,7 @@ func NewApp(
|
||||
}
|
||||
|
||||
func (app *App) RegisterServices(cfg module.Configurator) {
|
||||
// Register services from all unmodified modules
|
||||
for _, module := range app.mm.Modules {
|
||||
// skip registration of distribution services
|
||||
if module.Name() == distrtypes.ModuleName {
|
||||
continue
|
||||
}
|
||||
module.RegisterServices(cfg)
|
||||
}
|
||||
|
||||
// register ditribution services except query server
|
||||
distrtypes.RegisterMsgServer(cfg.MsgServer(), distrkeeper.NewMsgServerImpl(app.distrKeeper))
|
||||
cfg.RegisterMigration(
|
||||
distrtypes.ModuleName,
|
||||
1,
|
||||
distrkeeper.NewMigrator(app.distrKeeper).Migrate1to2,
|
||||
)
|
||||
|
||||
// register fake distribution query server
|
||||
distrtypes.RegisterQueryServer(cfg.QueryServer(), kavadistrquery.NewQueryServer(app.distrKeeper, app.communityKeeper))
|
||||
app.mm.RegisterServices(cfg)
|
||||
}
|
||||
|
||||
// BeginBlocker contains app specific logic for the BeginBlock abci call.
|
||||
|
@ -1,10 +0,0 @@
|
||||
package distribution
|
||||
|
||||
import (
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
)
|
||||
|
||||
// CommunityKeeper defines the contract needed to be fulfilled for community module dependencies.
|
||||
type CommunityKeeper interface {
|
||||
GetModuleAccountBalance(sdk.Context) sdk.Coins
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
package distribution
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
distrkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper"
|
||||
distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types"
|
||||
)
|
||||
|
||||
var _ distrtypes.QueryServer = &queryServer{}
|
||||
|
||||
type queryServer struct {
|
||||
distrkeeper.Keeper
|
||||
|
||||
communityKeeper CommunityKeeper
|
||||
}
|
||||
|
||||
// NewQueryServer returns a grpc query server for the distribution module.
|
||||
// It forwards most requests to the distribution keeper, except for the community pool request
|
||||
// which is mapped to the kava community module.
|
||||
func NewQueryServer(distrKeeper distrkeeper.Keeper, commKeeper CommunityKeeper) distrtypes.QueryServer {
|
||||
return &queryServer{
|
||||
Keeper: distrKeeper,
|
||||
communityKeeper: commKeeper,
|
||||
}
|
||||
}
|
||||
|
||||
// CommunityPool queries the kava community module
|
||||
// The original community pool, which is a separately accounted for portion of x/auth's fee pool
|
||||
// is replaces with the x/community module account.
|
||||
// TODO: implement legacy community pool balance query in x/community
|
||||
// To query the original community pool, including historical values, use x/community's LegacyCommunityPoolBalance
|
||||
func (q queryServer) CommunityPool(c context.Context, req *distrtypes.QueryCommunityPoolRequest) (*distrtypes.QueryCommunityPoolResponse, error) {
|
||||
ctx := sdk.UnwrapSDKContext(c)
|
||||
balance := q.communityKeeper.GetModuleAccountBalance(ctx)
|
||||
return &distrtypes.QueryCommunityPoolResponse{Pool: sdk.NewDecCoinsFromCoins(balance...)}, nil
|
||||
}
|
@ -1,170 +0,0 @@
|
||||
package distribution_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/suite"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/baseapp"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types"
|
||||
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
|
||||
tmtime "github.com/tendermint/tendermint/types/time"
|
||||
|
||||
"github.com/kava-labs/kava/app"
|
||||
distrquery "github.com/kava-labs/kava/app/query/distribution"
|
||||
communitytypes "github.com/kava-labs/kava/x/community/types"
|
||||
)
|
||||
|
||||
type queryTestSuite struct {
|
||||
suite.Suite
|
||||
|
||||
App app.TestApp
|
||||
Ctx sdk.Context
|
||||
|
||||
queryClient distrtypes.QueryClient
|
||||
communityPoolAddress sdk.AccAddress
|
||||
}
|
||||
|
||||
func (suite *queryTestSuite) SetupTest() {
|
||||
app.SetSDKConfig()
|
||||
tApp := app.NewTestApp()
|
||||
ctx := tApp.NewContext(true, tmproto.Header{Height: 1, Time: tmtime.Now()})
|
||||
|
||||
tApp.InitializeFromGenesisStates()
|
||||
|
||||
suite.App = tApp
|
||||
suite.Ctx = ctx
|
||||
|
||||
queryHelper := baseapp.NewQueryServerTestHelper(suite.Ctx, suite.App.InterfaceRegistry())
|
||||
distrtypes.RegisterQueryServer(queryHelper, distrquery.NewQueryServer(
|
||||
tApp.GetDistrKeeper(),
|
||||
tApp.GetCommunityKeeper(),
|
||||
))
|
||||
suite.queryClient = distrtypes.NewQueryClient(queryHelper)
|
||||
suite.communityPoolAddress = tApp.GetAccountKeeper().GetModuleAddress(communitytypes.ModuleAccountName)
|
||||
}
|
||||
|
||||
func TestGRPQueryTestSuite(t *testing.T) {
|
||||
suite.Run(t, new(queryTestSuite))
|
||||
}
|
||||
|
||||
func (suite queryTestSuite) FundCommunityPool(amt sdk.Coins) {
|
||||
err := suite.App.FundModuleAccount(suite.Ctx, communitytypes.ModuleAccountName, amt)
|
||||
suite.NoError(err)
|
||||
}
|
||||
|
||||
func (suite queryTestSuite) CheckCommunityPoolBalance(expected sdk.Coins, result sdk.DecCoins) {
|
||||
actual := suite.App.GetBankKeeper().GetAllBalances(suite.Ctx, suite.communityPoolAddress)
|
||||
// check that account was properly funded
|
||||
suite.Equal(expected, actual, "unexpected community pool balance")
|
||||
|
||||
// transform the expected values to DecCoins to compare with result
|
||||
decCoins := sdk.NewDecCoinsFromCoins(expected...)
|
||||
suite.True(decCoins.IsEqual(result), "unexpected community pool query response")
|
||||
}
|
||||
|
||||
func (suite *queryTestSuite) Test_CommunityPoolOverride() {
|
||||
singleDenom := sdk.NewCoins(sdk.NewInt64Coin("ukava", 1e10))
|
||||
multiDenom := singleDenom.Add(sdk.NewInt64Coin("other-denom", 1e9))
|
||||
|
||||
testCases := []struct {
|
||||
name string
|
||||
funds sdk.Coins
|
||||
}{
|
||||
{"single denom", singleDenom},
|
||||
{"multiple denoms", multiDenom},
|
||||
{"no balance", sdk.NewCoins()},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
suite.Run(fmt.Sprintf("queries the correct balance - %s", tc.name), func() {
|
||||
suite.SetupTest()
|
||||
|
||||
// init community pool funds
|
||||
if !tc.funds.IsZero() {
|
||||
suite.FundCommunityPool(tc.funds)
|
||||
}
|
||||
|
||||
// query the overridden endpoint
|
||||
balance, err := suite.queryClient.CommunityPool(
|
||||
context.Background(),
|
||||
&distrtypes.QueryCommunityPoolRequest{},
|
||||
)
|
||||
suite.NoError(err)
|
||||
suite.CheckCommunityPoolBalance(tc.funds, balance.Pool)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// modified from sdk test of distribution querier
|
||||
func (suite *queryTestSuite) Test_OGDistributionQueries() {
|
||||
suite.SetupTest()
|
||||
|
||||
ctx, distrKeeper, stakingKeeper := suite.Ctx, suite.App.GetDistrKeeper(), suite.App.GetStakingKeeper()
|
||||
|
||||
// setup a validator
|
||||
addr := app.RandomAddress()
|
||||
valAddr := sdk.ValAddress(addr)
|
||||
bondDenom := stakingKeeper.BondDenom(ctx)
|
||||
|
||||
// test param queries
|
||||
params := distrtypes.Params{
|
||||
CommunityTax: sdk.ZeroDec(),
|
||||
BaseProposerReward: sdk.NewDecWithPrec(2, 1),
|
||||
BonusProposerReward: sdk.NewDecWithPrec(1, 1),
|
||||
WithdrawAddrEnabled: true,
|
||||
}
|
||||
distrKeeper.SetParams(ctx, params)
|
||||
r1, err := suite.queryClient.Params(context.Background(), &distrtypes.QueryParamsRequest{})
|
||||
suite.NoError(err)
|
||||
suite.Equal(params, r1.Params)
|
||||
|
||||
// test outstanding rewards query
|
||||
outstandingRewards := sdk.NewDecCoins(sdk.NewInt64DecCoin(bondDenom, 100), sdk.NewInt64DecCoin("other", 10))
|
||||
distrKeeper.SetValidatorOutstandingRewards(ctx, valAddr, distrtypes.ValidatorOutstandingRewards{Rewards: outstandingRewards})
|
||||
r2, err := suite.queryClient.ValidatorOutstandingRewards(context.Background(), &distrtypes.QueryValidatorOutstandingRewardsRequest{ValidatorAddress: valAddr.String()})
|
||||
suite.NoError(err)
|
||||
suite.Equal(outstandingRewards, r2.Rewards.Rewards)
|
||||
|
||||
// test validator commission query
|
||||
commission := sdk.DecCoins{{Denom: "token1", Amount: sdk.NewDec(4)}, {Denom: "token2", Amount: sdk.NewDec(2)}}
|
||||
distrKeeper.SetValidatorAccumulatedCommission(ctx, valAddr, distrtypes.ValidatorAccumulatedCommission{Commission: commission})
|
||||
r3, err := suite.queryClient.ValidatorCommission(context.Background(), &distrtypes.QueryValidatorCommissionRequest{ValidatorAddress: valAddr.String()})
|
||||
suite.NoError(err)
|
||||
suite.Equal(commission, r3.Commission.Commission)
|
||||
|
||||
// test delegator's total rewards query
|
||||
r4, err := suite.queryClient.DelegationTotalRewards(context.Background(), &distrtypes.QueryDelegationTotalRewardsRequest{DelegatorAddress: addr.String()})
|
||||
suite.NoError(err)
|
||||
suite.Equal(&distrtypes.QueryDelegationTotalRewardsResponse{}, r4)
|
||||
|
||||
// test validator slashes query with height range
|
||||
slashOne := distrtypes.NewValidatorSlashEvent(3, sdk.NewDecWithPrec(5, 1))
|
||||
slashTwo := distrtypes.NewValidatorSlashEvent(7, sdk.NewDecWithPrec(6, 1))
|
||||
distrKeeper.SetValidatorSlashEvent(ctx, valAddr, 3, 0, slashOne)
|
||||
distrKeeper.SetValidatorSlashEvent(ctx, valAddr, 7, 0, slashTwo)
|
||||
slashes := suite.getQueriedValidatorSlashes(valAddr, 0, 2)
|
||||
suite.Equal(0, len(slashes))
|
||||
slashes = suite.getQueriedValidatorSlashes(valAddr, 0, 5)
|
||||
suite.Equal([]distrtypes.ValidatorSlashEvent{slashOne}, slashes)
|
||||
slashes = suite.getQueriedValidatorSlashes(valAddr, 0, 10)
|
||||
suite.Equal([]distrtypes.ValidatorSlashEvent{slashOne, slashTwo}, slashes)
|
||||
|
||||
// non-zero delegator reward queries are not tested here.
|
||||
}
|
||||
|
||||
func (suite *queryTestSuite) getQueriedValidatorSlashes(validatorAddr sdk.ValAddress, startHeight uint64, endHeight uint64) (slashes []distrtypes.ValidatorSlashEvent) {
|
||||
result, err := suite.queryClient.ValidatorSlashes(
|
||||
context.Background(),
|
||||
&distrtypes.QueryValidatorSlashesRequest{
|
||||
ValidatorAddress: validatorAddr.String(),
|
||||
StartingHeight: startHeight,
|
||||
EndingHeight: endHeight,
|
||||
},
|
||||
)
|
||||
suite.NoError(err)
|
||||
return result.Slashes
|
||||
}
|
@ -22,8 +22,8 @@ type Keeper struct {
|
||||
hardKeeper types.HardKeeper
|
||||
savingsKeeper types.SavingsKeeper
|
||||
|
||||
// name of module account the community pool deposit/withdraw proposals use
|
||||
communityPoolMaccName string
|
||||
// Keeper for community pool transfers
|
||||
distKeeper types.DistributionKeeper
|
||||
}
|
||||
|
||||
// NewKeeper creates a new keeper
|
||||
@ -36,7 +36,7 @@ func NewKeeper(
|
||||
liquidKeeper types.LiquidKeeper,
|
||||
hardKeeper types.HardKeeper,
|
||||
savingsKeeper types.SavingsKeeper,
|
||||
communityPoolMaccName string,
|
||||
distKeeper types.DistributionKeeper,
|
||||
) Keeper {
|
||||
if !paramstore.HasKeyTable() {
|
||||
paramstore = paramstore.WithKeyTable(types.ParamKeyTable())
|
||||
@ -51,8 +51,7 @@ func NewKeeper(
|
||||
liquidKeeper: liquidKeeper,
|
||||
hardKeeper: hardKeeper,
|
||||
savingsKeeper: savingsKeeper,
|
||||
|
||||
communityPoolMaccName: communityPoolMaccName,
|
||||
distKeeper: distKeeper,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4,15 +4,46 @@ import (
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
|
||||
"github.com/kava-labs/kava/x/earn/types"
|
||||
kavadisttypes "github.com/kava-labs/kava/x/kavadist/types"
|
||||
)
|
||||
|
||||
// HandleCommunityPoolDepositProposal is a handler for executing a passed community pool deposit proposal
|
||||
func HandleCommunityPoolDepositProposal(ctx sdk.Context, k Keeper, p *types.CommunityPoolDepositProposal) error {
|
||||
return k.DepositFromModuleAccount(ctx, k.communityPoolMaccName, p.Amount, types.STRATEGY_TYPE_SAVINGS)
|
||||
fundAcc := k.accountKeeper.GetModuleAccount(ctx, kavadisttypes.FundModuleAccount)
|
||||
if err := k.distKeeper.DistributeFromFeePool(ctx, sdk.NewCoins(p.Amount), fundAcc.GetAddress()); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err := k.DepositFromModuleAccount(ctx, kavadisttypes.FundModuleAccount, p.Amount, types.STRATEGY_TYPE_SAVINGS)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
// HandleCommunityPoolWithdrawProposal is a handler for executing a passed community pool withdraw proposal.
|
||||
func HandleCommunityPoolWithdrawProposal(ctx sdk.Context, k Keeper, p *types.CommunityPoolWithdrawProposal) error {
|
||||
_, err := k.WithdrawFromModuleAccount(ctx, k.communityPoolMaccName, p.Amount, types.STRATEGY_TYPE_SAVINGS)
|
||||
return err
|
||||
// Withdraw to fund module account
|
||||
withdrawAmount, err := k.WithdrawFromModuleAccount(ctx, kavadisttypes.FundModuleAccount, p.Amount, types.STRATEGY_TYPE_SAVINGS)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Move funds to the community pool manually
|
||||
err = k.bankKeeper.SendCoinsFromModuleToModule(
|
||||
ctx,
|
||||
kavadisttypes.FundModuleAccount,
|
||||
k.distKeeper.GetDistributionAccount(ctx).GetName(),
|
||||
sdk.NewCoins(withdrawAmount),
|
||||
)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
feePool := k.distKeeper.GetFeePool(ctx)
|
||||
newCommunityPool := feePool.CommunityPool.Add(sdk.NewDecCoinFromCoin(withdrawAmount))
|
||||
feePool.CommunityPool = newCommunityPool
|
||||
k.distKeeper.SetFeePool(ctx, feePool)
|
||||
return nil
|
||||
}
|
||||
|
@ -4,7 +4,6 @@ import (
|
||||
"testing"
|
||||
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
communitytypes "github.com/kava-labs/kava/x/community/types"
|
||||
"github.com/kava-labs/kava/x/earn/keeper"
|
||||
"github.com/kava-labs/kava/x/earn/testutil"
|
||||
"github.com/kava-labs/kava/x/earn/types"
|
||||
@ -25,12 +24,15 @@ func TestProposalTestSuite(t *testing.T) {
|
||||
}
|
||||
|
||||
func (suite *proposalTestSuite) TestCommunityDepositProposal() {
|
||||
distKeeper := suite.App.GetDistrKeeper()
|
||||
ctx := suite.Ctx
|
||||
macc := suite.App.GetAccountKeeper().GetModuleAccount(ctx, communitytypes.ModuleAccountName)
|
||||
macc := distKeeper.GetDistributionAccount(ctx)
|
||||
fundAmount := sdk.NewCoins(sdk.NewInt64Coin("ukava", 100000000))
|
||||
depositAmount := sdk.NewCoin("ukava", sdk.NewInt(10000000))
|
||||
suite.Require().NoError(suite.App.FundModuleAccount(ctx, macc.GetName(), fundAmount))
|
||||
|
||||
feePool := distKeeper.GetFeePool(ctx)
|
||||
feePool.CommunityPool = sdk.NewDecCoinsFromCoins(fundAmount...)
|
||||
distKeeper.SetFeePool(ctx, feePool)
|
||||
suite.CreateVault("ukava", types.StrategyTypes{types.STRATEGY_TYPE_SAVINGS}, false, nil)
|
||||
prop := types.NewCommunityPoolDepositProposal("test title",
|
||||
"desc", depositAmount)
|
||||
@ -39,18 +41,23 @@ func (suite *proposalTestSuite) TestCommunityDepositProposal() {
|
||||
|
||||
balance := suite.BankKeeper.GetAllBalances(ctx, macc.GetAddress())
|
||||
suite.Require().Equal(fundAmount.Sub(sdk.NewCoins(depositAmount)), balance)
|
||||
|
||||
communityPoolBalance := suite.App.GetCommunityKeeper().GetModuleAccountBalance(ctx)
|
||||
feePool = distKeeper.GetFeePool(ctx)
|
||||
communityPoolBalance, change := feePool.CommunityPool.TruncateDecimal()
|
||||
suite.Require().Equal(fundAmount.Sub(sdk.NewCoins(depositAmount)), communityPoolBalance)
|
||||
suite.Require().True(change.Empty())
|
||||
}
|
||||
|
||||
func (suite *proposalTestSuite) TestCommunityWithdrawProposal() {
|
||||
distKeeper := suite.App.GetDistrKeeper()
|
||||
ctx := suite.Ctx
|
||||
macc := suite.App.GetAccountKeeper().GetModuleAccount(ctx, communitytypes.ModuleAccountName)
|
||||
macc := distKeeper.GetDistributionAccount(ctx)
|
||||
fundAmount := sdk.NewCoins(sdk.NewInt64Coin("ukava", 100000000))
|
||||
depositAmount := sdk.NewCoin("ukava", sdk.NewInt(10000000))
|
||||
suite.Require().NoError(suite.App.FundModuleAccount(ctx, macc.GetName(), fundAmount))
|
||||
|
||||
feePool := distKeeper.GetFeePool(ctx)
|
||||
feePool.CommunityPool = sdk.NewDecCoinsFromCoins(fundAmount...)
|
||||
distKeeper.SetFeePool(ctx, feePool)
|
||||
// TODO update to STRATEGY_TYPE_SAVINGS once implemented
|
||||
suite.CreateVault("ukava", types.StrategyTypes{types.STRATEGY_TYPE_SAVINGS}, false, nil)
|
||||
deposit := types.NewCommunityPoolDepositProposal("test title",
|
||||
"desc", depositAmount)
|
||||
@ -66,7 +73,8 @@ func (suite *proposalTestSuite) TestCommunityWithdrawProposal() {
|
||||
suite.Require().NoError(err)
|
||||
balance = suite.BankKeeper.GetAllBalances(ctx, macc.GetAddress())
|
||||
suite.Require().Equal(fundAmount, balance)
|
||||
|
||||
communityPoolBalance := suite.App.GetCommunityKeeper().GetModuleAccountBalance(ctx)
|
||||
feePool = distKeeper.GetFeePool(ctx)
|
||||
communityPoolBalance, change := feePool.CommunityPool.TruncateDecimal()
|
||||
suite.Require().Equal(fundAmount, communityPoolBalance)
|
||||
suite.Require().True(change.Empty())
|
||||
}
|
||||
|
@ -17,6 +17,7 @@ import (
|
||||
savingskeeper "github.com/kava-labs/kava/x/savings/keeper"
|
||||
savingstypes "github.com/kava-labs/kava/x/savings/types"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/simapp"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper"
|
||||
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
||||
@ -204,7 +205,7 @@ func (suite *Suite) GetEvents() sdk.Events {
|
||||
// AddCoinsToModule adds coins to the earn module account
|
||||
func (suite *Suite) AddCoinsToModule(amount sdk.Coins) {
|
||||
// Does not use suite.BankKeeper.MintCoins as module account would not have permission to mint
|
||||
err := suite.App.FundModuleAccount(suite.Ctx, types.ModuleName, amount)
|
||||
err := simapp.FundModuleAccount(suite.BankKeeper, suite.Ctx, types.ModuleName, amount)
|
||||
suite.Require().NoError(err)
|
||||
}
|
||||
|
||||
@ -226,7 +227,7 @@ func (suite *Suite) CreateAccount(initialBalance sdk.Coins, index int) authtypes
|
||||
acc := ak.NewAccountWithAddress(suite.Ctx, addrs[index])
|
||||
ak.SetAccount(suite.Ctx, acc)
|
||||
|
||||
err := suite.App.FundAccount(suite.Ctx, acc.GetAddress(), initialBalance)
|
||||
err := simapp.FundAccount(suite.BankKeeper, suite.Ctx, acc.GetAddress(), initialBalance)
|
||||
suite.Require().NoError(err)
|
||||
|
||||
return acc
|
||||
@ -239,7 +240,7 @@ func (suite *Suite) NewAccountFromAddr(addr sdk.AccAddress, balance sdk.Coins) a
|
||||
acc := ak.NewAccountWithAddress(suite.Ctx, addr)
|
||||
ak.SetAccount(suite.Ctx, acc)
|
||||
|
||||
err := suite.App.FundAccount(suite.Ctx, acc.GetAddress(), balance)
|
||||
err := simapp.FundAccount(suite.BankKeeper, suite.Ctx, acc.GetAddress(), balance)
|
||||
suite.Require().NoError(err)
|
||||
|
||||
return acc
|
||||
|
@ -3,6 +3,7 @@ package types
|
||||
import (
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
"github.com/cosmos/cosmos-sdk/x/auth/types"
|
||||
disttypes "github.com/cosmos/cosmos-sdk/x/distribution/types"
|
||||
|
||||
hardtypes "github.com/kava-labs/kava/x/hard/types"
|
||||
savingstypes "github.com/kava-labs/kava/x/savings/types"
|
||||
@ -25,6 +26,14 @@ type BankKeeper interface {
|
||||
SendCoinsFromAccountToModule(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error
|
||||
}
|
||||
|
||||
// DistributionKeeper defines the expected interface needed for community-pool deposits to earn vaults
|
||||
type DistributionKeeper interface {
|
||||
GetFeePool(ctx sdk.Context) (feePool disttypes.FeePool)
|
||||
SetFeePool(ctx sdk.Context, feePool disttypes.FeePool)
|
||||
GetDistributionAccount(ctx sdk.Context) types.ModuleAccountI
|
||||
DistributeFromFeePool(ctx sdk.Context, amount sdk.Coins, receiveAddr sdk.AccAddress) error
|
||||
}
|
||||
|
||||
// LiquidKeeper defines the expected interface needed for derivative to staked token conversions.
|
||||
type LiquidKeeper interface {
|
||||
GetStakedTokensForDerivatives(ctx sdk.Context, derivatives sdk.Coins) (sdk.Coin, error)
|
||||
|
@ -13,12 +13,12 @@ import (
|
||||
|
||||
// Keeper keeper for the cdp module
|
||||
type Keeper struct {
|
||||
key sdk.StoreKey
|
||||
cdc codec.BinaryCodec
|
||||
paramSubspace paramtypes.Subspace
|
||||
bankKeeper types.BankKeeper
|
||||
accountKeeper types.AccountKeeper
|
||||
communityKeeper types.CommunityKeeper
|
||||
key sdk.StoreKey
|
||||
cdc codec.BinaryCodec
|
||||
paramSubspace paramtypes.Subspace
|
||||
bankKeeper types.BankKeeper
|
||||
distKeeper types.DistKeeper
|
||||
accountKeeper types.AccountKeeper
|
||||
|
||||
blacklistedAddrs map[string]bool
|
||||
}
|
||||
@ -26,7 +26,7 @@ type Keeper struct {
|
||||
// NewKeeper creates a new keeper
|
||||
func NewKeeper(
|
||||
cdc codec.BinaryCodec, key sdk.StoreKey, paramstore paramtypes.Subspace, bk types.BankKeeper, ak types.AccountKeeper,
|
||||
ck types.CommunityKeeper, blacklistedAddrs map[string]bool,
|
||||
dk types.DistKeeper, blacklistedAddrs map[string]bool,
|
||||
) Keeper {
|
||||
if !paramstore.HasKeyTable() {
|
||||
paramstore = paramstore.WithKeyTable(types.ParamKeyTable())
|
||||
@ -37,8 +37,8 @@ func NewKeeper(
|
||||
cdc: cdc,
|
||||
paramSubspace: paramstore,
|
||||
bankKeeper: bk,
|
||||
distKeeper: dk,
|
||||
accountKeeper: ak,
|
||||
communityKeeper: ck,
|
||||
blacklistedAddrs: blacklistedAddrs,
|
||||
}
|
||||
}
|
||||
|
@ -13,7 +13,7 @@ func HandleCommunityPoolMultiSpendProposal(ctx sdk.Context, k Keeper, p *types.C
|
||||
if k.blacklistedAddrs[receiverInfo.Address] {
|
||||
return sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, "%s is blacklisted from receiving external funds", receiverInfo.Address)
|
||||
}
|
||||
err := k.communityKeeper.DistributeFromCommunityPool(ctx, receiverInfo.GetAddress(), receiverInfo.Amount)
|
||||
err := k.distKeeper.DistributeFromFeePool(ctx, receiverInfo.Amount, receiverInfo.GetAddress())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -3,22 +3,21 @@ package keeper_test
|
||||
import (
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
|
||||
communitytypes "github.com/kava-labs/kava/x/community/types"
|
||||
"github.com/kava-labs/kava/x/kavadist/keeper"
|
||||
"github.com/kava-labs/kava/x/kavadist/types"
|
||||
)
|
||||
|
||||
func (suite *keeperTestSuite) TestHandleCommunityPoolMultiSpendProposal() {
|
||||
addr, communityKeeper, ctx := suite.Addrs[0], suite.App.GetCommunityKeeper(), suite.Ctx
|
||||
addr, distrKeeper, ctx := suite.Addrs[0], suite.App.GetDistrKeeper(), suite.Ctx
|
||||
initBalances := suite.BankKeeper.GetAllBalances(ctx, addr)
|
||||
|
||||
// add coins to the module account and fund community pool
|
||||
initialFunds := int64(1000000)
|
||||
fundAmount := sdk.NewCoins(sdk.NewInt64Coin("ukava", initialFunds))
|
||||
suite.Require().NoError(suite.App.FundModuleAccount(ctx, communitytypes.ModuleAccountName, fundAmount))
|
||||
// expect funds to start in community pool
|
||||
commPoolFunds := communityKeeper.GetModuleAccountBalance(ctx)
|
||||
suite.Require().True(fundAmount.IsEqual(commPoolFunds))
|
||||
// add coins to the module account and fund fee pool
|
||||
macc := distrKeeper.GetDistributionAccount(ctx)
|
||||
fundAmount := sdk.NewCoins(sdk.NewInt64Coin("ukava", 1000000))
|
||||
suite.Require().NoError(suite.App.FundModuleAccount(ctx, macc.GetName(), fundAmount))
|
||||
feePool := distrKeeper.GetFeePool(ctx)
|
||||
feePool.CommunityPool = sdk.NewDecCoinsFromCoins(fundAmount...)
|
||||
distrKeeper.SetFeePool(ctx, feePool)
|
||||
|
||||
proposalAmount1 := int64(1100)
|
||||
proposalAmount2 := int64(1200)
|
||||
@ -36,12 +35,6 @@ func (suite *keeperTestSuite) TestHandleCommunityPoolMultiSpendProposal() {
|
||||
suite.Require().Nil(err)
|
||||
|
||||
balances := suite.BankKeeper.GetAllBalances(ctx, addr)
|
||||
|
||||
// expect funds to be transferred to recipient
|
||||
expected := initBalances.AmountOf("ukava").Add(sdk.NewInt(proposalAmount1 + proposalAmount2))
|
||||
suite.Require().Equal(expected, balances.AmountOf("ukava"))
|
||||
|
||||
// expect funds to be deducted from community pool
|
||||
expectedCommPool := commPoolFunds.AmountOf("ukava").SubRaw(proposalAmount1 + proposalAmount2)
|
||||
suite.Require().Equal(expectedCommPool, communityKeeper.GetModuleAccountBalance(ctx).AmountOf("ukava"))
|
||||
}
|
||||
|
@ -5,9 +5,9 @@ import (
|
||||
authTypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
||||
)
|
||||
|
||||
// CommunityKeeper defines the expected community keeper interface
|
||||
type CommunityKeeper interface {
|
||||
DistributeFromCommunityPool(ctx sdk.Context, sender sdk.AccAddress, amount sdk.Coins) error
|
||||
// DistKeeper defines the expected distribution keeper interface
|
||||
type DistKeeper interface {
|
||||
DistributeFromFeePool(ctx sdk.Context, amount sdk.Coins, receiveAddr sdk.AccAddress) error
|
||||
}
|
||||
|
||||
// AccountKeeper defines the expected account keeper interface
|
||||
|
Loading…
Reference in New Issue
Block a user