Skip to content
This repository was archived by the owner on Mar 24, 2025. It is now read-only.

Commit 507a8b2

Browse files
chenyaoyAlex | Skip
and
Alex | Skip
authored
feat: Allow market authority to remove disabled markets (#838)
Co-authored-by: Alex | Skip <[email protected]>
1 parent 3c992f9 commit 507a8b2

File tree

7 files changed

+96
-100
lines changed

7 files changed

+96
-100
lines changed

proto/connect/marketmap/v2/tx.proto

+4-4
Original file line numberDiff line numberDiff line change
@@ -143,11 +143,11 @@ message MsgRemoveMarketAuthoritiesResponse {}
143143
// MsgRemoveMarkets defines the Msg/RemoveMarkets request type. It contains the
144144
// new markets to be removed from the market map.
145145
message MsgRemoveMarkets {
146-
option (cosmos.msg.v1.signer) = "admin";
146+
option (cosmos.msg.v1.signer) = "authority";
147147

148-
// Admin defines the authority that is the x/marketmap
149-
// Admin account. This account is set in the module parameters.
150-
string admin = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ];
148+
// Authority is the signer of this transaction. This authority must be
149+
// authorized by the module to execute the message.
150+
string authority = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ];
151151

152152
// Markets is the list of markets to remove.
153153
repeated string markets = 2;

tests/integration/connect_setup.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -480,8 +480,8 @@ func (s *ConnectIntegrationSuite) RemoveMarket(
480480
}
481481

482482
msg := &mmtypes.MsgRemoveMarkets{
483-
Admin: s.user.FormattedAddress(),
484-
Markets: marketString,
483+
Authority: s.user.FormattedAddress(),
484+
Markets: marketString,
485485
}
486486

487487
tx := CreateTx(s.T(), s.chain, s.user, gasPrice, msg)

x/marketmap/keeper/msg_server.go

