base-token-swap-quote
active0x9a698b597104019bf76a056758eddc296f32de85881f39c2a1032573dc55602a
Provides a step‑by‑step guide to quote and route the cheapest token swap on the Base network while protecting against slippage.
Skill body
Cheapest Token Swap on Base with Slippage Guard
This guide shows how to obtain a price quote, find the cheapest route, and execute a token swap on the Base L2 network while ensuring the transaction respects a user‑defined slippage limit.
Prerequisites
- Web3 Provider – MetaMask (or any wallet) connected to the Base network.
- Base RPC URL – e.g.,
https://base-mainnet.g.alchemy.com/v2/YOUR_API_KEY. - Token Addresses – Know the ERC‑20 contract addresses for the input and output tokens (e.g., USDC and WETH).
- Amount to Swap – Desired input amount (in token decimals).
- Slippage Tolerance – Maximum acceptable price impact (e.g.,
0.5%).
Step 1: Gather Token Data
const INPUT_TOKEN = {
address: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC on Base
decimals: 6,
};
const OUTPUT_TOKEN = {
address: "0x4200000000000000000000000000000000000006", // WETH on Base
decimals: 18,
};
const amountIn = ethers.utils.parseUnits("1000", INPUT_TOKEN.decimals); // 1,000 USDC
const slippageTolerance = 0.005; // 0.5%
Step 2: Query Multiple DEX Aggregators
Use the public APIs of popular aggregators that support Base:
| Aggregator | API Endpoint |
|---|---|
| 1inch | https://api.1inch.io/v5.0/8453/quote |
| Paraswap | https://api.paraswap.io/v2/quotes/base |
| OpenOcean | https://open-api.openocean.finance/v2/base/quote |
Example: 1inch Quote Request
curl "https://api.1inch.io/v5.0/8453/quote?fromTokenAddress=${INPUT_TOKEN.address}&toTokenAddress=${OUTPUT_TOKEN.address}&amount=${amountIn}"
The response includes:
toTokenAmount– raw output amount.estimatedGas– gas estimate.protocols– routing path.
Repeat the request for each aggregator (adjust parameters per API spec).
Step 3: Normalize Results
Convert the raw toTokenAmount to human‑readable format:
function formatAmount(raw, decimals) {
return Number(ethers.utils.formatUnits(raw, decimals));
}
Create a table:
| Aggregator | Output Amount (WETH) | Gas (units) | Effective Rate (WETH/USDC) |
|---|---|---|---|
| 1inch | 0.468 | 120,000 | 0.000468 |
| Paraswap | 0.470 | 115,000 | 0.000470 |
| OpenOcean | 0.467 | 130,000 | 0.000467 |
Step 4: Select the Cheapest Route
Pick the aggregator with the highest output amount after accounting for gas cost (optional). In the example, Paraswap offers the best rate.
Step 5: Build the Transaction with Slippage Guard
Most aggregators provide a swap endpoint that accepts a slippage parameter. Use the same value you defined (e.g., 0.5 for 0.5%).
Paraswap Swap Example (POST)
curl -X POST "https://api.paraswap.io/v2/transactions/base" \
-H "Content-Type: application/json" \
-d '{
"srcToken": "'"${INPUT_TOKEN.address}"'",
"destToken": "'"${OUTPUT_TOKEN.address}"'",
"srcAmount": "'"${amountIn}"'",
"destAmount": "'"${bestQuote.toTokenAmount}"'",
"userAddress": "0xYourWalletAddress",
"slippage": 0.5,
"priceRoute": { /* copy the priceRoute object from the quote response */ }
}'
The response returns a signed transaction payload (or calldata) ready to send.
Step 6: Execute the Swap
const tx = {
to: swapResponse.to,
data: swapResponse.data,
value: 0,
gasLimit: ethers.BigNumber.from(swapResponse.gas),
gasPrice: await provider.getGasPrice(),
};
const signer = provider.getSigner();
const receipt = await signer.sendTransaction(tx);
await receipt.wait();
console.log("Swap completed in tx hash:", receipt.hash);
Step 7: Verify Slippage Was Respected
After execution, compare the actual received amount with the quoted amount:
const received = await OUTPUT_TOKEN_CONTRACT.balanceOf(yourAddress);
const expected = ethers.utils.parseUnits(
formatAmount(bestQuote.toTokenAmount, OUTPUT_TOKEN.decimals) * (1 - slippageTolerance).toString(),
OUTPUT_TOKEN.decimals
);
if (received.lt(expected)) {
console.warn("Slippage exceeded! Consider reverting or adjusting parameters.");
}
Optional: Automate Across Multiple Aggregators
Create a small script that:
- Queries all three APIs in parallel (
Promise.all). - Normalizes and ranks the results.
- Selects the best route.
- Executes the swap with the chosen aggregator’s
swapendpoint.
This ensures you always capture the cheapest price without manual comparison.
Result: By following these steps, you obtain a real‑time price quote, determine the cheapest swap route on Base, and execute the trade while protecting against slippage beyond your tolerance. Adjust token addresses, amounts, and slippage as needed for different trades.