Перейти к основному содержанию
Этот туториал проведёт вас от нуля до межцепочечной транзакции в Multichain Virtual Environment. К концу у вас будет Virtual Environment, охватывающая несколько сетей, с Bridge Module, ретранслирующим сообщения между ними, ваши контракты, задеплоенные в каждой сети, пополненные аккаунты в каждой цепочке и рабочая межцепочечная транзакция, видимая в единой шкале времени панели. Если вы ещё не читали обзор, сначала сделайте это. Он объясняет, что такое Multichain Virtual Environment, как устроены RPC URL и что означают Virtual Chain ID.

Прежде чем начать

Вам понадобится:
  • Аккаунт Tenderly с включёнными multichain-возможностями. Если вы не видите опции добавления нескольких сетей при создании Virtual Environment, свяжитесь с нами.
  • Приватный ключ кошелька, который вы готовы использовать в тестовом окружении. Установите его как PRIVATE_KEY в вашем шелле.
  • Установленный локально Foundry или Hardhat.
Остальная часть туториала предполагает Ethereum mainnet, Arbitrum, Optimism и Base, но тот же поток работает с любой комбинацией поддерживаемых сетей.

Пройдите туториал

1
Создайте Multichain Virtual Environment
2
В Tenderly Dashboard откройте Virtual Environments и начните новое. Ethereum mainnet предвыбран по умолчанию. Добавьте Arbitrum, Optimism и Base из списка сетей. Продакшен-цепочки идут первыми в списке, тестовые сети — внизу.
3
Для каждой сети можно выбрать:
4
  • Fork point. Форк из последнего блока (по умолчанию) или выбрать конкретный номер блока, временную метку или дату.
  • Chain ID. Оставьте Virtual Chain ID по умолчанию, если у вас нет причины его переопределять. Раздел Virtual Chain IDs объясняет компромиссы.
  • 5
    Сохраните Virtual Environment. Обратите внимание на слаг, который Tenderly ей присваивает. Слаг является частью каждого RPC URL, который вы будете использовать далее.
    6
    Включите Bridge Module
    7
    Откройте настройки Virtual Environment и включите Bridging. После включения 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
    Скопируйте RPC URL со страницы деталей Virtual Environment и добавьте их в конфигурацию проекта.
    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
    Откройте Unlimited Faucet для вашей 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
    После того как контракты задеплоены в каждой сети, отправьте межцепочечную транзакцию так, как вы делаете это обычно (например, вызов send LayerZero). При включённом Bridge Module доставка на стороне назначения публикуется немедленно. Откройте панель Virtual Environment — вы должны увидеть обе транзакции, исходную и целевую, в единой шкале времени.
    19
    Используйте фильтр Source/Destination в Bridges, чтобы явно подтвердить round-trip.
    Теперь у вас есть работающая Multichain Virtual Environment с межцепочечным мостостроением.

    Что попробовать дальше

    Теперь, когда туториал работает, вот как применить тот же подход к реальным рабочим процессам:

    Автоматизация развёртываний в CI

    Деплойте в каждую сеть при каждом пуше, параллельно, с помощью GitHub Actions. Руководства по CI/CD показывают matrix-workflow и необходимые секреты.

    Стейджинг фронтенда

    Направьте ваш dApp на RPC Virtual Environment и предоставьте команде и ревьюерам окружение, отрабатывающее весь multichain-поток.

    Создание Virtual Environments через API

    Эндпоинт multivnets создаёт Multichain Virtual Environment одним вызовом. Удобно для создания окружения под каждый PR.

    Тестирование сбоев моста

    Ручное управление мостом позволяет детерминированно инсценировать нехватку газа, дублирующие доставки, изменённые payload и другие режимы отказа.

    См. также