+3-7
Original file line numberDiff line numberDiff line change
@@ -263,13 +263,9 @@ func (ms msgServer) RemoveMarkets(
263263

264264
ctx := sdk.UnwrapSDKContext(goCtx)
265265

266-
params, err := ms.k.GetParams(ctx)
267-
if err != nil {
268-
return nil, err
269-
}
270-
271-
if msg.Admin != params.Admin {
272-
return nil, fmt.Errorf("request admin %s does not match module admin %s", msg.Admin, params.Admin)
266+
// perform basic msg validity checks
267+
if err := ms.verifyMarketAuthorities(ctx, msg); err != nil {
268+
return nil, fmt.Errorf("unable to verify market authorities: %w", err)
273269
}
274270

275271
deletedMarkets := make([]string, 0, len(msg.Markets))

x/marketmap/keeper/msg_server_test.go

+17-17
Original file line numberDiff line numberDiff line change
@@ -531,7 +531,7 @@ func (s *KeeperTestSuite) TestMsgServerRemoveMarkets() {
531531

532532
s.Run("unable to process for invalid authority", func() {
533533
msg := &types.MsgRemoveMarkets{
534-
Admin: "invalid",
534+
Authority: "invalid",
535535
}
536536
resp, err := msgServer.RemoveMarkets(s.ctx, msg)
537537
s.Require().Error(err)
@@ -540,8 +540,8 @@ func (s *KeeperTestSuite) TestMsgServerRemoveMarkets() {
540540

541541
s.Run("only remove existing markets - no error", func() {
542542
msg := &types.MsgRemoveMarkets{
543-
Admin: s.admin,
544-
Markets: []string{"BTC/USD", "ETH/USDT"},
543+
Authority: s.marketAuthorities[0],
544+
Markets: []string{"BTC/USD", "ETH/USDT"},
545545
}
546546
resp, err := msgServer.RemoveMarkets(s.ctx, msg)
547547
s.Require().NoError(err)
@@ -550,8 +550,8 @@ func (s *KeeperTestSuite) TestMsgServerRemoveMarkets() {
550550

551551
s.Run("unable to remove non-existent market - single", func() {
552552
msg := &types.MsgRemoveMarkets{
553-
Admin: s.admin,
554-
Markets: []string{"BTC/USD"},
553+
Authority: s.marketAuthorities[0],
554+
Markets: []string{"BTC/USD"},
555555
}
556556
resp, err := msgServer.RemoveMarkets(s.ctx, msg)
557557
s.Require().NoError(err)
@@ -563,8 +563,8 @@ func (s *KeeperTestSuite) TestMsgServerRemoveMarkets() {
563563
copyBTC.Ticker.Enabled = false
564564

565565
msg := &types.MsgRemoveMarkets{
566-
Admin: s.admin,
567-
Markets: []string{copyBTC.Ticker.String()},
566+
Authority: s.marketAuthorities[0],
567+
Markets: []string{copyBTC.Ticker.String()},
568568
}
569569

570570
err := s.keeper.CreateMarket(s.ctx, copyBTC)
@@ -587,8 +587,8 @@ func (s *KeeperTestSuite) TestMsgServerRemoveMarkets() {
587587
s.Require().NoError(err)
588588

589589
msg := &types.MsgRemoveMarkets{
590-
Admin: s.admin,
591-
Markets: []string{copyBTC.Ticker.String()},
590+
Authority: s.marketAuthorities[0],
591+
Markets: []string{copyBTC.Ticker.String()},
592592
}
593593

594594
resp, err := msgServer.RemoveMarkets(s.ctx, msg)
@@ -638,13 +638,13 @@ func (s *KeeperTestSuite) TestMsgServerRemoveMarkets() {
638638
s.Require().NoError(err)
639639

640640
msgRemoveBTC := &types.MsgRemoveMarkets{
641-
Admin: s.admin,
642-
Markets: []string{copyBTC.Ticker.String()},
641+
Authority: s.marketAuthorities[0],
642+
Markets: []string{copyBTC.Ticker.String()},
643643
}
644644

645645
msgRemoveETH := &types.MsgRemoveMarkets{
646-
Admin: s.admin,
647-
Markets: []string{copyETH.Ticker.String()},
646+
Authority: s.marketAuthorities[0],
647+
Markets: []string{copyETH.Ticker.String()},
648648
}
649649

650650
resp, err := msgServer.RemoveMarkets(s.ctx, msgRemoveBTC)
@@ -673,8 +673,8 @@ func (s *KeeperTestSuite) TestMsgServerRemoveMarkets() {
673673
s.Require().NoError(err)
674674

675675
msg := &types.MsgRemoveMarkets{
676-
Admin: s.admin,
677-
Markets: []string{copyBTC.Ticker.String(), copyETH.Ticker.String()},
676+
Authority: s.marketAuthorities[0],
677+
Markets: []string{copyBTC.Ticker.String(), copyETH.Ticker.String()},
678678
}
679679

680680
resp, err := msgServer.RemoveMarkets(s.ctx, msg)
@@ -713,8 +713,8 @@ func (s *KeeperTestSuite) TestMsgServerRemoveMarkets() {
713713
s.Require().NoError(err)
714714

715715
msg := &types.MsgRemoveMarkets{
716-
Admin: s.admin,
717-
Markets: []string{copyBTC.Ticker.String(), copyETH.Ticker.String()},
716+
Authority: s.marketAuthorities[0],
717+
Markets: []string{copyBTC.Ticker.String(), copyETH.Ticker.String()},
718718
}
719719

720720
resp, err := msgServer.RemoveMarkets(s.ctx, msg)

x/marketmap/types/msg.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ func (m *MsgRemoveMarketAuthorities) ValidateBasic() error {
132132
// whether the signer is a valid acc-address.
133133
func (m *MsgRemoveMarkets) ValidateBasic() error {
134134
// validate signer address
135-
if _, err := sdk.AccAddressFromBech32(m.Admin); err != nil {
135+
if _, err := sdk.AccAddressFromBech32(m.Authority); err != nil {
136136
return err
137137
}
138138

x/marketmap/types/msg_test.go

+9-9
Original file line numberDiff line numberDiff line change
@@ -528,39 +528,39 @@ func TestValidateBasicMsgRemoveMarkets(t *testing.T) {
528528
{
529529
"if the Authority is not an acc-address - fail",
530530
types.MsgRemoveMarkets{
531-
Admin: "invalid",
531+
Authority: "invalid",
532532
},
533533
false,
534534
},
535535
{
536536
name: "invalid message (no markets) - fail",
537537
msg: types.MsgRemoveMarkets{
538-
Markets: nil,
539-
Admin: sample.Address(rng),
538+
Markets: nil,
539+
Authority: sample.Address(rng),
540540
},
541541
expectPass: false,
542542
},
543543
{
544544
name: "valid message - single market",
545545
msg: types.MsgRemoveMarkets{
546-
Markets: []string{"USDT/USD"},
547-
Admin: sample.Address(rng),
546+
Markets: []string{"USDT/USD"},
547+
Authority: sample.Address(rng),
548548
},
549549
expectPass: true,
550550
},
551551
{
552552
name: "valid message - multiple markets",
553553
msg: types.MsgRemoveMarkets{
554-
Markets: []string{"USDT/USD", "ETH/USD"},
555-
Admin: sample.Address(rng),
554+
Markets: []string{"USDT/USD", "ETH/USD"},
555+
Authority: sample.Address(rng),
556556
},
557557
expectPass: true,
558558
},
559559
{
560560
name: "invalid message (duplicate markets",
561561
msg: types.MsgRemoveMarkets{
562-
Markets: []string{"USDT/USD", "USDT/USD"},
563-
Admin: sample.Address(rng),
562+
Markets: []string{"USDT/USD", "USDT/USD"},
563+
Authority: sample.Address(rng),
564564
},
565565
expectPass: false,
566566
},

x/marketmap/types/tx.pb.go

+60-60
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)