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
| Error | When |
|---|---|
WalletClientRequiredError | No wallet / account |
ProtocolRevertError BelowMinimum / ZeroAmount | Amount cannot mint |
Tips
- Pair with quoteBuyExactReserveIn for the slider. Prepare only when the user confirms.
withSlippageis also exported onsv3.tradeif you need limits without encoding calldata.