forked from celestiaorg/cosmos-sdk
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request cosmos#1064 from cosmos/sunny/ante_fee_handle
Fee Collection in auth
- Loading branch information
Showing
9 changed files
with
186 additions
and
32 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
package auth | ||
|
||
import ( | ||
sdk "github.com/cosmos/cosmos-sdk/types" | ||
wire "github.com/cosmos/cosmos-sdk/wire" | ||
) | ||
|
||
var ( | ||
collectedFeesKey = []byte("collectedFees") | ||
) | ||
|
||
// This FeeCollectionKeeper handles collection of fees in the anteHandler | ||
// and setting of MinFees for different fee tokens | ||
type FeeCollectionKeeper struct { | ||
|
||
// The (unexposed) key used to access the fee store from the Context. | ||
key sdk.StoreKey | ||
|
||
// The wire codec for binary encoding/decoding of accounts. | ||
cdc *wire.Codec | ||
} | ||
|
||
// NewFeeKeeper returns a new FeeKeeper | ||
func NewFeeCollectionKeeper(cdc *wire.Codec, key sdk.StoreKey) FeeCollectionKeeper { | ||
return FeeCollectionKeeper{ | ||
key: key, | ||
cdc: cdc, | ||
} | ||
} | ||
|
||
// Adds to Collected Fee Pool | ||
func (fck FeeCollectionKeeper) GetCollectedFees(ctx sdk.Context) sdk.Coins { | ||
store := ctx.KVStore(fck.key) | ||
bz := store.Get(collectedFeesKey) | ||
if bz == nil { | ||
return sdk.Coins{} | ||
} | ||
|
||
feePool := &(sdk.Coins{}) | ||
fck.cdc.MustUnmarshalBinary(bz, feePool) | ||
return *feePool | ||
} | ||
|
||
// Sets to Collected Fee Pool | ||
func (fck FeeCollectionKeeper) setCollectedFees(ctx sdk.Context, coins sdk.Coins) { | ||
bz := fck.cdc.MustMarshalBinary(coins) | ||
store := ctx.KVStore(fck.key) | ||
store.Set(collectedFeesKey, bz) | ||
} | ||
|
||
// Adds to Collected Fee Pool | ||
func (fck FeeCollectionKeeper) addCollectedFees(ctx sdk.Context, coins sdk.Coins) sdk.Coins { | ||
newCoins := fck.GetCollectedFees(ctx).Plus(coins) | ||
fck.setCollectedFees(ctx, newCoins) | ||
|
||
return newCoins | ||
} | ||
|
||
// Clears the collected Fee Pool | ||
func (fck FeeCollectionKeeper) ClearCollectedFees(ctx sdk.Context) { | ||
fck.setCollectedFees(ctx, sdk.Coins{}) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
package auth | ||
|
||
import ( | ||
"testing" | ||
|
||
"github.com/stretchr/testify/assert" | ||
|
||
abci "github.com/tendermint/abci/types" | ||
"github.com/tendermint/tmlibs/log" | ||
|
||
sdk "github.com/cosmos/cosmos-sdk/types" | ||
wire "github.com/cosmos/cosmos-sdk/wire" | ||
) | ||
|
||
var ( | ||
emptyCoins = sdk.Coins{} | ||
oneCoin = sdk.Coins{{"foocoin", 1}} | ||
twoCoins = sdk.Coins{{"foocoin", 2}} | ||
) | ||
|
||
func TestFeeCollectionKeeperGetSet(t *testing.T) { | ||
ms, _, capKey2 := setupMultiStore() | ||
cdc := wire.NewCodec() | ||
|
||
// make context and keeper | ||
ctx := sdk.NewContext(ms, abci.Header{}, false, nil, log.NewNopLogger()) | ||
fck := NewFeeCollectionKeeper(cdc, capKey2) | ||
|
||
// no coins initially | ||
currFees := fck.GetCollectedFees(ctx) | ||
assert.True(t, currFees.IsEqual(emptyCoins)) | ||
|
||
// set feeCollection to oneCoin | ||
fck.setCollectedFees(ctx, oneCoin) | ||
|
||
// check that it is equal to oneCoin | ||
assert.True(t, fck.GetCollectedFees(ctx).IsEqual(oneCoin)) | ||
} | ||
|
||
func TestFeeCollectionKeeperAdd(t *testing.T) { | ||
ms, _, capKey2 := setupMultiStore() | ||
cdc := wire.NewCodec() | ||
|
||
// make context and keeper | ||
ctx := sdk.NewContext(ms, abci.Header{}, false, nil, log.NewNopLogger()) | ||
fck := NewFeeCollectionKeeper(cdc, capKey2) | ||
|
||
// no coins initially | ||
assert.True(t, fck.GetCollectedFees(ctx).IsEqual(emptyCoins)) | ||
|
||
// add oneCoin and check that pool is now oneCoin | ||
fck.addCollectedFees(ctx, oneCoin) | ||
assert.True(t, fck.GetCollectedFees(ctx).IsEqual(oneCoin)) | ||
|
||
// add oneCoin again and check that pool is now twoCoins | ||
fck.addCollectedFees(ctx, oneCoin) | ||
assert.True(t, fck.GetCollectedFees(ctx).IsEqual(twoCoins)) | ||
} | ||
|
||
func TestFeeCollectionKeeperClear(t *testing.T) { | ||
ms, _, capKey2 := setupMultiStore() | ||
cdc := wire.NewCodec() | ||
|
||
// make context and keeper | ||
ctx := sdk.NewContext(ms, abci.Header{}, false, nil, log.NewNopLogger()) | ||
fck := NewFeeCollectionKeeper(cdc, capKey2) | ||
|
||
// set coins initially | ||
fck.setCollectedFees(ctx, twoCoins) | ||
assert.True(t, fck.GetCollectedFees(ctx).IsEqual(twoCoins)) | ||
|
||
// clear fees and see that pool is now empty | ||
fck.ClearCollectedFees(ctx) | ||
assert.True(t, fck.GetCollectedFees(ctx).IsEqual(emptyCoins)) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters