const requestRoutingParams = {
params: {
chainIdIn": 1, // Ethereum
chainIdOut: 250, // Fantom
tokenIn: "0xdac17f958d2ee523a2206206994597c13d831ec7", // USDT
tokenOut: "0xe71286fc887189c562410af12ed521c8e58e5fa3", // s3crypto_e
amountIn: "100000000", // 100 USDT
},
slippage: 1, // 1%
}
const response = await fetch('https://api.crosscurve.fi/routing/scan', {
method: 'POST',
body: JSON.stringify(requestRoutingParams),
headers: {
"Content-Type": "application/json",
},
})
const routing = await response.json()
2. Making a route estimate
From the obtained array of routes, take the first route (which is the most profitable for swapping) and send it for estimation
const bestRoute = routing[0]
const response = await fetch('https://api.crosscurve.fi/estimate', {
method: 'POST',
body: JSON.stringify(bestRoute),
headers: {
"Content-Type": "application/json",
},
})
const estimate = await response.json()
const txCreateParams = {
from: '0x...', // sender
recipient: '0x...', // recipient
routing,
estimate,
}
const response = await fetch('https://api.crosscurve.fi/tx/create', {
method: 'POST',
body: JSON.stringify(txCreateParams),
headers: {
"Content-Type": "application/json",
},
})
const rawTx = await response.json()
4. Sending the transaction
import { Contract, JsonRpcProvider } from 'ethers'
const provider = new JsonRpcProvider('RPC_URL_HERE')
const signer = new Wallet(process.env.PRIVATE_KEY, provider)
const router = new Contract(rawTx.to, [rawTx.abi], signer)
const args = [
rawTx.args[0],
rawTx.args[1],
[
rawTx.args[2].executionPrice,
rawTx.args[2].deadline,
rawTx.args[2].v,
rawTx.args[2].r,
rawTx.args[2].s,
],
]
const value = BigInt(rawTx.value) + BigInt(estimate.executionPrice)
const tx = await router.start(...args, { value })
const receipt = await tx.wait()