Refactor to use FeeHandler function

This commit is contained in:
Christopher Goes
2018-04-16 14:15:03 +02:00
parent 7fafa9e021
commit 39ee95abe4
8 changed files with 27 additions and 56 deletions
+2 -4
View File
@@ -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
View File
@@ -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
-27
View File
@@ -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()
-16
View File
@@ -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}})
}