diff --git a/x/auth/legacy/v0_38/migrate_test.go b/x/auth/legacy/v0_38/migrate_test.go new file mode 100644 index 000000000000..67d401c64aaa --- /dev/null +++ b/x/auth/legacy/v0_38/migrate_test.go @@ -0,0 +1,124 @@ +package v038 + +import ( + "encoding/json" + "testing" + + v034auth "github.com/cosmos/cosmos-sdk/x/auth/legacy/v0_34" + v036auth "github.com/cosmos/cosmos-sdk/x/auth/legacy/v0_36" + + "github.com/stretchr/testify/require" +) + +func TestMigrate(t *testing.T) { + var genesisState GenesisState + + params := v034auth.Params{ + MaxMemoCharacters: 10, + TxSigLimit: 10, + TxSizeCostPerByte: 10, + SigVerifyCostED25519: 10, + SigVerifyCostSecp256k1: 10, + } + rawAccounts := `[ + { + "address": "cosmos1dfp05pasnts7a4lupn889vptjtrxzkk5f7027f", + "coins": [ + { + "denom": "node0token", + "amount": "1000000000" + }, + { + "denom": "stake", + "amount": "500000000" + } + ], + "sequence_number": "0", + "account_number": "0", + "original_vesting": [], + "delegated_free": [], + "delegated_vesting": [], + "start_time": "0", + "end_time": "0", + "module_name": "", + "module_permissions": null + }, + { + "address": "cosmos1f6dangl9ggdhuvkcwhswserr8fzra6vfzfjvh2", + "coins": [ + { + "denom": "node1token", + "amount": "1000000000" + }, + { + "denom": "stake", + "amount": "500000000" + } + ], + "sequence_number": "0", + "account_number": "0", + "original_vesting": [], + "delegated_free": [], + "delegated_vesting": [], + "start_time": "0", + "end_time": "0", + "module_name": "", + "module_permissions": null + }, + { + "address": "cosmos1gudmxhn5anh5m6m2rr4rsfhgvps8fchtgmk7a6", + "coins": [ + { + "denom": "node2token", + "amount": "1000000000" + }, + { + "denom": "stake", + "amount": "500000000" + } + ], + "sequence_number": "0", + "account_number": "0", + "original_vesting": [], + "delegated_free": [], + "delegated_vesting": [], + "start_time": "0", + "end_time": "0", + "module_name": "", + "module_permissions": null + }, + { + "address": "cosmos1kluvs8ff2s3hxad4jpmhvca4crqpcwn9xyhchv", + "coins": [ + { + "denom": "node3token", + "amount": "1000000000" + }, + { + "denom": "stake", + "amount": "500000000" + } + ], + "sequence_number": "0", + "account_number": "0", + "original_vesting": [], + "delegated_free": [], + "delegated_vesting": [], + "start_time": "0", + "end_time": "0", + "module_name": "", + "module_permissions": null + } + ]` + + require.NotPanics(t, func() { + genesisState = Migrate( + v036auth.GenesisState{ + Params: params, + }, + json.RawMessage(rawAccounts), + ) + }) + + require.Equal(t, genesisState, GenesisState{Params: params, Accounts: json.RawMessage(rawAccounts)}) +} diff --git a/x/genaccounts/doc.go b/x/genaccounts/doc.go index 764c6b697d54..ac2f1a8c1ad2 100644 --- a/x/genaccounts/doc.go +++ b/x/genaccounts/doc.go @@ -4,9 +4,9 @@ Package genaccounts is now deprecated. IMPORTANT: This module has been replaced by ADR 011: Generalize Module Accounts. The ADR can be found here: https://github.com/cosmos/cosmos-sdk/blob/master/docs/architecture/adr-011-generalize-genesis-accounts.md. -Genesis accounts that existed in the genesis application state under `genaccounts` -now exists under the x/auth module's genesis state under the `accounts` key. Migration -can be performed via x/auth/legacy/v0_38/migrate.go. In addition, because genesis +Genesis accounts that existed in the genesis application state under `app_state.accounts` +now exists under the x/auth module's genesis state under the `app_state.auth.accounts` key. +Migration can be performed via x/auth/legacy/v0_38/migrate.go. In addition, because genesis accounts are now generalized via an interface, it is now up to the application to define the concrete types and the respective client logic to add them to a genesis state/file. For an example implementation of the `add-genesis-account` command please diff --git a/x/genutil/client/cli/migrate.go b/x/genutil/client/cli/migrate.go index e1d8309230e2..fe616a3be8a5 100644 --- a/x/genutil/client/cli/migrate.go +++ b/x/genutil/client/cli/migrate.go @@ -15,10 +15,12 @@ import ( "github.com/cosmos/cosmos-sdk/version" extypes "github.com/cosmos/cosmos-sdk/x/genutil" v036 "github.com/cosmos/cosmos-sdk/x/genutil/legacy/v0_36" + v038 "github.com/cosmos/cosmos-sdk/x/genutil/legacy/v0_38" ) var migrationMap = extypes.MigrationMap{ "v0.36": v036.Migrate, + "v0.38": v038.Migrate, } const ( diff --git a/x/genutil/legacy/v0_36/migrate.go b/x/genutil/legacy/v0_36/migrate.go index 5ba4af490e36..2ec6d01a2a0a 100644 --- a/x/genutil/legacy/v0_36/migrate.go +++ b/x/genutil/legacy/v0_36/migrate.go @@ -20,10 +20,10 @@ import ( func Migrate(appState genutil.AppMap) genutil.AppMap { v034Codec := codec.New() codec.RegisterCrypto(v034Codec) + v034gov.RegisterCodec(v034Codec) v036Codec := codec.New() codec.RegisterCrypto(v036Codec) - v034gov.RegisterCodec(v034Codec) v036gov.RegisterCodec(v036Codec) // migrate genesis accounts state diff --git a/x/genutil/legacy/v0_38/migrate.go b/x/genutil/legacy/v0_38/migrate.go index 27fa2fd3a332..fef2091b43d1 100644 --- a/x/genutil/legacy/v0_38/migrate.go +++ b/x/genutil/legacy/v0_38/migrate.go @@ -4,27 +4,28 @@ import ( "github.com/cosmos/cosmos-sdk/codec" v036auth "github.com/cosmos/cosmos-sdk/x/auth/legacy/v0_36" v038auth "github.com/cosmos/cosmos-sdk/x/auth/legacy/v0_38" - v036genAccounts "github.com/cosmos/cosmos-sdk/x/genaccounts/legacy/v0_36" + v036genaccounts "github.com/cosmos/cosmos-sdk/x/genaccounts/legacy/v0_36" "github.com/cosmos/cosmos-sdk/x/genutil" ) // Migrate migrates exported state from v0.34 to a v0.36 genesis state. func Migrate(appState genutil.AppMap) genutil.AppMap { - // migrate genesis accounts state + v036Codec := codec.New() + codec.RegisterCrypto(v036Codec) v038Codec := codec.New() codec.RegisterCrypto(v038Codec) - if appState[v036genAccounts.ModuleName] != nil { - + if appState[v036genaccounts.ModuleName] != nil { var authGenState v036auth.GenesisState - v038Codec.MustUnmarshalJSON(appState[v036auth.ModuleName], &authGenState) + v036Codec.MustUnmarshalJSON(appState[v036auth.ModuleName], &authGenState) appState[v038auth.ModuleName] = v038Codec.MustMarshalJSON( - v038auth.Migrate(authGenState, appState[v036genAccounts.ModuleName]), + v038auth.Migrate(authGenState, appState[v036genaccounts.ModuleName]), ) - delete(appState, v036genAccounts.ModuleName) + // delete deprecated genaccounts genesis state + delete(appState, v036genaccounts.ModuleName) } return appState