SV3 logo

prepareBuyExactReserveIn

Prepare a buy that spends an exact USDC amount and requires a minimum AVM out.

Encodes buyWithExactReserveTokensIn. The wallet spends exactly amount USDC (plus the usual fee split inside the market) and reverts if minted AVM is below the slippage-adjusted minimum.

Does not send. For a "spend at most this USDC" ticket, use prepareBuyForReserveBudget instead — that helper submits the cheaper exact-output selector.

Import

import { createSv3Client } from "@repo/contract-client";

Usage

import { parseUsdc } from "@repo/contract-client";

const prepared = await sv3.trade.prepareBuyExactReserveIn({
  market,
  amount: parseUsdc("10"),
  slippageBps: 100n,
});

prepared.functionName; // 'buyWithExactReserveTokensIn'
prepared.constraints.minOut;

Optional authorization: 'auto' | 'permit' | 'allowance' is accepted here. It does not send an approval; it only records the intended route for getRequirements.

Return Value

Promise<PreparedAction> — frozen to / data / args / deadline / constraints.minOut.

Parameters

market

  • Type: Address
await sv3.trade.prepareBuyExactReserveIn({
  market,
  amount: parseUsdc("10"),
  slippageBps: 100n,
});

amount

  • Type: bigint (UsdcRaw)

Exact gross USDC in, 6 decimals.

await sv3.trade.prepareBuyExactReserveIn({
  market,
  amount: 10_000_000n,
  slippageBps: 100n,
});

slippageBps

  • Type: bigint

Required. Applied to quoted avmOut to set minOut.

await sv3.trade.prepareBuyExactReserveIn({
  market,
  amount: parseUsdc("10"),
  slippageBps: 25n,
});

authorization (optional)

  • Type: 'auto' | 'permit' | 'allowance'
  • Default: 'auto'
await sv3.trade.prepareBuyExactReserveIn({
  market,
  amount: parseUsdc("10"),
  slippageBps: 100n,
  authorization: "allowance",
});

Error

ErrorWhen
WalletClientRequiredErrorNo wallet / account
ProtocolRevertError BelowMinimum / ZeroAmountAmount cannot mint

Tips

  • Pair with quoteBuyExactReserveIn for the slider. Prepare only when the user confirms.
  • withSlippage is also exported on sv3.trade if you need limits without encoding calldata.