@@ -971,22 +971,31 @@ func (msg MsgBatchUpdateOrders) ValidateBasic() error {
971
971
return sdkerrors .Wrap (sdkerrors .ErrInvalidAddress , msg .Sender )
972
972
}
973
973
974
- subaccountAddress , ok := IsValidSubaccountID (msg .SubaccountId )
975
- if ! ok {
976
- return sdkerrors .Wrap (ErrBadSubaccountID , msg .SubaccountId )
977
- }
978
- if ! bytes .Equal (subaccountAddress .Bytes (), sender .Bytes ()) {
979
- return sdkerrors .Wrap (ErrBadSubaccountID , msg .Sender )
980
- }
974
+ hasCancelAllMarketId := len (msg .SpotMarketIdsToCancelAll ) > 0 || len (msg .DerivativeMarketIdsToCancelAll ) > 0
975
+ hasSubaccountIdForCancelAll := msg .SubaccountId != ""
981
976
982
- hasDuplicateSpotMarketIds := HasDuplicatesHexHash (msg .SpotMarketIdsToCancelAll )
983
- if hasDuplicateSpotMarketIds {
984
- return sdkerrors .Wrap (ErrInvalidBatchMsgUpdate , "msg contains duplicate cancel all spot market ids" )
977
+ if hasCancelAllMarketId && ! hasSubaccountIdForCancelAll {
978
+ return sdkerrors .Wrap (ErrInvalidBatchMsgUpdate , "msg contains cancel all market id but no subaccount id" )
985
979
}
986
980
987
- hasDuplicateDerivativesMarketIds := HasDuplicatesHexHash (msg .DerivativeMarketIdsToCancelAll )
988
- if hasDuplicateDerivativesMarketIds {
989
- return sdkerrors .Wrap (ErrInvalidBatchMsgUpdate , "msg contains duplicate cancel all derivative market ids" )
981
+ if hasSubaccountIdForCancelAll {
982
+ subaccountAddress , ok := IsValidSubaccountID (msg .SubaccountId )
983
+ if ! ok {
984
+ return sdkerrors .Wrap (ErrBadSubaccountID , msg .SubaccountId )
985
+ }
986
+ if ! bytes .Equal (subaccountAddress .Bytes (), sender .Bytes ()) {
987
+ return sdkerrors .Wrap (ErrBadSubaccountID , msg .Sender )
988
+ }
989
+
990
+ hasDuplicateSpotMarketIds := HasDuplicatesHexHash (msg .SpotMarketIdsToCancelAll )
991
+ if hasDuplicateSpotMarketIds {
992
+ return sdkerrors .Wrap (ErrInvalidBatchMsgUpdate , "msg contains duplicate cancel all spot market ids" )
993
+ }
994
+
995
+ hasDuplicateDerivativesMarketIds := HasDuplicatesHexHash (msg .DerivativeMarketIdsToCancelAll )
996
+ if hasDuplicateDerivativesMarketIds {
997
+ return sdkerrors .Wrap (ErrInvalidBatchMsgUpdate , "msg contains duplicate cancel all derivative market ids" )
998
+ }
990
999
}
991
1000
992
1001
hasDuplicateSpotOrderToCancel := HasDuplicatesOrder (msg .SpotOrdersToCancel )
0 commit comments