Skip to content

Commit c6cb01e

Browse files
authored
removing map from burner and improving DS (#1230)
* removing map from burner and improving DS * adding getter for legacy history * improving DS
1 parent 0aca82e commit c6cb01e

22 files changed

+467
-796
lines changed

api/elys/burner/history.pulsar.go

Lines changed: 179 additions & 180 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/elys/burner/query.pulsar.go

Lines changed: 90 additions & 181 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

proto/elys/burner/history.proto

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
11
syntax = "proto3";
22
package elys.burner;
33

4+
import "gogoproto/gogo.proto";
5+
import "cosmos/base/v1beta1/coin.proto";
6+
47
option go_package = "github.com/elys-network/elys/x/burner/types";
58

69
message History {
7-
string timestamp = 1;
8-
string denom = 2;
9-
string amount = 3;
10+
// renaming the tags because its not being used till now anywhere, mainnet or
11+
// testnet or devnet
12+
uint64 block = 1;
13+
repeated cosmos.base.v1beta1.Coin burned_coins = 2 [
14+
(gogoproto.nullable) = false,
15+
(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"
16+
];
1017
}

proto/elys/burner/query.proto

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@ service Query {
2020

2121
// Queries a list of History items.
2222
rpc History(QueryGetHistoryRequest) returns (QueryGetHistoryResponse) {
23-
option (google.api.http).get =
24-
"/elys-network/elys/burner/history/{timestamp}/{denom}";
23+
option (google.api.http).get = "/elys-network/elys/burner/history/{block}";
2524
}
2625
rpc HistoryAll(QueryAllHistoryRequest) returns (QueryAllHistoryResponse) {
2726
option (google.api.http).get = "/elys-network/elys/burner/history";
@@ -37,10 +36,7 @@ message QueryParamsResponse {
3736
Params params = 1 [ (gogoproto.nullable) = false ];
3837
}
3938

40-
message QueryGetHistoryRequest {
41-
string timestamp = 1;
42-
string denom = 2;
43-
}
39+
message QueryGetHistoryRequest { uint64 block = 1; }
4440

4541
message QueryGetHistoryResponse {
4642
History history = 1 [ (gogoproto.nullable) = false ];

x/burner/autocli.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions {
2020
},
2121
{
2222
RpcMethod: "History",
23-
Use: "show-history [timestamp] [denom]]",
23+
Use: "show-history [block]",
2424
Short: "show a history",
25-
PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "timestamp"}, {ProtoField: "denom"}},
25+
PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "block"}},
2626
},
2727
{
2828
RpcMethod: "HistoryAll",

x/burner/genesis_test.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package burner_test
22

33
import (
4+
sdk "github.com/cosmos/cosmos-sdk/types"
45
"testing"
56

67
keepertest "github.com/elys-network/elys/testutil/keeper"
@@ -16,12 +17,12 @@ func TestGenesis(t *testing.T) {
1617

1718
HistoryList: []types.History{
1819
{
19-
Timestamp: "0",
20-
Denom: "0",
20+
Block: 1,
21+
BurnedCoins: sdk.Coins{sdk.NewInt64Coin("uusdc", 1)},
2122
},
2223
{
23-
Timestamp: "1",
24-
Denom: "1",
24+
Block: 2,
25+
BurnedCoins: sdk.Coins{sdk.NewInt64Coin("uatom", 1)},
2526
},
2627
},
2728
// this line is used by starport scaffolding # genesis/test/state

x/burner/keeper/burn.go

Lines changed: 19 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package keeper
22

33
import (
4+
"fmt"
45
sdk "github.com/cosmos/cosmos-sdk/types"
56
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
67
"github.com/elys-network/elys/x/burner/types"
@@ -14,61 +15,36 @@ func (k Keeper) ShouldBurnTokens(ctx sdk.Context, epochIdentifier string) bool {
1415

1516
// BurnTokensForAllDenoms burns tokens for all denominations
1617
func (k Keeper) BurnTokensForAllDenoms(ctx sdk.Context) error {
17-
balances := k.getPositiveBalances(ctx)
18-
for denom, balance := range balances {
19-
if err := k.burnTokensForDenom(ctx, balance, denom); err != nil {
20-
return err
21-
}
22-
}
23-
return nil
24-
}
2518

26-
func (k Keeper) getPositiveBalances(ctx sdk.Context) map[string]sdk.Coins {
2719
zeroAddress := types.GetZeroAddress()
28-
balances := make(map[string]sdk.Coins)
20+
coinsToBurn := sdk.NewCoins()
2921
k.bankKeeper.IterateAllDenomMetaData(ctx, func(metadata banktypes.Metadata) bool {
3022
// Get the balance of the zero address for this denom
3123
balance := k.bankKeeper.GetBalance(ctx, zeroAddress, metadata.Base)
3224
if balance.IsPositive() {
33-
balances[metadata.Base] = sdk.NewCoins(balance)
25+
coinsToBurn = coinsToBurn.Add(balance)
3426
}
3527
return false
3628
})
37-
return balances
38-
}
3929

40-
func (k Keeper) burnTokensForDenom(ctx sdk.Context, balance sdk.Coins, denom string) error {
41-
if err := k.sendCoinsFromZeroAddressToModule(ctx, balance); err != nil {
42-
k.Logger(ctx).Error("Error sending coins and burning tokens", "denom", denom, "error", err)
43-
return err
44-
}
45-
if err := k.burnCoins(ctx, balance); err != nil {
46-
k.Logger(ctx).Error("Error burning tokens", "denom", denom, "error", err)
47-
return err
48-
}
49-
k.Logger(ctx).Info("Burned tokens for denom", denom)
50-
51-
// check if balance has at least one coin
52-
if len(balance) == 0 {
53-
return nil
54-
}
30+
if !coinsToBurn.IsZero() {
31+
if err := k.bankKeeper.SendCoinsFromAccountToModule(ctx, zeroAddress, types.ModuleName, coinsToBurn); err != nil {
32+
k.Logger(ctx).Error(fmt.Sprintf("Error sending coins for burning tokens %s, err: %s", coinsToBurn.String(), err.Error()))
33+
return err
34+
}
35+
if err := k.bankKeeper.BurnCoins(ctx, types.ModuleName, coinsToBurn); err != nil {
36+
k.Logger(ctx).Error(fmt.Sprintf("Error burning tokens %s, err: %s", coinsToBurn.String(), err.Error()))
37+
return err
38+
}
39+
k.Logger(ctx).Info("Burned tokens %s", coinsToBurn.String())
5540

56-
// Record a history item
57-
history := types.History{
58-
Timestamp: ctx.BlockTime().String(),
59-
Denom: denom,
60-
Amount: balance[0].Amount.String(),
41+
// Record a history item
42+
history := types.History{
43+
Block: uint64(ctx.BlockHeight()),
44+
BurnedCoins: coinsToBurn,
45+
}
46+
k.SetHistory(ctx, history)
6147
}
62-
k.SetHistory(ctx, history)
6348

6449
return nil
6550
}
66-
67-
func (k Keeper) sendCoinsFromZeroAddressToModule(ctx sdk.Context, coins sdk.Coins) error {
68-
zeroAddress := types.GetZeroAddress()
69-
return k.bankKeeper.SendCoinsFromAccountToModule(ctx, zeroAddress, types.ModuleName, coins)
70-
}
71-
72-
func (k Keeper) burnCoins(ctx sdk.Context, coins sdk.Coins) error {
73-
return k.bankKeeper.BurnCoins(ctx, types.ModuleName, coins)
74-
}

x/burner/keeper/burn_test.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,9 @@ func TestBurnTokensForAllDenoms(t *testing.T) {
4848
bankKeeper.EXPECT().GetBalance(ctx, types.GetZeroAddress(), balances[0].denom).Return(sdk.NewCoin(balances[0].denom, math.NewInt(balances[0].amount))).Once()
4949
bankKeeper.EXPECT().GetBalance(ctx, types.GetZeroAddress(), balances[1].denom).Return(sdk.NewCoin(balances[1].denom, math.NewInt(balances[1].amount))).Once()
5050

51-
bankKeeper.EXPECT().SendCoinsFromAccountToModule(ctx, types.GetZeroAddress(), types.ModuleName, sdk.NewCoins(sdk.NewCoin(balances[0].denom, math.NewInt(balances[0].amount)))).Return(nil).Once()
52-
bankKeeper.EXPECT().SendCoinsFromAccountToModule(ctx, types.GetZeroAddress(), types.ModuleName, sdk.NewCoins(sdk.NewCoin(balances[1].denom, math.NewInt(balances[1].amount)))).Return(nil).Once()
51+
bankKeeper.EXPECT().SendCoinsFromAccountToModule(ctx, types.GetZeroAddress(), types.ModuleName, sdk.NewCoins(sdk.NewCoin(balances[0].denom, math.NewInt(balances[0].amount)), sdk.NewCoin(balances[1].denom, math.NewInt(balances[1].amount)))).Return(nil).Once()
5352

54-
bankKeeper.EXPECT().BurnCoins(ctx, types.ModuleName, sdk.NewCoins(sdk.NewCoin(balances[0].denom, math.NewInt(balances[0].amount)))).Return(nil)
55-
bankKeeper.EXPECT().BurnCoins(ctx, types.ModuleName, sdk.NewCoins(sdk.NewCoin(balances[1].denom, math.NewInt(balances[1].amount)))).Return(nil)
53+
bankKeeper.EXPECT().BurnCoins(ctx, types.ModuleName, sdk.NewCoins(sdk.NewCoin(balances[0].denom, math.NewInt(balances[0].amount)), sdk.NewCoin(balances[1].denom, math.NewInt(balances[1].amount)))).Return(nil)
5654

5755
// Burn the tokens
5856
err := k.BurnTokensForAllDenoms(ctx)

x/burner/keeper/history.go

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,26 +10,19 @@ import (
1010

1111
// SetHistory set a specific history in the store from its index
1212
func (k Keeper) SetHistory(ctx sdk.Context, history types.History) {
13-
store := prefix.NewStore(runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)), types.KeyPrefix(types.HistoryKeyPrefix))
13+
store := prefix.NewStore(runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)), types.HistoryKeyPrefix)
1414
b := k.cdc.MustMarshal(&history)
15-
store.Set(types.HistoryKey(
16-
history.Timestamp,
17-
history.Denom,
18-
), b)
15+
store.Set(types.GetHistoryKey(history.Block), b)
1916
}
2017

2118
// GetHistory returns a history from its index
2219
func (k Keeper) GetHistory(
2320
ctx sdk.Context,
24-
timestamp string,
25-
denom string,
21+
block uint64,
2622
) (val types.History, found bool) {
27-
store := prefix.NewStore(runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)), types.KeyPrefix(types.HistoryKeyPrefix))
23+
store := prefix.NewStore(runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)), types.HistoryKeyPrefix)
2824

29-
b := store.Get(types.HistoryKey(
30-
timestamp,
31-
denom,
32-
))
25+
b := store.Get(types.GetHistoryKey(block))
3326
if b == nil {
3427
return val, false
3528
}
@@ -41,19 +34,15 @@ func (k Keeper) GetHistory(
4134
// RemoveHistory removes a history from the store
4235
func (k Keeper) RemoveHistory(
4336
ctx sdk.Context,
44-
timestamp string,
45-
denom string,
37+
block uint64,
4638
) {
47-
store := prefix.NewStore(runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)), types.KeyPrefix(types.HistoryKeyPrefix))
48-
store.Delete(types.HistoryKey(
49-
timestamp,
50-
denom,
51-
))
39+
store := prefix.NewStore(runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)), types.HistoryKeyPrefix)
40+
store.Delete(types.GetHistoryKey(block))
5241
}
5342

