Развертывание Hyperlane Warp Routes для бриджинга токенов ERC20

A. Содержание

В этом руководстве мы покажем, как перевести WETH10 с L1 (Sepolia) на L2 (Rollup Testnet) с помощью Hyperlane Warp Routes.

Эти шаги применимы и ко всем другим токенам ERC-20 на любом роллапе AltLayer.

B. Развертывание контракта

В данном руководстве мы будем использовать следующие адреса

Разработчик: 0xC6391bAb6AfCc5dBDcbafA57C3340BbF9C800d33

Валидатор: 0x7C19F05dB313D89dea09781DF2c076EC1132C423

Передатчик: 0x5d3C6567683d9467B2c317A02ddA5B97E20F6029

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

Для начала клонируйте репозиторий hyperlane https://github.com/hyperlane-xyz/hyperlane-deploy и запустите команду

yarn install

Измените config/chains.ts, указав конфигурацию чейна.

Ниже приведен пример конфигурации, в которой L1 - Sepolia, а L2 - тестнет AltLayer.

import { ChainMap, ChainMetadata } from '@hyperlane-xyz/sdk';

export const chains: ChainMap<ChainMetadata> = {
  sepolia: {
    name: 'sepolia',
    chainId: 11155111,
    nativeToken: {
      name: 'ether',
      symbol: 'ETH',
      decimals: 18,
    },
    publicRpcUrls: [
      {
        http: 'https://eth-sepolia.g.alchemy.com/v2/api-key',
      },
    ],
  },
  testnet: {
    name: 'testnet',
    chainId: 9997,
    nativeToken: {
      name: 'ALT',
      symbol: 'ALT',
      decimals: 18,
    },
    publicRpcUrls: [
      {
        http: 'https://testnet-rollup-api.altlayer.io',
      },
    ],
  },
};

Измените config/multisig_ism.ts. В данном примере мы установим значение 1. В реальной ситуации следует установить более высокий порог.

import { ChainMap, MultisigIsmConfig } from '@hyperlane-xyz/sdk';

export const multisigIsmConfig: ChainMap<MultisigIsmConfig> = {
  // ----------- Your chains here -----------------
  sepolia: {
    threshold: 1,
    validators: [
      '0x7C19F05dB313D89dea09781DF2c076EC1132C423', // validator address
    ],
  },
  testnet: {
    threshold: 1,
    validators: [
      '0x7C19F05dB313D89dea09781DF2c076EC1132C423', // validator address
    ],
  },
};

Запустите следующую команду с использованием приватного ключа разработчика для развертывания контрактов на L1 (Sepolia)

yarn ts-node scripts/deploy-hyperlane.ts --local testnet \
  --remotes sepolia \
  --key <deployer private key>

Запустите следующую команду с использованием приватного ключа разработчика для развертывания контрактов на L2

yarn ts-node scripts/deploy-hyperlane.ts --local sepolia \
  --remotes testnet \
  --key <deployer private key>

После запуска команды будут получены некоторые артефакты. Например:

  1. artifacts/addresses.json

{
  "testnet": {
    "multisigIsm": "0x63aC18CFB9207ba750393DaB7509F1aAE4F35B97",
    "proxyAdmin": "0x6aa797913c88b03718044924DDC16A3Ee0f37A3F",
    "mailbox": "0x190c91b92c95DEDf09a954aC538CC926945d81Fb",
    "validatorAnnounce": "0xFc9D5Cf9bdd090182968aF7D478Ee9dfF06dD909",
    "testRecipient": "0xD08D64aF4ed573845861Abcd89860ae8889ed12D",
    "storageGasOracle": "0xAd2310dBcB8aae371082831dA587e96BB1E51daD",
    "interchainGasPaymaster": "0xe7A1f91B9049cC4D1a82C271aF4D6CCA9AFeB20e",
    "defaultIsmInterchainGasPaymaster": "0xd51A3FBAC4424a2a0C330686020341FD70ADc9c5"
  },
  "sepolia": {
    "multisigIsm": "0x63aC18CFB9207ba750393DaB7509F1aAE4F35B97",
    "testRecipient": "0x6aa797913c88b03718044924DDC16A3Ee0f37A3F",
    "proxyAdmin": "0x5324d2355c2cB034cE5dCBCB3Fbb868DBa8C982a",
    "storageGasOracle": "0x190c91b92c95DEDf09a954aC538CC926945d81Fb",
    "interchainGasPaymaster": "0x65Ff5C940Dd9f11BE608e44602370B347f581B2b",
    "defaultIsmInterchainGasPaymaster": "0x34407596169673017849399F332819aa5ef0e565",
    "mailbox": "0xd51A3FBAC4424a2a0C330686020341FD70ADc9c5",
    "validatorAnnounce": "0x2c29105f892e6A7F8E0547A9423861734c6352D0"
  }
}
  1. artifacts/agent_config.json

