From cce412ac31f17c7043d67026da00f9b86a0a5766 Mon Sep 17 00:00:00 2001 From: Reece Williams Date: Sat, 10 Sep 2022 20:57:36 -0500 Subject: [PATCH 1/6] genaccount --append more coins in genesis --- simapp/simd/cmd/genaccounts.go | 62 +++++++++++++++++++++++----------- 1 file changed, 43 insertions(+), 19 deletions(-) diff --git a/simapp/simd/cmd/genaccounts.go b/simapp/simd/cmd/genaccounts.go index 97275a41fc43..3893d4529b2f 100644 --- a/simapp/simd/cmd/genaccounts.go +++ b/simapp/simd/cmd/genaccounts.go @@ -24,6 +24,7 @@ const ( flagVestingStart = "vesting-start-time" flagVestingEnd = "vesting-end-time" flagVestingAmt = "vesting-amount" + flagAppendMode = "append" ) // AddGenesisAccountCmd returns add-genesis-account cobra Command. @@ -130,38 +131,60 @@ contain valid denominations. Accounts may optionally be supplied with vesting pa return fmt.Errorf("failed to get accounts from any: %w", err) } + bankGenState := banktypes.GetGenesisStateFromAppState(clientCtx.Codec, appState) if accs.Contains(addr) { - return fmt.Errorf("cannot add account at existing address %s", addr) - } + appendflag, _ := cmd.Flags().GetBool(flagAppendMode) + if !appendflag { + return fmt.Errorf("cannot add account at existing address %s", addr) + } - // Add the new account to the set of genesis accounts and sanitize the - // accounts afterwards. - accs = append(accs, genAccount) - accs = authtypes.SanitizeGenesisAccounts(accs) + genesisB := banktypes.GetGenesisStateFromAppState(clientCtx.Codec, appState) + for idx, acc := range genesisB.Balances { + if acc.Address != addr.String() { + continue + } - genAccs, err := authtypes.PackAccounts(accs) - if err != nil { - return fmt.Errorf("failed to convert accounts into any's: %w", err) - } - authGenState.Accounts = genAccs + // Create a new coins based on the accounts old coins + new coin appended + new_coins, err := sdk.ParseCoinsNormalized(acc.Coins.Add(coins...).String()) + if err != nil { + return fmt.Errorf("failed to parse coins: %w", err) + } - authGenStateBz, err := clientCtx.Codec.MarshalJSON(&authGenState) - if err != nil { - return fmt.Errorf("failed to marshal auth genesis state: %w", err) - } + // deletes the account from bank balances + bankGenState.Balances = append(bankGenState.Balances[:idx], bankGenState.Balances[idx+1:]...) - appState[authtypes.ModuleName] = authGenStateBz + // append the updated account balance to bankGenState.Balances + bankGenState.Balances = append(bankGenState.Balances, banktypes.Balance{Address: addr.String(), Coins: new_coins.Sort()}) + break + } + } else { + // Add the new account to the set of genesis accounts and sanitize the accounts afterwards. + accs = append(accs, genAccount) + accs = authtypes.SanitizeGenesisAccounts(accs) + + genAccs, err := authtypes.PackAccounts(accs) + if err != nil { + return fmt.Errorf("failed to convert accounts into any's: %w", err) + } + authGenState.Accounts = genAccs + + authGenStateBz, err := clientCtx.Codec.MarshalJSON(&authGenState) + if err != nil { + return fmt.Errorf("failed to marshal auth genesis state: %w", err) + } + appState[authtypes.ModuleName] = authGenStateBz + + bankGenState.Balances = append(bankGenState.Balances, balances) + } - bankGenState := banktypes.GetGenesisStateFromAppState(clientCtx.Codec, appState) - bankGenState.Balances = append(bankGenState.Balances, balances) bankGenState.Balances = banktypes.SanitizeGenesisBalances(bankGenState.Balances) + bankGenState.Supply = bankGenState.Supply.Add(balances.Coins...) bankGenStateBz, err := clientCtx.Codec.MarshalJSON(bankGenState) if err != nil { return fmt.Errorf("failed to marshal bank genesis state: %w", err) } - appState[banktypes.ModuleName] = bankGenStateBz appStateJSON, err := json.Marshal(appState) @@ -179,6 +202,7 @@ contain valid denominations. Accounts may optionally be supplied with vesting pa cmd.Flags().String(flagVestingAmt, "", "amount of coins for vesting accounts") cmd.Flags().Int64(flagVestingStart, 0, "schedule start time (unix epoch) for vesting accounts") cmd.Flags().Int64(flagVestingEnd, 0, "schedule end time (unix epoch) for vesting accounts") + cmd.Flags().Bool(flagAppendMode, false, "append the coins to an account already in the genesis.json file") flags.AddQueryFlagsToCmd(cmd) return cmd From a06864f99221668854e7f83a863af942373606b3 Mon Sep 17 00:00:00 2001 From: Reece Williams Date: Sat, 10 Sep 2022 21:45:18 -0500 Subject: [PATCH 2/6] Changelog: Improvements 13233 --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 90c39d1075ef..1b4e4e08b3c9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -82,6 +82,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ * [#12398](https://github.com/cosmos/cosmos-sdk/issues/12398) Refactor all `x` modules to unit-test via mocks and decouple `simapp`. * [#13144](https://github.com/cosmos/cosmos-sdk/pull/13144) Add validator distribution info grpc gateway get endpoint. * [#13168](https://github.com/cosmos/cosmos-sdk/pull/13168) Migrate tendermintdev/proto-builder to ghcr.io. New image `ghcr.io/cosmos/proto-builder:0.8` +* [#13233](https://github.com/cosmos/cosmos-sdk/pull/13233) Add `--append` to `add-genesis-account` sub-command to append new tokens after an account is already created. ### State Machine Breaking From d3a85ac02746dc0017ffcba889f60d2f20d01811 Mon Sep 17 00:00:00 2001 From: Reece Williams Date: Sat, 10 Sep 2022 22:53:16 -0500 Subject: [PATCH 3/6] sets the account balance directly by index --- simapp/simd/cmd/genaccounts.go | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/simapp/simd/cmd/genaccounts.go b/simapp/simd/cmd/genaccounts.go index 3893d4529b2f..7acc162b6e66 100644 --- a/simapp/simd/cmd/genaccounts.go +++ b/simapp/simd/cmd/genaccounts.go @@ -150,11 +150,7 @@ contain valid denominations. Accounts may optionally be supplied with vesting pa return fmt.Errorf("failed to parse coins: %w", err) } - // deletes the account from bank balances - bankGenState.Balances = append(bankGenState.Balances[:idx], bankGenState.Balances[idx+1:]...) - - // append the updated account balance to bankGenState.Balances - bankGenState.Balances = append(bankGenState.Balances, banktypes.Balance{Address: addr.String(), Coins: new_coins.Sort()}) + bankGenState.Balances[idx] = banktypes.Balance{Address: addr.String(), Coins: new_coins.Sort()} break } } else { From 663f8c0e4e87171194d629ee4519ede1323cb7e9 Mon Sep 17 00:00:00 2001 From: Reece Williams Date: Mon, 12 Sep 2022 08:55:58 -0500 Subject: [PATCH 4/6] remove ParseCoinsNormalized & just append --- simapp/simd/cmd/genaccounts.go | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/simapp/simd/cmd/genaccounts.go b/simapp/simd/cmd/genaccounts.go index 7acc162b6e66..e33e4a793dcb 100644 --- a/simapp/simd/cmd/genaccounts.go +++ b/simapp/simd/cmd/genaccounts.go @@ -144,13 +144,8 @@ contain valid denominations. Accounts may optionally be supplied with vesting pa continue } - // Create a new coins based on the accounts old coins + new coin appended - new_coins, err := sdk.ParseCoinsNormalized(acc.Coins.Add(coins...).String()) - if err != nil { - return fmt.Errorf("failed to parse coins: %w", err) - } - - bankGenState.Balances[idx] = banktypes.Balance{Address: addr.String(), Coins: new_coins.Sort()} + updated_coins := acc.Coins.Add(coins...).Sort() + bankGenState.Balances[idx] = banktypes.Balance{Address: addr.String(), Coins: updated_coins.Sort()} break } } else { From ab3a3e46d21b1f8f4779a90c7f9c8d8ee685a5d8 Mon Sep 17 00:00:00 2001 From: Reece Williams Date: Mon, 12 Sep 2022 08:58:22 -0500 Subject: [PATCH 5/6] Remove double sort --- simapp/simd/cmd/genaccounts.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/simapp/simd/cmd/genaccounts.go b/simapp/simd/cmd/genaccounts.go index e33e4a793dcb..bc20430a1526 100644 --- a/simapp/simd/cmd/genaccounts.go +++ b/simapp/simd/cmd/genaccounts.go @@ -144,7 +144,7 @@ contain valid denominations. Accounts may optionally be supplied with vesting pa continue } - updated_coins := acc.Coins.Add(coins...).Sort() + updated_coins := acc.Coins.Add(coins...) bankGenState.Balances[idx] = banktypes.Balance{Address: addr.String(), Coins: updated_coins.Sort()} break } From b04639e91df9dd932d74271554c8281c965b7241 Mon Sep 17 00:00:00 2001 From: Reece Williams <31943163+Reecepbcups@users.noreply.github.com> Date: Mon, 12 Sep 2022 10:20:44 -0500 Subject: [PATCH 6/6] Update simapp/simd/cmd/genaccounts.go to go format Co-authored-by: Aleksandr Bezobchuk --- simapp/simd/cmd/genaccounts.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/simapp/simd/cmd/genaccounts.go b/simapp/simd/cmd/genaccounts.go index bc20430a1526..862a061a4e20 100644 --- a/simapp/simd/cmd/genaccounts.go +++ b/simapp/simd/cmd/genaccounts.go @@ -144,8 +144,8 @@ contain valid denominations. Accounts may optionally be supplied with vesting pa continue } - updated_coins := acc.Coins.Add(coins...) - bankGenState.Balances[idx] = banktypes.Balance{Address: addr.String(), Coins: updated_coins.Sort()} + updatedCoins := acc.Coins.Add(coins...) + bankGenState.Balances[idx] = banktypes.Balance{Address: addr.String(), Coins: updatedCoins.Sort()} break } } else {