Linking blockchains means making two independent ledgers agree on a fact: an asset moved, a message was delivered, or a price was observed. There is no native way for one chain to read another chain's state, so every link relies on an external party or protocol that observes one chain and attests to another. This article explains the main linking patterns, shows how to verify a cross-chain transfer with runnable code, and covers the failure modes and tradeoffs you should measure before trusting a bridge or messaging layer.
What linking blockchains actually requires
A blockchain is a closed state machine. Validators only execute transactions that reference state already known to that chain, so a contract on one network cannot natively read a balance, event, or storage slot on another. Linking blockchains is the practice of closing that gap: an external system observes a source chain, produces an attestation, and a destination chain acts on that attestation.
That external system is the trust boundary. Whether it is called a bridge, a cross-chain messaging protocol, an oracle network, or a light-client relay, the security of the link depends on who can produce a valid attestation and how the destination chain verifies it. Understanding linking blockchains is therefore less about the word 'bridge' and more about the verification model.
This guide covers the common linking patterns, a reproducible way to verify a cross-chain transfer, and the tradeoffs to measure. For endpoint selection per network, the companion RPC Assistant answers are linked at the end rather than repeated here.
Assumptions and prerequisites
The procedures below assume you have RPC access to at least two networks, a way to read transaction receipts, and a basic understanding of events and logs. You do not need a funded wallet to run the read-only verification steps; you do need one only if you intend to initiate a transfer.
Keep placeholders literal. Replace RPC_URL_SOURCE and RPC_URL_DEST with endpoints you control, and never paste a real private key into a shared script. If you are choosing providers, start with the multi-chain RPC endpoints guide and the RPC endpoints guide.
- Source and destination RPC URLs for the two chains you are linking
- The bridge or messaging contract addresses on both chains
- The transaction hash of the source-chain deposit or message send
- A block explorer for each chain to cross-check logs
The four main patterns for connecting different blockchain networks
Most production links fall into one of four patterns. They differ in what is being moved and who attests to it.
Lock-and-mint / burn-and-release bridges. An asset is locked in a contract on the source chain, and a wrapped representation is minted on the destination. Reversing the flow burns the wrapped asset and releases the original. The bridge custodian or validator set controls the mint, so the link is only as safe as that set.
Cross-chain messaging layers. Instead of moving assets, these protocols deliver arbitrary payloads. A source contract emits a message, an off-chain committee or light client attests to it, and a destination contract executes the payload. Token transfers become one application on top of the messaging layer.
Oracles for external and cross-chain data. Oracle networks observe data, including other chains' state, and write attested values on-chain. They are often used for price feeds and for triggering contract logic based on events elsewhere.
Light-client and rollup-native links. The destination chain verifies source-chain consensus directly, for example a rollup proving its state to a parent chain. This is the strongest verification model but is expensive and chain-specific.
Mental model: observe, attest, verify, execute
Every link can be decomposed into four stages. First, an observer reads the source chain and waits for finality. Second, an attester signs or proves a statement about that state. Third, the destination chain verifies the attestation against a known authority or consensus rule. Fourth, the destination contract executes the effect.
When a cross-chain transfer appears stuck, identify which stage failed. A missing destination transaction usually means the observer has not reached finality or the attester has not signed. A reverted destination transaction usually means verification failed or the payload was already processed. This decomposition is more useful than treating the bridge as a black box.
Finality assumptions matter here. A link that acts on a single confirmation is exposed to source-chain reorgs; a link that waits for economic finality is slower but safer. Measure the actual confirmation policy rather than assuming it.
Runnable check: verify a cross-chain transfer with curl
The first diagnostic is to confirm the source transaction exists and inspect its logs. Use a JSON-RPC call to fetch the receipt and look for the bridge contract's event. The exact event signature depends on the bridge, so read its documentation or ABI first.
The following command fetches a receipt. Replace the placeholders; do not use invented public endpoints in production.
curl -s RPC_URL_SOURCE \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "eth_getTransactionReceipt",
"params": ["0xSOURCE_TX_HASH"]
}'Runnable check: compare source and destination state in JavaScript
A cross-chain transfer is only complete when the destination chain reflects the source event. The script below reads the source receipt and the destination receipt, then prints both statuses and block numbers so you can compare them. It uses ethers and two RPC URLs you supply.
Run it after the bridge reports completion. If the destination status is null, the transaction has not been mined or the hash is wrong. If it is 0, the destination execution reverted.
import { JsonRpcProvider } from 'ethers';
const source = new JsonRpcProvider('RPC_URL_SOURCE');
const dest = new JsonRpcProvider('RPC_URL_DEST');
async function compare(sourceTxHash, destTxHash) {
const [srcReceipt, dstReceipt] = await Promise.all([
source.getTransactionReceipt(sourceTxHash),
dest.getTransactionReceipt(destTxHash),
]);
console.log('source status:', srcReceipt?.status, 'block:', srcReceipt?.blockNumber);
console.log('dest status:', dstReceipt?.status, 'block:', dstReceipt?.blockNumber);
if (!dstReceipt) {
console.log('destination not mined yet: check attester and finality policy');
} else if (dstReceipt.status === 0) {
console.log('destination reverted: check verification and replay protection');
}
}
compare('0xSOURCE_TX_HASH', '0xDEST_TX_HASH');Expected verification result and a results-table procedure
A healthy link produces a source receipt with status 1, a destination receipt with status 1, and a destination block number greater than the source block number. The destination receipt should also contain the bridge's completion event, and the wrapped balance should increase by the expected amount minus fees.
Record your own measurements rather than trusting published numbers. Use a table like the one below and fill it per transfer; leave cells blank until you have observed them.
- | Field | Source chain | Destination chain |
- | Transaction status | | |
- | Block number | | |
- | Timestamp | | |
- | Bridge event emitted | | |
- | Amount before / after | | |
- | Observed latency (seconds) | | |
Troubleshooting stuck or mismatched cross-chain transfers
Source transaction pending. The observer cannot act until the source transaction is mined and reaches the bridge's confirmation threshold. Check the source chain's gas conditions and the bridge's finality policy.
Destination transaction missing. The attester may not have signed, or the message may be queued behind a rate limit. Check the bridge's status page and the attester's on-chain activity. If the bridge uses a challenge period, the delay may be intentional.
Destination transaction reverted. Common causes are replay protection (the message was already processed), insufficient destination gas, or a verification failure because the attestation did not match the expected signer set. Read the revert reason from the receipt logs.
Amount mismatch. Fees, slippage, and decimal differences between chains are frequent culprits. Confirm the wrapped token's decimals and the bridge's fee schedule before assuming a loss.
Limitations and tradeoffs of linking blockchains
Every link adds a trust assumption that does not exist on a single chain. Custodial and validator-set bridges concentrate risk in a small group; light-client links reduce that risk but are expensive and chain-specific. Messaging layers inherit the security of their attester set, and oracles inherit the security of their node operators.
Liquidity is another constraint. Lock-and-mint bridges depend on the destination pool having enough liquidity to release assets; messaging layers depend on destination gas being available. Neither is free, and both can fail under load.
Finally, composability is limited. A link that moves a token does not automatically move its governance rights, yield accrual, or contract-level permissions. Treat each linked asset as a distinct instrument and verify its behavior on the destination chain.
Next steps: measuring and operating a link
Before relying on a link in production, run the verification procedure across several transfers at different times of day and record latency, failure rate, and fee variance. Compare the results against the bridge's published guarantees.
For infrastructure, choose RPC endpoints that cover both chains and expose the methods you need. The API service overview and RPC pricing pages explain the options, and dedicated nodes are appropriate when you need consistent throughput for an observer or relayer. Browse supported networks on the networks page.
If you are selecting a provider for a specific chain, use RPC Assistant for the concrete recommendation rather than guessing from a list. Related answers include best RPC provider for Web3 projects and blockchain node hosting guide.