Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
validate that vault deposit does not exceed max uint64 (#1576)
Browse files Browse the repository at this point in the history
(cherry picked from commit 76c548c)

# Conflicts:
#	protocol/x/vault/keeper/msg_server_deposit_to_vault.go
tqin7 authored and mergify[bot] committed May 23, 2024
1 parent 07f18c3 commit 08654e1
Showing 4 changed files with 53 additions and 6 deletions.
12 changes: 11 additions & 1 deletion protocol/x/vault/keeper/msg_server_deposit_to_vault.go
Original file line number Diff line number Diff line change
@@ -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
@@ -33,10 +34,19 @@ func (k msgServer) DepositToVault(
// shares calculation to be correct.
err = k.subaccountsKeeper.TransferFundsFromSubaccountToSubaccount(
ctx,
<<<<<<< HEAD
*msg.SubaccountId,
*msg.VaultId.ToSubaccountId(),
assettypes.AssetUsdc.Id,
msg.QuoteQuantums.BigInt(),
=======
&sendingtypes.Transfer{
Sender: *msg.SubaccountId,
Recipient: *msg.VaultId.ToSubaccountId(),
AssetId: assettypes.AssetUsdc.Id,
Amount: quoteQuantums.Uint64(),
},
>>>>>>> 76c548c2 (validate that vault deposit does not exceed max uint64 (#1576))
)
if err != nil {
return nil, err
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
@@ -2,6 +2,7 @@ package keeper_test

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

@@ -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{
{
@@ -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),
},
},
}
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{}
@@ -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
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"
@@ -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,

0 comments on commit 08654e1

Please sign in to comment.