Execute a Transfer
Once you have selected a transfer route, you can start the cross-chain transfer.
If you don't already have a transfer route, follow these steps.
Start a transfer
Use the same transfer parameters you used when finding a route. This will handle the entire transfer process for you, including prompting the wallet for any required actions.
await swingSDK.transfer(transferRoute, transferParams);
Receive status updates
Use these events to update your UI with helpful information for your users.
swingSDK.on('TRANSFER', (transferStep, transferResults) => {
switch (transferStep.status) {
case 'PENDING':
// Let the user know the step is pending: `transferStep.step`
break;
case 'WALLET_CONNECTION_REQUIRED':
// Handle connecting wallets using your favorite library like Wagmi
// or alert the user to do it manually.
// Example: await connectWallet(transferStep.chain);
break;
case 'CHAIN_SWITCH_REQUIRED':
// Handle switching chains using your favorite library like Wagmi
// or alert the user to do it manually
// Example: await switchNetwork(transferStep.chain.chainId);
break;
case 'ACTION_REQUIRED':
// Let the user know they need to take action within their wallet, such as signing a transaction
break;
case 'CONFIRMING':
// Let the user know the transaction is waiting for confirmations
break;
case 'SUCCESS':
// The transaction was successful, yay!
break;
case 'FAILED':
// Alert the user there was an error. Check the message in `transferStep.error`
break;
}
});
Cancel a Transfer
You may want to cancel a transfer if the user rejects a wallet connection or network switch. To do so, call cancelTransfer
with the transfer ID.
swingSDK.on('TRANSFER', async (transferStep, transferResults) => {
// Unique ID for the transfer in progress
const transferId = transferResults.transferId;
switch (transferStep.status) {
case 'WALLET_CONNECTION_REQUIRED':
try {
await connectWallet(transferStep.chain);
} catch (error) {
// Cancel transfer if user rejects wallet connection
swingSDK.cancelTransfer(transferId);
}
break;
case 'CHAIN_SWITCH_REQUIRED':
try {
await switchNetwork(transferStep.chain.chainId);
} catch (error) {
// Cancel transfer if user rejects network switch
swingSDK.cancelTransfer(transferId);
}
break;
}
});