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
|
NewAccountWithAddress(ctx Context, addr Address) Account
|
||||||
GetAccount(ctx Context, addr Address) Account
|
GetAccount(ctx Context, addr Address) Account
|
||||||
SetAccount(ctx Context, acc Account)
|
SetAccount(ctx Context, acc Account)
|
||||||
|
GetFeePool(ctx Context) Coins
|
||||||
|
SetFeePool(ctx Context, coins Coins)
|
||||||
}
|
}
|
||||||
|
|
||||||
// AccountDecoder unmarshals account bytes
|
// AccountDecoder unmarshals account bytes
|
||||||
|
|
|
@ -74,6 +74,9 @@ func NewAnteHandler(accountMapper sdk.AccountMapper) sdk.AnteHandler {
|
||||||
// TODO: min fee
|
// TODO: min fee
|
||||||
if !fee.Amount.IsZero() {
|
if !fee.Amount.IsZero() {
|
||||||
signerAcc, res = deductFees(signerAcc, fee)
|
signerAcc, res = deductFees(signerAcc, fee)
|
||||||
|
pool := accountMapper.GetFeePool(ctx)
|
||||||
|
pool = pool.Plus(fee.Amount)
|
||||||
|
accountMapper.SetFeePool(ctx, pool)
|
||||||
if !res.IsOK() {
|
if !res.IsOK() {
|
||||||
return ctx, res, true
|
return ctx, res, true
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,6 +51,33 @@ func (am accountMapper) Seal() sealedAccountMapper {
|
||||||
return sealedAccountMapper{am}
|
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.
|
// Implements sdk.AccountMapper.
|
||||||
func (am accountMapper) NewAccountWithAddress(ctx sdk.Context, addr sdk.Address) sdk.Account {
|
func (am accountMapper) NewAccountWithAddress(ctx sdk.Context, addr sdk.Address) sdk.Account {
|
||||||
acc := am.clonePrototype()
|
acc := am.clonePrototype()
|
||||||
|
|
Loading…
Reference in New Issue