Overview
The SymbiosisFacet enables cross-chain token transfers using the Symbiosis Protocol. Symbiosis supports complex cross-chain swaps with intermediate tokens and multiple DEX routers.
Contract Interface
Bridging Functions
startBridgeTokensViaSymbiosis
Bridges tokens to another chain using Symbiosis Protocol.
function startBridgeTokensViaSymbiosis (
BridgeData _bridgeData ,
SymbiosisData _symbiosisData
) external payable
Standard bridge data containing transaction details
Symbiosis-specific bridging parameters Show SymbiosisData fields
Intermediate token address
Second DEX router address
swapAndStartBridgeTokensViaSymbiosis
Performs a token swap on the source chain before bridging via Symbiosis.
function swapAndStartBridgeTokensViaSymbiosis (
BridgeData _bridgeData ,
SwapData [] _swapData ,
SymbiosisData _symbiosisData
) external payable
Array of swap operations to execute before bridging
Symbiosis-specific parameters
Data Structures
SymbiosisData
struct SymbiosisData {
bytes firstSwapCalldata ; // First swap calldata
bytes secondSwapCalldata ; // Second swap calldata
address intermediateToken ; // Intermediate token
address firstDexRouter ; // First DEX router
address secondDexRouter ; // Second DEX router
address [] approvedTokens ; // Tokens to approve
address callTo ; // Bridge contract
bytes callData ; // Bridge calldata
}
Usage Example
import { SymbiosisFacet } from '@lifi/contract-types' ;
const symbiosisFacet = SymbiosisFacet__factory . connect ( facetAddress , signer );
const bridgeData = {
transactionId: '0x...' ,
bridge: 'symbiosis' ,
integrator: 'my-dapp' ,
referrer: '0x0000000000000000000000000000000000000000' ,
sendingAssetId: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' , // USDC
receiver: '0x...' ,
minAmount: ethers . utils . parseUnits ( '100' , 6 ),
destinationChainId: 56 , // BSC
hasSourceSwaps: false ,
hasDestinationCall: false
};
const symbiosisData = {
firstSwapCalldata: '0x...' ,
secondSwapCalldata: '0x...' ,
intermediateToken: '0x...' ,
firstDexRouter: '0x...' ,
secondDexRouter: '0x...' ,
approvedTokens: [ '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' ],
callTo: '0x...' , // Symbiosis Portal
callData: '0x...'
};
const tx = await symbiosisFacet . startBridgeTokensViaSymbiosis (
bridgeData ,
symbiosisData ,
{ value: 0 }
);
await tx . wait ();
Events
The facet emits standard LiFi events:
LiFiTransferStarted(BridgeData bridgeData)
LiFiTransferCompleted
AssetSwapped (when using swapAndStart variant)
See Also