executeBridgeTransaction
The executeBridgeTransaction function executes bridge transactions by handling chain switching and transaction sending. It works with any wallet client that implements the viem WalletClient interface.
Import
import { executeBridgeTransaction } from '@silentswap/sdk';Basic Usage
import {
executeBridgeTransaction,
getBridgeQuote,
convertQuoteResultToQuote
} from '@silentswap/sdk';
import { createWalletClient, http } from 'viem';
import { privateKeyToAccount } from 'viem/accounts';
import { ethereum } from 'viem/chains';
// Create wallet client
const account = privateKeyToAccount('0x...');
const walletClient = createWalletClient({
account,
chain: ethereum,
transport: http(),
});
// Get quote (compares providers and selects best)
const quoteResult = await getBridgeQuote(
1, // Source chain ID (Ethereum)
'0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // Source token (USDC)
'1000000', // Amount in token units
43114, // Destination chain ID (Avalanche)
'0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E', // Destination token (USDC.e)
account.address // User address
);
// Convert to BridgeQuote with transaction data
const quote = convertQuoteResultToQuote(quoteResult, 1);
// Execute transaction
const status = await executeBridgeTransaction(
quote,
walletClient,
connector, // Your connector implementation
(step) => console.log('Step:', step)
);
console.log('Status:', status.status);
console.log('Transaction Hashes:', status.txHashes);
console.log('Request ID:', status.requestId);API Reference
Function Signature
function executeBridgeTransaction(
quote: BridgeQuote,
walletClient: WalletClient,
connector: Connector,
setStep: (step: string) => void
): Promise<BridgeStatus>Parameters
quote(BridgeQuote): Bridge quote with transaction data. UseconvertQuoteResultToQuoteto convert aBridgeQuoteResultfromgetBridgeQuoteto aBridgeQuote.walletClient(WalletClient): viem wallet client for signing transactionsconnector(Connector): Wagmi connector for chain switching (must implementswitchChain)setStep((step: string) => void): Callback function to track execution progress
Return Value
interface BridgeStatus {
status: 'pending' | 'success' | 'failed' | 'refund' | 'fallback';
txHashes?: Hex[];
details?: string;
requestId?: string;
}Examples
Node.js Backend
import {
executeBridgeTransaction,
getBridgeQuote,
convertQuoteResultToQuote
} from '@silentswap/sdk';
import { createWalletClient, http } from 'viem';
import { privateKeyToAccount } from 'viem/accounts';
import { ethereum } from 'viem/chains';
// Create wallet client
const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`);
const walletClient = createWalletClient({
account,
chain: ethereum,
transport: http(),
});
// Simple connector implementation
const connector = {
switchChain: async ({ chainId }: { chainId: number }) => {
// Implement chain switching logic
// For viem, you might need to create a new client for the target chain
},
};
// Get quote (compares providers)
const quoteResult = await getBridgeQuote(
1, // Ethereum
'0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC
'1000000',
43114, // Avalanche
'0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E', // USDC.e
account.address
);
// Convert to BridgeQuote with transactions
const quote = convertQuoteResultToQuote(quoteResult, 1);
// Execute
const status = await executeBridgeTransaction(
quote,
walletClient,
connector,
(step) => {
console.log(`[${new Date().toISOString()}] ${step}`);
}
);
if (status.status === 'pending') {
console.log('Transaction submitted:', status.txHashes);
console.log('Request ID:', status.requestId);
}With Progress Tracking
import { executeBridgeTransaction } from '@silentswap/sdk';
const steps: string[] = [];
const status = await executeBridgeTransaction(
quote,
walletClient,
connector,
(step) => {
steps.push(step);
console.log(`Progress: ${steps.length} - ${step}`);
}
);
console.log('All steps:', steps);Error Handling
import { executeBridgeTransaction } from '@silentswap/sdk';
try {
const status = await executeBridgeTransaction(
quote,
walletClient,
connector,
(step) => console.log(step)
);
if (status.status === 'pending') {
// Transaction submitted successfully
console.log('Pending:', status.txHashes);
}
} catch (err) {
if (err.message.includes('Failed to switch to chain')) {
console.error('Chain switching failed:', err);
} else if (err.message.includes('No transactions')) {
console.error('Invalid quote - no transactions found');
} else {
console.error('Execution error:', err);
}
}How It Works
- Provider Detection: Determines which provider was used
- Chain Switching: Automatically switches to the correct chain for each transaction
- Transaction Execution: Sends transactions in sequence
- Status Return: Returns initial status with transaction hashes and request ID
Using convertQuoteResultToQuote
The convertQuoteResultToQuote function extracts transaction data from the quote result:
import { getBridgeQuote, convertQuoteResultToQuote } from '@silentswap/sdk';
// Get quote result (without transactions)
const quoteResult = await getBridgeQuote(/* ... */);
// Convert to BridgeQuote with transactions
const quote = convertQuoteResultToQuote(quoteResult, srcChainId);
// Now you can execute
await executeBridgeTransaction(quote, walletClient, connector, console.log);Best Practices
- Implement Chain Switching: Ensure your connector properly implements
switchChain - Handle Errors: Wrap in try/catch to handle transaction failures
- Track Progress: Use the
setStepcallback to provide user feedback - Monitor Status: After execution, use
getBridgeStatusto monitor completion - Gas Limits: Ensure sufficient gas limits for transactions
Related Functions
getBridgeQuote- Get bridge quotesgetBridgeStatus- Check transaction statussolveOptimalUsdcAmount- Find optimal amounts