External Swap Router
External Router Migration
The CrocSwapRouter
contract exposes an ABI compatible swap()
function that works with the upgraded swap callpath. This option will add approximately 60,000 gas to swap calls compared to direct swap calls.
The contract is deployed at
Ethereum: 0x533E164ded63f4c55E83E1f409BDf2BaC5278035
Scroll: 0xfB5f26851E03449A0403Ca945eBB4201415fd1fc
Solidity Example
// Ethereum
address router = 0x533E164ded63f4c55E83E1f409BDf2BaC5278035;
CrocSwapRouter(router).swap(
base,
quote,
poolIdx,
isBuy,
inBaseQty,
qty,
tip,
limitPrice,
minOut,
settleFlags);
//Scroll
address router = 0xfB5f26851E03449A0403Ca945eBB4201415fd1fc;
CrocSwapRouter(router).swap(
base,
quote,
poolIdx,
isBuy,
inBaseQty,
qty,
tip,
limitPrice,
minOut,
settleFlags);
Javascript Example
The below example uses an Ethers provider to send a swap to the router contract:
const { ethers } = require('ethers');
const provider = new ethers.providers.JsonRpcProvider(...);
const routerAbi = ... // See below
const etherRouterAddr = "0x533E164ded63f4c55E83E1f409BDf2BaC5278035"
const scrollRouterAddr = "0xfB5f26851E03449A0403Ca945eBB4201415fd1fc"
const contract = new ethers.Contract(etherRouterAddr, routerAbi, provider);
contract.swap(
baseAddress,
quoteAddress,
420,
isBuy,
inBaseQty,
qty,
0,
limitPrice,
minOut,
0);
ABI
For an ABI to call swap on the contract, you can use the below JSON
[
{
"inputs": [
{
"internalType": "address",
"name": "base",
"type": "address"
},
{
"internalType": "address",
"name": "quote",
"type": "address"
},
{
"internalType": "uint256",
"name": "poolIdx",
"type": "uint256"
},
{
"internalType": "bool",
"name": "isBuy",
"type": "bool"
},
{
"internalType": "bool",
"name": "inBaseQty",
"type": "bool"
},
{
"internalType": "uint128",
"name": "qty",
"type": "uint128"
},
{
"internalType": "uint16",
"name": "tip",
"type": "uint16"
},
{
"internalType": "uint128",
"name": "limitPrice",
"type": "uint128"
},
{
"internalType": "uint128",
"name": "minOut",
"type": "uint128"
},
{
"internalType": "uint8",
"name": "reserveFlags",
"type": "uint8"
}
],
"name": "swap",
"outputs": [
{
"internalType": "int128",
"name": "baseFlow",
"type": "int128"
},
{
"internalType": "int128",
"name": "quoteFlow",
"type": "int128"
}
],
"stateMutability": "payable",
"type": "function"
},
]
Notes
Users will need to approve any tokens being sent to the CrocSwapRouter
contract address
Swapping to/from dex balance surplus collateral is not available through this contract.
Last updated