Implement fee pool pseudo-account in sdk.AccountMapper
This commit is contained in:
parent
b846559ac1
commit
e870163ec0
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue