bridgeAndExecute()
SET UP THE SDK BEFORE YOU START:
You can find the SDK setup instructions in the Overview page.
Parameters
Typescript
export interface BridgeAndExecuteParams {
toChainId: SUPPORTED_CHAINS_IDS;
token: SUPPORTED_TOKENS;
amount: number | string;
recipient?: `0x${string}`;
execute?: Omit<ExecuteParams, 'toChainId'>;
enableTransactionPolling?: boolean;
transactionTimeout?: number;
// Global options for transaction confirmation
waitForReceipt?: boolean;
receiptTimeout?: number;
requiredConfirmations?: number;
// Optional recent approval transaction hash to consider in simulation
recentApprovalTxHash?: string;
}
Example
Typescript
import type {
ExecuteParams,
ExecuteResult,
ExecuteSimulation,
BridgeAndExecuteParams,
BridgeAndExecuteResult,
BridgeAndExecuteSimulationResult,
} from '@avail-project/nexus';
// Execute contract functions with dynamic parameter builder - Compound V3 Supply
const result: ExecuteResult = await sdk.execute({
toChainId: 1,
contractAddress: '0xc3d688B66703497DAA19211EEdff47f25384cdc3', // Compound V3 USDC Market
contractAbi: [
{
inputs: [
{ internalType: 'address', name: 'asset', type: 'address' },
{ internalType: 'uint256', name: 'amount', type: 'uint256' },
],
name: 'supply',
outputs: [],
stateMutability: 'nonpayable',
type: 'function',
},
],
functionName: 'supply',
buildFunctionParams: (
token: SUPPORTED_TOKENS,
amount: string,
chainId: SUPPORTED_CHAINS_IDS,
userAddress: `0x${string}`,
) => {
const decimals = TOKEN_METADATA[token].decimals;
const amountWei = parseUnits(amount, decimals);
const tokenAddress = TOKEN_CONTRACT_ADDRESSES[token][chainId];
return {
functionParams: [tokenAddress, amountWei],
};
},
waitForReceipt: true,
requiredConfirmations: 3,
tokenApproval: {
token: 'USDC',
amount: '1000000', // Amount in token units
},
} as ExecuteParams);
// Simulate execute to preview costs and check for approval requirements
const simulation: ExecuteSimulation = await sdk.simulateExecute(executeParams);
if (!simulation.success) {
console.log('Simulation failed:', simulation.error);
// Error might indicate missing token approval
}
// Bridge tokens and execute contract function - Yearn Vault Deposit
const bridgeAndExecuteResult: BridgeAndExecuteResult = await sdk.bridgeAndExecute({
token: 'USDC',
amount: '100000000', // 100 USDC (6 decimals)
toChainId: 1, // Ethereum
execute: {
contractAddress: '0xa354F35829Ae975e850e23e9615b11Da1B3dC4DE', // Yearn USDC Vault
contractAbi: [
{
inputs: [
{ internalType: 'uint256', name: 'assets', type: 'uint256' },
{ internalType: 'address', name: 'receiver', type: 'address' },
],
name: 'deposit',
outputs: [{ internalType: 'uint256', name: 'shares', type: 'uint256' }],
stateMutability: 'nonpayable',
type: 'function',
},
],
functionName: 'deposit',
buildFunctionParams: (
token: SUPPORTED_TOKENS,
amount: string,
chainId: SUPPORTED_CHAINS_IDS,
userAddress: `0x${string}`,
) => {
const decimals = TOKEN_METADATA[token].decimals;
const amountWei = parseUnits(amount, decimals);
return {
functionParams: [amountWei, userAddress],
};
},
tokenApproval: {
token: 'USDC',
amount: '100000000',
},
},
waitForReceipt: true,
} as BridgeAndExecuteParams);
// Comprehensive simulation with detailed step analysis and approval handling
const simulation: BridgeAndExecuteSimulationResult = await sdk.simulateBridgeAndExecute(params);
// The simulation provides detailed step analysis:
console.log('Steps:', simulation.steps);
console.log('Total estimated cost:', simulation.totalEstimatedCost);
console.log('Approval required:', simulation.metadata?.approvalRequired);
console.log('Bridge receive amount:', simulation.metadata?.bridgeReceiveAmount);
Return Value
Typescript
export interface BridgeAndExecuteResult {
executeTransactionHash?: string;
executeExplorerUrl?: string;
approvalTransactionHash?: string;
bridgeTransactionHash?: string; // undefined when bridge is skipped
bridgeExplorerUrl?: string; // undefined when bridge is skipped
toChainId: number;
success: boolean;
error?: string;
bridgeSkipped: boolean; // indicates if bridge was skipped due to sufficient funds
}
Last updated on