Back to Bridge

BridgeX Documentation

What is BridgeX

BridgeX is a cross-chain bridge built directly on Chainlink's Cross-Chain Interoperability Protocol (CCIP). It supports native ETH as well as the CROSS ERC20 token across four testnets: Ethereum Sepolia, Base Sepolia, Polygon Amoy and BNB Smart Chain Testnet using custom Solidity contracts, with no third-party bridge aggregator in the middle.

This is a testnet project built to explore production-grade cross-chain wallet infrastructure, key custody patterns, and CCIP messaging mechanics.

Bridging models

BridgeX uses two different mechanisms depending on the asset:

  • Native ETH — lock & release. ETH is locked in the BridgeX pool on the source chain and an equivalent amount is released from the pre-funded pool on the destination chain.
  • CROSS (ERC20) — burn & mint. CROSS is burned by the token pool on the source chain and freshly minted to the receiver on the destination chain, so total supply stays constant across all chains and there is no pool liquidity requirement.

How it works

  1. You call bridge(destinationChainSelector, receiver, token, amount) on the BridgeX contract. For ETH the token address is the zero address and the value is sent as msg.value; for CROSS you first approve the bridge contract, then the amount is pulled and burned.
  2. The contract sends a CCIP message to the destination chain's BridgeX contract via Chainlink's Router, containing the recipient address, token and amount.
  3. Chainlink's decentralized oracle network (DON) verifies and delivers the message to the destination contract.
  4. The destination contract releases ETH from its pool, or mints CROSS to the recipient.
Source Chain                     Destination Chain
┌─────────────────┐              ┌─────────────────┐
│ lock ETH / burn  │  CCIP msg    │ release ETH /    │
│ CROSS        ────┼─────────────>│ mint CROSS       │
└─────────────────┘              └─────────────────┘

Each contract only trusts messages from a verified counterpart contract address on the paired chain (allow-listed via trustedRemote), preventing spoofed cross-chain messages from draining funds.

Supported networks

ChainChain IDChain SelectorBridge Contract
Ethereum Sepolia11155111160152866017578257530x4133727299A02942Ca9a3e18fD11D95DCa3dAdD3
Base Sepolia84532103449712358744650800x3e4Fe7d25dE550bEacFC185a7fef83270717eEaA
Polygon Amoy80002162817113916706344450xE3Be36F99d9a1F253cBF669a72a12948902aF66C
BNB Smart Chain Testnet97162817113916706344450xE3Be36F99d9a1F253cBF669a72a12948902aF66C

CROSS token & pool addresses

ChainCROSS TokenBurn & Mint Pool
Ethereum Sepolia0x334aE912E59ec7cAe23A12d631cFb6F4889dB80F0x25e9022beBac9001D1Cba2744cfdA068a78F75e9
Base Sepolia0x47b341EB45FC6E69Eee17bD6D85d82CC56ad66240x2Cf54C4a8f5B442Fdfc455Be329B4B74580cb336
Polygon Amoy0x89bb27051790D2f51Ba6b7153447c9C7d3bBB6DF0x2587b881C9F815035df67883A51a538BDe558c68
BNB Smart Chain Testnet0x2587b881C9F815035df67883A51a538BDe558c680x63161F8720179118B3d5E1cd81f9e5dad3F96202

Bridge contracts are verified on-chain — source code is publicly viewable at the links above.

Transaction history

The Activity tab does not scan raw chain logs. BridgeX indexes the Sent event emitted by the bridge contracts with a subgraph on The Graph, and the frontend queries it over GraphQL, filtered by your connected wallet address:

{
  sents(first: 10, orderBy: blockNumber, orderDirection: desc,
        where: { receiver: "0x…" }) {
    messageId
    destinationChainSelector
    receiver
    token
    amount
    blockNumber
    transactionHash
  }
}

Each row resolves the destination chain from the CCIP selector and the token symbol from the token address, and links to the CCIP Explorer via the messageId.

The Activity tab is intentionally recent-only: the subgraph query fetches the latest 10 transfers and the table displays the last 8.

Timing expectations

Bridging is not instant. CCIP messages go through source-chain finality, commitment, risk-management verification, and destination execution. On testnet, this typically takes 5–20 minutes, depending on network conditions. After you submit a bridge transaction, BridgeX gives you a direct link to track live status on Chainlink's CCIP Explorer.

Liquidity model

Native ETH bridging relies on pre-funded pools, so the destination chain's pool must hold enough ETH to cover your amount. BridgeX checks destination pool liquidity before allowing the transaction and blocks it upfront if the pool can't cover it — rather than letting it fail after your funds are already locked on the source side.

CROSS has no such constraint: it is burned on the source chain and minted on the destination chain, so no pre-funded liquidity is required.

Known limitations

This is a testnet project, not audited, and not intended for real funds:

  • Testnet only — Sepolia, Base Sepolia, Polygon Amoy and BSC Testnet assets have no real value.
  • Pool-based ETH liquidity — native ETH liquidity depends on manual pool funding and can be temporarily exhausted.
  • No protocol fee — CCIP messaging fees (paid in LINK) are currently absorbed by the platform, not charged to the sender.
  • No multisig/timelock on admin functions — pool top-ups and trusted-remote configuration are currently single-owner controlled, which is fine for a testnet demo but would need to change for any production use.

FAQ

Why is my transaction taking a while?

CCIP finality on testnet typically takes 5–20 minutes. Track live progress via the CCIP Explorer link shown after you submit.

What happens if the destination pool doesn't have enough ETH?

BridgeX checks this before allowing you to submit, so this shouldn't happen in normal use. If it does, the transaction is blocked before any funds move.

Is this safe to use with real money?

No — this is a testnet-only project for learning and demonstration purposes.

Links

Owner