Refactor to use FeeHandler function
This commit is contained in:
+2
-4
@@ -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
|
||||
}
|
||||
|
||||
+8
-5
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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}})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user