From 006852a0f7d08dc76a0412142c0168d6bf064234 Mon Sep 17 00:00:00 2001 From: Jonathan Gimeno Date: Mon, 22 Mar 2021 17:50:02 +0100 Subject: [PATCH 01/13] temp commit --- x/bank/keeper/keeper.go | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/x/bank/keeper/keeper.go b/x/bank/keeper/keeper.go index 305665ee506f..8e5da2ab3e97 100644 --- a/x/bank/keeper/keeper.go +++ b/x/bank/keeper/keeper.go @@ -404,10 +404,11 @@ func (k BaseKeeper) BurnCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) } // update total supply - supply := k.GetTotalSupply(ctx) - supply = supply.Sub(amt) - - k.setSupply(ctx, supply) + for _, sa := range amt { + supply := k.GetSupply(ctx, sa.GetDenom()) + supply = supply.Sub(sa) + k.setCoinSupply(ctx, supply) + } logger := k.Logger(ctx) logger.Info("burned tokens from module account", "amount", amt.String(), "from", moduleName) @@ -420,6 +421,14 @@ func (k BaseKeeper) BurnCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) return nil } +func (k BaseKeeper) setCoinSupply(ctx sdk.Context, coin sdk.Coin) { + store := ctx.KVStore(k.storeKey) + supplyStore := prefix.NewStore(store, types.SupplyKey) + + bz := k.cdc.MustMarshalBinaryBare(&coin) + supplyStore.Set([]byte(coin.GetDenom()), bz) +} + func (k BaseKeeper) trackDelegation(ctx sdk.Context, addr sdk.AccAddress, balance, amt sdk.Coins) error { acc := k.ak.GetAccount(ctx, addr) if acc == nil { From 34c1bf8f30990996a9ecf6ceba7c98581b8bf55f Mon Sep 17 00:00:00 2001 From: Jonathan Gimeno Date: Mon, 22 Mar 2021 18:03:48 +0100 Subject: [PATCH 02/13] remove set supply --- x/bank/keeper/genesis.go | 4 ++- x/bank/keeper/keeper.go | 63 ++++++++++++---------------------------- 2 files changed, 21 insertions(+), 46 deletions(-) diff --git a/x/bank/keeper/genesis.go b/x/bank/keeper/genesis.go index dc73ae0b0632..24b9e2dd10cd 100644 --- a/x/bank/keeper/genesis.go +++ b/x/bank/keeper/genesis.go @@ -31,7 +31,9 @@ func (k BaseKeeper) InitGenesis(ctx sdk.Context, genState *types.GenesisState) { genState.Supply = totalSupply } - k.setSupply(ctx, genState.Supply) + for _, supply := range genState.GetSupply() { + k.setSupply(ctx, supply) + } for _, meta := range genState.DenomMetadata { k.SetDenomMetaData(ctx, meta) diff --git a/x/bank/keeper/keeper.go b/x/bank/keeper/keeper.go index 8e5da2ab3e97..10cd5b0430e4 100644 --- a/x/bank/keeper/keeper.go +++ b/x/bank/keeper/keeper.go @@ -184,33 +184,6 @@ func (k BaseKeeper) GetSupply(ctx sdk.Context, denom string) sdk.Coin { return coin } -// SetSupply sets the Supply to store -func (k BaseKeeper) setSupply(ctx sdk.Context, supply sdk.Coins) { - store := ctx.KVStore(k.storeKey) - supplyStore := prefix.NewStore(store, types.SupplyKey) - - var newSupply []sdk.Coin - storeSupply := k.GetTotalSupply(ctx) - - // update supply for coins which have non zero amount - for _, coin := range storeSupply { - if supply.AmountOf(coin.Denom).IsZero() { - zeroCoin := &sdk.Coin{ - Denom: coin.Denom, - Amount: sdk.NewInt(0), - } - bz := k.cdc.MustMarshalBinaryBare(zeroCoin) - supplyStore.Set([]byte(coin.Denom), bz) - } - } - newSupply = append(newSupply, supply...) - - for i := range newSupply { - bz := k.cdc.MustMarshalBinaryBare(&supply[i]) - supplyStore.Set([]byte(supply[i].Denom), bz) - } -} - // GetDenomMetaData retrieves the denomination metadata func (k BaseKeeper) GetDenomMetaData(ctx sdk.Context, denom string) (types.Metadata, bool) { store := ctx.KVStore(k.storeKey) @@ -354,7 +327,7 @@ func (k BaseKeeper) UndelegateCoinsFromModuleToAccount( // MintCoins creates new coins from thin air and adds it to the module account. // It will panic if the module account does not exist or is unauthorized. -func (k BaseKeeper) MintCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) error { +func (k BaseKeeper) MintCoins(ctx sdk.Context, moduleName string, amounts sdk.Coins) error { acc := k.ak.GetModuleAccount(ctx, moduleName) if acc == nil { panic(sdkerrors.Wrapf(sdkerrors.ErrUnknownAddress, "module account %s does not exist", moduleName)) @@ -364,23 +337,24 @@ func (k BaseKeeper) MintCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) panic(sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, "module account %s does not have permissions to mint tokens", moduleName)) } - err := k.addCoins(ctx, acc.GetAddress(), amt) + err := k.addCoins(ctx, acc.GetAddress(), amounts) if err != nil { return err } // update total supply - supply := k.GetTotalSupply(ctx) - supply = supply.Add(amt...) - - k.setSupply(ctx, supply) + for _, amount := range amounts { + supply := k.GetSupply(ctx, amount.GetDenom()) + supply = supply.Add(amount) + k.setSupply(ctx, supply) + } logger := k.Logger(ctx) - logger.Info("minted coins from module account", "amount", amt.String(), "from", moduleName) + logger.Info("minted coins from module account", "amount", amounts.String(), "from", moduleName) // emit mint event ctx.EventManager().EmitEvent( - types.NewCoinMintEvent(acc.GetAddress(), amt), + types.NewCoinMintEvent(acc.GetAddress(), amounts), ) return nil @@ -388,7 +362,7 @@ func (k BaseKeeper) MintCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) // BurnCoins burns coins deletes coins from the balance of the module account. // It will panic if the module account does not exist or is unauthorized. -func (k BaseKeeper) BurnCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) error { +func (k BaseKeeper) BurnCoins(ctx sdk.Context, moduleName string, amounts sdk.Coins) error { acc := k.ak.GetModuleAccount(ctx, moduleName) if acc == nil { panic(sdkerrors.Wrapf(sdkerrors.ErrUnknownAddress, "module account %s does not exist", moduleName)) @@ -398,30 +372,29 @@ func (k BaseKeeper) BurnCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) panic(sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, "module account %s does not have permissions to burn tokens", moduleName)) } - err := k.subUnlockedCoins(ctx, acc.GetAddress(), amt) + err := k.subUnlockedCoins(ctx, acc.GetAddress(), amounts) if err != nil { return err } - // update total supply - for _, sa := range amt { - supply := k.GetSupply(ctx, sa.GetDenom()) - supply = supply.Sub(sa) - k.setCoinSupply(ctx, supply) + for _, amount := range amounts { + supply := k.GetSupply(ctx, amount.GetDenom()) + supply = supply.Sub(amount) + k.setSupply(ctx, supply) } logger := k.Logger(ctx) - logger.Info("burned tokens from module account", "amount", amt.String(), "from", moduleName) + logger.Info("burned tokens from module account", "amount", amounts.String(), "from", moduleName) // emit burn event ctx.EventManager().EmitEvent( - types.NewCoinBurnEvent(acc.GetAddress(), amt), + types.NewCoinBurnEvent(acc.GetAddress(), amounts), ) return nil } -func (k BaseKeeper) setCoinSupply(ctx sdk.Context, coin sdk.Coin) { +func (k BaseKeeper) setSupply(ctx sdk.Context, coin sdk.Coin) { store := ctx.KVStore(k.storeKey) supplyStore := prefix.NewStore(store, types.SupplyKey) From 9daa707b64c7790bb1ce90a4d41cdd5c4f6ba51d Mon Sep 17 00:00:00 2001 From: Jonathan Gimeno Date: Mon, 22 Mar 2021 20:24:52 +0100 Subject: [PATCH 03/13] fix supply --- .../746b6a4424a328627f9d10020d53a82765d6642a.address | 1 + client/keys/home/keyring-test/keyname1.info | 1 + x/bank/keeper/genesis.go | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 client/keys/home/keyring-test/746b6a4424a328627f9d10020d53a82765d6642a.address create mode 100644 client/keys/home/keyring-test/keyname1.info diff --git a/client/keys/home/keyring-test/746b6a4424a328627f9d10020d53a82765d6642a.address b/client/keys/home/keyring-test/746b6a4424a328627f9d10020d53a82765d6642a.address new file mode 100644 index 000000000000..6c440af4570a --- /dev/null +++ b/client/keys/home/keyring-test/746b6a4424a328627f9d10020d53a82765d6642a.address @@ -0,0 +1 @@ +eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyMS0wMy0yMiAyMDowNjoxMy4xMDk2ODYgKzAxMDAgQ0VUIG09KzUuMzYxNTU0MzIzIiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiVTRwX0lvcFk3c3BjZm92ciJ9.E4l5ZPpNFwHd0Dwy5HkiZRWqPrqyD-SsyaTxjRHnfALaT1xQmKWkNw.3a8Q0-19C-jb1Ilq.nF0Jtk4r68U1eWEV6Gzd2SikZl54FGsGCnc2h-b0M9_-0JVrZyxD-8Ckxwc2mKd4eksay0Aat73ZNyMTUdCYKSLoBzKWAIuPQrWSLRJiKblnrmB9R7RyiP-r1_jINtArkWF8-OUuycKWc6Soqr0lPqdW1afWWCix5UNpAQaQ5yF2AOktyWq-YhqUOT0f7lib-XmsdiSXRZaEbBwiLdDrDGEy0q88chAmuo0mx0tLY20UOO3GZFO33DU_.qdgpjKnTg6KT9yabAPmUKw \ No newline at end of file diff --git a/client/keys/home/keyring-test/keyname1.info b/client/keys/home/keyring-test/keyname1.info new file mode 100644 index 000000000000..ba307ee0c556 --- /dev/null +++ b/client/keys/home/keyring-test/keyname1.info @@ -0,0 +1 @@ +eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyMS0wMy0yMiAyMDowNjoxMy4wOTQzOSArMDEwMCBDRVQgbT0rNS4zNDYyNTc3NjMiLCJlbmMiOiJBMjU2R0NNIiwicDJjIjo4MTkyLCJwMnMiOiJ3ZXpqN3U0T2RlWGNmTWNlIn0.eLjyhU2hxfb2cxyxzq9mn3B4FjmipqWUuJxCv8Yye7jUGqWO3ukApg.i6wB6wyvKBrM2fMa.eWG-s2yVNfWqFQvqBNlCpWxxiQUIiCQic491HN-MQ5W-DhxAmdDVZQ4LSr2L3kmcF7A-Icl9UNYvgjtibNXyCk23_NqNvKGF5zxQwOrfnBfGbRylKuNcseyDn4lGwv66u7neCGyT2pYJv5_4Nrs9OwTKQTaymC_biXw96x2rotqupCE0LPCu6WQqhHz3OFgKVqkMHSjPU0y_pkeUVdzRw0o321kyZeWLua43Rt0x7i5etlmm3bdGe4q_JqMmqPTrWSyOoaML2feAqSO14ajHVPlNki0MymfC_tu7QhQnx-lrl2NyBwk1BUBtsTUao8jVK0_wsZXNfABQeESWv8Jd6fKhpFTajoIurjLmLIqFOw.uiifKMxDAPmNx5UY5eQZVg \ No newline at end of file diff --git a/x/bank/keeper/genesis.go b/x/bank/keeper/genesis.go index f83d53e5ce9b..375f44787dfa 100644 --- a/x/bank/keeper/genesis.go +++ b/x/bank/keeper/genesis.go @@ -31,7 +31,7 @@ func (k BaseKeeper) InitGenesis(ctx sdk.Context, genState *types.GenesisState) { panic(fmt.Errorf("genesis supply is incorrect, expected %v, got %v", genState.Supply, totalSupply)) } - for _, supply := range genState.GetSupply() { + for _, supply := range totalSupply { k.setSupply(ctx, supply) } From a00dd17492d2f8ad729043bfbaac7129fc295fb1 Mon Sep 17 00:00:00 2001 From: Jonathan Gimeno Date: Mon, 22 Mar 2021 20:25:17 +0100 Subject: [PATCH 04/13] remove keys --- .../746b6a4424a328627f9d10020d53a82765d6642a.address | 1 - client/keys/home/keyring-test/keyname1.info | 1 - 2 files changed, 2 deletions(-) delete mode 100644 client/keys/home/keyring-test/746b6a4424a328627f9d10020d53a82765d6642a.address delete mode 100644 client/keys/home/keyring-test/keyname1.info diff --git a/client/keys/home/keyring-test/746b6a4424a328627f9d10020d53a82765d6642a.address b/client/keys/home/keyring-test/746b6a4424a328627f9d10020d53a82765d6642a.address deleted file mode 100644 index 6c440af4570a..000000000000 --- a/client/keys/home/keyring-test/746b6a4424a328627f9d10020d53a82765d6642a.address +++ /dev/null @@ -1 +0,0 @@ -eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyMS0wMy0yMiAyMDowNjoxMy4xMDk2ODYgKzAxMDAgQ0VUIG09KzUuMzYxNTU0MzIzIiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiVTRwX0lvcFk3c3BjZm92ciJ9.E4l5ZPpNFwHd0Dwy5HkiZRWqPrqyD-SsyaTxjRHnfALaT1xQmKWkNw.3a8Q0-19C-jb1Ilq.nF0Jtk4r68U1eWEV6Gzd2SikZl54FGsGCnc2h-b0M9_-0JVrZyxD-8Ckxwc2mKd4eksay0Aat73ZNyMTUdCYKSLoBzKWAIuPQrWSLRJiKblnrmB9R7RyiP-r1_jINtArkWF8-OUuycKWc6Soqr0lPqdW1afWWCix5UNpAQaQ5yF2AOktyWq-YhqUOT0f7lib-XmsdiSXRZaEbBwiLdDrDGEy0q88chAmuo0mx0tLY20UOO3GZFO33DU_.qdgpjKnTg6KT9yabAPmUKw \ No newline at end of file diff --git a/client/keys/home/keyring-test/keyname1.info b/client/keys/home/keyring-test/keyname1.info deleted file mode 100644 index ba307ee0c556..000000000000 --- a/client/keys/home/keyring-test/keyname1.info +++ /dev/null @@ -1 +0,0 @@ -eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyMS0wMy0yMiAyMDowNjoxMy4wOTQzOSArMDEwMCBDRVQgbT0rNS4zNDYyNTc3NjMiLCJlbmMiOiJBMjU2R0NNIiwicDJjIjo4MTkyLCJwMnMiOiJ3ZXpqN3U0T2RlWGNmTWNlIn0.eLjyhU2hxfb2cxyxzq9mn3B4FjmipqWUuJxCv8Yye7jUGqWO3ukApg.i6wB6wyvKBrM2fMa.eWG-s2yVNfWqFQvqBNlCpWxxiQUIiCQic491HN-MQ5W-DhxAmdDVZQ4LSr2L3kmcF7A-Icl9UNYvgjtibNXyCk23_NqNvKGF5zxQwOrfnBfGbRylKuNcseyDn4lGwv66u7neCGyT2pYJv5_4Nrs9OwTKQTaymC_biXw96x2rotqupCE0LPCu6WQqhHz3OFgKVqkMHSjPU0y_pkeUVdzRw0o321kyZeWLua43Rt0x7i5etlmm3bdGe4q_JqMmqPTrWSyOoaML2feAqSO14ajHVPlNki0MymfC_tu7QhQnx-lrl2NyBwk1BUBtsTUao8jVK0_wsZXNfABQeESWv8Jd6fKhpFTajoIurjLmLIqFOw.uiifKMxDAPmNx5UY5eQZVg \ No newline at end of file From 5d5be8ca9219893200944449a83a4285fccc2a19 Mon Sep 17 00:00:00 2001 From: Jonathan Gimeno Date: Tue, 23 Mar 2021 11:19:04 +0100 Subject: [PATCH 05/13] improve supply set --- x/bank/keeper/genesis.go | 4 +--- x/bank/keeper/keeper.go | 17 +++++++++++------ 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/x/bank/keeper/genesis.go b/x/bank/keeper/genesis.go index 375f44787dfa..f0c680b24a74 100644 --- a/x/bank/keeper/genesis.go +++ b/x/bank/keeper/genesis.go @@ -31,9 +31,7 @@ func (k BaseKeeper) InitGenesis(ctx sdk.Context, genState *types.GenesisState) { panic(fmt.Errorf("genesis supply is incorrect, expected %v, got %v", genState.Supply, totalSupply)) } - for _, supply := range totalSupply { - k.setSupply(ctx, supply) - } + k.setSupply(ctx, totalSupply) for _, meta := range genState.DenomMetadata { k.SetDenomMetaData(ctx, meta) diff --git a/x/bank/keeper/keeper.go b/x/bank/keeper/keeper.go index 10cd5b0430e4..9476f4766da7 100644 --- a/x/bank/keeper/keeper.go +++ b/x/bank/keeper/keeper.go @@ -342,12 +342,13 @@ func (k BaseKeeper) MintCoins(ctx sdk.Context, moduleName string, amounts sdk.Co return err } - // update total supply + var newSupply sdk.Coins for _, amount := range amounts { supply := k.GetSupply(ctx, amount.GetDenom()) supply = supply.Add(amount) - k.setSupply(ctx, supply) + newSupply = append(newSupply, supply) } + k.setSupply(ctx, newSupply) logger := k.Logger(ctx) logger.Info("minted coins from module account", "amount", amounts.String(), "from", moduleName) @@ -377,11 +378,13 @@ func (k BaseKeeper) BurnCoins(ctx sdk.Context, moduleName string, amounts sdk.Co return err } + var newSupply sdk.Coins for _, amount := range amounts { supply := k.GetSupply(ctx, amount.GetDenom()) supply = supply.Sub(amount) - k.setSupply(ctx, supply) + newSupply = append(newSupply, supply) } + k.setSupply(ctx, newSupply) logger := k.Logger(ctx) logger.Info("burned tokens from module account", "amount", amounts.String(), "from", moduleName) @@ -394,12 +397,14 @@ func (k BaseKeeper) BurnCoins(ctx sdk.Context, moduleName string, amounts sdk.Co return nil } -func (k BaseKeeper) setSupply(ctx sdk.Context, coin sdk.Coin) { +func (k BaseKeeper) setSupply(ctx sdk.Context, coins sdk.Coins) { store := ctx.KVStore(k.storeKey) supplyStore := prefix.NewStore(store, types.SupplyKey) - bz := k.cdc.MustMarshalBinaryBare(&coin) - supplyStore.Set([]byte(coin.GetDenom()), bz) + for _, coin := range coins { + bz := k.cdc.MustMarshalBinaryBare(&coin) + supplyStore.Set([]byte(coin.GetDenom()), bz) + } } func (k BaseKeeper) trackDelegation(ctx sdk.Context, addr sdk.AccAddress, balance, amt sdk.Coins) error { From 174d9bfcce08c76bd61d446c0addc3eb8e9649ef Mon Sep 17 00:00:00 2001 From: Jonathan Gimeno Date: Tue, 23 Mar 2021 11:24:38 +0100 Subject: [PATCH 06/13] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e6231efc919d..ac2f73bd5575 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -84,6 +84,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ * (crypto/types) [\#8600](https://github.com/cosmos/cosmos-sdk/pull/8600) `CompactBitArray`: optimize the `NumTrueBitsBefore` method and add an `Equal` method. * (grpc) [\#8815](https://github.com/cosmos/cosmos-sdk/pull/8815) Add orderBy parameter to `TxsByEvents` endpoint. * (x/upgrade) [\#8743](https://github.com/cosmos/cosmos-sdk/pull/8743) Add tracking module versions as per ADR-041 +* (x/bank) [\#8950](https://github.com/cosmos/cosmos-sdk/pull/8950) Improve efficiency on supply updates. ### Bug Fixes From 9c33f457b3b8b3d6619e047ce050e8b83faaf531 Mon Sep 17 00:00:00 2001 From: Jonathan Gimeno Date: Tue, 23 Mar 2021 11:54:58 +0100 Subject: [PATCH 07/13] improve linter --- x/bank/keeper/keeper.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/x/bank/keeper/keeper.go b/x/bank/keeper/keeper.go index 9476f4766da7..9656aceaf67d 100644 --- a/x/bank/keeper/keeper.go +++ b/x/bank/keeper/keeper.go @@ -401,9 +401,9 @@ func (k BaseKeeper) setSupply(ctx sdk.Context, coins sdk.Coins) { store := ctx.KVStore(k.storeKey) supplyStore := prefix.NewStore(store, types.SupplyKey) - for _, coin := range coins { - bz := k.cdc.MustMarshalBinaryBare(&coin) - supplyStore.Set([]byte(coin.GetDenom()), bz) + for i := range coins { + bz := k.cdc.MustMarshalBinaryBare(&coins[i]) + supplyStore.Set([]byte(coins[i].GetDenom()), bz) } } From aed0e8c4dcf447f006d4609fcf932672e5b9b0ca Mon Sep 17 00:00:00 2001 From: Jonathan Gimeno Date: Tue, 23 Mar 2021 18:22:44 +0100 Subject: [PATCH 08/13] update setSupply to get only one coin --- x/bank/keeper/keeper.go | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/x/bank/keeper/keeper.go b/x/bank/keeper/keeper.go index 9656aceaf67d..53f60a4f7bb8 100644 --- a/x/bank/keeper/keeper.go +++ b/x/bank/keeper/keeper.go @@ -342,13 +342,11 @@ func (k BaseKeeper) MintCoins(ctx sdk.Context, moduleName string, amounts sdk.Co return err } - var newSupply sdk.Coins for _, amount := range amounts { supply := k.GetSupply(ctx, amount.GetDenom()) supply = supply.Add(amount) - newSupply = append(newSupply, supply) + k.setSupply(ctx, supply) } - k.setSupply(ctx, newSupply) logger := k.Logger(ctx) logger.Info("minted coins from module account", "amount", amounts.String(), "from", moduleName) @@ -378,13 +376,11 @@ func (k BaseKeeper) BurnCoins(ctx sdk.Context, moduleName string, amounts sdk.Co return err } - var newSupply sdk.Coins for _, amount := range amounts { supply := k.GetSupply(ctx, amount.GetDenom()) supply = supply.Sub(amount) - newSupply = append(newSupply, supply) + k.setSupply(ctx, supply) } - k.setSupply(ctx, newSupply) logger := k.Logger(ctx) logger.Info("burned tokens from module account", "amount", amounts.String(), "from", moduleName) @@ -397,14 +393,12 @@ func (k BaseKeeper) BurnCoins(ctx sdk.Context, moduleName string, amounts sdk.Co return nil } -func (k BaseKeeper) setSupply(ctx sdk.Context, coins sdk.Coins) { +func (k BaseKeeper) setSupply(ctx sdk.Context, coin sdk.Coin) { store := ctx.KVStore(k.storeKey) supplyStore := prefix.NewStore(store, types.SupplyKey) - for i := range coins { - bz := k.cdc.MustMarshalBinaryBare(&coins[i]) - supplyStore.Set([]byte(coins[i].GetDenom()), bz) - } + bz := k.cdc.MustMarshalBinaryBare(&coin) + supplyStore.Set([]byte(coin.GetDenom()), bz) } func (k BaseKeeper) trackDelegation(ctx sdk.Context, addr sdk.AccAddress, balance, amt sdk.Coins) error { From 0267d24e8ea0dba15921577875a695eb5939c0f9 Mon Sep 17 00:00:00 2001 From: Jonathan Gimeno Date: Tue, 23 Mar 2021 18:28:12 +0100 Subject: [PATCH 09/13] update genesis --- .../746b6a4424a328627f9d10020d53a82765d6642a.address | 1 + client/keys/home/keyring-test/keyname1.info | 1 + x/bank/keeper/genesis.go | 4 +++- 3 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 client/keys/home/keyring-test/746b6a4424a328627f9d10020d53a82765d6642a.address create mode 100644 client/keys/home/keyring-test/keyname1.info diff --git a/client/keys/home/keyring-test/746b6a4424a328627f9d10020d53a82765d6642a.address b/client/keys/home/keyring-test/746b6a4424a328627f9d10020d53a82765d6642a.address new file mode 100644 index 000000000000..8fbb69224efe --- /dev/null +++ b/client/keys/home/keyring-test/746b6a4424a328627f9d10020d53a82765d6642a.address @@ -0,0 +1 @@ +eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyMS0wMy0yMyAxODoyNTowMy42OTE4NzI5MTEgKzAxMDAgQ0VUIG09KzMuNTk4ODM1MDQyIiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiNXdteGdZbHlESFRCZmxZNSJ9.AlHgWZixs1zPIlCw9RlJIVIXa4Wj36D1SSSIQ2e4wNcCE59G_VLVAA.qwTsfVevhZ6t38kw.fsBTJKWrA30PQQqiy2DDyD0Wh0qtuTyEs_Z8zQBFDHUkcGZemfDP4MSARiTESwMltKcWH-Y24HLDsBKRWgoW4OzRNpRmQNUabP7uY3n3cnWXqCEPhD6zw-rezVVGOJmlGU8cPkPmGnUN7sFD2hHPB5cdlWF6Pir1WnTzLNf_p3a5i04y8YfLi-Urn2qrBkIjUtpp2lBcmunEqmiNDlbxLGS-A_E-4K89-Mr2iRnKWJJnRXoHzNgt-7jt.yF3lXsAdd39DzNgFokARNA \ No newline at end of file diff --git a/client/keys/home/keyring-test/keyname1.info b/client/keys/home/keyring-test/keyname1.info new file mode 100644 index 000000000000..56d19bcca193 --- /dev/null +++ b/client/keys/home/keyring-test/keyname1.info @@ -0,0 +1 @@ +eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyMS0wMy0yMyAxODoyNTowMy42Nzc1Mjk2OTcgKzAxMDAgQ0VUIG09KzMuNTg0NDkxODM1IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiWDljZ1ktWXB2T1VuanRmMSJ9.Bw5qGvt0wuJn053oKB52gN_ww9H2lcsUR7wbPJ7AUMPJ2SE36NIxbQ.T9nKxPvr_tMRH_hq.CQ1bCHpavIxzbVkFaieKcjfGx5ADdRvhTiCxZHr-jpWQcEZuVBkCZ0MK0OGHq8JcwbjGWq27zB7KfoRYx11MkpXPWix0M7o_NLgw06Xg0VpFslhZlFNVfON5VRpU_uxnhTtDwZhqcyDq3-Z2mT-WMZBMN0psJ6YiVAOanRhqeDgT0DhV5OgRVnUdUyWS04M8AUz239vLaWxagf9Md2bljREbkHy0gVV5qenQ-tuJdSZhjuvA0NYq1hxRdJaLac2XsHMGoNPEU82vb2qMVpVMCgFGy8FEJiuBE5ZrqrBb3QDKL-hcMGTpWpeJROc_JG1DDqANqboI6hjKjVK4feCtNFr1Ql5s7YNBvYT6oML9xQ.--iMkqpaCj3SnQbxowtCcA \ No newline at end of file diff --git a/x/bank/keeper/genesis.go b/x/bank/keeper/genesis.go index f0c680b24a74..375f44787dfa 100644 --- a/x/bank/keeper/genesis.go +++ b/x/bank/keeper/genesis.go @@ -31,7 +31,9 @@ func (k BaseKeeper) InitGenesis(ctx sdk.Context, genState *types.GenesisState) { panic(fmt.Errorf("genesis supply is incorrect, expected %v, got %v", genState.Supply, totalSupply)) } - k.setSupply(ctx, totalSupply) + for _, supply := range totalSupply { + k.setSupply(ctx, supply) + } for _, meta := range genState.DenomMetadata { k.SetDenomMetaData(ctx, meta) From f265a5ad710eadab17a400cd4060bc6e7c8e545b Mon Sep 17 00:00:00 2001 From: Jonathan Gimeno Date: Tue, 23 Mar 2021 18:28:31 +0100 Subject: [PATCH 10/13] remove dirt --- .../746b6a4424a328627f9d10020d53a82765d6642a.address | 1 - client/keys/home/keyring-test/keyname1.info | 1 - 2 files changed, 2 deletions(-) delete mode 100644 client/keys/home/keyring-test/746b6a4424a328627f9d10020d53a82765d6642a.address delete mode 100644 client/keys/home/keyring-test/keyname1.info diff --git a/client/keys/home/keyring-test/746b6a4424a328627f9d10020d53a82765d6642a.address b/client/keys/home/keyring-test/746b6a4424a328627f9d10020d53a82765d6642a.address deleted file mode 100644 index 8fbb69224efe..000000000000 --- a/client/keys/home/keyring-test/746b6a4424a328627f9d10020d53a82765d6642a.address +++ /dev/null @@ -1 +0,0 @@ -eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyMS0wMy0yMyAxODoyNTowMy42OTE4NzI5MTEgKzAxMDAgQ0VUIG09KzMuNTk4ODM1MDQyIiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiNXdteGdZbHlESFRCZmxZNSJ9.AlHgWZixs1zPIlCw9RlJIVIXa4Wj36D1SSSIQ2e4wNcCE59G_VLVAA.qwTsfVevhZ6t38kw.fsBTJKWrA30PQQqiy2DDyD0Wh0qtuTyEs_Z8zQBFDHUkcGZemfDP4MSARiTESwMltKcWH-Y24HLDsBKRWgoW4OzRNpRmQNUabP7uY3n3cnWXqCEPhD6zw-rezVVGOJmlGU8cPkPmGnUN7sFD2hHPB5cdlWF6Pir1WnTzLNf_p3a5i04y8YfLi-Urn2qrBkIjUtpp2lBcmunEqmiNDlbxLGS-A_E-4K89-Mr2iRnKWJJnRXoHzNgt-7jt.yF3lXsAdd39DzNgFokARNA \ No newline at end of file diff --git a/client/keys/home/keyring-test/keyname1.info b/client/keys/home/keyring-test/keyname1.info deleted file mode 100644 index 56d19bcca193..000000000000 --- a/client/keys/home/keyring-test/keyname1.info +++ /dev/null @@ -1 +0,0 @@ -eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJjcmVhdGVkIjoiMjAyMS0wMy0yMyAxODoyNTowMy42Nzc1Mjk2OTcgKzAxMDAgQ0VUIG09KzMuNTg0NDkxODM1IiwiZW5jIjoiQTI1NkdDTSIsInAyYyI6ODE5MiwicDJzIjoiWDljZ1ktWXB2T1VuanRmMSJ9.Bw5qGvt0wuJn053oKB52gN_ww9H2lcsUR7wbPJ7AUMPJ2SE36NIxbQ.T9nKxPvr_tMRH_hq.CQ1bCHpavIxzbVkFaieKcjfGx5ADdRvhTiCxZHr-jpWQcEZuVBkCZ0MK0OGHq8JcwbjGWq27zB7KfoRYx11MkpXPWix0M7o_NLgw06Xg0VpFslhZlFNVfON5VRpU_uxnhTtDwZhqcyDq3-Z2mT-WMZBMN0psJ6YiVAOanRhqeDgT0DhV5OgRVnUdUyWS04M8AUz239vLaWxagf9Md2bljREbkHy0gVV5qenQ-tuJdSZhjuvA0NYq1hxRdJaLac2XsHMGoNPEU82vb2qMVpVMCgFGy8FEJiuBE5ZrqrBb3QDKL-hcMGTpWpeJROc_JG1DDqANqboI6hjKjVK4feCtNFr1Ql5s7YNBvYT6oML9xQ.--iMkqpaCj3SnQbxowtCcA \ No newline at end of file From 0bdc7a33619a2ccbe4dcec70fd5c0d89c8c91ae2 Mon Sep 17 00:00:00 2001 From: Jonathan Gimeno Date: Tue, 23 Mar 2021 19:01:56 +0100 Subject: [PATCH 11/13] save only supply --- x/bank/keeper/keeper.go | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/x/bank/keeper/keeper.go b/x/bank/keeper/keeper.go index 53f60a4f7bb8..48c4866a0b18 100644 --- a/x/bank/keeper/keeper.go +++ b/x/bank/keeper/keeper.go @@ -175,13 +175,15 @@ func (k BaseKeeper) GetSupply(ctx sdk.Context, denom string) sdk.Coin { } } - var coin sdk.Coin - err := k.cdc.UnmarshalBinaryBare(bz, &coin) - if err != nil { - panic(err) + amount, ok := sdk.NewIntFromString(string(bz)) + if !ok { + panic("unexpected supply") } - return coin + return sdk.Coin{ + Denom: denom, + Amount: amount, + } } // GetDenomMetaData retrieves the denomination metadata @@ -397,8 +399,7 @@ func (k BaseKeeper) setSupply(ctx sdk.Context, coin sdk.Coin) { store := ctx.KVStore(k.storeKey) supplyStore := prefix.NewStore(store, types.SupplyKey) - bz := k.cdc.MustMarshalBinaryBare(&coin) - supplyStore.Set([]byte(coin.GetDenom()), bz) + supplyStore.Set([]byte(coin.GetDenom()), []byte(coin.Amount.String())) } func (k BaseKeeper) trackDelegation(ctx sdk.Context, addr sdk.AccAddress, balance, amt sdk.Coins) error { @@ -439,8 +440,15 @@ func (k BaseViewKeeper) IterateTotalSupply(ctx sdk.Context, cb func(sdk.Coin) bo defer iterator.Close() for ; iterator.Valid(); iterator.Next() { - var balance sdk.Coin - k.cdc.MustUnmarshalBinaryBare(iterator.Value(), &balance) + amount, ok := sdk.NewIntFromString(string(iterator.Value())) + if !ok { + panic("unexpected supply") + } + + balance := sdk.Coin{ + Denom: string(iterator.Key()), + Amount: amount, + } if cb(balance) { break From 34666bc348c5feb6ab77e0ad4c83d033d480655e Mon Sep 17 00:00:00 2001 From: Jonathan Gimeno Date: Tue, 23 Mar 2021 19:08:16 +0100 Subject: [PATCH 12/13] go fmt --- x/bank/keeper/keeper.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/bank/keeper/keeper.go b/x/bank/keeper/keeper.go index 48c4866a0b18..7a5f1c45d2ad 100644 --- a/x/bank/keeper/keeper.go +++ b/x/bank/keeper/keeper.go @@ -446,7 +446,7 @@ func (k BaseViewKeeper) IterateTotalSupply(ctx sdk.Context, cb func(sdk.Coin) bo } balance := sdk.Coin{ - Denom: string(iterator.Key()), + Denom: string(iterator.Key()), Amount: amount, } From f223213c9ba82d8e99754c313438f52c234cf8cb Mon Sep 17 00:00:00 2001 From: Jonathan Gimeno Date: Wed, 24 Mar 2021 15:58:50 +0100 Subject: [PATCH 13/13] update rosetta test bootstrap --- contrib/rosetta/configuration/bootstrap.json | 2 +- contrib/rosetta/node/data.tar.gz | Bin 35433 -> 37459 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/rosetta/configuration/bootstrap.json b/contrib/rosetta/configuration/bootstrap.json index f75c7ec145bb..f08dae661fa1 100644 --- a/contrib/rosetta/configuration/bootstrap.json +++ b/contrib/rosetta/configuration/bootstrap.json @@ -1,7 +1,7 @@ [ { "account_identifier": { - "address":"cosmos1ujtnemf6jmfm995j000qdry064n5lq854gfe3j" + "address":"cosmos1gykh2dsytj0lde8wr9msl9xd2nyj88duvmsnn7" }, "currency":{ "symbol":"stake", diff --git a/contrib/rosetta/node/data.tar.gz b/contrib/rosetta/node/data.tar.gz index 987bb88b33acaa6ad7324d25828ba755dd9bad29..342100ebccfd780cdb5c9e1077febe548524692b 100644 GIT binary patch literal 37459 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 literal 35433 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