Развертывание 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>
После запуска команды будут получены некоторые артефакты. Например:
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"
}
}
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>
После выполнения команды будут выведены следующие артефакты
artifacts/warp-token-addresses.json
{
"sepolia": {
"router": "0xffA5f94329f41b9353F4ccA74Ba59D3Faed75AAe",
"tokenType": "collateral"
},
"testnet": {
"router": "0xffA5f94329f41b9353F4ccA74Ba59D3Faed75AAe",
"tokenType": "synthetic"
}
}
artifacts/warp-ui-token-list.json
[
{
"chainId": 11155111,
"name": "Wrapped Ether v10",
"symbol": "WETH10",
"decimals": 18,
"type": "collateral",
"address": "0xe67abda0d43f7ac8f37876bbf00d1dfadbb93aaa",
"hypCollateralAddress": "0xffA5f94329f41b9353F4ccA74Ba59D3Faed75AAe"
}
]
Last updated