Wormhole Integration: Cross-chain Tokens, Data & DeFi
We integrate Wormhole for cross-chain token and data transfer — from simple bridge UI to complex custom messaging protocols. Our team has completed 30+ projects at the intersection of EVM and Solana. Typical task: transfer USDC from Ethereum to Arbitrum without extra fees and delays. Or send an arbitrary signal from Solana to BNB Chain for state synchronization. Wormhole solves this, but requires understanding of the Guardian network and VAA.
How does Wormhole ensure trust between chains?
Wormhole uses a network of 19 Guardian validators. Each Guardian observes events on the source chain and signs a VAA (Verified Action Approval) — proof that the event occurred. To accept a VAA, 13 out of 19 signatures are needed. This is a compromise between security and speed: compromising 13 Guardian nodes gives full control over the protocol. Understanding this trade-off is critical when choosing an integration method.
Protocol Architecture
Source Chain Wormhole Guardians Target Chain
│ │ │
│ publishMessage(payload) │ │
│ → Core Bridge Contract │ │
│ emits LogMessagePublished │ │
│ observe event │
│ sign VAA │
│ (19 guardians, │
│ 13-of-19 threshold) │
│ │ VAA signed │
│ │ ──────────────────────────► │
│ receiveMessage(VAA)
│ verify Guardian sigs
│ execute payload
Quick Start with Wormhole Connect
To add a bridge UI to your application, use the Wormhole Connect component. No need to write smart contracts:
npm install @wormhole-foundation/wormhole-connect
import WormholeConnect from '@wormhole-foundation/wormhole-connect'
export default function BridgePage() {
return (
<WormholeConnect
config={{
network: 'Mainnet',
chains: ['Ethereum', 'Solana', 'Arbitrum', 'Base', 'BNB'],
tokens: ['ETH', 'USDC', 'USDT', 'WBTC'],
rpcs: {
Ethereum: 'https://eth-mainnet.g.alchemy.com/v2/...',
Solana: 'https://api.mainnet-beta.solana.com',
},
ui: {
title: 'Bridge',
defaultInputs: {
fromChain: 'Ethereum',
toChain: 'Arbitrum',
tokenKey: 'ETH',
}
}
}}
/>
)
}
Connect supports multiple routing protocols: Token Bridge (lock-and-mint), CCTP (Circle's native USDC bridge, no wrapped tokens), and liquidity portals. It automatically selects the optimal route.
Programmatic Integration via Wormhole SDK
For custom cross-chain workflows, we use the TypeScript SDK (wormhole-sdk v3).
import { wormhole } from '@wormhole-foundation/sdk'
import { EvmPlatform } from '@wormhole-foundation/sdk-evm'
import { SolanaPlatform } from '@wormhole-foundation/sdk-solana'
const wh = await wormhole('Mainnet', [EvmPlatform, SolanaPlatform])
// Get chain contexts
const srcChain = wh.getChain('Ethereum')
const dstChain = wh.getChain('Solana')
// Token Bridge transfer
const tb = await srcChain.getTokenBridge()
const transferTxs = tb.transfer(
senderAddress,
{ chain: 'Solana', address: recipientAddress },
'native', // ETH
1_000_000_000_000_000_000n // 1 ETH in wei
)
// Send transaction on Source chain
for await (const tx of transferTxs) {
await signer.sendTransaction(tx.transaction)
}
// Wait for VAA (usually 15 minutes for Ethereum finality)
const [txid] = await srcChain.sendWait(transferTxs, signer)
const vaa = await wh.getVaa(txid, 'TokenBridge:Transfer', 60_000)
// Redeem on Target chain
const redeemTxs = dstChain.getTokenBridge().redeem(recipientAddress, vaa)
for await (const tx of redeemTxs) {
await solanaSigner.sendTransaction(tx.transaction)
}
Why is CCTP Faster than Token Bridge?
CCTP (Circle's Cross-Chain Transfer Protocol) via Wormhole burns USDC on the source chain and mints native USDC on the target chain, with no wrapped tokens. Transfer time: ~2 minutes vs 15–20 minutes for Token Bridge. Supported chains: Ethereum, Arbitrum, Base, Optimism, Avalanche, Polygon. For USDC transfers, CCTP is always preferable.
Custom Messaging: Cross-chain Applications
Wormhole is not just a token bridge but also general-purpose messaging. The source contract publishes an arbitrary payload, and the recipient contract verifies the VAA and executes logic.
// Source chain: sending a message
interface IWormhole {
function publishMessage(
uint32 nonce,
bytes memory payload,
uint8 consistencyLevel
) external payable returns (uint64 sequence);
}
contract CrossChainApp {
IWormhole wormhole;
function sendMessage(bytes memory payload) external payable {
uint64 sequence = wormhole.publishMessage{value: msg.value}(0, payload, 1);
emit MessageSent(sequence);
}
}
// Target chain: receiving VAA
contract CrossChainReceiver {
IWormhole wormhole;
mapping(bytes32 => bool) processedVAAs;
function receiveMessage(bytes memory encodedVAA) external {
(IWormhole.VM memory vm, bool valid, string memory reason) =
wormhole.parseAndVerifyVM(encodedVAA);
require(valid, reason);
require(!processedVAAs[vm.hash], "Already processed");
processedVAAs[vm.hash] = true;
_processPayload(vm.payload);
}
}
Wormhole Queries: Cross-chain Data Without Transactions
Wormhole Queries — on-demand reading of on-chain data from another chain without sending transactions. Guardian nodes make RPC requests and return a signed response. Use case: check a user's balance/staking on Ethereum directly from a contract on Solana. No oracle, no bridge transaction.
Development Tools and Monitoring
Wormholescan (wormholescan.io) — explorer for VAAs and transactions. Essential for debugging: find the VAA by source chain txHash, check Guardian signature status. Testnet: Wormhole supports testnets of all chains. Ethereum Sepolia → Solana Devnet is a standard test route.
| Component | Tool |
|---|---|
| SDK | @wormhole-foundation/sdk v3 |
| UI component | @wormhole-foundation/wormhole-connect |
| Explorer | wormholescan.io |
| VAA monitoring | Wormhole Guardian API |
| Relayer | Wormhole Standard Relayer / custom |
| Tests | Foundry + wormhole-solidity-sdk |
What's Included in the Work and Process
- Route analysis: determine which chains and tokens are needed, select Token Bridge / CCTP / custom messaging. (2-3 days)
- Architecture design: contract interaction scheme, relayer selection.
- Smart contract development: Solidity/Anchor contracts with VAA processing and replay protection. (2-4 weeks)
- SDK/UI integration: connect Wormhole Connect or custom frontend. (3-5 days)
- Testnet testing: check edge cases (VAA expiry, reorg, double-spend).
- Documentation: configuration description and support instructions.
- Deployment and monitoring: set up monitoring of Guardian signatures via Wormholescan.
Typical Integration Mistakes
- Incorrect consistencyLevel setting (using instant instead of finalized on Ethereum).
- Lack of replay protection (processedVAAs).
- Failure to account for finality delays (15 minutes for Ethereum, 200 slots for Solana).
Comparison of Transfer Methods
| Parameter | Token Bridge | CCTP | Custom Messaging |
|---|---|---|---|
| Assets | Any tokens | USDC only (native) | Any data |
| Security | Wrapped tokens | Native USDC | Depends on implementation |
| Speed | 15-20 min | ~2 min | Depends on consistency |
| Flexibility | Transfer only | USDC only | Any payload |
Our team has completed 30+ successful cross-chain integrations. Get a consultation for your project: contact us, we will assess the complexity and propose an architecture.







