Build a preHook
preHooks
are executed on the Squid Multicall contract on the fromChain
before any swaps or bridging has occurred.
After preHooks
, the full balance on the Multicall will be swapped or bridged across chains.
The fromToken
and fromAmount
in your route request should be the amount of tokens you expect to on the Multicall after the preHooks
are executed.
The snippet example below illustrates wrapping ETH on Arbitrum then bridging to Binance Smart Chain using both our API and SDK.
To try the full working SDK preHook example, visit our SDK Examples Repository.
//import Squid SDK and types
import { Squid } from "@0xsquid/sdk";
import { ChainType, EvmContractCall } from "@0xsquid/squid-types";
// Import WETH ABI
import wethAbi from "../abi/wethAbi"; // Adjust the path if necessary
// Function to get Squid SDK instance
const getSDK = (): Squid => {
const squid = new Squid({
baseUrl: "https://apiplus.squidrouter.com",
integratorId: integratorId,
});
return squid;
};
// Main function
(async () => {
// Initialize Squid SDK
const squid = getSDK();
await squid.init();
console.log("Initialized Squid SDK");
// Creating Contract interfaces
const wethInterface = new ethers.utils.Interface(wethAbi);
const wrapEncodedData = wethInterface.encodeFunctionData("deposit");
// Set up parameters for wrapping ETH to wETH and bridging to BUSD on Binance Smart Chain
const params = {
fromAddress: signer.address,
fromChain: fromChainId,
fromToken: WETH_ADDRESS, // WETH on Arbitrum
fromAmount: amount.toString(),
toChain: toChainId,
toToken: toToken,
toAddress: signer.address,
slippageConfig: {
autoMode: 1,
},
slippage: 1,
preHook: {
chainType: ChainType.EVM,
fundAmount: amount.toString(),
fundToken: "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", // Native ETH
calls: [
{
chainType: ChainType.EVM,
callType: 2, // 2 corresponds to CALL_DATA
target: WETH_ADDRESS,
value: amount.toString(), // Amount of ETH to wrap
callData: wrapEncodedData,
payload: {
tokenAddress: "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", // Native ETH
inputPos: 0,
},
estimatedGas: "500000",
} as EvmContractCall,
],
provider: "Integration Test", //This should be the name of your product or application that is triggering the hook
description: "Wrap native ETH",
logoURI: "https://pbs.twimg.com/profile_images/1548647667135291394/W2WOtKUq_400x400.jpg", //Add your logo here
},
};
console.log("Parameters:", params);
// Get the swap route using Squid SDK
const { route, requestId } = await squid.getRoute(params);
console.log("Calculated route:", route.estimate.toAmount);
Last updated