NEW: Bitcoin and Solana
Bitcoin and Solana cross-chain swaps are now on Squid!
The cross-chain swap mechanism is powered by Chainflip.
Currently, Bitcoin and Solana integrations are in a closed beta. Please reach out if you would like to have the functionality enabled for your integrator ID.
This brief outlines what you need to know in order to enable swaps to and from Bitcoin and Solana. You can also explore the detailed ready-to-run examples in our Github repo.
Creating a Route
Currently swaps are only supported to EVM chains. You can swap from EVM chains to Solana and BTC just as you would in a typical cross-chain swap.
When swapping from Solana or BTC, the /v2/route endpoint will return one of two transaction types depending on the token pair. You should check the transactionRequest.type field in the response to determine which flow to follow.
Transaction Type: ON_CHAIN_EXECUTION (Direct Swaps)
ON_CHAIN_EXECUTION (Direct Swaps)For certain token pairs, Chainflip provides direct swap access. In this case, the route response returns a transactionRequest with type: "ON_CHAIN_EXECUTION" containing raw transaction data that can be signed and submitted directly on-chain — similar to a standard EVM swap.
Direct Swap Pairs (Solana)
SOL
ETH
Ethereum (1)
SOL
USDC
Arbitrum (42161)
SOL
ETH
Arbitrum (42161)
USDC
ETH
Ethereum (1)
USDC
USDC
Arbitrum (42161)
USDC
ETH
Arbitrum (42161)
Example Request (SOL → ETH on Ethereum)
Example Response
For direct swaps, status checking follows the standard pattern using the on-chain transaction hash — no special bridgeType parameter is needed.
Transaction Type: CHAINFLIP_DEPOSIT_ADDRESS (Deposit Address Flow)
CHAINFLIP_DEPOSIT_ADDRESS (Deposit Address Flow)All other Solana and BTC routes (i.e., any pair not listed in the direct swap pairs table above) will return a transactionRequest with type: "CHAINFLIP_DEPOSIT_ADDRESS". This requires an additional step: you must pass the transactionRequest body to the deposit address endpoint to get a deposit address, then transfer the assets to that address.
Example Request (SOL → USDC on Base)
Example Response
Step 2: Get the Deposit Address
Take the transactionRequest body from the route response and submit it to the deposit address endpoint (https://v2.api.squidrouter.com/v2/deposit-address) using the same headers as the route request endpoint.
Deposit-address Endpoint Body Example
The deposit address endpoint (https://v2.api.squidrouter.com/v2/deposit-address) will return the deposit address(depositAddress) which is where the asset should be transferred, the amount(amount), which is the amount that should be transferred, and the chainflipStatusTrackingId, which will be used for the status tracking.
Bitcoin Parameters
ChainID:
bitcoinNative Token:
satoshiMinimum Swap Amount:
.0007 BTCThe Bitcoin wallet address should be a Native SegWit (Bech32) address
Solana Parameters
ChainID:
solana-mainnet-betaNative Token:
0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeSupported Tokens: SOL, USDC(
EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v)Minimum Swap Amount:
$20 USD
Key Implementation Differences
Status Checking
Status checking depends on the transaction type returned by the route endpoint:
For Direct Swaps (ON_CHAIN_EXECUTION):
Use the standard status checking flow with the on-chain transaction hash — the same as any EVM-to-EVM swap. No special bridgeType parameter is needed.
For Deposit Address Swaps (CHAINFLIP_DEPOSIT_ADDRESS):
Unlike EVM-to-EVM or EVM-to-Cosmos swaps, deposit address swaps from Bitcoin and Solana require setting a bridgeType parameter and setting the transactionId parameter as the chainflipStatusTrackingId returned from the deposit-address endpoint.
When calling the status API(https://v2.api.squidrouter.com/v2/status), the bridgeType should be set as chainflip if the bridge destination is Arbitrum(42161) or chainflipmultihop if the bridge destination is another EVM chain that is not Arbitrum
This chainflipID can be found in the returned object from the https://v2.api.squidrouter.com/v2/deposit-address endpoint.
Route Parameters Examples
Bitcoin Example
Solana Example
Important Notes
Check the
transactionRequest.typefield in the route response to determine which flow to useFor direct swap pairs (
ON_CHAIN_EXECUTION), sign and submit the transaction data directly on-chainFor all other pairs (
CHAINFLIP_DEPOSIT_ADDRESS), retrieve the deposit address from the/deposit-addressendpoint and transfer assets thereDeposit address swaps require the
bridgeTypeparameter for status checks; direct swaps use the standard transaction hashStatus monitoring for deposit address swaps should use the
chainflipStatusTrackingIdfrom the deposit-address responseTransaction confirmation times vary significantly between chains
Last updated