Skip to content

Commit b23ae71

Browse files
feat(tokenfactory): burn native method (#1832)
* refactor: move Burn rpc method to x/tokenfactory * Update tx_msgs.go * feat: add burn native method to tokenfactory msg server * feat: add cli cmd * fix: validate msg * feat: add v1.2.0 upgrade handler * Update CHANGELOG.md * fix: register codec for MsgBurnNative * fix: test --------- Co-authored-by: Unique-Divine <[email protected]>
1 parent 18fcef1 commit b23ae71

File tree

16 files changed

+769
-293
lines changed

16 files changed

+769
-293
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
5656
- [#1804](https://github.com/NibiruChain/nibiru/pull/1804) - fix(inflation): update default parameters
5757
- [#1816](https://github.com/NibiruChain/nibiru/pull/1816) - fix(ibc): fix ibc transaction from wasm contract
5858
- [#1823](https://github.com/NibiruChain/nibiru/pull/1823) - feat(inflation): add burn method
59+
- [#1832](https://github.com/NibiruChain/nibiru/pull/1832) - feat(tokenfactory): add burn method for native tokens
5960

6061
#### Dapp modules: perp, spot, etc
6162

app/upgrades.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@ import (
77

88
"github.com/NibiruChain/nibiru/app/upgrades"
99
"github.com/NibiruChain/nibiru/app/upgrades/v1_1_0"
10+
"github.com/NibiruChain/nibiru/app/upgrades/v1_2_0"
1011
)
1112

1213
var Upgrades = []upgrades.Upgrade{
1314
v1_1_0.Upgrade,
15+
v1_2_0.Upgrade,
1416
}
1517

1618
func (app *NibiruApp) setupUpgrades() {

app/upgrades/v1_2_0/constants.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package v1_2_0
2+
3+
import (
4+
"github.com/cosmos/cosmos-sdk/store/types"
5+
sdk "github.com/cosmos/cosmos-sdk/types"
6+
"github.com/cosmos/cosmos-sdk/types/module"
7+
upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types"
8+
9+
"github.com/NibiruChain/nibiru/app/upgrades"
10+
)
11+
12+
const UpgradeName = "v1.2.0"
13+
14+
var Upgrade = upgrades.Upgrade{
15+
UpgradeName: UpgradeName,
16+
CreateUpgradeHandler: func(mm *module.Manager, cfg module.Configurator) upgradetypes.UpgradeHandler {
17+
return func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) {
18+
return mm.RunMigrations(ctx, cfg, fromVM)
19+
}
20+
},
21+
StoreUpgrades: types.StoreUpgrades{},
22+
}

proto/nibiru/inflation/v1/tx.proto

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,6 @@ service Msg {
1919
returns (MsgEditInflationParamsResponse) {
2020
option (google.api.http).post = "/nibiru/inflation/edit-inflation-params";
2121
};
22-
23-
rpc Burn(MsgBurn) returns (MsgBurnResponse) {
24-
option (google.api.http).post = "/nibiru/inflation/v1/burn";
25-
};
2622
}
2723

2824
// MsgToggleInflation defines a message to enable or disable inflation.

proto/nibiru/tokenfactory/v1/tx.proto

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ service Msg {
2424
rpc Burn(MsgBurn) returns (MsgBurnResponse);
2525
rpc SetDenomMetadata(MsgSetDenomMetadata)
2626
returns (MsgSetDenomMetadataResponse);
27+
28+
// burns a native token such as unibi
29+
rpc BurnNative(MsgBurnNative) returns (MsgBurnNativeResponse) {};
2730
}
2831

2932
// MsgCreateDenom: sdk.Msg that registers an a token factory denom.
@@ -114,3 +117,12 @@ message MsgSetDenomMetadata {
114117
}
115118

116119
message MsgSetDenomMetadataResponse {}
120+
121+
// Burn a native token such as unibi
122+
message MsgBurnNative {
123+
string sender = 1 [ (gogoproto.moretags) = "yaml:\"sender\"" ];
124+
cosmos.base.v1beta1.Coin coin = 2
125+
[ (gogoproto.moretags) = "yaml:\"coin\"", (gogoproto.nullable) = false ];
126+
}
127+
128+
message MsgBurnNativeResponse {}

x/inflation/keeper/msg_server.go

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -46,17 +46,3 @@ func (ms msgServer) ToggleInflation(
4646
resp = &types.MsgToggleInflationResponse{}
4747
return resp, err
4848
}
49-
50-
func (ms msgServer) Burn(
51-
goCtx context.Context, msg *types.MsgBurn,
52-
) (resp *types.MsgBurnResponse, err error) {
53-
ctx := sdk.UnwrapSDKContext(goCtx)
54-
55-
sender, err := sdk.AccAddressFromBech32(msg.Sender)
56-
if err != nil {
57-
return nil, err
58-
}
59-
60-
err = ms.Keeper.Burn(ctx, sdk.NewCoins(msg.Coin), sender)
61-
return &types.MsgBurnResponse{}, err
62-
}

x/inflation/keeper/msg_server_test.go

Lines changed: 0 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -70,45 +70,3 @@ func TestMsgEditInflationParams(t *testing.T) {
7070
params = app.InflationKeeper.GetParams(ctx)
7171
require.EqualValues(t, params.EpochsPerPeriod, 42)
7272
}
73-
74-
func TestMsgBurn(t *testing.T) {
75-
app, ctx := testapp.NewNibiruTestAppAndContext()
76-
sender := testutil.AccAddress()
77-
err := app.BankKeeper.MintCoins(ctx, types.ModuleName, sdk.NewCoins(sdk.NewCoin("unibi", sdk.NewInt(100))))
78-
require.NoError(t, err)
79-
err = app.BankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, sender, sdk.NewCoins(sdk.NewCoin("unibi", sdk.NewInt(100))))
80-
require.NoError(t, err)
81-
82-
msgServer := keeper.NewMsgServerImpl(app.InflationKeeper)
83-
84-
msg := types.MsgBurn{
85-
Sender: sender.String(),
86-
Coin: sdk.NewCoin("unibi", sdk.NewInt(100)),
87-
}
88-
89-
_, err = msgServer.Burn(ctx, &msg)
90-
require.NoError(t, err)
91-
supply := app.BankKeeper.GetSupply(ctx, "unibi")
92-
require.Equal(t, sdk.ZeroInt(), supply.Amount)
93-
}
94-
95-
func TestMsgBurn_NotEnoughCoins(t *testing.T) {
96-
app, ctx := testapp.NewNibiruTestAppAndContext()
97-
sender := testutil.AccAddress()
98-
err := app.BankKeeper.MintCoins(ctx, types.ModuleName, sdk.NewCoins(sdk.NewCoin("unibi", sdk.NewInt(100))))
99-
require.NoError(t, err)
100-
err = app.BankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, sender, sdk.NewCoins(sdk.NewCoin("unibi", sdk.NewInt(100))))
101-
require.NoError(t, err)
102-
103-
msgServer := keeper.NewMsgServerImpl(app.InflationKeeper)
104-
105-
msg := types.MsgBurn{
106-
Sender: sender.String(),
107-
Coin: sdk.NewCoin("unibi", sdk.NewInt(101)),
108-
}
109-
110-
_, err = msgServer.Burn(ctx, &msg)
111-
require.EqualError(t, err, "spendable balance 100unibi is smaller than 101unibi: insufficient funds")
112-
supply := app.BankKeeper.GetSupply(ctx, "unibi")
113-
require.Equal(t, sdk.NewInt(100), supply.Amount)
114-
}

x/inflation/types/tx.pb.go

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

0 commit comments

Comments
 (0)