Skip to content

Commit

Permalink
validate that vault deposit does not exceed max uint64
Browse files Browse the repository at this point in the history
  • Loading branch information
tqin7 committed May 23, 2024
1 parent 5f1c22b commit 148e786
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 4 deletions.
9 changes: 7 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 @@ -3,6 +3,7 @@ package keeper
import (
"context"

errorsmod "cosmossdk.io/errors"
"github.com/dydxprotocol/v4-chain/protocol/lib"
"github.com/dydxprotocol/v4-chain/protocol/lib/log"
"github.com/dydxprotocol/v4-chain/protocol/lib/metrics"
Expand All @@ -17,13 +18,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 @@ -32,13 +34,16 @@ func (k msgServer) DepositToVault(
// Transfer from sender subaccount to vault.
// Note: Transfer should take place after minting shares for
// shares calculation to be correct.
if !quoteQuantums.IsUint64() {
return nil, errorsmod.Wrap(types.ErrInvalidDepositAmount, "quote quantums must be strictly less than 2^64")
}
err = k.sendingKeeper.ProcessTransfer(
ctx,
&sendingtypes.Transfer{
Sender: *msg.SubaccountId,
Recipient: *msg.VaultId.ToSubaccountId(),
AssetId: assettypes.AssetUsdc.Id,
Amount: msg.QuoteQuantums.BigInt().Uint64(),
Amount: quoteQuantums.Uint64(),
},
)
if err != nil {
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
3 changes: 2 additions & 1 deletion protocol/x/vault/types/msg_deposit_to_vault.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package types

import (
errorsmod "cosmossdk.io/errors"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/dydxprotocol/v4-chain/protocol/dtypes"
)
Expand All @@ -16,7 +17,7 @@ func (msg *MsgDepositToVault) ValidateBasic() error {

// Validate that quote quantums is positive.
if msg.QuoteQuantums.Cmp(dtypes.NewInt(0)) <= 0 {
return ErrInvalidDepositAmount
return errorsmod.Wrap(ErrInvalidDepositAmount, "quote quantums must be strictly positive")
}

return nil
Expand Down

0 comments on commit 148e786

Please sign in to comment.