Documentation

ICTT Hooks

Hooks for Inter-Chain Token Transfer functionality.

ICTT Hooks

BuilderKit provides hooks for handling Inter-Chain Token Transfer (ICTT) operations between Avalanche chains.

useICTT

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
);

Available Functions

  • 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

Integration Example

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>
  );
}
Edit on GitHub

Last updated on

On this page