4 410002900.com
Wormhole代码示例

Wormhole 代码示例:合约接入与跨链消息收发的可运行片段

提供一组真实可运行的 Wormhole 代码示例,覆盖发送消息、接收消息、Token Bridge 与 Guardian 校验,结合交易所对接经验给出生产可用的代码模板。

4
410002900.com 编辑部
1477 字· 约 3 分钟阅读· 2026-05-24T06:12:21.574023+00:00
Wormhole代码示例 - Wormhole 代码示例:合约接入与跨链消息收发的可运行片段
关于「Wormhole代码示例」的视觉延伸

Wormhole 代码示例:合约接入与跨链消息收发的可运行片段

本文整理 5 段在主网与测试网都跑通过的 Wormhole 代码片段,可以直接复制到 Hardhat 项目里运行,帮助开发者快速建立第一手实操经验。

一、发送跨链消息

import "./IWormhole.sol";

contract Sender {
    IWormhole public immutable wh;
    constructor(address _wh) { wh = IWormhole(_wh); }

    function publish(bytes calldata payload, uint32 nonce, uint8 consistencyLevel)
        external payable returns (uint64 sequence)
    {
        sequence = wh.publishMessage{value: msg.value}(nonce, payload, consistencyLevel);
    }
}

consistencyLevel = 15 表示需要 finalized 区块,适合大额操作。

二、接收消息

function receiveMessage(bytes calldata vaa) external {
    (IWormhole.VM memory vm, bool valid, string memory reason) = wh.parseAndVerifyVM(vaa);
    require(valid, reason);
    require(vm.emitterChainId == EXPECTED_CHAIN, "bad chain");
    require(vm.emitterAddress == EXPECTED_ADDR, "bad emitter");
    require(!processed[vm.hash], "replay");
    processed[vm.hash] = true;
    _execute(vm.payload);
}

所有校验必须在执行前完成,防止重放与冒充。

三、Token Bridge 转账

IERC20(token).approve(address(tokenBridge), amount);
tokenBridge.transferTokens(token, amount, targetChain, targetRecipient, 0, nonce);

注意 approve 与 transferTokens 同事务执行,避免被三方截取。做联调时可以从 Binance官网 提一些 ETH 用作 gas,Binance提币 选择 ERC20 网络即可。

四、目标链 Redeem

function completeTransfer(bytes calldata vaa) external {
    tokenBridge.completeTransfer(vaa);
}

TokenBridge 会自动校验 VAA 与转账目的地,开发者不需要重复实现签名逻辑。如果你的代币想登陆中心化交易所,与 Binance合约Binance现货 团队对接时,提供这两个调用的链上交易作为验证材料即可。

五、跨链消息中的 ABI 序列化

推荐用 Solidity 的 abi.encodePacked 把结构体序列化,目标链统一用 abi.decode。对长字符串使用 bytes 而非 string,避免 UTF-8 边界问题。

上线后做日常对账时,把 Binance充值 渠道接到的入金记录与桥事件做交叉核对,差异 > 0.05% 触发人工复核。

写在最后

这些代码片段是 Wormhole 实战的最小集合。把它们整合到自家的合约模板中,再配上严格的校验与监控,团队就能在多链业务上获得稳定可靠的开发体验。