> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tenderly.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Multichain 快速入门

> 创建 Multichain Virtual Environment，将其接入 Foundry 或 Hardhat，为账户注资，并端到端运行一次跨链交易。

本教程将带您从零开始，在 Multichain Virtual Environment 上完成一笔跨链交易。到最后，您将拥有一个跨越多个网络的 Virtual Environment，Bridge Module 在它们之间中继消息，您的合约部署在每个网络上，每条链上都有已注资的账户，以及一笔可在统一仪表板时间线上看到的可工作的跨链交易。

如果您尚未阅读[概述](/virtual-environments/multichain/overview)，请先阅读。它解释了什么是 Multichain Virtual Environment、RPC URL 的结构，以及 Virtual Chain ID 的含义。

## 开始之前

您需要：

* 一个已启用多链能力的 Tenderly 账户。如果您在 Virtual Environment 创建期间看不到添加多个网络的选项，请[联系我们](https://tenderly.co/contact-us)。
* 一个您愿意在测试环境中使用的钱包私钥。在您的 shell 中将其设置为 `PRIVATE_KEY`。
* 本地安装了 [Foundry](https://www.getfoundry.sh/) 或 [Hardhat](https://hardhat.org/)。

本教程其余部分假设使用 Ethereum mainnet、Arbitrum、Optimism 和 Base，但相同的流程适用于任何受支持网络的组合。

## 运行教程

<Steps>
  ### 创建 Multichain Virtual Environment

  在 Tenderly Dashboard 中打开 **Virtual Environments** 并启动一个新的。默认已预选 Ethereum mainnet。从网络选择器中添加 Arbitrum、Optimism 和 Base。生产链首先出现在列表中，testnet 排在底部。

  对于每个网络，您可以选择：

  * **Fork point。** 从最新区块 fork（默认），或选择特定的区块号、时间戳或日期。
  * **Chain ID。** 除非您有理由覆盖它，否则保留默认的 Virtual Chain ID。[Virtual Chain ID](/virtual-environments/multichain/overview#virtual-chain-ids) 部分解释了权衡。

  保存 Virtual Environment。记下 Tenderly 为它分配的 slug。该 slug 是您从这里开始使用的每个 RPC URL 的一部分。

  ### 启用 Bridge Module

  打开 Virtual Environment 的设置并将 **Bridging** 切换为 On。启用后，Bridge Module 会监视 Virtual Environment 中每个网络上的跨链事件，并将其自动中继到目标链。参见 [Bridges](/virtual-environments/multichain/bridges) 了解它涵盖的协议和网络。

  ### 将 RPC 接入到您的项目

  您 Virtual Environment 中的每个网络都有一个具有可预测形式的唯一 RPC URL：

  ```bash theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
  https://virtual.<network>.<region>.rpc.tenderly.co/<org-slug>/<virtual-env-slug>
  ```

  从 Virtual Environment 详情页复制 RPC URL 并将它们添加到您的项目配置中。

  <Tabs>
    <Tab title="Foundry">
      ```toml title="foundry.toml" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
      [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。部署完成的那一刻，您就会在仪表板中获得一个已验证的合约。
    </Tab>

    <Tab title="Hardhat">
      ```typescript title="hardhat.config.ts" showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
      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],
          },
        },
      };
      ```
    </Tab>
  </Tabs>

  ### 在每个网络上为账户注资

  为您的 Virtual Environment 打开[无限水龙头](/virtual-environments/unlimited-faucet)，并为您将部署所使用的地址充值。在每个网络上都这样做，因为余额是按网络保存的。原生货币足以进行部署本身。如果您的合约会移动代币，也请为这些代币充值。

  ### 部署并触发跨链交易

  将您的合约部署到您附加到 Virtual Environment 的每个网络上。

  <Tabs>
    <Tab title="Foundry">
      ```bash showLineNumbers theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
      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>
      ```
    </Tab>

    <Tab title="Hardhat">
      ```bash theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
      npx hardhat run scripts/deploy.ts --network tenderly_mainnet
      ```
    </Tab>
  </Tabs>

  一旦合约在每个网络上部署好，按照您通常的方式发送一笔跨链交易（例如一次 LayerZero `send` 调用）。开启 Bridge Module 后，目标端投递会立即发布。打开 Virtual Environment 仪表板，您应该会看到源交易和目标交易都出现在统一时间线上。

  使用 [Bridges](/virtual-environments/multichain/bridges#transaction-views) Source/Destination 过滤器显式确认往返。
</Steps>

您现在已经拥有一个可用的、支持跨链桥接的 Multichain Virtual Environment。

## 接下来可以尝试的

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

<CardGroup cols={2}>
  <Card title="在 CI 中自动化部署" href="/virtual-environments/ci-cd/github-actions-foundry">
    使用 GitHub Actions 在每次推送时并行部署到每个网络。CI/CD 指南展示了 matrix 工作流以及您所需的 secrets。
  </Card>

  <Card title="暂存您的前端" href="/virtual-environments/dapp-ui/wagmi">
    将您的 dApp 指向 Virtual Environment RPC，为您的团队和审核者提供一个能够演练完整多链流程的环境。
  </Card>

  <Card title="通过 API 创建 Virtual Environments" href="/virtual-environments/develop/create-virtual-environment-via-api">
    `multivnets` 端点在一次调用中创建一个 Multichain Virtual Environment。适用于按 PR 配置。
  </Card>

  <Card title="测试桥接失败" href="/virtual-environments/multichain/bridges#manual-bridge-controls">
    手动桥接控件让您确定性地模拟 gas 饥饿、重复投递、修改过的载荷以及其他失败模式。
  </Card>
</CardGroup>

## 另请参阅

* [Multichain Virtual Environments 概述](/virtual-environments/multichain/overview)
* [Bridges](/virtual-environments/multichain/bridges)
* [Unlimited Faucet](/virtual-environments/unlimited-faucet)
* [Admin RPC](/virtual-environments/admin-rpc)
