Merge PR #2442: Support removal of accounts in account mapper
This commit is contained in:
parent
f6e3e61e07
commit
2e040dd971
|
@ -111,6 +111,7 @@ FEATURES
|
||||||
* [x/auth] \#2376 Remove FeePayer() from StdTx
|
* [x/auth] \#2376 Remove FeePayer() from StdTx
|
||||||
* [x/stake] [\#1672](https://github.com/cosmos/cosmos-sdk/issues/1672) Implement
|
* [x/stake] [\#1672](https://github.com/cosmos/cosmos-sdk/issues/1672) Implement
|
||||||
basis for the validator commission model.
|
basis for the validator commission model.
|
||||||
|
* [x/auth] Support account removal in the account mapper.
|
||||||
|
|
||||||
* Tendermint
|
* Tendermint
|
||||||
|
|
||||||
|
|
|
@ -83,6 +83,13 @@ func (am AccountMapper) SetAccount(ctx sdk.Context, acc Account) {
|
||||||
store.Set(AddressStoreKey(addr), bz)
|
store.Set(AddressStoreKey(addr), bz)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RemoveAccount removes an account for the account mapper store.
|
||||||
|
func (am AccountMapper) RemoveAccount(ctx sdk.Context, acc Account) {
|
||||||
|
addr := acc.GetAddress()
|
||||||
|
store := ctx.KVStore(am.key)
|
||||||
|
store.Delete(AddressStoreKey(addr))
|
||||||
|
}
|
||||||
|
|
||||||
// Implements sdk.AccountMapper.
|
// Implements sdk.AccountMapper.
|
||||||
func (am AccountMapper) IterateAccounts(ctx sdk.Context, process func(Account) (stop bool)) {
|
func (am AccountMapper) IterateAccounts(ctx sdk.Context, process func(Account) (stop bool)) {
|
||||||
store := ctx.KVStore(am.key)
|
store := ctx.KVStore(am.key)
|
||||||
|
|
|
@ -61,6 +61,44 @@ func TestAccountMapperGetSet(t *testing.T) {
|
||||||
require.Equal(t, newSequence, acc.GetSequence())
|
require.Equal(t, newSequence, acc.GetSequence())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAccountMapperRemoveAccount(t *testing.T) {
|
||||||
|
ms, capKey, _ := setupMultiStore()
|
||||||
|
cdc := codec.New()
|
||||||
|
RegisterBaseAccount(cdc)
|
||||||
|
|
||||||
|
// make context and mapper
|
||||||
|
ctx := sdk.NewContext(ms, abci.Header{}, false, log.NewNopLogger())
|
||||||
|
mapper := NewAccountMapper(cdc, capKey, ProtoBaseAccount)
|
||||||
|
|
||||||
|
addr1 := sdk.AccAddress([]byte("addr1"))
|
||||||
|
addr2 := sdk.AccAddress([]byte("addr2"))
|
||||||
|
|
||||||
|
// create accounts
|
||||||
|
acc1 := mapper.NewAccountWithAddress(ctx, addr1)
|
||||||
|
acc2 := mapper.NewAccountWithAddress(ctx, addr2)
|
||||||
|
|
||||||
|
accSeq1 := int64(20)
|
||||||
|
accSeq2 := int64(40)
|
||||||
|
|
||||||
|
acc1.SetSequence(accSeq1)
|
||||||
|
acc2.SetSequence(accSeq2)
|
||||||
|
mapper.SetAccount(ctx, acc1)
|
||||||
|
mapper.SetAccount(ctx, acc2)
|
||||||
|
|
||||||
|
acc1 = mapper.GetAccount(ctx, addr1)
|
||||||
|
require.NotNil(t, acc1)
|
||||||
|
require.Equal(t, accSeq1, acc1.GetSequence())
|
||||||
|
|
||||||
|
// remove one account
|
||||||
|
mapper.RemoveAccount(ctx, acc1)
|
||||||
|
acc1 = mapper.GetAccount(ctx, addr1)
|
||||||
|
require.Nil(t, acc1)
|
||||||
|
|
||||||
|
acc2 = mapper.GetAccount(ctx, addr2)
|
||||||
|
require.NotNil(t, acc2)
|
||||||
|
require.Equal(t, accSeq2, acc2.GetSequence())
|
||||||
|
}
|
||||||
|
|
||||||
func BenchmarkAccountMapperGetAccountFound(b *testing.B) {
|
func BenchmarkAccountMapperGetAccountFound(b *testing.B) {
|
||||||
ms, capKey, _ := setupMultiStore()
|
ms, capKey, _ := setupMultiStore()
|
||||||
cdc := codec.New()
|
cdc := codec.New()
|
||||||
|
|
Loading…
Reference in New Issue