5443
// GetAllHistory returns all history
5544
func (k Keeper) GetAllHistory(ctx sdk.Context) (list []types.History) {
56-
store := prefix.NewStore(runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)), types.KeyPrefix(types.HistoryKeyPrefix))
45+
store := prefix.NewStore(runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)), types.HistoryKeyPrefix)
5746
iterator := storetypes.KVStorePrefixIterator(store, []byte{})
5847

5948
defer iterator.Close()

x/burner/keeper/history_test.go

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package keeper_test
22

33
import (
4-
"strconv"
54
"testing"
65

76
sdk "github.com/cosmos/cosmos-sdk/types"
@@ -15,8 +14,8 @@ import (
1514
func createNHistory(keeper *keeper.Keeper, ctx sdk.Context, n int) []types.History {
1615
items := make([]types.History, n)
1716
for i := range items {
18-
items[i].Timestamp = strconv.Itoa(i)
19-
items[i].Denom = strconv.Itoa(i)
17+
items[i].Block = uint64(i)
18+
items[i].BurnedCoins = sdk.NewCoins(sdk.NewInt64Coin("uatom", int64(i)))
2019

2120
keeper.SetHistory(ctx, items[i])
2221
}
@@ -27,10 +26,7 @@ func TestHistoryGet(t *testing.T) {
2726
keeper, ctx, _ := keepertest.BurnerKeeper(t)
2827
items := createNHistory(keeper, ctx, 10)
2928
for _, item := range items {
30-
rst, found := keeper.GetHistory(ctx,
31-
item.Timestamp,
32-
item.Denom,
33-
)
29+
rst, found := keeper.GetHistory(ctx, item.Block)
3430
require.True(t, found)
3531
require.Equal(t,
3632
nullify.Fill(&item),
@@ -43,14 +39,8 @@ func TestHistoryRemove(t *testing.T) {
4339
keeper, ctx, _ := keepertest.BurnerKeeper(t)
4440
items := createNHistory(keeper, ctx, 10)
4541
for _, item := range items {
46-
keeper.RemoveHistory(ctx,
47-
item.Timestamp,
48-
item.Denom,
49-
)
50-
_, found := keeper.GetHistory(ctx,
51-
item.Timestamp,
52-
item.Denom,
53-
)
42+
keeper.RemoveHistory(ctx, item.Block)
43+
_, found := keeper.GetHistory(ctx, item.Block)
5444
require.False(t, found)
5545
}
5646
}

0 commit comments

Comments
 (0)