{
  "chains": {
    "sepolia": {
      "name": "sepolia",
      "domain": 11155111,
      "addresses": {
        "mailbox": "0xd51A3FBAC4424a2a0C330686020341FD70ADc9c5",
        "interchainGasPaymaster": "0x65Ff5C940Dd9f11BE608e44602370B347f581B2b",
        "validatorAnnounce": "0x2c29105f892e6A7F8E0547A9423861734c6352D0"
      },
      "protocol": "ethereum",
      "finalityBlocks": 1,
      "connection": {
        "type": "http"
      },
      "index": {
        "from": 3728779
      }
    },
    "testnet": {
      "name": "testnet",
      "domain": 9997,
      "addresses": {
        "mailbox": "0x190c91b92c95DEDf09a954aC538CC926945d81Fb",
        "interchainGasPaymaster": "0xe7A1f91B9049cC4D1a82C271aF4D6CCA9AFeB20e",
        "validatorAnnounce": "0xFc9D5Cf9bdd090182968aF7D478Ee9dfF06dD909"
      },
      "protocol": "ethereum",
      "finalityBlocks": 1,
      "connection": {
        "type": "http"
      },
      "index": {}
    }
  }
}

Измените config/warp_tokens.ts, используя значения из artifacts/addresses.json. В данной конфигурации мы заполнили контрактные адреса WETH10, токен, который мы хотим перевести с L1 на L2.

import { TokenType } from '@hyperlane-xyz/hyperlane-token';

import type { WarpRouteConfig } from '../src/warp/config';

// Конфигурация для развертывания Warp Routes на набор чейнов
// Не требуется для развертываний Hyperlane
export const warpRouteConfig: WarpRouteConfig = {
  base: {
    // Имя чейна должно быть указано в Hyperlane SDK или в конфигурации chains.ts
    chainName: 'sepolia',
    type: TokenType.collateral, //  TokenType.native или TokenType.collateral
    // Если тип является залоговым, требуется адрес токена:
    address: '0xe67abda0d43f7ac8f37876bbf00d1dfadbb93aaa', // WETH10
    mailbox: '0xd51A3FBAC4424a2a0C330686020341FD70ADc9c5',
    interchainGasPaymaster: '0x65Ff5C940Dd9f11BE608e44602370B347f581B2b',

    // По желанию можно указать адреса владельца, адреса почты и interchainGasPaymaster
    // Если не указано, будут использоваться артефакты Permissionless Deployment или значения SDK по умолчанию
  },
  synthetics: [
    {
      chainName: 'testnet',
      mailbox: '0x190c91b92c95DEDf09a954aC538CC926945d81Fb',
      interchainGasPaymaster: '0xe7A1f91B9049cC4D1a82C271aF4D6CCA9AFeB20e',

      // По желанию можно указать имя, символ и totalSupply
      // Если не указано, будут использоваться свойства базового токена

      // По желанию можно указать адреса владельца, адреса почты и interchainGasPaymaster
      //  Если не указано, будут использоваться артефакты Permissionless Deployment или значения по умолчанию SDK
    },
  ],
};

Запустите эту команду с использованием приватного ключа разработчика для развертывания wrap контрактов. В результате контракты HypERC20 будут развернуты на L2. В этом примере контрактом HypERC20 будет WETH10 на L2.

yarn ts-node scripts/deploy-warp-routes.ts --key <deployer private key>

После выполнения команды будут выведены следующие артефакты

  1. artifacts/warp-token-addresses.json

{
  "sepolia": {
    "router": "0xffA5f94329f41b9353F4ccA74Ba59D3Faed75AAe",
    "tokenType": "collateral"
  },
  "testnet": {
    "router": "0xffA5f94329f41b9353F4ccA74Ba59D3Faed75AAe",
    "tokenType": "synthetic"
  }
}
  1. artifacts/warp-ui-token-list.json

[
  {
    "chainId": 11155111,
    "name": "Wrapped Ether v10",
    "symbol": "WETH10",
    "decimals": 18,
    "type": "collateral",
    "address": "0xe67abda0d43f7ac8f37876bbf00d1dfadbb93aaa",
    "hypCollateralAddress": "0xffA5f94329f41b9353F4ccA74Ba59D3Faed75AAe"
  }
]

Last updated