Overview
Starkzap supports bidirectional bridging between Starknet and supported external chains:- Ethereum (Canonical, CCTP, OFT, OFT-migrated, Layerswap routes)
- Solana (Hyperlane, Layerswap routes)
- Configure the SDK (including optional bridging config)
- Fetch bridgeable tokens with
sdk.getBridgingTokens(...) - Connect an external wallet (
ConnectedEthereumWalletorConnectedSolanaWallet) - Inspect balance, allowance, and estimated fees
- Call
wallet.deposit(...)to submit the source-chain transaction
- Inspect L2 balance and estimated fees with
wallet.getWithdrawBalance(...)andwallet.getInitiateWithdrawFeeEstimate(...) - Call
wallet.initiateWithdraw(...)to burn/lock tokens on Starknet - Monitor status with
wallet.getWithdrawalState(...)orwallet.monitorWithdrawal(...) - For Canonical and CCTP: call
wallet.completeWithdraw(...)when state isREADY_TO_CLAIM
Install Optional Dependencies
Install only what you use. For Ethereum routes:SDK Configuration
Usebridging config when you need custom external RPCs or OFT support.
The SDK uses external RPCs to read source-chain state (balances/allowances), estimate bridge fees, and submit source-chain transactions reliably. Without explicit RPC URLs, these operations can be rate-limited or unavailable depending on your environment:
Fetch Bridgeable Tokens
Layerswap-bridgeable tokens are sourced from the Layerswap API and only appear when
bridging.layerswapApiKey is configured. Without it, discovery silently omits Layerswap routes.Connect External Wallets
Take a look at the Examples. For WalletConnect setup details, see WalletConnect Docs. In practice, you establish the external wallet session first (for example with WalletConnect), then pass its provider/account/chain intoConnectedEthereumWallet.from(...) or ConnectedSolanaWallet.from(...) for bridge calls.
Ethereum (EIP-1193)
Solana
On Starknet Sepolia the two Solana routes target different clusters: Layerswap uses Solana Testnet (
4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z) and Hyperlane uses Solana Devnet (EtWTRABZaYq6iMfeYKouRu166VU2xqa1). Connect the Solana wallet to the cluster matching the route you intend to use. On Starknet Mainnet, both routes use Solana Mainnet.Estimate and Deposit
On Ethereum a deposit can be two transactions: an ERC20
approve sized to the amount, then the deposit. Do not start a second deposit of the same token before the first has resolved. Both would read the same allowance and both would send an approve, and since approve sets rather than adds, the second deposit lands short and reverts. Serialize deposits per token, or set an allowance that covers them all before starting.Withdraw from Starknet
Initiate (all protocols)
Complete (Canonical & CCTP only)
OFT, Hyperlane, and Layerswap are single-step — delivery on the destination chain happens automatically. For Canonical and CCTP, a second L1 transaction is required once the state becomesREADY_TO_CLAIM.
Auto-withdraw (Canonical only)
Canonical supports anautoWithdraw option where a relayer handles L1 completion — no completeWithdraw call needed.
Monitor Bridge Transfers
Simplified state (recommended for UI)
WithdrawalState values:
PENDING— bridging in progress, no user action neededREADY_TO_CLAIM— ready to finalize on L1; callcompleteWithdraw(CCTP/Canonical)COMPLETED— bridge flow fully completeERROR— unrecoverable error
Detailed status (advanced use)
UsemonitorWithdrawal to get the full status snapshot including CCTP attestation data needed for completeWithdraw:
Protocol Notes
Common Errors
- Chain mismatch: token source chain and connected external wallet chain must match.
- Missing LayerZero key: OFT routes require
bridging.layerZeroApiKey. - Missing Layerswap key: Layerswap routes and Layerswap token discovery require
bridging.layerswapApiKey; the key must match the environment (Mainnet key for Starknet Mainnet, Testnet key for Starknet Sepolia). - Layerswap call not in
bridging.layerswapAllowedContracts: the deposit action carried a call to a contract other than the bridge token. Nothing was signed. Inspect the call, and list the contract only if it is a Layerswap helper you have verified. - Unsupported chain pair: Ethereum mainnet must pair with Starknet mainnet; testnet pairings must match.
- CCTP options missing:
completeWithdrawrequiresoptionswith attestation data for CCTP routes — the parameter is non-optional in practice. - Attestation expired: CCTP attestations have an expiration block; re-attestation is requested automatically during
completeWithdraw.
Next Steps
- Configuration — full
SDKConfigoptions - API Reference — exact method signatures
- Examples — web example with bridge UI flow