Hooks for Inter-Chain Token Transfer functionality.
BuilderKit provides hooks for handling Inter-Chain Token Transfer (ICTT) operations between Avalanche chains.
The useICTT
hook provides functions for transferring tokens between different Avalanche chains.
import { useICTT } from '@avalabs/builderkit';
const {
getInterchainMessenger,
send,
sendNative,
getMessageId,
getReceiveTransaction,
getHomeHopMessageId
} = useICTT();
// Get messenger contract
const messenger = await getInterchainMessenger(43114);
// Send ERC20 tokens
const sendData = send(
transferer, // Transferer contract
destinationChainHex, // Destination chain ID in hex
destTransferer, // Destination transferer
receiver, // Recipient address
feeTokenAddr, // Fee token address
amount, // Amount to send
decimals, // Token decimals
isMultiHop // Whether this is a multi-hop transfer
);
// Send native token
const sendNativeData = sendNative(
transferer, // Transferer contract
destinationChainHex, // Destination chain ID in hex
destTransferer, // Destination transferer
receiver, // Recipient address
feeTokenAddr, // Fee token address
amount, // Amount to send
decimals, // Token decimals
isMultiHop // Whether this is a multi-hop transfer
);
// Get message ID from log
const messageId = getMessageId(txLog);
// Get receive transaction
const receiveData = await getReceiveTransaction(
43114, // Chain ID
messageId // Message ID
);
// Get home hop message ID
const hopMessageId = await getHomeHopMessageId(
43114, // Chain ID
txHash // Transaction hash
);
getInterchainMessenger(chain_id: number)
: Get messenger contract address
send(transferer: string, destination_L1_hex: string, destination_transferer: string, receiver: string, fee_token_addr: string, amount: BigNumber, decimals: number, is_multi_hop: boolean)
: Generate ERC20 transfer transaction
sendNative(transferer: string, destination_L1_hex: string, destination_transferer: string, receiver: string, fee_token_addr: string, amount: BigNumber, decimals: number, is_multi_hop: boolean)
: Generate native token transfer transaction
getMessageId(log: any)
: Extract message ID from transaction log
getReceiveTransaction(chain_id: number, message_id: string)
: Generate receive transaction
getHomeHopMessageId(chain_id: number, hash: string)
: Get message ID for home hop
function ICTTTransfer() {
const { getInterchainMessenger, send, getMessageId } = useICTT();
const handleTransfer = async () => {
// Get messenger contract
const messenger = await getInterchainMessenger(43114);
// Generate transfer transaction
const data = send(
transfererContract,
"0x0000000000000000000000000000000000000000000000000000000000002aef", // 43114 in hex
destinationTransferer,
receiverAddress,
"0x0000000000000000000000000000000000000000", // Zero address for native fee
new BigNumber("1.0"),
18,
false
);
return (
<TransactionButton
chain_id={43114}
title="Transfer Tokens"
description="Sending tokens cross-chain"
data={data}
onTransactionConfirmed={(receipt) => {
const messageId = getMessageId(receipt.logs[0]);
console.log('Transfer message ID:', messageId);
}}
/>
);
};
return (
<div>
{handleTransfer()}
</div>
);
}