Skip to main content
Generic cross-chain messaging protocol with guardian-based attestation. Supports token bridging and arbitrary message passing.

Notes

  • Uses Wormhole chain IDs (NOT EVM chain IDs). E.g. Ethereum=2, BSC=4, Polygon=5, Avalanche=6, Arbitrum=23, Optimism=24, Base=30
  • Two-step process: (1) transferTokens on source, (2) completeTransfer on destination with signed VAA
  • If arbiterFee > 0, any relayer can submit the VAA and earn the fee. Otherwise, recipient must self-redeem
  • Bridged tokens are wrapped versions (e.g. “Wormhole-wrapped USDC”) unless using CCTP integration
  • 19 guardians must reach 2/3+1 consensus for message finality (typically 1-15 minutes)
  • Query messageFee() on CoreBridge to know how much native token to attach

Its names in a program

On Ethereum, Wormhole is a namespace: its contracts need no import.

Deployments

ABI

WormholeCoreBridgeABI

import WormholeCoreBridgeABI from "./protocols/wormhole/WormholeCoreBridgeABI.json"; Speaks for: coreBridge.
  • publishMessage(uint32 nonce, bytes payload, uint8 consistencyLevel) payable returns (uint64 sequence)
  • messageFee() view returns (uint256)

WormholeTokenBridgeABI

import WormholeTokenBridgeABI from "./protocols/wormhole/WormholeTokenBridgeABI.json"; Speaks for: tokenBridge.
  • transferTokens(address token, uint256 amount, uint16 recipientChain, bytes32 recipient, uint256 arbiterFee, uint32 nonce) payable returns (uint64 sequence)
  • completeTransfer(bytes encodedVm)
  • wrappedAsset(uint16 tokenChainId, bytes32 tokenAddress) view returns (address)

Next steps