NEW: Bitcoin and Solana

Bitcoin and Solana cross-chain swaps are now on Squid!

The cross-chain swap mechanism is powered by Chainfliparrow-up-right.

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 repoarrow-up-right.

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)

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)

From Token
To Token
To Chain

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)

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-addressarrow-up-right) 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-addressarrow-up-right) 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: bitcoin

  • Native Token: satoshi

  • Minimum Swap Amount: .0007 BTC

  • The Bitcoin wallet address should be a Native SegWit (Bech32) address

Solana Parameters

  • ChainID: solana-mainnet-beta

  • Native Token: 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee

  • Supported 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/statusarrow-up-right), 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-addressarrow-up-right endpoint.

Route Parameters Examples

Bitcoin Example

Solana Example

Important Notes

  1. Check the transactionRequest.type field in the route response to determine which flow to use

  2. For direct swap pairs (ON_CHAIN_EXECUTION), sign and submit the transaction data directly on-chain

  3. For all other pairs (CHAINFLIP_DEPOSIT_ADDRESS), retrieve the deposit address from the /deposit-address endpoint and transfer assets there

  4. Deposit address swaps require the bridgeType parameter for status checks; direct swaps use the standard transaction hash

  5. Status monitoring for deposit address swaps should use the chainflipStatusTrackingId from the deposit-address response

  6. Transaction confirmation times vary significantly between chains

Last updated