From e870163ec0118cdd4ef3613b1623f4f86a0b0a6b Mon Sep 17 00:00:00 2001 From: Christopher Goes Date: Thu, 12 Apr 2018 13:03:29 +0200 Subject: [PATCH 1/6] Implement fee pool pseudo-account in sdk.AccountMapper --- types/account.go | 2 ++ x/auth/ante.go | 3 +++ x/auth/mapper.go | 27 +++++++++++++++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/types/account.go b/types/account.go index 91ad49979..5217fa850 100644 --- a/types/account.go +++ b/types/account.go @@ -48,6 +48,8 @@ type AccountMapper interface { NewAccountWithAddress(ctx Context, addr Address) Account GetAccount(ctx Context, addr Address) Account SetAccount(ctx Context, acc Account) + GetFeePool(ctx Context) Coins + SetFeePool(ctx Context, coins Coins) } // AccountDecoder unmarshals account bytes diff --git a/x/auth/ante.go b/x/auth/ante.go index 6801769a4..20852b5d7 100644 --- a/x/auth/ante.go +++ b/x/auth/ante.go @@ -74,6 +74,9 @@ func NewAnteHandler(accountMapper sdk.AccountMapper) sdk.AnteHandler { // TODO: min fee if !fee.Amount.IsZero() { signerAcc, res = deductFees(signerAcc, fee) + pool := accountMapper.GetFeePool(ctx) + pool = pool.Plus(fee.Amount) + accountMapper.SetFeePool(ctx, pool) if !res.IsOK() { return ctx, res, true } diff --git a/x/auth/mapper.go b/x/auth/mapper.go index 7bc23aee1..552e10691 100644 --- a/x/auth/mapper.go +++ b/x/auth/mapper.go @@ -51,6 +51,33 @@ func (am accountMapper) Seal() sealedAccountMapper { return sealedAccountMapper{am} } +var feePoolKey = []byte("feePool") + +// Implements sdk.AccountMapper. +func (am accountMapper) GetFeePool(ctx sdk.Context) sdk.Coins { + store := ctx.KVStore(am.key) + bz := store.Get(feePoolKey) + if bz == nil { + return sdk.Coins{} + } + var coins sdk.Coins + err := am.cdc.UnmarshalBinaryBare(bz, &coins) + if err != nil { + panic(err) + } + return coins +} + +// Implements sdk.AccountMapper. +func (am accountMapper) SetFeePool(ctx sdk.Context, coins sdk.Coins) { + store := ctx.KVStore(am.key) + bz, err := am.cdc.MarshalBinaryBare(coins) + if err != nil { + panic(err) + } + store.Set(feePoolKey, bz) +} + // Implements sdk.AccountMapper. func (am accountMapper) NewAccountWithAddress(ctx sdk.Context, addr sdk.Address) sdk.Account { acc := am.clonePrototype() From 7fafa9e021a7d8e5267315de9ebea37dcc23041f Mon Sep 17 00:00:00 2001 From: Christopher Goes Date: Thu, 12 Apr 2018 13:08:57 +0200 Subject: [PATCH 2/6] Add testcases --- x/auth/mapper_test.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/x/auth/mapper_test.go b/x/auth/mapper_test.go index 030207db2..e59139841 100644 --- a/x/auth/mapper_test.go +++ b/x/auth/mapper_test.go @@ -71,3 +71,19 @@ func TestAccountMapperSealed(t *testing.T) { mapperSealed := mapper.Seal() assert.Panics(t, func() { mapperSealed.WireCodec() }) } + +func TestAccountMapperFeePool(t *testing.T) { + ms, capKey := setupMultiStore() + cdc := wire.NewCodec() + ctx := sdk.NewContext(ms, abci.Header{}, false, nil) + mapper := NewAccountMapper(cdc, capKey, &BaseAccount{}) + + // default empty + pool := mapper.GetFeePool(ctx) + assert.Equal(t, pool, sdk.Coins{}) + + // get after set + mapper.SetFeePool(ctx, sdk.Coins{sdk.Coin{"doge", 1}}) + pool = mapper.GetFeePool(ctx) + assert.Equal(t, pool, sdk.Coins{sdk.Coin{"doge", 1}}) +} From 39ee95abe47db0d49cf7e5b4920cfc12fa4b347c Mon Sep 17 00:00:00 2001 From: Christopher Goes Date: Mon, 16 Apr 2018 14:15:03 +0200 Subject: [PATCH 3/6] Refactor to use FeeHandler function --- examples/basecoin/app/app.go | 8 +++++++- examples/democoin/app/app.go | 8 +++++++- types/account.go | 2 -- types/handler.go | 3 +++ x/auth/ante.go | 6 ++---- x/auth/ante_test.go | 13 ++++++++----- x/auth/mapper.go | 27 --------------------------- x/auth/mapper_test.go | 16 ---------------- 8 files changed, 27 insertions(+), 56 deletions(-) diff --git a/examples/basecoin/app/app.go b/examples/basecoin/app/app.go index a1b94318a..5e3e63746 100644 --- a/examples/basecoin/app/app.go +++ b/examples/basecoin/app/app.go @@ -36,6 +36,9 @@ type BasecoinApp struct { // Manage getting and setting accounts accountMapper sdk.AccountMapper + + // Handle fees + feeHandler sdk.FeeHandler } func NewBasecoinApp(logger log.Logger, db dbm.DB) *BasecoinApp { @@ -60,6 +63,9 @@ func NewBasecoinApp(logger log.Logger, db dbm.DB) *BasecoinApp { &types.AppAccount{}, // prototype ).Seal() + // Define the feeHandler. + app.feeHandler = func(ctx sdk.Context, fees sdk.Coins) {} + // Add handlers. coinKeeper := bank.NewCoinKeeper(app.accountMapper) ibcMapper := ibc.NewIBCMapper(app.cdc, app.capKeyIBCStore) @@ -73,7 +79,7 @@ func NewBasecoinApp(logger log.Logger, db dbm.DB) *BasecoinApp { app.SetTxDecoder(app.txDecoder) app.SetInitChainer(app.initChainer) app.MountStoresIAVL(app.capKeyMainStore, app.capKeyAccountStore, app.capKeyIBCStore, app.capKeyStakingStore) - app.SetAnteHandler(auth.NewAnteHandler(app.accountMapper)) + app.SetAnteHandler(auth.NewAnteHandler(app.accountMapper, app.feeHandler)) err := app.LoadLatestVersion(app.capKeyMainStore) if err != nil { cmn.Exit(err.Error()) diff --git a/examples/democoin/app/app.go b/examples/democoin/app/app.go index db2614bad..8954411f6 100644 --- a/examples/democoin/app/app.go +++ b/examples/democoin/app/app.go @@ -40,6 +40,9 @@ type DemocoinApp struct { // Manage getting and setting accounts accountMapper sdk.AccountMapper + + // Handle fees + feeHandler sdk.FeeHandler } func NewDemocoinApp(logger log.Logger, db dbm.DB) *DemocoinApp { @@ -65,6 +68,9 @@ func NewDemocoinApp(logger log.Logger, db dbm.DB) *DemocoinApp { &types.AppAccount{}, // prototype ).Seal() + // Define the feeHandler. + app.feeHandler = func(ctx sdk.Context, fee sdk.Coins) {} + // Add handlers. coinKeeper := bank.NewCoinKeeper(app.accountMapper) coolKeeper := cool.NewKeeper(app.capKeyMainStore, coinKeeper) @@ -83,7 +89,7 @@ func NewDemocoinApp(logger log.Logger, db dbm.DB) *DemocoinApp { app.SetTxDecoder(app.txDecoder) app.SetInitChainer(app.initChainerFn(coolKeeper, powKeeper)) app.MountStoresIAVL(app.capKeyMainStore, app.capKeyAccountStore, app.capKeyPowStore, app.capKeyIBCStore, app.capKeyStakingStore) - app.SetAnteHandler(auth.NewAnteHandler(app.accountMapper)) + app.SetAnteHandler(auth.NewAnteHandler(app.accountMapper, app.feeHandler)) err := app.LoadLatestVersion(app.capKeyMainStore) if err != nil { cmn.Exit(err.Error()) diff --git a/types/account.go b/types/account.go index 5217fa850..91ad49979 100644 --- a/types/account.go +++ b/types/account.go @@ -48,8 +48,6 @@ type AccountMapper interface { NewAccountWithAddress(ctx Context, addr Address) Account GetAccount(ctx Context, addr Address) Account SetAccount(ctx Context, acc Account) - GetFeePool(ctx Context) Coins - SetFeePool(ctx Context, coins Coins) } // AccountDecoder unmarshals account bytes diff --git a/types/handler.go b/types/handler.go index 129f42647..6127c52d7 100644 --- a/types/handler.go +++ b/types/handler.go @@ -3,5 +3,8 @@ package types // core function variable which application runs for transactions type Handler func(ctx Context, msg Msg) Result +// core function variable which application runs to handle fees +type FeeHandler func(ctx Context, fee Coins) + // If newCtx.IsZero(), ctx is used instead. type AnteHandler func(ctx Context, tx Tx) (newCtx Context, result Result, abort bool) diff --git a/x/auth/ante.go b/x/auth/ante.go index 20852b5d7..9db714196 100644 --- a/x/auth/ante.go +++ b/x/auth/ante.go @@ -11,7 +11,7 @@ import ( // NewAnteHandler returns an AnteHandler that checks // and increments sequence numbers, checks signatures, // and deducts fees from the first signer. -func NewAnteHandler(accountMapper sdk.AccountMapper) sdk.AnteHandler { +func NewAnteHandler(accountMapper sdk.AccountMapper, feeHandler sdk.FeeHandler) sdk.AnteHandler { return func( ctx sdk.Context, tx sdk.Tx, ) (_ sdk.Context, _ sdk.Result, abort bool) { @@ -74,9 +74,7 @@ func NewAnteHandler(accountMapper sdk.AccountMapper) sdk.AnteHandler { // TODO: min fee if !fee.Amount.IsZero() { signerAcc, res = deductFees(signerAcc, fee) - pool := accountMapper.GetFeePool(ctx) - pool = pool.Plus(fee.Amount) - accountMapper.SetFeePool(ctx, pool) + feeHandler(ctx, fee.Amount) if !res.IsOK() { return ctx, res, true } diff --git a/x/auth/ante_test.go b/x/auth/ante_test.go index 2f90701e6..ae12cd6cd 100644 --- a/x/auth/ante_test.go +++ b/x/auth/ante_test.go @@ -12,6 +12,9 @@ import ( wire "github.com/cosmos/cosmos-sdk/wire" ) +func nopFeeHandler(ctx sdk.Context, fee sdk.Coins) { +} + func newTestMsg(addrs ...sdk.Address) *sdk.TestMsg { return sdk.NewTestMsg(addrs...) } @@ -72,7 +75,7 @@ func TestAnteHandlerSigErrors(t *testing.T) { cdc := wire.NewCodec() RegisterBaseAccount(cdc) mapper := NewAccountMapper(cdc, capKey, &BaseAccount{}) - anteHandler := NewAnteHandler(mapper) + anteHandler := NewAnteHandler(mapper, nopFeeHandler) ctx := sdk.NewContext(ms, abci.Header{ChainID: "mychainid"}, false, nil) // keys and addresses @@ -113,7 +116,7 @@ func TestAnteHandlerSequences(t *testing.T) { cdc := wire.NewCodec() RegisterBaseAccount(cdc) mapper := NewAccountMapper(cdc, capKey, &BaseAccount{}) - anteHandler := NewAnteHandler(mapper) + anteHandler := NewAnteHandler(mapper, nopFeeHandler) ctx := sdk.NewContext(ms, abci.Header{ChainID: "mychainid"}, false, nil) // keys and addresses @@ -179,7 +182,7 @@ func TestAnteHandlerFees(t *testing.T) { cdc := wire.NewCodec() RegisterBaseAccount(cdc) mapper := NewAccountMapper(cdc, capKey, &BaseAccount{}) - anteHandler := NewAnteHandler(mapper) + anteHandler := NewAnteHandler(mapper, nopFeeHandler) ctx := sdk.NewContext(ms, abci.Header{ChainID: "mychainid"}, false, nil) // keys and addresses @@ -216,7 +219,7 @@ func TestAnteHandlerBadSignBytes(t *testing.T) { cdc := wire.NewCodec() RegisterBaseAccount(cdc) mapper := NewAccountMapper(cdc, capKey, &BaseAccount{}) - anteHandler := NewAnteHandler(mapper) + anteHandler := NewAnteHandler(mapper, nopFeeHandler) ctx := sdk.NewContext(ms, abci.Header{ChainID: "mychainid"}, false, nil) // keys and addresses @@ -291,7 +294,7 @@ func TestAnteHandlerSetPubKey(t *testing.T) { cdc := wire.NewCodec() RegisterBaseAccount(cdc) mapper := NewAccountMapper(cdc, capKey, &BaseAccount{}) - anteHandler := NewAnteHandler(mapper) + anteHandler := NewAnteHandler(mapper, nopFeeHandler) ctx := sdk.NewContext(ms, abci.Header{ChainID: "mychainid"}, false, nil) // keys and addresses diff --git a/x/auth/mapper.go b/x/auth/mapper.go index 552e10691..7bc23aee1 100644 --- a/x/auth/mapper.go +++ b/x/auth/mapper.go @@ -51,33 +51,6 @@ func (am accountMapper) Seal() sealedAccountMapper { return sealedAccountMapper{am} } -var feePoolKey = []byte("feePool") - -// Implements sdk.AccountMapper. -func (am accountMapper) GetFeePool(ctx sdk.Context) sdk.Coins { - store := ctx.KVStore(am.key) - bz := store.Get(feePoolKey) - if bz == nil { - return sdk.Coins{} - } - var coins sdk.Coins - err := am.cdc.UnmarshalBinaryBare(bz, &coins) - if err != nil { - panic(err) - } - return coins -} - -// Implements sdk.AccountMapper. -func (am accountMapper) SetFeePool(ctx sdk.Context, coins sdk.Coins) { - store := ctx.KVStore(am.key) - bz, err := am.cdc.MarshalBinaryBare(coins) - if err != nil { - panic(err) - } - store.Set(feePoolKey, bz) -} - // Implements sdk.AccountMapper. func (am accountMapper) NewAccountWithAddress(ctx sdk.Context, addr sdk.Address) sdk.Account { acc := am.clonePrototype() diff --git a/x/auth/mapper_test.go b/x/auth/mapper_test.go index e59139841..030207db2 100644 --- a/x/auth/mapper_test.go +++ b/x/auth/mapper_test.go @@ -71,19 +71,3 @@ func TestAccountMapperSealed(t *testing.T) { mapperSealed := mapper.Seal() assert.Panics(t, func() { mapperSealed.WireCodec() }) } - -func TestAccountMapperFeePool(t *testing.T) { - ms, capKey := setupMultiStore() - cdc := wire.NewCodec() - ctx := sdk.NewContext(ms, abci.Header{}, false, nil) - mapper := NewAccountMapper(cdc, capKey, &BaseAccount{}) - - // default empty - pool := mapper.GetFeePool(ctx) - assert.Equal(t, pool, sdk.Coins{}) - - // get after set - mapper.SetFeePool(ctx, sdk.Coins{sdk.Coin{"doge", 1}}) - pool = mapper.GetFeePool(ctx) - assert.Equal(t, pool, sdk.Coins{sdk.Coin{"doge", 1}}) -} From 3bbb15f454cb3a4a526a38284b612ba5ba24fc2b Mon Sep 17 00:00:00 2001 From: Christopher Goes Date: Mon, 16 Apr 2018 14:58:19 +0200 Subject: [PATCH 4/6] Add tx to feeHandler, move around in example apps --- examples/basecoin/app/app.go | 6 +++--- examples/democoin/app/app.go | 6 +++--- types/handler.go | 2 +- x/auth/ante.go | 2 +- x/auth/ante_test.go | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/examples/basecoin/app/app.go b/examples/basecoin/app/app.go index 5e3e63746..8a4f4810d 100644 --- a/examples/basecoin/app/app.go +++ b/examples/basecoin/app/app.go @@ -63,9 +63,6 @@ func NewBasecoinApp(logger log.Logger, db dbm.DB) *BasecoinApp { &types.AppAccount{}, // prototype ).Seal() - // Define the feeHandler. - app.feeHandler = func(ctx sdk.Context, fees sdk.Coins) {} - // Add handlers. coinKeeper := bank.NewCoinKeeper(app.accountMapper) ibcMapper := ibc.NewIBCMapper(app.cdc, app.capKeyIBCStore) @@ -75,6 +72,9 @@ func NewBasecoinApp(logger log.Logger, db dbm.DB) *BasecoinApp { AddRoute("ibc", ibc.NewHandler(ibcMapper, coinKeeper)). AddRoute("simplestake", simplestake.NewHandler(stakeKeeper)) + // Define the feeHandler. + app.feeHandler = func(ctx sdk.Context, tx sdk.Tx, fees sdk.Coins) {} + // Initialize BaseApp. app.SetTxDecoder(app.txDecoder) app.SetInitChainer(app.initChainer) diff --git a/examples/democoin/app/app.go b/examples/democoin/app/app.go index 8954411f6..85ed50b30 100644 --- a/examples/democoin/app/app.go +++ b/examples/democoin/app/app.go @@ -68,9 +68,6 @@ func NewDemocoinApp(logger log.Logger, db dbm.DB) *DemocoinApp { &types.AppAccount{}, // prototype ).Seal() - // Define the feeHandler. - app.feeHandler = func(ctx sdk.Context, fee sdk.Coins) {} - // Add handlers. coinKeeper := bank.NewCoinKeeper(app.accountMapper) coolKeeper := cool.NewKeeper(app.capKeyMainStore, coinKeeper) @@ -85,6 +82,9 @@ func NewDemocoinApp(logger log.Logger, db dbm.DB) *DemocoinApp { AddRoute("ibc", ibc.NewHandler(ibcMapper, coinKeeper)). AddRoute("simplestake", simplestake.NewHandler(stakeKeeper)) + // Define the feeHandler. + app.feeHandler = func(ctx sdk.Context, tx sdk.Tx, fee sdk.Coins) {} + // Initialize BaseApp. app.SetTxDecoder(app.txDecoder) app.SetInitChainer(app.initChainerFn(coolKeeper, powKeeper)) diff --git a/types/handler.go b/types/handler.go index 6127c52d7..679a3b1a7 100644 --- a/types/handler.go +++ b/types/handler.go @@ -4,7 +4,7 @@ package types type Handler func(ctx Context, msg Msg) Result // core function variable which application runs to handle fees -type FeeHandler func(ctx Context, fee Coins) +type FeeHandler func(ctx Context, tx Tx, fee Coins) // If newCtx.IsZero(), ctx is used instead. type AnteHandler func(ctx Context, tx Tx) (newCtx Context, result Result, abort bool) diff --git a/x/auth/ante.go b/x/auth/ante.go index 9db714196..dc756e360 100644 --- a/x/auth/ante.go +++ b/x/auth/ante.go @@ -74,7 +74,7 @@ func NewAnteHandler(accountMapper sdk.AccountMapper, feeHandler sdk.FeeHandler) // TODO: min fee if !fee.Amount.IsZero() { signerAcc, res = deductFees(signerAcc, fee) - feeHandler(ctx, fee.Amount) + feeHandler(ctx, tx, fee.Amount) if !res.IsOK() { return ctx, res, true } diff --git a/x/auth/ante_test.go b/x/auth/ante_test.go index ae12cd6cd..8445c1448 100644 --- a/x/auth/ante_test.go +++ b/x/auth/ante_test.go @@ -12,7 +12,7 @@ import ( wire "github.com/cosmos/cosmos-sdk/wire" ) -func nopFeeHandler(ctx sdk.Context, fee sdk.Coins) { +func nopFeeHandler(ctx sdk.Context, tx sdk.Tx, fee sdk.Coins) { } func newTestMsg(addrs ...sdk.Address) *sdk.TestMsg { From 474fa1dfd1ade9e450ba65eb746f819a9d4468e4 Mon Sep 17 00:00:00 2001 From: Christopher Goes Date: Tue, 17 Apr 2018 01:06:07 +0200 Subject: [PATCH 5/6] Switch to BurnFeeHandler --- examples/basecoin/app/app.go | 2 +- examples/democoin/app/app.go | 2 +- x/auth/ante.go | 4 ++++ x/auth/ante_test.go | 13 +++++-------- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/examples/basecoin/app/app.go b/examples/basecoin/app/app.go index 8a4f4810d..ae60e8a73 100644 --- a/examples/basecoin/app/app.go +++ b/examples/basecoin/app/app.go @@ -73,7 +73,7 @@ func NewBasecoinApp(logger log.Logger, db dbm.DB) *BasecoinApp { AddRoute("simplestake", simplestake.NewHandler(stakeKeeper)) // Define the feeHandler. - app.feeHandler = func(ctx sdk.Context, tx sdk.Tx, fees sdk.Coins) {} + app.feeHandler = auth.BurnFeeHandler // Initialize BaseApp. app.SetTxDecoder(app.txDecoder) diff --git a/examples/democoin/app/app.go b/examples/democoin/app/app.go index 85ed50b30..151241d14 100644 --- a/examples/democoin/app/app.go +++ b/examples/democoin/app/app.go @@ -83,7 +83,7 @@ func NewDemocoinApp(logger log.Logger, db dbm.DB) *DemocoinApp { AddRoute("simplestake", simplestake.NewHandler(stakeKeeper)) // Define the feeHandler. - app.feeHandler = func(ctx sdk.Context, tx sdk.Tx, fee sdk.Coins) {} + app.feeHandler = auth.BurnFeeHandler // Initialize BaseApp. app.SetTxDecoder(app.txDecoder) diff --git a/x/auth/ante.go b/x/auth/ante.go index dc756e360..c7af7e2d9 100644 --- a/x/auth/ante.go +++ b/x/auth/ante.go @@ -157,3 +157,7 @@ func deductFees(acc sdk.Account, fee sdk.StdFee) (sdk.Account, sdk.Result) { acc.SetCoins(newCoins) return acc, sdk.Result{} } + +// BurnFeeHandler burns all fees (decreasing total supply) +func BurnFeeHandler(ctx sdk.Context, tx sdk.Tx, fee sdk.Coins) { +} diff --git a/x/auth/ante_test.go b/x/auth/ante_test.go index 8445c1448..58633ff9a 100644 --- a/x/auth/ante_test.go +++ b/x/auth/ante_test.go @@ -12,9 +12,6 @@ import ( wire "github.com/cosmos/cosmos-sdk/wire" ) -func nopFeeHandler(ctx sdk.Context, tx sdk.Tx, fee sdk.Coins) { -} - func newTestMsg(addrs ...sdk.Address) *sdk.TestMsg { return sdk.NewTestMsg(addrs...) } @@ -75,7 +72,7 @@ func TestAnteHandlerSigErrors(t *testing.T) { cdc := wire.NewCodec() RegisterBaseAccount(cdc) mapper := NewAccountMapper(cdc, capKey, &BaseAccount{}) - anteHandler := NewAnteHandler(mapper, nopFeeHandler) + anteHandler := NewAnteHandler(mapper, BurnFeeHandler) ctx := sdk.NewContext(ms, abci.Header{ChainID: "mychainid"}, false, nil) // keys and addresses @@ -116,7 +113,7 @@ func TestAnteHandlerSequences(t *testing.T) { cdc := wire.NewCodec() RegisterBaseAccount(cdc) mapper := NewAccountMapper(cdc, capKey, &BaseAccount{}) - anteHandler := NewAnteHandler(mapper, nopFeeHandler) + anteHandler := NewAnteHandler(mapper, BurnFeeHandler) ctx := sdk.NewContext(ms, abci.Header{ChainID: "mychainid"}, false, nil) // keys and addresses @@ -182,7 +179,7 @@ func TestAnteHandlerFees(t *testing.T) { cdc := wire.NewCodec() RegisterBaseAccount(cdc) mapper := NewAccountMapper(cdc, capKey, &BaseAccount{}) - anteHandler := NewAnteHandler(mapper, nopFeeHandler) + anteHandler := NewAnteHandler(mapper, BurnFeeHandler) ctx := sdk.NewContext(ms, abci.Header{ChainID: "mychainid"}, false, nil) // keys and addresses @@ -219,7 +216,7 @@ func TestAnteHandlerBadSignBytes(t *testing.T) { cdc := wire.NewCodec() RegisterBaseAccount(cdc) mapper := NewAccountMapper(cdc, capKey, &BaseAccount{}) - anteHandler := NewAnteHandler(mapper, nopFeeHandler) + anteHandler := NewAnteHandler(mapper, BurnFeeHandler) ctx := sdk.NewContext(ms, abci.Header{ChainID: "mychainid"}, false, nil) // keys and addresses @@ -294,7 +291,7 @@ func TestAnteHandlerSetPubKey(t *testing.T) { cdc := wire.NewCodec() RegisterBaseAccount(cdc) mapper := NewAccountMapper(cdc, capKey, &BaseAccount{}) - anteHandler := NewAnteHandler(mapper, nopFeeHandler) + anteHandler := NewAnteHandler(mapper, BurnFeeHandler) ctx := sdk.NewContext(ms, abci.Header{ChainID: "mychainid"}, false, nil) // keys and addresses From e3045fd57d89cb7bf502bc85eade383639cd2acf Mon Sep 17 00:00:00 2001 From: Christopher Goes Date: Tue, 17 Apr 2018 01:07:56 +0200 Subject: [PATCH 6/6] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a366f96fb..1612f083f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ FEATURES: * Add CacheContext * Add auto sequencing to client +* Add FeeHandler to ante handler BREAKING CHANGES