跳转到主要内容
本教程将带您从零开始,在 Multichain Virtual Environment 上完成一笔跨链交易。到最后,您将拥有一个跨越多个网络的 Virtual Environment,Bridge Module 在它们之间中继消息,您的合约部署在每个网络上,每条链上都有已注资的账户,以及一笔可在统一仪表板时间线上看到的可工作的跨链交易。 如果您尚未阅读概述,请先阅读。它解释了什么是 Multichain Virtual Environment、RPC URL 的结构,以及 Virtual Chain ID 的含义。

开始之前

您需要:
  • 一个已启用多链能力的 Tenderly 账户。如果您在 Virtual Environment 创建期间看不到添加多个网络的选项,请联系我们
  • 一个您愿意在测试环境中使用的钱包私钥。在您的 shell 中将其设置为 PRIVATE_KEY
  • 本地安装了 FoundryHardhat
本教程其余部分假设使用 Ethereum mainnet、Arbitrum、Optimism 和 Base,但相同的流程适用于任何受支持网络的组合。

运行教程

1
创建 Multichain Virtual Environment
2
在 Tenderly Dashboard 中打开 Virtual Environments 并启动一个新的。默认已预选 Ethereum mainnet。从网络选择器中添加 Arbitrum、Optimism 和 Base。生产链首先出现在列表中,testnet 排在底部。
3
对于每个网络,您可以选择:
4
  • Fork point。 从最新区块 fork(默认),或选择特定的区块号、时间戳或日期。
  • Chain ID。 除非您有理由覆盖它,否则保留默认的 Virtual Chain ID。Virtual Chain ID 部分解释了权衡。
  • 5
    保存 Virtual Environment。记下 Tenderly 为它分配的 slug。该 slug 是您从这里开始使用的每个 RPC URL 的一部分。
    6
    启用 Bridge Module
    7
    打开 Virtual Environment 的设置并将 Bridging 切换为 On。启用后,Bridge Module 会监视 Virtual Environment 中每个网络上的跨链事件,并将其自动中继到目标链。参见 Bridges 了解它涵盖的协议和网络。
    8
    将 RPC 接入到您的项目
    9
    您 Virtual Environment 中的每个网络都有一个具有可预测形式的唯一 RPC URL:
    10
    https://virtual.<network>.<region>.rpc.tenderly.co/<org-slug>/<virtual-env-slug>
    
    11
    从 Virtual Environment 详情页复制 RPC URL 并将它们添加到您的项目配置中。
    12
    Foundry
    foundry.toml
    [rpc_endpoints]
    mainnet  = "https://virtual.mainnet.eu.rpc.tenderly.co/<org-slug>/<virtual-env-slug>"
    arbitrum = "https://virtual.arbitrum.eu.rpc.tenderly.co/<org-slug>/<virtual-env-slug>"
    optimism = "https://virtual.optimism.eu.rpc.tenderly.co/<org-slug>/<virtual-env-slug>"
    base     = "https://virtual.base.eu.rpc.tenderly.co/<org-slug>/<virtual-env-slug>"
    
    要针对 Virtual Environment 浏览器验证部署,请将 --verifier-url 设置为相同的 RPC。部署完成的那一刻,您就会在仪表板中获得一个已验证的合约。
    Hardhat
    hardhat.config.ts
    const config: HardhatUserConfig = {
      networks: {
        tenderly_mainnet: {
          url: "https://virtual.mainnet.eu.rpc.tenderly.co/<org-slug>/<virtual-env-slug>",
          accounts: [process.env.PRIVATE_KEY],
        },
        tenderly_arbitrum: {
          url: "https://virtual.arbitrum.eu.rpc.tenderly.co/<org-slug>/<virtual-env-slug>",
          accounts: [process.env.PRIVATE_KEY],
        },
        tenderly_optimism: {
          url: "https://virtual.optimism.eu.rpc.tenderly.co/<org-slug>/<virtual-env-slug>",
          accounts: [process.env.PRIVATE_KEY],
        },
      },
    };
    
    13
    在每个网络上为账户注资
    14
    为您的 Virtual Environment 打开无限水龙头,并为您将部署所使用的地址充值。在每个网络上都这样做,因为余额是按网络保存的。原生货币足以进行部署本身。如果您的合约会移动代币,也请为这些代币充值。
    15
    部署并触发跨链交易
    16
    将您的合约部署到您附加到 Virtual Environment 的每个网络上。
    17
    Foundry
    showLineNumbers
    forge create Counter \
      --private-key $PRIVATE_KEY \
      --rpc-url https://virtual.optimism.eu.rpc.tenderly.co/<org-slug>/<virtual-env-slug> \
      --broadcast \
      --verify \
      --verifier-url https://virtual.optimism.eu.rpc.tenderly.co/<org-slug>/<virtual-env-slug>
    
    Hardhat
    npx hardhat run scripts/deploy.ts --network tenderly_mainnet
    
    18
    一旦合约在每个网络上部署好,按照您通常的方式发送一笔跨链交易(例如一次 LayerZero send 调用)。开启 Bridge Module 后,目标端投递会立即发布。打开 Virtual Environment 仪表板,您应该会看到源交易和目标交易都出现在统一时间线上。
    19
    使用 Bridges Source/Destination 过滤器显式确认往返。
    您现在已经拥有一个可用的、支持跨链桥接的 Multichain Virtual Environment。

    接下来可以尝试的

    现在教程可用了,以下是如何将相同的设置应用到实际工作流程:

    在 CI 中自动化部署

    使用 GitHub Actions 在每次推送时并行部署到每个网络。CI/CD 指南展示了 matrix 工作流以及您所需的 secrets。

    暂存您的前端

    将您的 dApp 指向 Virtual Environment RPC,为您的团队和审核者提供一个能够演练完整多链流程的环境。

    通过 API 创建 Virtual Environments

    multivnets 端点在一次调用中创建一个 Multichain Virtual Environment。适用于按 PR 配置。

    测试桥接失败

    手动桥接控件让您确定性地模拟 gas 饥饿、重复投递、修改过的载荷以及其他失败模式。

    另请参阅