Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@ Every module contains its own CHANGELOG.md. Please refer to the module you are i

### Bug Fixes

* (x/auth) [#23741](https://github.com/cosmos/cosmos-sdk/pull/23741) Support legacy global AccountNumber.

### Removed

* (tools/hub) [#23562](https://github.com/cosmos/cosmos-sdk/pull/23562) Remove `tools/hubl`. A similar tool will be maintained in [ignite](https://www.github.com/ignite/cli).
Expand Down
18 changes: 17 additions & 1 deletion x/accounts/keeper.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ import (

"github.com/cosmos/cosmos-sdk/codec"
sdk "github.com/cosmos/cosmos-sdk/types"
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
gogotypes "github.com/cosmos/gogoproto/types"
)

var (
Expand Down Expand Up @@ -129,7 +131,21 @@ func (k Keeper) NextAccountNumber(
if err != nil {
return 0, err
}

if accNum == 0 {
store := k.KVStoreService.OpenKVStore(ctx)
b, err := store.Get(authtypes.LegacyGlobalAccountNumberKey)
if err != nil {
panic(err)
}
v := new(gogotypes.UInt64Value)
if err := v.Unmarshal(b); err != nil {
panic(err)
}
accNum = v.Value
if err := k.AccountNumber.Set(ctx, v.Value+1); err != nil {
panic(err)
}
}
return accNum, nil
}

Expand Down
30 changes: 30 additions & 0 deletions x/accounts/keeper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ package accounts
import (
"testing"

authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
"github.com/cosmos/gogoproto/types"
gogotypes "github.com/cosmos/gogoproto/types"
"github.com/stretchr/testify/require"

"cosmossdk.io/collections"
Expand Down Expand Up @@ -90,3 +92,31 @@ func TestKeeper_Query(t *testing.T) {
require.True(t, implementation.Equal(&types.Int64Value{Value: 1000}, resp))
})
}

func TestKeeper_NextAccountNumber(t *testing.T) {
m, ctx := newKeeper(t, accountstd.AddAccount("test", NewTestAccount))
num := uint64(0)
err := m.AccountNumber.Set(ctx, num)
require.NoError(t, err)

n, err := m.NextAccountNumber(ctx)
require.NoError(t, err)
require.Equal(t, num, n)

err = m.AccountNumber.Set(ctx, 0)
require.NoError(t, err)

store := m.KVStoreService.OpenKVStore(ctx)
num = uint64(10)
val := &gogotypes.UInt64Value{
Value: num,
}
data, err := val.Marshal()
require.NoError(t, err)
err = store.Set(authtypes.LegacyGlobalAccountNumberKey, data)
require.NoError(t, err)

n, err = m.NextAccountNumber(ctx)
require.NoError(t, err)
require.Equal(t, num, n)
}
7 changes: 3 additions & 4 deletions x/auth/migrations/v5/migrate.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,12 @@ import (

"cosmossdk.io/collections"
storetypes "cosmossdk.io/core/store"
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
)

var LegacyGlobalAccountNumberKey = []byte("globalAccountNumber")

func Migrate(ctx context.Context, storeService storetypes.KVStoreService, sequence collections.Sequence) error {
store := storeService.OpenKVStore(ctx)
b, err := store.Get(LegacyGlobalAccountNumberKey)
b, err := store.Get(authtypes.LegacyGlobalAccountNumberKey)
if err != nil {
return err
}
Expand All @@ -37,7 +36,7 @@ func Migrate(ctx context.Context, storeService storetypes.KVStoreService, sequen
}

// remove the value from the old prefix.
err = store.Delete(LegacyGlobalAccountNumberKey)
err = store.Delete(authtypes.LegacyGlobalAccountNumberKey)
if err != nil {
return err
}
Expand Down
3 changes: 3 additions & 0 deletions x/auth/types/keys.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,7 @@ var (

// AccountNumberStoreKeyPrefix prefix for account-by-id store
AccountNumberStoreKeyPrefix = collections.NewPrefix("accountNumber")

// legacy param key for global account number
LegacyGlobalAccountNumberKey = []byte("globalAccountNumber")
)
Loading