Skip to content

Commit

Permalink
validate that vault deposit does not exceed max uint64 (backport #1576)…
Browse files Browse the repository at this point in the history
… (#1580)

Co-authored-by: Tian <tian@dydx.exchange>
  • Loading branch information
2 people authored and roy-dydx committed May 24, 2024
1 parent 193bd7a commit c092bf0
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 7 deletions.
5 changes: 3 additions & 2 deletions protocol/x/vault/keeper/msg_server_deposit_to_vault.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,14 @@ func (k msgServer) DepositToVault(
msg *types.MsgDepositToVault,
) (*types.MsgDepositToVaultResponse, error) {
ctx := lib.UnwrapSDKContext(goCtx, types.ModuleName)
quoteQuantums := msg.QuoteQuantums.BigInt()

// Mint shares for the vault.
err := k.MintShares(
ctx,
*msg.VaultId,
msg.SubaccountId.Owner,
msg.QuoteQuantums.BigInt(),
quoteQuantums,
)
if err != nil {
return nil, err
Expand All @@ -36,7 +37,7 @@ func (k msgServer) DepositToVault(
*msg.SubaccountId,
*msg.VaultId.ToSubaccountId(),
assettypes.AssetUsdc.Id,
msg.QuoteQuantums.BigInt(),
quoteQuantums,
)
if err != nil {
return nil, err
Expand Down
16 changes: 15 additions & 1 deletion protocol/x/vault/keeper/msg_server_deposit_to_vault_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package keeper_test

import (
"bytes"
"math"
"math/big"
"testing"

Expand Down Expand Up @@ -198,7 +199,7 @@ func TestMsgDepositToVault(t *testing.T) {
big.NewInt(1_000),
},
},
"Two failed deposits due to non-positive amounts": {
"Three failed deposits due to invalid deposit amount": {
vaultId: constants.Vault_Clob_1,
depositorSetups: []DepositorSetup{
{
Expand Down Expand Up @@ -227,14 +228,27 @@ func TestMsgDepositToVault(t *testing.T) {
checkTxResponseContains: "Deposit amount is invalid",
expectedOwnerShares: nil,
},
{
depositor: constants.Bob_Num0,
depositAmount: new(big.Int).Add(
new(big.Int).SetUint64(math.MaxUint64),
big.NewInt(1),
),
msgSigner: constants.Bob_Num0.Owner,
checkTxFails: true,
checkTxResponseContains: "Deposit amount is invalid",
expectedOwnerShares: nil,
},
},
totalSharesHistory: []*big.Int{
big.NewInt(0),
big.NewInt(0),
big.NewInt(0),
},
vaultEquityHistory: []*big.Int{
big.NewInt(0),
big.NewInt(0),
big.NewInt(0),
},
},
}
Expand Down
9 changes: 5 additions & 4 deletions protocol/x/vault/types/msg_deposit_to_vault.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package types

import (
errorsmod "cosmossdk.io/errors"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/dydxprotocol/v4-chain/protocol/dtypes"
)

var _ sdk.Msg = &MsgDepositToVault{}
Expand All @@ -14,9 +14,10 @@ func (msg *MsgDepositToVault) ValidateBasic() error {
return err
}

// Validate that quote quantums is positive.
if msg.QuoteQuantums.Cmp(dtypes.NewInt(0)) <= 0 {
return ErrInvalidDepositAmount
// Validate that quote quantums is positive and an uint64.
quoteQuantums := msg.QuoteQuantums.BigInt()
if quoteQuantums.Sign() <= 0 || !quoteQuantums.IsUint64() {
return errorsmod.Wrap(ErrInvalidDepositAmount, "quote quantums must be strictly positive and less than 2^64")
}

return nil
Expand Down
22 changes: 22 additions & 0 deletions protocol/x/vault/types/msg_deposit_to_vault_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package types_test

import (
"math"
"math/big"
"testing"

"github.com/dydxprotocol/v4-chain/protocol/dtypes"
Expand All @@ -22,6 +24,26 @@ func TestMsgDepositToVault_ValidateBasic(t *testing.T) {
QuoteQuantums: dtypes.NewInt(1),
},
},
"Success: max uint64 quote quantums": {
msg: types.MsgDepositToVault{
VaultId: &constants.Vault_Clob_0,
SubaccountId: &constants.Alice_Num0,
QuoteQuantums: dtypes.NewIntFromUint64(math.MaxUint64),
},
},
"Failure: quote quantums greater than max uint64": {
msg: types.MsgDepositToVault{
VaultId: &constants.Vault_Clob_0,
SubaccountId: &constants.Alice_Num0,
QuoteQuantums: dtypes.NewIntFromBigInt(
new(big.Int).Add(
new(big.Int).SetUint64(math.MaxUint64),
new(big.Int).SetUint64(1),
),
),
},
expectedErr: "Deposit amount is invalid",
},
"Failure: zero quote quantums": {
msg: types.MsgDepositToVault{
VaultId: &constants.Vault_Clob_0,
Expand Down

0 comments on commit c092bf0

Please sign in to comment.