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
- 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 asmsg.value; for CROSS you first approve the bridge contract, then the amount is pulled and burned. - The contract sends a CCIP message to the destination chain's BridgeX contract via Chainlink's Router, containing the recipient address, token and amount.
- Chainlink's decentralized oracle network (DON) verifies and delivers the message to the destination contract.
- 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
| Chain | Chain ID | Chain Selector | Bridge Contract |
|---|---|---|---|
| Ethereum Sepolia | 11155111 | 16015286601757825753 | 0x4133727299A02942Ca9a3e18fD11D95DCa3dAdD3 |
| Base Sepolia | 84532 | 10344971235874465080 | 0x3e4Fe7d25dE550bEacFC185a7fef83270717eEaA |
| Polygon Amoy | 80002 | 16281711391670634445 | 0xE3Be36F99d9a1F253cBF669a72a12948902aF66C |
| BNB Smart Chain Testnet | 97 | 16281711391670634445 | 0xE3Be36F99d9a1F253cBF669a72a12948902aF66C |
CROSS token & pool addresses
| Chain | CROSS Token | Burn & Mint Pool |
|---|---|---|
| Ethereum Sepolia | 0x334aE912E59ec7cAe23A12d631cFb6F4889dB80F | 0x25e9022beBac9001D1Cba2744cfdA068a78F75e9 |
| Base Sepolia | 0x47b341EB45FC6E69Eee17bD6D85d82CC56ad6624 | 0x2Cf54C4a8f5B442Fdfc455Be329B4B74580cb336 |
| Polygon Amoy | 0x89bb27051790D2f51Ba6b7153447c9C7d3bBB6DF | 0x2587b881C9F815035df67883A51a538BDe558c68 |
| BNB Smart Chain Testnet | 0x2587b881C9F815035df67883A51a538BDe558c68 | 0x63161F8720179118B3d5E1cd81f9e5dad3F96202 |
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.