Skip to main content

Overview

The ThorSwapFacet enables cross-chain token transfers using THORChain through the ThorSwap interface. THORChain provides decentralized cross-chain liquidity without wrapped tokens.

Contract Interface

Bridging Functions

startBridgeTokensViaThorSwap

Bridges tokens to another chain using THORChain.
function startBridgeTokensViaThorSwap(
  BridgeData _bridgeData,
  ThorSwapData _thorSwapData
) external payable
_bridgeData
BridgeData
Standard bridge data containing transaction details
_thorSwapData
ThorSwapData
ThorSwap-specific bridging parameters

swapAndStartBridgeTokensViaThorSwap

Performs a token swap on the source chain before bridging via THORChain.
function swapAndStartBridgeTokensViaThorSwap(
  BridgeData _bridgeData,
  SwapData[] _swapData,
  ThorSwapData _thorSwapData
) external payable
_bridgeData
BridgeData
Standard bridge data
_swapData
SwapData[]
Array of swap operations to execute before bridging
_thorSwapData
ThorSwapData
ThorSwap-specific parameters

Data Structures

ThorSwapData

struct ThorSwapData {
  address vault;        // THORChain vault
  string memo;          // THORChain memo
  uint256 expiration;   // Expiration timestamp
}

Usage Example

import { ThorSwapFacet } from '@lifi/contract-types';

const thorSwapFacet = ThorSwapFacet__factory.connect(facetAddress, signer);

const bridgeData = {
  transactionId: '0x...',
  bridge: 'thorswap',
  integrator: 'my-dapp',
  referrer: '0x0000000000000000000000000000000000000000',
  sendingAssetId: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC
  receiver: '0x...',
  minAmount: ethers.utils.parseUnits('100', 6),
  destinationChainId: 1, // Ethereum (or other chain)
  hasSourceSwaps: false,
  hasDestinationCall: false
};

const thorSwapData = {
  vault: '0x...', // THORChain vault
  memo: '=:ETH.ETH:0x...',
  expiration: Math.floor(Date.now() / 1000) + 3600
};

const tx = await thorSwapFacet.startBridgeTokensViaThorSwap(
  bridgeData,
  thorSwapData,
  { value: 0 }
);

await tx.wait();

Events

The facet emits standard LiFi events:
  • LiFiTransferStarted(BridgeData bridgeData)
  • LiFiTransferCompleted
  • AssetSwapped (when using swapAndStart variant)

See Also

Build docs developers (and LLMs) love