diff --git a/rust/README.md b/rust/README.md index 69044f0ed..b51066795 100644 --- a/rust/README.md +++ b/rust/README.md @@ -63,9 +63,9 @@ kubectl cp testnet3/fuji-hyperlane-agent-validator-0:/usr/share/hyperlane /tmp/f Configure additional env variables appropriately: ```bash -HYP_BASE_DB=/tmp/fuji-validator-db +HYP_DB=/tmp/fuji-validator-db CONFIG_FILES=./config/testnet_config.json -HYP_BASE_TRACING_FMT=pretty +HYP_TRACING_FMT=pretty DATABASE_URL= # for scraper ``` diff --git a/rust/agents/relayer/src/msg/metadata/base.rs b/rust/agents/relayer/src/msg/metadata/base.rs index 7fea6ea32..c05c1e631 100644 --- a/rust/agents/relayer/src/msg/metadata/base.rs +++ b/rust/agents/relayer/src/msg/metadata/base.rs @@ -138,7 +138,7 @@ impl BaseMetadataBuilder { Ok(proof) } - pub async fn highest_known_nonce(&self) -> Option { + pub async fn highest_known_leaf_index(&self) -> Option { self.origin_prover_sync.read().await.count().checked_sub(1) } diff --git a/rust/agents/relayer/src/msg/metadata/multisig/legacy_multisig.rs b/rust/agents/relayer/src/msg/metadata/multisig/legacy_multisig.rs index b5eaec9d4..9a97983ac 100644 --- a/rust/agents/relayer/src/msg/metadata/multisig/legacy_multisig.rs +++ b/rust/agents/relayer/src/msg/metadata/multisig/legacy_multisig.rs @@ -37,7 +37,7 @@ impl MultisigIsmMetadataBuilder for LegacyMultisigMetadataBuilder { checkpoint_syncer: &MultisigCheckpointSyncer, ) -> Result> { const CTX: &str = "When fetching LegacyMultisig metadata"; - unwrap_or_none_result!(highest_nonce, self.highest_known_nonce().await); + unwrap_or_none_result!(highest_leaf_index, self.highest_known_leaf_index().await); unwrap_or_none_result!( quorum_checkpoint, checkpoint_syncer @@ -45,7 +45,7 @@ impl MultisigIsmMetadataBuilder for LegacyMultisigMetadataBuilder { validators, threshold as usize, message.nonce, - highest_nonce, + highest_leaf_index, ) .await .context(CTX)? diff --git a/rust/agents/relayer/src/msg/metadata/multisig/merkle_root_multisig.rs b/rust/agents/relayer/src/msg/metadata/multisig/merkle_root_multisig.rs index 334971f64..103907a50 100644 --- a/rust/agents/relayer/src/msg/metadata/multisig/merkle_root_multisig.rs +++ b/rust/agents/relayer/src/msg/metadata/multisig/merkle_root_multisig.rs @@ -7,6 +7,7 @@ use derive_new::new; use eyre::{Context, Result}; use hyperlane_base::MultisigCheckpointSyncer; use hyperlane_core::{unwrap_or_none_result, HyperlaneMessage, H256}; +use tracing::debug; use crate::msg::metadata::BaseMetadataBuilder; @@ -35,7 +36,11 @@ impl MultisigIsmMetadataBuilder for MerkleRootMultisigMetadataBuilder { checkpoint_syncer: &MultisigCheckpointSyncer, ) -> Result> { const CTX: &str = "When fetching MerkleRootMultisig metadata"; - unwrap_or_none_result!(highest_nonce, self.highest_known_nonce().await); + unwrap_or_none_result!( + highest_leaf_index, + self.highest_known_leaf_index().await, + debug!("Couldn't get highest known leaf index") + ); unwrap_or_none_result!( quorum_checkpoint, checkpoint_syncer @@ -43,10 +48,11 @@ impl MultisigIsmMetadataBuilder for MerkleRootMultisigMetadataBuilder { validators, threshold as usize, message.nonce, - highest_nonce + highest_leaf_index ) .await - .context(CTX)? + .context(CTX)?, + debug!("Couldn't get checkpoint in range") ); unwrap_or_none_result!( proof, @@ -58,7 +64,8 @@ impl MultisigIsmMetadataBuilder for MerkleRootMultisigMetadataBuilder { merkle_leaf_id, self.get_merkle_leaf_id_by_message_id(message.id()) .await - .context(CTX)? + .context(CTX)?, + debug!("Couldn't get merkle proof") ); Ok(Some(MultisigMetadata::new( quorum_checkpoint.checkpoint.checkpoint, diff --git a/rust/agents/relayer/src/msg/metadata/multisig/message_id_multisig.rs b/rust/agents/relayer/src/msg/metadata/multisig/message_id_multisig.rs index 30b4fe1da..18fb6bee0 100644 --- a/rust/agents/relayer/src/msg/metadata/multisig/message_id_multisig.rs +++ b/rust/agents/relayer/src/msg/metadata/multisig/message_id_multisig.rs @@ -7,7 +7,7 @@ use derive_new::new; use eyre::{Context, Result}; use hyperlane_base::MultisigCheckpointSyncer; use hyperlane_core::{unwrap_or_none_result, HyperlaneMessage, H256}; -use tracing::warn; +use tracing::{debug, trace, warn}; use crate::msg::metadata::BaseMetadataBuilder; @@ -35,12 +35,23 @@ impl MultisigIsmMetadataBuilder for MessageIdMultisigMetadataBuilder { checkpoint_syncer: &MultisigCheckpointSyncer, ) -> Result> { const CTX: &str = "When fetching MessageIdMultisig metadata"; + unwrap_or_none_result!( + leaf_index, + self.get_merkle_leaf_id_by_message_id(message.id()) + .await + .context(CTX)?, + debug!( + ?message, + "No merkle leaf found for message id, must have not been enqueued in the tree" + ) + ); unwrap_or_none_result!( quorum_checkpoint, checkpoint_syncer - .fetch_checkpoint(validators, threshold as usize, message.nonce) + .fetch_checkpoint(validators, threshold as usize, leaf_index) .await - .context(CTX)? + .context(CTX)?, + trace!("No quorum checkpoint found") ); if quorum_checkpoint.checkpoint.message_id != message.id() { diff --git a/rust/agents/scraper/migration/src/m20230309_000001_create_table_domain.rs b/rust/agents/scraper/migration/src/m20230309_000001_create_table_domain.rs index e674d3489..9358a3050 100644 --- a/rust/agents/scraper/migration/src/m20230309_000001_create_table_domain.rs +++ b/rust/agents/scraper/migration/src/m20230309_000001_create_table_domain.rs @@ -46,6 +46,14 @@ const DOMAINS: &[RawDomain] = &[ is_test_net: false, is_deprecated: false, }, + RawDomain { + name: "basegoerli", + token: "ETH", + domain: 84531, + chain_id: 84531, + is_test_net: false, + is_deprecated: false, + }, RawDomain { name: "bsc", token: "BNB", @@ -150,6 +158,14 @@ const DOMAINS: &[RawDomain] = &[ is_test_net: false, is_deprecated: false, }, + RawDomain { + name: "scrollsepolia", + token: "ETH", + domain: 534351, + chain_id: 534351, + is_test_net: true, + is_deprecated: false, + }, RawDomain { name: "sepolia", token: "ETH", @@ -158,6 +174,14 @@ const DOMAINS: &[RawDomain] = &[ is_test_net: true, is_deprecated: false, }, + RawDomain { + name: "polygonzkevmtestnet", + token: "ETH", + domain: 1442, + chain_id: 1442, + is_test_net: true, + is_deprecated: false, + }, RawDomain { name: "test1", token: "ETH", diff --git a/rust/agents/scraper/src/db/block_cursor.rs b/rust/agents/scraper/src/db/block_cursor.rs index 71904ea4f..0f4237d4a 100644 --- a/rust/agents/scraper/src/db/block_cursor.rs +++ b/rust/agents/scraper/src/db/block_cursor.rs @@ -91,7 +91,7 @@ impl BlockCursor { }; debug!(?model, "Inserting cursor"); if let Err(e) = Insert::one(model).exec(&self.db).await { - warn!(error = ?e, "Failed to update database with new cursor") + warn!(error = ?e, "Failed to update database with new cursor. When you just started this, ensure that the migrations included this domain.") } else { debug!(cursor = ?*inner, "Updated cursor") } diff --git a/rust/agents/validator/src/submit.rs b/rust/agents/validator/src/submit.rs index ee30a4824..d587c5a60 100644 --- a/rust/agents/validator/src/submit.rs +++ b/rust/agents/validator/src/submit.rs @@ -3,12 +3,12 @@ use std::sync::Arc; use std::time::{Duration, Instant}; use std::vec; -use eyre::Result; +use eyre::{bail, Result}; use hyperlane_core::MerkleTreeHook; use prometheus::IntGauge; use tokio::time::sleep; -use tracing::instrument; use tracing::{debug, info}; +use tracing::{error, instrument}; use hyperlane_base::{db::HyperlaneRocksDB, CheckpointSyncer, CoreMetrics}; use hyperlane_core::{ @@ -84,12 +84,16 @@ impl ValidatorSubmitter { }; // ingest available messages from DB - while let Some(message) = self + while let Some(insertion) = self .message_db - .retrieve_message_by_nonce(tree.count() as u32)? + .retrieve_merkle_tree_insertion_by_leaf_index(&(tree.count() as u32))? { - debug!(index = message.nonce, "Ingesting leaf to tree"); - let message_id = message.id(); + debug!( + index = insertion.index(), + queue_length = checkpoint_queue.len(), + "Ingesting leaf to tree" + ); + let message_id = insertion.message_id(); tree.ingest(message_id); let checkpoint = self.checkpoint(&tree); @@ -99,6 +103,19 @@ impl ValidatorSubmitter { message_id, }); + if checkpoint.index == correctness_checkpoint.index { + // We got to the right height, now lets compare whether we got the right tree + if checkpoint.root != correctness_checkpoint.root { + // Bad news, bail + error!( + ?checkpoint, + ?correctness_checkpoint, + "Incorrect tree root, something went wrong" + ); + bail!("Incorrect tree root, something went wrong"); + } + } + // compare against every queued checkpoint to prevent ingesting past target if checkpoint == correctness_checkpoint { debug!(index = checkpoint.index, "Reached tree consistency"); diff --git a/rust/agents/validator/src/validator.rs b/rust/agents/validator/src/validator.rs index a4e017e4d..96cf8ada8 100644 --- a/rust/agents/validator/src/validator.rs +++ b/rust/agents/validator/src/validator.rs @@ -7,12 +7,12 @@ use futures_util::future::ready; use hyperlane_base::{ db::{HyperlaneRocksDB, DB}, run_all, BaseAgent, CheckpointSyncer, ContractSyncMetrics, CoreMetrics, HyperlaneAgentCore, - MessageContractSync, + WatermarkContractSync, }; use hyperlane_core::{ accumulator::incremental::IncrementalMerkle, Announcement, ChainResult, HyperlaneChain, HyperlaneContract, HyperlaneDomain, HyperlaneSigner, HyperlaneSignerExt, Mailbox, - MerkleTreeHook, TxOutcome, ValidatorAnnounce, H256, U256, + MerkleTreeHook, MerkleTreeInsertion, TxOutcome, ValidatorAnnounce, H256, U256, }; use hyperlane_ethereum::{SingletonSigner, SingletonSignerHandle}; use tokio::{task::JoinHandle, time::sleep}; @@ -30,7 +30,7 @@ pub struct Validator { #[as_ref] core: HyperlaneAgentCore, db: HyperlaneRocksDB, - message_sync: Arc, + merkle_tree_hook_sync: Arc>, mailbox: Arc, merkle_tree_hook: Arc, validator_announce: Arc, @@ -75,8 +75,8 @@ impl BaseAgent for Validator { let contract_sync_metrics = Arc::new(ContractSyncMetrics::new(&metrics)); - let message_sync = settings - .build_message_indexer( + let merkle_tree_hook_sync = settings + .build_merkle_tree_hook_indexer( &settings.origin_chain, &metrics, &contract_sync_metrics, @@ -91,7 +91,7 @@ impl BaseAgent for Validator { db: msg_db, mailbox: mailbox.into(), merkle_tree_hook: merkle_tree_hook.into(), - message_sync, + merkle_tree_hook_sync, validator_announce: validator_announce.into(), signer, signer_instance: Some(Box::new(signer_instance)), @@ -129,7 +129,7 @@ impl BaseAgent for Validator { sleep(self.interval).await; } Ok(_) => { - tasks.push(self.run_message_sync().await); + tasks.push(self.run_merkle_tree_hook_sync().await); for checkpoint_sync_task in self.run_checkpoint_submitters().await { tasks.push(checkpoint_sync_task); } @@ -147,20 +147,13 @@ impl BaseAgent for Validator { } impl Validator { - async fn run_message_sync(&self) -> Instrumented>> { + async fn run_merkle_tree_hook_sync(&self) -> Instrumented>> { let index_settings = self.as_ref().settings.chains[self.origin_chain.name()].index_settings(); - let contract_sync = self.message_sync.clone(); - let cursor = contract_sync - .forward_backward_message_sync_cursor(index_settings) - .await; - tokio::spawn(async move { - contract_sync - .clone() - .sync("dispatched_messages", cursor) - .await - }) - .instrument(info_span!("MailboxMessageSyncer")) + let contract_sync = self.merkle_tree_hook_sync.clone(); + let cursor = contract_sync.rate_limited_cursor(index_settings).await; + tokio::spawn(async move { contract_sync.clone().sync("merkle_tree_hook", cursor).await }) + .instrument(info_span!("MerkleTreeHookSyncer")) } async fn run_checkpoint_submitters(&self) -> Vec>>> { diff --git a/rust/chains/hyperlane-ethereum/src/interchain_gas.rs b/rust/chains/hyperlane-ethereum/src/interchain_gas.rs index f4ccfa333..6b4edbc3e 100644 --- a/rust/chains/hyperlane-ethereum/src/interchain_gas.rs +++ b/rust/chains/hyperlane-ethereum/src/interchain_gas.rs @@ -97,8 +97,6 @@ where .query_with_meta() .await?; - println!("found gas payment events: {:?}", events); - Ok(events .into_iter() .map(|(log, log_meta)| { diff --git a/rust/config/testnet4_config.json b/rust/config/testnet4_config.json index c08a5d715..003213a87 100644 --- a/rust/config/testnet4_config.json +++ b/rust/config/testnet4_config.json @@ -44,7 +44,7 @@ "proxyAdmin": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", "mailbox": "0xEf9F292fcEBC3848bF4bB92a96a04F9ECBb78E59", "validatorAnnounce": "0x3726EE36a2A9e11a40d1ffD7D9A1A16e0154cDA0", - "merkleTreeHook": "0x48D4ede231344A19c92b9cA9Ac8B453116012169", + "merkleTreeHook": "0x221FA9CBaFcd6c1C3d206571Cf4427703e023FFa", "storageGasOracle": "0x8356113754C7aCa297Db3089b89F87CC125499fb", "interchainGasPaymaster": "0x1246529edDcA523AfE5c6b9414299633d2E16697", "aggregationHook": "0xdBabD76358897E68E4964647C1fb8Bf524f5EFdB", diff --git a/rust/helm/agent-common/templates/_helpers.tpl b/rust/helm/agent-common/templates/_helpers.tpl index 95b93224a..af2c5a3e9 100644 --- a/rust/helm/agent-common/templates/_helpers.tpl +++ b/rust/helm/agent-common/templates/_helpers.tpl @@ -7,7 +7,7 @@ Expand the name of the chart. {{/* Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +We truncate at 63 chars - 11 because some Kubernetes name fields are limited to this (by the DNS naming spec). If release name contains chart name it will be used as a full name. */}} {{- define "agent-common.fullname" -}} @@ -49,7 +49,7 @@ app.kubernetes.io/managed-by: {{ .Release.Service }} Selector labels */}} {{- define "agent-common.selectorLabels" -}} -app.kubernetes.io/name: {{ include "agent-common.name" . }} +app.kubernetes.io/name: {{ include "agent-common.name" . | trunc 63 | trimSuffix "-"}} app.kubernetes.io/instance: {{ .Release.Name }} {{- end }} diff --git a/rust/helm/hyperlane-agent/templates/external-secret.yaml b/rust/helm/hyperlane-agent/templates/external-secret.yaml index afe217bd0..98a4bc3b2 100644 --- a/rust/helm/hyperlane-agent/templates/external-secret.yaml +++ b/rust/helm/hyperlane-agent/templates/external-secret.yaml @@ -27,7 +27,7 @@ spec: */}} {{- range .Values.hyperlane.chains }} {{- if not .disabled }} - HYP_BASE_CHAINS_{{ .name | upper }}_CUSTOMRPCURLS: {{ printf "'{{ .%s_rpcs | mustFromJson | join \",\" }}'" .name }} + HYP_CHAINS_{{ .name | upper }}_CUSTOMRPCURLS: {{ printf "'{{ .%s_rpcs | mustFromJson | join \",\" }}'" .name }} {{- end }} {{- end }} data: diff --git a/rust/helm/hyperlane-agent/templates/relayer-external-secret.yaml b/rust/helm/hyperlane-agent/templates/relayer-external-secret.yaml index da26afd2e..35ac56b54 100644 --- a/rust/helm/hyperlane-agent/templates/relayer-external-secret.yaml +++ b/rust/helm/hyperlane-agent/templates/relayer-external-secret.yaml @@ -26,6 +26,9 @@ spec: HYP_CHAINS_{{ .name | upper }}_SIGNER_KEY: {{ printf "'{{ .%s_signer_key | toString }}'" .name }} {{- end }} {{- if and (eq .signer.type "aws") $.Values.hyperlane.relayer.aws }} + HYP_CHAINS_{{ .name | upper }}_SIGNER_TYPE: aws + HYP_CHAINS_{{ .name | upper }}_SIGNER_ID: {{ .signer.id }} + HYP_CHAINS_{{ .name | upper }}_SIGNER_REGION: {{ .signer.region}} AWS_ACCESS_KEY_ID: {{ print "'{{ .aws_access_key_id | toString }}'" }} AWS_SECRET_ACCESS_KEY: {{ print "'{{ .aws_secret_access_key | toString }}'" }} {{- end }} diff --git a/rust/hyperlane-base/src/settings/mod.rs b/rust/hyperlane-base/src/settings/mod.rs index ad69df035..a46a46710 100644 --- a/rust/hyperlane-base/src/settings/mod.rs +++ b/rust/hyperlane-base/src/settings/mod.rs @@ -45,7 +45,7 @@ //! ``` //! //! and an environment variable is supplied which defines -//! `HYP_BASE_CHAINS_TEST2_DOMAINID=1`, then the config parser will directly override the value of +//! `HYP_CHAINS_TEST2_DOMAINID=1`, then the config parser will directly override the value of //! the field found in config to be `1`, since the fields in the environment variable name describe //! the path traversal to arrive at this field in the JSON config object. //! @@ -57,7 +57,7 @@ //! 1. The files matching `config//.json`. //! 2. The order of configs in `CONFIG_FILES` with each sequential one //! overwriting previous ones as appropriate. -//! 3. Configuration env vars with the prefix `HYP_BASE` intended +//! 3. Configuration env vars with the prefix `HYP` intended //! to be shared by multiple agents in the same environment //! E.g. `export HYP_CHAINS_ARBITRUM_DOMAINID=3000` //! 5. Arguments passed to the agent on the command line. diff --git a/rust/hyperlane-core/src/utils.rs b/rust/hyperlane-core/src/utils.rs index 7fdefe4af..7752d670f 100644 --- a/rust/hyperlane-core/src/utils.rs +++ b/rust/hyperlane-core/src/utils.rs @@ -243,7 +243,7 @@ macro_rules! unwrap_or_none_result { ($variable_name:ident, $e:expr $(, $else_e:expr)?) => { let Some($variable_name) = $e else { - $($else_e)? + $($else_e;)? return Ok(None); }; }; diff --git a/solidity/package.json b/solidity/package.json index 69a6757fc..8fb9999ef 100644 --- a/solidity/package.json +++ b/solidity/package.json @@ -1,10 +1,10 @@ { "name": "@hyperlane-xyz/core", "description": "Core solidity contracts for Hyperlane", - "version": "1.5.0", + "version": "1.5.4-beta0", "dependencies": { "@eth-optimism/contracts": "^0.6.0", - "@hyperlane-xyz/utils": "1.5.0", + "@hyperlane-xyz/utils": "1.5.4-beta0", "@openzeppelin/contracts": "^4.8.0", "@openzeppelin/contracts-upgradeable": "^4.8.0" }, @@ -56,5 +56,6 @@ "gas-ci": "yarn gas --check --tolerance 2 || (echo 'Manually update gas snapshot' && exit 1)", "slither": "slither ." }, - "types": "dist/index.d.ts" + "types": "dist/index.d.ts", + "stableVersion": "1.5.0" } diff --git a/typescript/helloworld/contracts/HelloWorld.sol b/typescript/helloworld/contracts/HelloWorld.sol index 1d58fb6b1..8af9db02f 100644 --- a/typescript/helloworld/contracts/HelloWorld.sol +++ b/typescript/helloworld/contracts/HelloWorld.sol @@ -71,6 +71,18 @@ contract HelloWorld is Router { ); } + /** + * @notice Fetches the amount of gas that will be used when a message is + * dispatched to the given domain. + */ + function quoteDispatch(uint32 _destinationDomain, bytes calldata _message) + external + view + returns (uint256) + { + return _quoteDispatch(_destinationDomain, _message); + } + // ============ Internal functions ============ function _metadata( uint32 /*_destinationDomain*/ diff --git a/typescript/helloworld/package.json b/typescript/helloworld/package.json index e20faaa99..8be3bda9e 100644 --- a/typescript/helloworld/package.json +++ b/typescript/helloworld/package.json @@ -1,10 +1,10 @@ { "name": "@hyperlane-xyz/helloworld", "description": "A basic skeleton of an Hyperlane app", - "version": "1.5.0", + "version": "1.5.4-beta0", "dependencies": { - "@hyperlane-xyz/core": "1.5.0", - "@hyperlane-xyz/sdk": "1.5.0", + "@hyperlane-xyz/core": "1.5.4-beta0", + "@hyperlane-xyz/sdk": "1.5.4-beta0", "@openzeppelin/contracts-upgradeable": "^4.8.0", "ethers": "^5.7.2" }, @@ -66,5 +66,6 @@ "lodash": "^4.17.21", "async": "^2.6.4", "undici": "^5.11" - } + }, + "stableVersion": "1.5.0" } diff --git a/typescript/helloworld/src/app/app.ts b/typescript/helloworld/src/app/app.ts index 0b8043f6a..7ecf5badf 100644 --- a/typescript/helloworld/src/app/app.ts +++ b/typescript/helloworld/src/app/app.ts @@ -48,10 +48,11 @@ export class HelloWorldApp extends RouterApp { ); const gasLimit = estimated.mul(12).div(10); + const quote = await sender.quoteDispatch(toDomain, message); const tx = await sender.sendHelloWorld(toDomain, message, { ...transactionOverrides, gasLimit, - value, + value: value.add(quote), }); debug('Sending hello message', { from, diff --git a/typescript/helloworld/src/multiProtocolApp/evmAdapter.ts b/typescript/helloworld/src/multiProtocolApp/evmAdapter.ts index 43a7dc6fa..e2f903029 100644 --- a/typescript/helloworld/src/multiProtocolApp/evmAdapter.ts +++ b/typescript/helloworld/src/multiProtocolApp/evmAdapter.ts @@ -1,3 +1,5 @@ +import { BigNumber, ethers } from 'ethers'; + import { ChainName, EthersV5Transaction, @@ -35,11 +37,15 @@ export class EvmHelloWorldAdapter this.chainName, ); + const quote = await contract.callStatic.quoteDispatch( + toDomain, + ethers.utils.toUtf8Bytes(message), + ); // apply gas buffer due to https://github.com/hyperlane-xyz/hyperlane-monorepo/issues/634 const estimated = await contract.estimateGas.sendHelloWorld( toDomain, message, - { ...transactionOverrides, value }, + { ...transactionOverrides, value: BigNumber.from(value).add(quote) }, ); const gasLimit = estimated.mul(12).div(10); @@ -49,7 +55,7 @@ export class EvmHelloWorldAdapter { ...transactionOverrides, gasLimit, - value, + value: BigNumber.from(value).add(quote), }, ); return { transaction: tx, type: ProviderType.EthersV5 }; diff --git a/typescript/helloworld/src/test/helloworld.test.ts b/typescript/helloworld/src/test/helloworld.test.ts index 9ab3784de..07e8e6d80 100644 --- a/typescript/helloworld/src/test/helloworld.test.ts +++ b/typescript/helloworld/src/test/helloworld.test.ts @@ -9,7 +9,6 @@ import { TestCoreApp, TestCoreDeployer, } from '@hyperlane-xyz/sdk'; -import { addressToBytes32 } from '@hyperlane-xyz/utils'; import { HelloWorldConfig } from '../deploy/config'; import { HelloWorldDeployer } from '../deploy/deploy'; @@ -52,21 +51,15 @@ describe('HelloWorld', async () => { expect(await remote.received()).to.equal(0); }); - async function quoteGasPayment(body: string) { - return coreApp - .getContracts(localChain) - .mailbox['quoteDispatch(uint32,bytes32,bytes)']( - remoteDomain, - addressToBytes32(remote.address), - Buffer.from(body), - ); - } - it('sends a message', async () => { const body = 'Hello'; + const payment = await local['quoteDispatch(uint32,bytes)']( + remoteDomain, + Buffer.from(body), + ); await expect( local.sendHelloWorld(remoteDomain, body, { - value: await quoteGasPayment(body), + value: payment, }), ).to.emit(local, 'SentHelloWorld'); // The sent counts are correct @@ -87,8 +80,12 @@ describe('HelloWorld', async () => { it('handles a message', async () => { const body = 'World'; + const payment = await local['quoteDispatch(uint32,bytes)']( + remoteDomain, + Buffer.from(body), + ); await local.sendHelloWorld(remoteDomain, body, { - value: await quoteGasPayment(body), + value: payment, }); // Mock processing of the message by Hyperlane await coreApp.processOutboundMessages(localChain); diff --git a/typescript/infra/config/environments/mainnet2/funding.ts b/typescript/infra/config/environments/mainnet2/funding.ts index 7bfa7a2d9..4cd4d2a93 100644 --- a/typescript/infra/config/environments/mainnet2/funding.ts +++ b/typescript/infra/config/environments/mainnet2/funding.ts @@ -9,7 +9,7 @@ import { environment } from './chains'; export const keyFunderConfig: KeyFunderConfig = { docker: { repo: 'gcr.io/abacus-labs-dev/hyperlane-monorepo', - tag: '8b752d0-20230606-195641', + tag: '9a8d85c-20231013-213905', }, // We're currently using the same deployer key as mainnet. // To minimize nonce clobbering we offset the key funder cron diff --git a/typescript/infra/config/environments/mainnet2/helloworld.ts b/typescript/infra/config/environments/mainnet2/helloworld.ts index c9a803ef2..1e1fc9b3c 100644 --- a/typescript/infra/config/environments/mainnet2/helloworld.ts +++ b/typescript/infra/config/environments/mainnet2/helloworld.ts @@ -13,7 +13,7 @@ export const hyperlane: HelloWorldConfig = { kathy: { docker: { repo: 'gcr.io/abacus-labs-dev/hyperlane-monorepo', - tag: '4c598b9-20230503-205323', + tag: '9a8d85c-20231013-213905', }, chainsToSkip: [], runEnv: environment, @@ -34,7 +34,7 @@ export const releaseCandidate: HelloWorldConfig = { kathy: { docker: { repo: 'gcr.io/abacus-labs-dev/hyperlane-monorepo', - tag: '25f19b7-20230319-124624', + tag: '9a8d85c-20231013-213905', }, chainsToSkip: [], runEnv: environment, diff --git a/typescript/infra/config/environments/testnet4/agent.ts b/typescript/infra/config/environments/testnet4/agent.ts index d5c79df71..e2526b874 100644 --- a/typescript/infra/config/environments/testnet4/agent.ts +++ b/typescript/infra/config/environments/testnet4/agent.ts @@ -74,7 +74,7 @@ const hyperlane: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: 'ed7569d-20230725-171222', + tag: 'cfaf553-20231009-174623', }, blacklist: [ ...releaseCandidateHelloworldMatchingList, @@ -91,7 +91,7 @@ const hyperlane: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: 'ed7569d-20230725-171222', + tag: 'cfaf553-20231009-174623', }, chainDockerOverrides: { [chainMetadata.solanadevnet.name]: { @@ -107,7 +107,7 @@ const hyperlane: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: 'aaddba7-20230620-154941', + tag: 'cfaf553-20231009-174623', }, }, }; @@ -120,7 +120,7 @@ const releaseCandidate: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: 'c7c44b2-20230811-133851', + tag: 'cfaf553-20231009-174623', }, whitelist: [ ...releaseCandidateHelloworldMatchingList, @@ -181,7 +181,7 @@ const releaseCandidate: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: 'ed7569d-20230725-171222', + tag: 'cfaf553-20231009-174623', }, chains: validatorChainConfig(Contexts.ReleaseCandidate), }, diff --git a/typescript/infra/config/environments/testnet4/chains.ts b/typescript/infra/config/environments/testnet4/chains.ts index 116269599..b93b5eade 100644 --- a/typescript/infra/config/environments/testnet4/chains.ts +++ b/typescript/infra/config/environments/testnet4/chains.ts @@ -32,8 +32,8 @@ export const environment = 'testnet4'; const validatorChainNames = [ ...supportedChainNames, - chainMetadata.solanadevnet.name, - chainMetadata.proteustestnet.name, + // chainMetadata.solanadevnet.name, + // chainMetadata.proteustestnet.name, ]; const relayerChainNames = validatorChainNames; diff --git a/typescript/infra/config/environments/testnet4/funding.ts b/typescript/infra/config/environments/testnet4/funding.ts index 4f1e4280b..24baf2160 100644 --- a/typescript/infra/config/environments/testnet4/funding.ts +++ b/typescript/infra/config/environments/testnet4/funding.ts @@ -9,7 +9,7 @@ import { environment } from './chains'; export const keyFunderConfig: KeyFunderConfig = { docker: { repo: 'gcr.io/abacus-labs-dev/hyperlane-monorepo', - tag: '8b752d0-20230606-195641', + tag: 'cfaf553-20231009-174629', }, // We're currently using the same deployer key as testnet2. // To minimize nonce clobbering we offset the key funder cron diff --git a/typescript/infra/config/environments/testnet4/helloworld.ts b/typescript/infra/config/environments/testnet4/helloworld.ts index 99fb4738f..a83c49383 100644 --- a/typescript/infra/config/environments/testnet4/helloworld.ts +++ b/typescript/infra/config/environments/testnet4/helloworld.ts @@ -13,7 +13,7 @@ export const hyperlaneHelloworld: HelloWorldConfig = { kathy: { docker: { repo: 'gcr.io/abacus-labs-dev/hyperlane-monorepo', - tag: '4c598b9-20230503-205323', + tag: '5601743-20231007-124637', }, chainsToSkip: [], runEnv: environment, @@ -33,7 +33,7 @@ export const releaseCandidateHelloworld: HelloWorldConfig = { kathy: { docker: { repo: 'gcr.io/abacus-labs-dev/hyperlane-monorepo', - tag: '25f19b7-20230319-124624', + tag: '5601743-20231007-124637', }, chainsToSkip: [], runEnv: environment, diff --git a/typescript/infra/config/environments/testnet4/helloworld/hyperlane/addresses.json b/typescript/infra/config/environments/testnet4/helloworld/hyperlane/addresses.json index 61628d21c..445ec7c24 100644 --- a/typescript/infra/config/environments/testnet4/helloworld/hyperlane/addresses.json +++ b/typescript/infra/config/environments/testnet4/helloworld/hyperlane/addresses.json @@ -1,29 +1,38 @@ { + "basegoerli": { + "router": "0x086E902d2f99BcCEAa28B31747eC6Dc5fd43B1bE" + }, + "arbitrumgoerli": { + "router": "0xFd1e3710347659703962934d2381970ae0022227" + }, + "optimismgoerli": { + "router": "0x372Cf98E673C235C1abD78DEAA61480e6fe55e46" + }, + "scrollsepolia": { + "router": "0x66b71A4e18FbE09a6977A6520B47fEDdffA82a1c" + }, "alfajores": { - "router": "0x477D860f8F41bC69dDD32821F2Bf2C2Af0243F16" + "router": "0xD0Ef694E96Bb695DC829f71956227eD141e3089F" }, - "fuji": { - "router": "0x5da3b8d6F73dF6003A490072106730218c475AAd" + "polygonzkevmtestnet": { + "router": "0x783c4a0bB6663359281aD4a637D5af68F83ae213" }, - "mumbai": { - "router": "0x1A4d8a5eD6C93Af828655e15C44eeE2c2851F0D6" + "sepolia": { + "router": "0xE14FE2a74Ba1E1bD0EE14B780e58fCcc3c95C013" + }, + "fuji": { + "router": "0x0B1C1B54f45e02552331D3106e71f5e0b573D5D4" }, "bsctestnet": { - "router": "0xE09BF59dCA6e622efC33f6fbd8EF85dE45233388" + "router": "0xd0e07a58BC91a686235E542350E63211C7A34c17" }, "goerli": { - "router": "0x405BFdEcB33230b4Ad93C29ba4499b776CfBa189" + "router": "0x33AA9cFBC7E222B3eC231EcAa58dd846cC393C28" }, "moonbasealpha": { - "router": "0x89e02C3C7b97bCBa63279E10E2a44e6cEF69E6B2" - }, - "optimismgoerli": { - "router": "0x3582d1238cBC812165981E4fFaB0E8D9a4518910" + "router": "0x3Ce607F6FcE5Dfb9821f33504d86E04A4CD0C75f" }, - "arbitrumgoerli": { - "router": "0x339B46496D60b1b6B42e9715DeD8B3D2154dA0Bb" - }, - "sepolia": { - "router": "0x5d56B8a669F50193b54319442c6EEE5edD662381" + "mumbai": { + "router": "0x04980C17e2CE26578C82f81207e706e4505FaE3B" } } diff --git a/typescript/infra/config/environments/testnet4/helloworld/hyperlane/verification.json b/typescript/infra/config/environments/testnet4/helloworld/hyperlane/verification.json index 3c12c5bd6..263f67923 100644 --- a/typescript/infra/config/environments/testnet4/helloworld/hyperlane/verification.json +++ b/typescript/infra/config/environments/testnet4/helloworld/hyperlane/verification.json @@ -11,6 +11,36 @@ "address": "0x477D860f8F41bC69dDD32821F2Bf2C2Af0243F16", "constructorArguments": "000000000000000000000000cc737a94fecaec165abcf12ded095bb13f037685000000000000000000000000f90cb82a76492614d07b82a7658917f3ac811ac1", "isProxy": false + }, + { + "name": "Router", + "address": "0x76bDE8069b3467A459262192509Ad5c00AcbdaF0", + "constructorArguments": "000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e590000000000000000000000001246529eddca523afe5c6b9414299633d2e16697", + "isProxy": false + }, + { + "name": "Router", + "address": "0x39e08602570237433673B1340Da17105cA098EE7", + "constructorArguments": "000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e590000000000000000000000001246529eddca523afe5c6b9414299633d2e16697", + "isProxy": false + }, + { + "name": "Router", + "address": "0x0231C1A2CfDbC2d2FA8363c3eC60c85a458088aE", + "constructorArguments": "000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e590000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false + }, + { + "name": "Router", + "address": "0xb58F3D0CA2B26803eA6a64696989102cE301Fd23", + "constructorArguments": "000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e590000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false + }, + { + "name": "Router", + "address": "0xD0Ef694E96Bb695DC829f71956227eD141e3089F", + "constructorArguments": "000000000000000000000000ef9f292fcebc3848bf4bb92a96a04f9ecbb78e590000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false } ], "fuji": [ @@ -25,6 +55,24 @@ "address": "0x5da3b8d6F73dF6003A490072106730218c475AAd", "constructorArguments": "000000000000000000000000cc737a94fecaec165abcf12ded095bb13f037685000000000000000000000000f90cb82a76492614d07b82a7658917f3ac811ac1", "isProxy": false + }, + { + "name": "Router", + "address": "0xE04b1D70d487eFCa454EEBf3821E42Dd41e66609", + "constructorArguments": "0000000000000000000000005b6cff85442b851a8e6eabd2a4e4507b5135b3b00000000000000000000000006895d3916b94b386faa6ec9276756e16dae7480e", + "isProxy": false + }, + { + "name": "Router", + "address": "0x6F7A1B7868f14a2f4c36cc561d910aE7958bc8D8", + "constructorArguments": "0000000000000000000000005b6cff85442b851a8e6eabd2a4e4507b5135b3b00000000000000000000000006895d3916b94b386faa6ec9276756e16dae7480e", + "isProxy": false + }, + { + "name": "Router", + "address": "0x0B1C1B54f45e02552331D3106e71f5e0b573D5D4", + "constructorArguments": "0000000000000000000000005b6cff85442b851a8e6eabd2a4e4507b5135b3b00000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false } ], "mumbai": [ @@ -39,6 +87,24 @@ "address": "0x1A4d8a5eD6C93Af828655e15C44eeE2c2851F0D6", "constructorArguments": "000000000000000000000000cc737a94fecaec165abcf12ded095bb13f037685000000000000000000000000f90cb82a76492614d07b82a7658917f3ac811ac1", "isProxy": false + }, + { + "name": "Router", + "address": "0x79B6151129780f5A80DFEF7c1E967b21A9674A7D", + "constructorArguments": "0000000000000000000000002d1889fe5b092cd988972261434f7e5f260411150000000000000000000000008ab67caf605c6ee83cbfefb0d8d67fdd3bf7b591", + "isProxy": false + }, + { + "name": "Router", + "address": "0xBEadC848cAB77875d066466b9F3509f069a0a4F5", + "constructorArguments": "0000000000000000000000002d1889fe5b092cd988972261434f7e5f260411150000000000000000000000008ab67caf605c6ee83cbfefb0d8d67fdd3bf7b591", + "isProxy": false + }, + { + "name": "Router", + "address": "0x04980C17e2CE26578C82f81207e706e4505FaE3B", + "constructorArguments": "0000000000000000000000002d1889fe5b092cd988972261434f7e5f260411150000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false } ], "bsctestnet": [ @@ -53,6 +119,24 @@ "address": "0xE09BF59dCA6e622efC33f6fbd8EF85dE45233388", "constructorArguments": "000000000000000000000000cc737a94fecaec165abcf12ded095bb13f037685000000000000000000000000f90cb82a76492614d07b82a7658917f3ac811ac1", "isProxy": false + }, + { + "name": "Router", + "address": "0x5b297d6BBE080B66E6acece8d378F70F02c0Bc41", + "constructorArguments": "00000000000000000000000089280d0b68a246b276a910a518531e2a861ceb650000000000000000000000000dd20e410bdb95404f71c5a4e7fa67b892a5f949", + "isProxy": false + }, + { + "name": "Router", + "address": "0x90230E8cf53f4F9aFC2A9777eB0093C0B1C81b59", + "constructorArguments": "00000000000000000000000089280d0b68a246b276a910a518531e2a861ceb650000000000000000000000000dd20e410bdb95404f71c5a4e7fa67b892a5f949", + "isProxy": false + }, + { + "name": "Router", + "address": "0xd0e07a58BC91a686235E542350E63211C7A34c17", + "constructorArguments": "00000000000000000000000089280d0b68a246b276a910a518531e2a861ceb650000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false } ], "goerli": [ @@ -67,6 +151,24 @@ "address": "0x405BFdEcB33230b4Ad93C29ba4499b776CfBa189", "constructorArguments": "000000000000000000000000cc737a94fecaec165abcf12ded095bb13f037685000000000000000000000000f90cb82a76492614d07b82a7658917f3ac811ac1", "isProxy": false + }, + { + "name": "Router", + "address": "0xBF5b89eBdF86560F872603e2063f17b78dFbae02", + "constructorArguments": "000000000000000000000000c4796aabce2a9d774ce4603f5db5fb1605791dbd0000000000000000000000000cd26594ea6c6526927c0f5225ac09f6288e7140", + "isProxy": false + }, + { + "name": "Router", + "address": "0xA5F234545270cea8f31A8760b8b7ABcaA3654951", + "constructorArguments": "000000000000000000000000c4796aabce2a9d774ce4603f5db5fb1605791dbd0000000000000000000000000cd26594ea6c6526927c0f5225ac09f6288e7140", + "isProxy": false + }, + { + "name": "Router", + "address": "0x33AA9cFBC7E222B3eC231EcAa58dd846cC393C28", + "constructorArguments": "000000000000000000000000c4796aabce2a9d774ce4603f5db5fb1605791dbd0000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false } ], "moonbasealpha": [ @@ -81,6 +183,24 @@ "address": "0x89e02C3C7b97bCBa63279E10E2a44e6cEF69E6B2", "constructorArguments": "000000000000000000000000cc737a94fecaec165abcf12ded095bb13f037685000000000000000000000000f90cb82a76492614d07b82a7658917f3ac811ac1", "isProxy": false + }, + { + "name": "Router", + "address": "0x36a53DDa7626e5eb62e59a0192Af07b67AF434D8", + "constructorArguments": "00000000000000000000000076189acfa212298d7022624a4633411ee0d2f26f00000000000000000000000092f05669a354a032a84fcfabfd13bee1abc5bfd0", + "isProxy": false + }, + { + "name": "Router", + "address": "0x893b57DE7E3dd885F827c74E74F3099C1c250c52", + "constructorArguments": "00000000000000000000000076189acfa212298d7022624a4633411ee0d2f26f00000000000000000000000092f05669a354a032a84fcfabfd13bee1abc5bfd0", + "isProxy": false + }, + { + "name": "Router", + "address": "0x3Ce607F6FcE5Dfb9821f33504d86E04A4CD0C75f", + "constructorArguments": "00000000000000000000000076189acfa212298d7022624a4633411ee0d2f26f0000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false } ], "optimismgoerli": [ @@ -95,6 +215,36 @@ "address": "0x3582d1238cBC812165981E4fFaB0E8D9a4518910", "constructorArguments": "000000000000000000000000cc737a94fecaec165abcf12ded095bb13f037685000000000000000000000000f90cb82a76492614d07b82a7658917f3ac811ac1", "isProxy": false + }, + { + "name": "Router", + "address": "0x050500E43Fa7F245f3012527DE29d22176c594c7", + "constructorArguments": "000000000000000000000000b5f021728ea6223e3948db2da61d612307945ea200000000000000000000000002a7661273528eff3d78cbe7cbd1a717b28b89fc", + "isProxy": false + }, + { + "name": "Router", + "address": "0x7Dc5cE596995af8e5D568563038109B9bCA7F7c6", + "constructorArguments": "000000000000000000000000b5f021728ea6223e3948db2da61d612307945ea200000000000000000000000002a7661273528eff3d78cbe7cbd1a717b28b89fc", + "isProxy": false + }, + { + "name": "Router", + "address": "0xe7B2e23A9A77556736DBB040A8a5159a80Db73D5", + "constructorArguments": "000000000000000000000000b5f021728ea6223e3948db2da61d612307945ea20000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false + }, + { + "name": "Router", + "address": "0x138e726C327E9dd0779104B8d42331757CAeeB9F", + "constructorArguments": "000000000000000000000000b5f021728ea6223e3948db2da61d612307945ea20000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false + }, + { + "name": "Router", + "address": "0x372Cf98E673C235C1abD78DEAA61480e6fe55e46", + "constructorArguments": "000000000000000000000000b5f021728ea6223e3948db2da61d612307945ea20000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false } ], "arbitrumgoerli": [ @@ -109,6 +259,36 @@ "address": "0x339B46496D60b1b6B42e9715DeD8B3D2154dA0Bb", "constructorArguments": "000000000000000000000000cc737a94fecaec165abcf12ded095bb13f037685000000000000000000000000f90cb82a76492614d07b82a7658917f3ac811ac1", "isProxy": false + }, + { + "name": "Router", + "address": "0xB8D70C9352AA59f5EB138e045117841910c107a3", + "constructorArguments": "00000000000000000000000013dabc0351407d5aaa0a50003a166a73b4febfdc00000000000000000000000076189acfa212298d7022624a4633411ee0d2f26f", + "isProxy": false + }, + { + "name": "Router", + "address": "0xA3bAaC7d60d10abA54cC2Ffb4b63469810C5aDc0", + "constructorArguments": "00000000000000000000000013dabc0351407d5aaa0a50003a166a73b4febfdc00000000000000000000000076189acfa212298d7022624a4633411ee0d2f26f", + "isProxy": false + }, + { + "name": "Router", + "address": "0x9C63cE44d595cfd97215fcb97d58CFD07a9D6BD7", + "constructorArguments": "00000000000000000000000013dabc0351407d5aaa0a50003a166a73b4febfdc0000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false + }, + { + "name": "Router", + "address": "0x22C7d91A4533536FE6006EFA46074E2Df8f82e82", + "constructorArguments": "00000000000000000000000013dabc0351407d5aaa0a50003a166a73b4febfdc0000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false + }, + { + "name": "Router", + "address": "0xFd1e3710347659703962934d2381970ae0022227", + "constructorArguments": "00000000000000000000000013dabc0351407d5aaa0a50003a166a73b4febfdc0000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false } ], "sepolia": [ @@ -117,6 +297,138 @@ "address": "0x5d56B8a669F50193b54319442c6EEE5edD662381", "constructorArguments": "000000000000000000000000cc737a94fecaec165abcf12ded095bb13f037685000000000000000000000000f987d7edcb5890cb321437d8145e3d51131298b6", "isProxy": false + }, + { + "name": "Router", + "address": "0x8FF62Cd16C689C6541A284c0e2389D4371255Bc2", + "constructorArguments": "00000000000000000000000033abaf6708be03bdf0595da0745a7111b01db8c70000000000000000000000006f2756380fd49228ae25aa7f2817993cb74ecc56", + "isProxy": false + }, + { + "name": "Router", + "address": "0x73A7bDa325Ad8E5F591179C4ccA61b0CeF70d05C", + "constructorArguments": "00000000000000000000000033abaf6708be03bdf0595da0745a7111b01db8c70000000000000000000000006f2756380fd49228ae25aa7f2817993cb74ecc56", + "isProxy": false + }, + { + "name": "Router", + "address": "0xE14FE2a74Ba1E1bD0EE14B780e58fCcc3c95C013", + "constructorArguments": "00000000000000000000000033abaf6708be03bdf0595da0745a7111b01db8c70000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false + } + ], + "basegoerli": [ + { + "name": "Router", + "address": "0xeAEfB1458b032e75de3e9A3a480d005c426FB1c5", + "constructorArguments": "00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a00000000000000000000000028b02b97a850872c4d33c3e024fab6499ad96564", + "isProxy": false + }, + { + "name": "Router", + "address": "0xae7a78916Ba4c507aCB2F0e474ace545Ff4bF841", + "constructorArguments": "00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a00000000000000000000000028b02b97a850872c4d33c3e024fab6499ad96564", + "isProxy": false + }, + { + "name": "Router", + "address": "0x04438ef7622f5412f82915F59caD4f704C61eA48", + "constructorArguments": "00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a00000000000000000000000028b02b97a850872c4d33c3e024fab6499ad96564", + "isProxy": false + }, + { + "name": "Router", + "address": "0xb94F96D398eA5BAB5CA528EE9Fdc19afaA825818", + "constructorArguments": "00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a0000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false + }, + { + "name": "Router", + "address": "0x51A0a100e7BC63Ea7821A3a023B6F17fb94FF011", + "constructorArguments": "00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a0000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false + }, + { + "name": "Router", + "address": "0x086E902d2f99BcCEAa28B31747eC6Dc5fd43B1bE", + "constructorArguments": "00000000000000000000000058483b754abb1e8947be63d6b95df75b8249543a0000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false + } + ], + "scrollsepolia": [ + { + "name": "Router", + "address": "0x433f7d6d0cB9eb8FF2902Ad01C1BEd6C09934a33", + "constructorArguments": "0000000000000000000000003c5154a193d6e2955650f9305c8d80c18c814a6800000000000000000000000086fb9f1c124fb20ff130c41a79a432f770f67afd", + "isProxy": false + }, + { + "name": "Router", + "address": "0xEe421285728284000ec6c6C55C6F9161faeFfa99", + "constructorArguments": "0000000000000000000000003c5154a193d6e2955650f9305c8d80c18c814a6800000000000000000000000086fb9f1c124fb20ff130c41a79a432f770f67afd", + "isProxy": false + }, + { + "name": "Router", + "address": "0x6c13643B3927C57DB92c790E4E3E7Ee81e13f78C", + "constructorArguments": "0000000000000000000000003c5154a193d6e2955650f9305c8d80c18c814a6800000000000000000000000086fb9f1c124fb20ff130c41a79a432f770f67afd", + "isProxy": false + }, + { + "name": "Router", + "address": "0x783c4a0bB6663359281aD4a637D5af68F83ae213", + "constructorArguments": "0000000000000000000000003c5154a193d6e2955650f9305c8d80c18c814a680000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false + }, + { + "name": "Router", + "address": "0xeAEfB1458b032e75de3e9A3a480d005c426FB1c5", + "constructorArguments": "0000000000000000000000003c5154a193d6e2955650f9305c8d80c18c814a680000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false + }, + { + "name": "Router", + "address": "0x66b71A4e18FbE09a6977A6520B47fEDdffA82a1c", + "constructorArguments": "0000000000000000000000003c5154a193d6e2955650f9305c8d80c18c814a680000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false + } + ], + "polygonzkevmtestnet": [ + { + "name": "Router", + "address": "0xD0680F80F4f947968206806C2598Cbc5b6FE5b03", + "constructorArguments": "000000000000000000000000598face78a4302f11e3de0bee1894da0b2cb71f8000000000000000000000000ad34a66bf6db18e858f6b686557075568c6e031c", + "isProxy": false + }, + { + "name": "Router", + "address": "0x433f7d6d0cB9eb8FF2902Ad01C1BEd6C09934a33", + "constructorArguments": "000000000000000000000000598face78a4302f11e3de0bee1894da0b2cb71f8000000000000000000000000ad34a66bf6db18e858f6b686557075568c6e031c", + "isProxy": false + }, + { + "name": "Router", + "address": "0xEe421285728284000ec6c6C55C6F9161faeFfa99", + "constructorArguments": "000000000000000000000000598face78a4302f11e3de0bee1894da0b2cb71f8000000000000000000000000ad34a66bf6db18e858f6b686557075568c6e031c", + "isProxy": false + }, + { + "name": "Router", + "address": "0x6c13643B3927C57DB92c790E4E3E7Ee81e13f78C", + "constructorArguments": "000000000000000000000000598face78a4302f11e3de0bee1894da0b2cb71f80000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false + }, + { + "name": "Router", + "address": "0x20c44b1E3BeaDA1e9826CFd48BeEDABeE9871cE9", + "constructorArguments": "000000000000000000000000598face78a4302f11e3de0bee1894da0b2cb71f80000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false + }, + { + "name": "Router", + "address": "0x783c4a0bB6663359281aD4a637D5af68F83ae213", + "constructorArguments": "000000000000000000000000598face78a4302f11e3de0bee1894da0b2cb71f80000000000000000000000000000000000000000000000000000000000000000", + "isProxy": false } ] } diff --git a/typescript/infra/config/environments/testnet4/testrecipient/addresses.json b/typescript/infra/config/environments/testnet4/testrecipient/addresses.json index bec3b005b..1b954beb9 100644 --- a/typescript/infra/config/environments/testnet4/testrecipient/addresses.json +++ b/typescript/infra/config/environments/testnet4/testrecipient/addresses.json @@ -1,38 +1,50 @@ { "alfajores": { - "TestRecipient": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "TestTokenRecipient": "0x85ac1164878e017b67660a74ff1f41f3D05C02Bb" + "TestRecipient": "0x6489d13AcAd3B8dce4c5B31f375DE4f9451E7b38", + "TestTokenRecipient": "0x92dC0a76452a9D9358D2d2dEd8CddA209DF67c45" + }, + "basegoerli": { + "TestRecipient": "0x54Bd02f0f20677e9846F8E9FdB1Abc7315C49C38", + "TestTokenRecipient": "0x5e65279Fb7293a058776e37587398fcc3E9184b1" }, "fuji": { - "TestRecipient": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "TestTokenRecipient": "0x85ac1164878e017b67660a74ff1f41f3D05C02Bb" + "TestRecipient": "0x44a7e1d76fD8AfA244AdE7278336E3D5C658D398", + "TestTokenRecipient": "0x9CC10c844B3Bbae2444E39991aB027C4A05D1F2e" }, "mumbai": { - "TestRecipient": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "TestTokenRecipient": "0x85ac1164878e017b67660a74ff1f41f3D05C02Bb" + "TestRecipient": "0xF45A4D54223DA32bf7b5D43a9a460Ef3C94C713B", + "TestTokenRecipient": "0x57d098e6952B6C1c85Ce0B68C9Deada3dCf7D05A" }, "bsctestnet": { - "TestRecipient": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "TestTokenRecipient": "0x85ac1164878e017b67660a74ff1f41f3D05C02Bb" + "TestRecipient": "0xfbcD1c00a3d809f36cC1A15918694B17B32c0b6c", + "TestTokenRecipient": "0x260f6024119549a40595d0937471e607411E8ea5" }, "goerli": { - "TestRecipient": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "TestTokenRecipient": "0x85ac1164878e017b67660a74ff1f41f3D05C02Bb" + "TestRecipient": "0x4fC0Ac163eFFEb7890937cB89275B2C231880F22", + "TestTokenRecipient": "0xd8958706B33E20C88679a22203F0AFa6158c834d" + }, + "scrollsepolia": { + "TestRecipient": "0xa3AB7E6cE24E6293bD5320A53329Ef2f4DE73fCA", + "TestTokenRecipient": "0xc76E477437065093D353b7d56c81ff54D167B0Ab" }, "sepolia": { - "TestRecipient": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "TestTokenRecipient": "0x85ac1164878e017b67660a74ff1f41f3D05C02Bb" + "TestRecipient": "0xeDc1A3EDf87187085A3ABb7A9a65E1e7aE370C07", + "TestTokenRecipient": "0x031AD9c560D37baC7d6Bd2d27A2443bAfd10101A" }, "moonbasealpha": { - "TestRecipient": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "TestTokenRecipient": "0x85ac1164878e017b67660a74ff1f41f3D05C02Bb" + "TestRecipient": "0x68729446296E413f0b7d6E85F2FD128465F0e5D0", + "TestTokenRecipient": "0xEdA6f85f4761A1f9e42FD40CA5a4E8Ce1C764015" }, "optimismgoerli": { - "TestRecipient": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "TestTokenRecipient": "0x85ac1164878e017b67660a74ff1f41f3D05C02Bb" + "TestRecipient": "0x518eA1802407b4b5AAF3aA92c1A803FfbA9FB7fe", + "TestTokenRecipient": "0xB9E45eA920DE14e95A16Ed5e1275F893552f2e32" }, "arbitrumgoerli": { - "TestRecipient": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "TestTokenRecipient": "0x85ac1164878e017b67660a74ff1f41f3D05C02Bb" + "TestRecipient": "0x07543860AE9E72aBcF2Bae9827b23621A64Fa416", + "TestTokenRecipient": "0x207db41AB053213451f1a71d936353C9056A0205" + }, + "polygonzkevmtestnet": { + "TestRecipient": "0x11918DC33E067C5DA83EEF58E50F856398b8Df4C", + "TestTokenRecipient": "0x04438ef7622f5412f82915F59caD4f704C61eA48" } } diff --git a/typescript/infra/config/environments/testnet4/testrecipient/verification.json b/typescript/infra/config/environments/testnet4/testrecipient/verification.json index 12a4c3e65..f60cc73b0 100644 --- a/typescript/infra/config/environments/testnet4/testrecipient/verification.json +++ b/typescript/infra/config/environments/testnet4/testrecipient/verification.json @@ -2,127 +2,169 @@ "alfajores": [ { "name": "TestRecipient", - "address": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "isProxy": false, - "constructorArguments": "0x" + "address": "0x6489d13AcAd3B8dce4c5B31f375DE4f9451E7b38", + "constructorArguments": "", + "isProxy": false }, { "name": "TestTokenRecipient", - "address": "0x85ac1164878e017b67660a74ff1f41f3D05C02Bb", - "isProxy": false, - "constructorArguments": "0x" + "address": "0x92dC0a76452a9D9358D2d2dEd8CddA209DF67c45", + "constructorArguments": "", + "isProxy": false } ], "fuji": [ { "name": "TestRecipient", - "address": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "isProxy": false, - "constructorArguments": "0x" + "address": "0x44a7e1d76fD8AfA244AdE7278336E3D5C658D398", + "constructorArguments": "", + "isProxy": false }, { "name": "TestTokenRecipient", - "address": "0x85ac1164878e017b67660a74ff1f41f3D05C02Bb", - "isProxy": false, - "constructorArguments": "0x" + "address": "0x9CC10c844B3Bbae2444E39991aB027C4A05D1F2e", + "constructorArguments": "", + "isProxy": false } ], "mumbai": [ { "name": "TestRecipient", - "address": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "isProxy": false, - "constructorArguments": "0x" + "address": "0xF45A4D54223DA32bf7b5D43a9a460Ef3C94C713B", + "constructorArguments": "", + "isProxy": false }, { "name": "TestTokenRecipient", - "address": "0x85ac1164878e017b67660a74ff1f41f3D05C02Bb", - "isProxy": false, - "constructorArguments": "0x" + "address": "0x57d098e6952B6C1c85Ce0B68C9Deada3dCf7D05A", + "constructorArguments": "", + "isProxy": false } ], "bsctestnet": [ { "name": "TestRecipient", - "address": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "isProxy": false, - "constructorArguments": "0x" + "address": "0xfbcD1c00a3d809f36cC1A15918694B17B32c0b6c", + "constructorArguments": "", + "isProxy": false }, { "name": "TestTokenRecipient", - "address": "0x85ac1164878e017b67660a74ff1f41f3D05C02Bb", - "isProxy": false, - "constructorArguments": "0x" + "address": "0x260f6024119549a40595d0937471e607411E8ea5", + "constructorArguments": "", + "isProxy": false } ], "goerli": [ { "name": "TestRecipient", - "address": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "isProxy": false, - "constructorArguments": "0x" + "address": "0x4fC0Ac163eFFEb7890937cB89275B2C231880F22", + "constructorArguments": "", + "isProxy": false }, { "name": "TestTokenRecipient", - "address": "0x85ac1164878e017b67660a74ff1f41f3D05C02Bb", - "isProxy": false, - "constructorArguments": "0x" + "address": "0xd8958706B33E20C88679a22203F0AFa6158c834d", + "constructorArguments": "", + "isProxy": false } ], "sepolia": [ { "name": "TestRecipient", - "address": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "isProxy": false, - "constructorArguments": "0x" + "address": "0xeDc1A3EDf87187085A3ABb7A9a65E1e7aE370C07", + "constructorArguments": "", + "isProxy": false }, { "name": "TestTokenRecipient", - "address": "0x85ac1164878e017b67660a74ff1f41f3D05C02Bb", - "isProxy": false, - "constructorArguments": "0x" + "address": "0x031AD9c560D37baC7d6Bd2d27A2443bAfd10101A", + "constructorArguments": "", + "isProxy": false } ], "moonbasealpha": [ { "name": "TestRecipient", - "address": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "isProxy": false, - "constructorArguments": "0x" + "address": "0x68729446296E413f0b7d6E85F2FD128465F0e5D0", + "constructorArguments": "", + "isProxy": false }, { "name": "TestTokenRecipient", - "address": "0x85ac1164878e017b67660a74ff1f41f3D05C02Bb", - "isProxy": false, - "constructorArguments": "0x" + "address": "0xEdA6f85f4761A1f9e42FD40CA5a4E8Ce1C764015", + "constructorArguments": "", + "isProxy": false } ], "optimismgoerli": [ { "name": "TestRecipient", - "address": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "isProxy": false, - "constructorArguments": "0x" + "address": "0x518eA1802407b4b5AAF3aA92c1A803FfbA9FB7fe", + "constructorArguments": "", + "isProxy": false }, { "name": "TestTokenRecipient", - "address": "0x85ac1164878e017b67660a74ff1f41f3D05C02Bb", - "isProxy": false, - "constructorArguments": "0x" + "address": "0xB9E45eA920DE14e95A16Ed5e1275F893552f2e32", + "constructorArguments": "", + "isProxy": false } ], "arbitrumgoerli": [ { "name": "TestRecipient", - "address": "0x36FdA966CfffF8a9Cdc814f546db0e6378bFef35", - "isProxy": false, - "constructorArguments": "0x" + "address": "0x07543860AE9E72aBcF2Bae9827b23621A64Fa416", + "constructorArguments": "", + "isProxy": false }, { "name": "TestTokenRecipient", - "address": "0x85ac1164878e017b67660a74ff1f41f3D05C02Bb", - "isProxy": false, - "constructorArguments": "0x" + "address": "0x207db41AB053213451f1a71d936353C9056A0205", + "constructorArguments": "", + "isProxy": false + } + ], + "basegoerli": [ + { + "name": "TestRecipient", + "address": "0x54Bd02f0f20677e9846F8E9FdB1Abc7315C49C38", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TestTokenRecipient", + "address": "0x5e65279Fb7293a058776e37587398fcc3E9184b1", + "constructorArguments": "", + "isProxy": false + } + ], + "scrollsepolia": [ + { + "name": "TestRecipient", + "address": "0xa3AB7E6cE24E6293bD5320A53329Ef2f4DE73fCA", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TestTokenRecipient", + "address": "0xc76E477437065093D353b7d56c81ff54D167B0Ab", + "constructorArguments": "", + "isProxy": false + } + ], + "polygonzkevmtestnet": [ + { + "name": "TestRecipient", + "address": "0x11918DC33E067C5DA83EEF58E50F856398b8Df4C", + "constructorArguments": "", + "isProxy": false + }, + { + "name": "TestTokenRecipient", + "address": "0x04438ef7622f5412f82915F59caD4f704C61eA48", + "constructorArguments": "", + "isProxy": false } ] } diff --git a/typescript/infra/config/environments/testnet4/validators.ts b/typescript/infra/config/environments/testnet4/validators.ts index 7216ad341..89271fbb5 100644 --- a/typescript/infra/config/environments/testnet4/validators.ts +++ b/typescript/infra/config/environments/testnet4/validators.ts @@ -68,44 +68,44 @@ export const validatorChainConfig = ( 'fuji', ), }, - chiado: { - interval: 5, - reorgPeriod: chainMetadata.chiado.blocks!.reorgPeriod!, - validators: validatorsConfig( - { - [Contexts.Hyperlane]: [ - '0x12b1d1354441b900e0a36659ae54c3a9d5d22c57', - '0x06c3757a4b7a912828e523bb8a5f980ddc297356', - '0x0874967a145d70b799ebe9ed861ab7c93faef95a', - ], - [Contexts.ReleaseCandidate]: [ - '0x7572ffd8af1abc02cc1d234ac750d387fd6768a0', - '0x31b37a32657cf2915d434b409ee86978058fa91c', - '0x32495780512fce64a45aca55ccc02202e9018dc5', - ], - }, - 'chiado', - ), - }, - lineagoerli: { - interval: 5, - reorgPeriod: chainMetadata.lineagoerli.blocks!.reorgPeriod!, - validators: validatorsConfig( - { - [Contexts.Hyperlane]: [ - '0xd767ea1206b8295d7e1267ddd00e56d34f278db6', - '0x4a5d7085ca93c22fbc994dd97857c98fcc745674', - '0x8327779c3c31fa1ffc7f0c9ffae33e4d804bbd8f', - ], - [Contexts.ReleaseCandidate]: [ - '0x52e2c6db923124e646011d172dea644e1cafe583', - '0x48d540e94ff1acb886df6bfed2b7a92568639364', - '0xe99e3acc543a535b8eeae98f3d6f39015efe0cd0', - ], - }, - 'lineagoerli', - ), - }, + // chiado: { + // interval: 5, + // reorgPeriod: chainMetadata.chiado.blocks!.reorgPeriod!, + // validators: validatorsConfig( + // { + // [Contexts.Hyperlane]: [ + // '0x12b1d1354441b900e0a36659ae54c3a9d5d22c57', + // '0x06c3757a4b7a912828e523bb8a5f980ddc297356', + // '0x0874967a145d70b799ebe9ed861ab7c93faef95a', + // ], + // [Contexts.ReleaseCandidate]: [ + // '0x7572ffd8af1abc02cc1d234ac750d387fd6768a0', + // '0x31b37a32657cf2915d434b409ee86978058fa91c', + // '0x32495780512fce64a45aca55ccc02202e9018dc5', + // ], + // }, + // 'chiado', + // ), + // }, + // lineagoerli: { + // interval: 5, + // reorgPeriod: chainMetadata.lineagoerli.blocks!.reorgPeriod!, + // validators: validatorsConfig( + // { + // [Contexts.Hyperlane]: [ + // '0xd767ea1206b8295d7e1267ddd00e56d34f278db6', + // '0x4a5d7085ca93c22fbc994dd97857c98fcc745674', + // '0x8327779c3c31fa1ffc7f0c9ffae33e4d804bbd8f', + // ], + // [Contexts.ReleaseCandidate]: [ + // '0x52e2c6db923124e646011d172dea644e1cafe583', + // '0x48d540e94ff1acb886df6bfed2b7a92568639364', + // '0xe99e3acc543a535b8eeae98f3d6f39015efe0cd0', + // ], + // }, + // 'lineagoerli', + // ), + // }, mumbai: { interval: 5, reorgPeriod: chainMetadata.mumbai.blocks!.reorgPeriod!, @@ -277,39 +277,39 @@ export const validatorChainConfig = ( 'polygonzkevmtestnet', ), }, - proteustestnet: { - interval: 5, - reorgPeriod: chainMetadata.proteustestnet.blocks!.reorgPeriod!, - validators: validatorsConfig( - { - [Contexts.Hyperlane]: [ - '0x79fc73656abb9eeaa5ee853c4569124f5bdaf9d8', - '0x72840388d5ab57323bc4f6e6d3ddedfd5cc911f0', - '0xd4b2a50c53fc6614bb3cd3198e0fdc03f5da973f', - ], - [Contexts.ReleaseCandidate]: [ - '0xc2ccc4eab0e8d441235d661e39341ae16c3bf8cd', - ], - }, - 'proteustestnet', - ), - }, - solanadevnet: { - interval: 10, - reorgPeriod: chainMetadata.solanadevnet.blocks!.reorgPeriod!, - validators: validatorsConfig( - { - [Contexts.Hyperlane]: [ - '0xec0f73dbc5b1962a20f7dcbe07c98414025b0c43', - '0x9c20a149dfa09ea9f77f5a7ca09ed44f9c025133', - '0x967c5ecdf2625ae86580bd203b630abaaf85cd62', - ], - [Contexts.ReleaseCandidate]: [ - '0x21b9eff4d1a6d3122596c7fb80315bf094b6e5c2', - ], - }, - 'solanadevnet', - ), - }, + // proteustestnet: { + // interval: 5, + // reorgPeriod: chainMetadata.proteustestnet.blocks!.reorgPeriod!, + // validators: validatorsConfig( + // { + // [Contexts.Hyperlane]: [ + // '0x79fc73656abb9eeaa5ee853c4569124f5bdaf9d8', + // '0x72840388d5ab57323bc4f6e6d3ddedfd5cc911f0', + // '0xd4b2a50c53fc6614bb3cd3198e0fdc03f5da973f', + // ], + // [Contexts.ReleaseCandidate]: [ + // '0xc2ccc4eab0e8d441235d661e39341ae16c3bf8cd', + // ], + // }, + // 'proteustestnet', + // ), + // }, + // solanadevnet: { + // interval: 10, + // reorgPeriod: chainMetadata.solanadevnet.blocks!.reorgPeriod!, + // validators: validatorsConfig( + // { + // [Contexts.Hyperlane]: [ + // '0xec0f73dbc5b1962a20f7dcbe07c98414025b0c43', + // '0x9c20a149dfa09ea9f77f5a7ca09ed44f9c025133', + // '0x967c5ecdf2625ae86580bd203b630abaaf85cd62', + // ], + // [Contexts.ReleaseCandidate]: [ + // '0x21b9eff4d1a6d3122596c7fb80315bf094b6e5c2', + // ], + // }, + // 'solanadevnet', + // ), + // }, }; }; diff --git a/typescript/infra/package.json b/typescript/infra/package.json index aa9fb1b57..963f11e0b 100644 --- a/typescript/infra/package.json +++ b/typescript/infra/package.json @@ -11,9 +11,9 @@ "@ethersproject/experimental": "^5.7.0", "@ethersproject/hardware-wallets": "^5.7.0", "@ethersproject/providers": "^5.7.2", - "@hyperlane-xyz/helloworld": "1.5.0", - "@hyperlane-xyz/sdk": "1.5.0", - "@hyperlane-xyz/utils": "1.5.0", + "@hyperlane-xyz/helloworld": "1.5.4-beta0", + "@hyperlane-xyz/sdk": "1.5.4-beta0", + "@hyperlane-xyz/utils": "1.5.4-beta0", "@nomiclabs/hardhat-etherscan": "^3.0.3", "@safe-global/api-kit": "^1.3.0", "@safe-global/protocol-kit": "^1.2.0", diff --git a/typescript/infra/scripts/agents/utils.ts b/typescript/infra/scripts/agents/utils.ts index dbae3b889..607569a66 100644 --- a/typescript/infra/scripts/agents/utils.ts +++ b/typescript/infra/scripts/agents/utils.ts @@ -56,11 +56,9 @@ export class AgentCli { } } - await Promise.all( - Object.values(managers).map((m) => - m.runHelmCommand(command, this.dryRun), - ), - ); + for (const m of Object.values(managers)) { + await m.runHelmCommand(command, this.dryRun); + } } protected async init( diff --git a/typescript/infra/scripts/announce-validators.ts b/typescript/infra/scripts/announce-validators.ts index 6df8e3e15..7395f74dc 100644 --- a/typescript/infra/scripts/announce-validators.ts +++ b/typescript/infra/scripts/announce-validators.ts @@ -27,10 +27,12 @@ function getArgs() { .string('location') .check(({ context, chain, location }) => { const isSet = [!!context, !!chain, !!location]; - if (isSet[0] != isSet[1] && isSet[1] == isSet[2]) { + if (isSet[1] == isSet[2]) { return true; } else { - throw new Error('Must specify context OR chain and location'); + throw new Error( + 'Must set either both or neither of chain and location', + ); } }).argv; } @@ -52,6 +54,7 @@ async function main() { const chains: ChainName[] = []; if (location) { chains.push(chain!); + if (location.startsWith('s3://')) { const validator = await S3Validator.fromStorageLocation(location); announcements.push({ diff --git a/typescript/infra/scripts/deploy.ts b/typescript/infra/scripts/deploy.ts index b9ed4d1f7..ddbfb196e 100644 --- a/typescript/infra/scripts/deploy.ts +++ b/typescript/infra/scripts/deploy.ts @@ -96,6 +96,7 @@ async function main() { ); deployer = new LiquidityLayerDeployer(multiProvider); } else if (module === Modules.TEST_RECIPIENT) { + config = objMap(envConfig.core, (_chain) => true); deployer = new TestRecipientDeployer(multiProvider); } else if (module === Modules.TEST_QUERY_SENDER) { // Get query router addresses diff --git a/typescript/infra/scripts/funding/fund-keys-from-deployer.ts b/typescript/infra/scripts/funding/fund-keys-from-deployer.ts index 988a2f9e5..d3ad82da0 100644 --- a/typescript/infra/scripts/funding/fund-keys-from-deployer.ts +++ b/typescript/infra/scripts/funding/fund-keys-from-deployer.ts @@ -24,7 +24,7 @@ import { import { DeployEnvironment } from '../../src/config'; import { deployEnvToSdkEnv } from '../../src/config/environment'; import { ContextAndRoles, ContextAndRolesMap } from '../../src/config/funding'; -import { AgentRole, Role } from '../../src/roles'; +import { ALL_AGENT_ROLES, AgentRole, Role } from '../../src/roles'; import { submitMetrics } from '../../src/utils/metrics'; import { assertContext, @@ -37,13 +37,18 @@ type L2Chain = | Chains.optimism | Chains.optimismgoerli | Chains.arbitrum - | Chains.arbitrumgoerli; + | Chains.arbitrumgoerli + | Chains.scrollsepolia + | Chains.basegoerli + | Chains.polygonzkevmtestnet; const L2Chains: ChainName[] = [ Chains.optimism, Chains.optimismgoerli, Chains.arbitrum, Chains.arbitrumgoerli, + Chains.scrollsepolia, + Chains.basegoerli, ]; const L2ToL1: ChainMap = { @@ -51,6 +56,9 @@ const L2ToL1: ChainMap = { arbitrumgoerli: 'goerli', optimism: 'ethereum', arbitrum: 'ethereum', + scrollsepolia: 'sepolia', + basegoerli: 'goerli', + polygonzktestnet: 'goerli', }; // Missing types declaration for bufio @@ -110,9 +118,7 @@ const desiredBalancePerChain: ChainMap = { gnosis: '0.1', basegoerli: '0.05', scrollsepolia: '0.05', - lineagoerli: '0.1', polygonzkevmtestnet: '0.01', - chiado: '0.0001', // unused test1: '0', @@ -155,6 +161,9 @@ const igpClaimThresholdPerChain: ChainMap = { optimismgoerli: '1', arbitrumgoerli: '1', gnosis: '5', + basegoerli: '0.1', + scrollsepolia: '0.1', + polygonzkevmtestnet: '0.1', // unused test1: '0', test2: '0', @@ -409,7 +418,12 @@ class ContextFunder { key.context, key.environment, ).contextChainNames; - for (const chain of chains[role as AgentRole]) { + // If the role is not a relayer, we need to look up the chains for Kathy, so we'll fallback to the relayer + const roleToLookup = ALL_AGENT_ROLES.includes(role as AgentRole) + ? role + : Role.Relayer; + const chainsPicked = chains[roleToLookup as AgentRole]; + for (const chain of chainsPicked) { chainKeys[chain].push(key); } } diff --git a/typescript/infra/scripts/helloworld/kathy.ts b/typescript/infra/scripts/helloworld/kathy.ts index 9aeeaaccb..76025ce5c 100644 --- a/typescript/infra/scripts/helloworld/kathy.ts +++ b/typescript/infra/scripts/helloworld/kathy.ts @@ -13,7 +13,6 @@ import { ProviderType, RpcConsensusType, TypedTransactionReceipt, - chainMetadata, } from '@hyperlane-xyz/sdk'; import { Address, @@ -22,16 +21,19 @@ import { ensure0x, error, log, + objMap, retryAsync, timeout, warn, } from '@hyperlane-xyz/utils'; import { Contexts } from '../../config/contexts'; +import { testnetConfigs } from '../../config/environments/testnet4/chains'; import { hyperlaneHelloworld, releaseCandidateHelloworld, } from '../../config/environments/testnet4/helloworld'; +import { owners } from '../../config/environments/testnet4/owners'; import { CloudAgentKey } from '../../src/agents/keys'; import { DeployEnvironment } from '../../src/config/environment'; import { Role } from '../../src/roles'; @@ -530,8 +532,8 @@ async function updateWalletBalanceMetricFor( export function getCoreConfigStub(environment: DeployEnvironment) { const multiProvider = new MultiProvider({ // Desired chains here. Key must have funds on these chains - fuji: chainMetadata.fuji, - solanadevnet: chainMetadata.solanadevnet, + ...testnetConfigs, + // solanadevnet: chainMetadata.solanadevnet, }); const privateKeyEvm = process.env.KATHY_PRIVATE_KEY_EVM; @@ -540,14 +542,19 @@ export function getCoreConfigStub(environment: DeployEnvironment) { console.log('evmSigner address', evmSigner.address); multiProvider.setSharedSigner(evmSigner); - const privateKeySealevel = process.env.KATHY_PRIVATE_KEY_SEALEVEL; - if (!privateKeySealevel) - throw new Error('KATHY_PRIVATE_KEY_SEALEVEL env var not set'); + // const privateKeySealevel = process.env.KATHY_PRIVATE_KEY_SEALEVEL; + // if (!privateKeySealevel) + // throw new Error('KATHY_PRIVATE_KEY_SEALEVEL env var not set'); - const sealevelSigner = Keypair.fromSeed( - Buffer.from(privateKeySealevel, 'hex'), - ); - console.log('sealevelSigner address', sealevelSigner.publicKey.toBase58()); + // const sealevelSigner = Keypair.fromSeed( + // Buffer.from(privateKeySealevel, 'hex'), + // ); + // console.log('sealevelSigner address', sealevelSigner.publicKey.toBase58()); + + const testnetKeys = objMap(testnetConfigs, (_, __) => ({ + address: evmSigner.address, + privateKey: ensure0x(privateKeyEvm), + })); return { helloWorld: { @@ -555,18 +562,9 @@ export function getCoreConfigStub(environment: DeployEnvironment) { [Contexts.ReleaseCandidate]: releaseCandidateHelloworld, }, environment, - owners: { - fuji: evmSigner.address, - solanadevnet: sealevelSigner.publicKey.toBase58(), - }, + owners: owners, getMultiProvider: () => multiProvider, - getKeys: () => ({ - fuji: { address: evmSigner.address, privateKey: ensure0x(privateKeyEvm) }, - solanadevnet: { - address: sealevelSigner.publicKey.toBase58(), - privateKey: privateKeySealevel, - }, - }), + getKeys: () => testnetKeys, } as any; } diff --git a/typescript/infra/scripts/utils.ts b/typescript/infra/scripts/utils.ts index d6975fbb6..ea3ed6a6b 100644 --- a/typescript/infra/scripts/utils.ts +++ b/typescript/infra/scripts/utils.ts @@ -342,7 +342,7 @@ export async function getRouterConfig( ? await multiProvider.getSignerAddress(chain) : owners[chain], mailbox: core.getContracts(chain).mailbox.address, - hook: igp.getContracts(chain).interchainGasPaymaster.address, + // hook: igp.getContracts(chain).interchainGasPaymaster.address, }; } return config; diff --git a/typescript/infra/src/helloworld/kathy.ts b/typescript/infra/src/helloworld/kathy.ts index 50610aef4..0b823250a 100644 --- a/typescript/infra/src/helloworld/kathy.ts +++ b/typescript/infra/src/helloworld/kathy.ts @@ -67,7 +67,7 @@ function getHelloworldKathyHelmValues( // the list of chains that kathy will send to. Because Kathy // will fetch secrets for all chains, regardless of skipping them or // not, we pass in all chains - chains: agentConfig.contextChainNames, + chains: agentConfig.contextChainNames.relayer, aws: agentConfig.aws !== undefined, chainsToSkip: kathyConfig.chainsToSkip, diff --git a/typescript/sdk/package.json b/typescript/sdk/package.json index ff6df4593..9716ab2af 100644 --- a/typescript/sdk/package.json +++ b/typescript/sdk/package.json @@ -1,10 +1,10 @@ { "name": "@hyperlane-xyz/sdk", "description": "The official SDK for the Hyperlane Network", - "version": "1.5.0", + "version": "1.5.4-beta0", "dependencies": { - "@hyperlane-xyz/core": "1.5.0", - "@hyperlane-xyz/utils": "1.5.0", + "@hyperlane-xyz/core": "1.5.4-beta0", + "@hyperlane-xyz/utils": "1.5.4-beta0", "@solana/spl-token": "^0.3.8", "@solana/web3.js": "^1.78.0", "@types/coingecko-api": "^1.0.10", @@ -58,5 +58,6 @@ "test:unit": "mocha --config .mocharc.json './src/**/*.test.ts'", "test:hardhat": "hardhat test $(find ./src -name \"*.hardhat-test.ts\")" }, - "types": "dist/index.d.ts" + "types": "dist/index.d.ts", + "stableVersion": "1.5.0" } diff --git a/typescript/sdk/src/consts/chainMetadata.ts b/typescript/sdk/src/consts/chainMetadata.ts index b0f995bce..859054873 100644 --- a/typescript/sdk/src/consts/chainMetadata.ts +++ b/typescript/sdk/src/consts/chainMetadata.ts @@ -198,7 +198,11 @@ export const bsctestnet: ChainMetadata = { protocol: ProtocolType.Ethereum, displayName: 'BSC Testnet', nativeToken: bnbToken, - rpcUrls: [{ http: 'https://data-seed-prebsc-1-s3.binance.org:8545' }], + rpcUrls: [ + { http: 'https://bsc-testnet.publicnode.com' }, + { http: 'https://bsc-testnet.public.blastapi.io' }, + { http: 'https://bsc-testnet.blockpi.network/v1/rpc/public' }, + ], blockExplorers: [ { name: 'BscScan', @@ -391,7 +395,11 @@ export const sepolia: ChainMetadata = { protocol: ProtocolType.Ethereum, displayName: 'Sepolia', nativeToken: etherToken, - rpcUrls: [{ http: 'https://endpoints.omniatech.io/v1/eth/sepolia/public' }], + rpcUrls: [ + { http: 'https://ethereum-sepolia.blockpi.network/v1/rpc/public' }, + { http: 'https://eth-sepolia.g.alchemy.com/v2/demo' }, + { http: 'https://rpc.sepolia.org' }, + ], blockExplorers: [ { name: 'Etherscan', diff --git a/typescript/sdk/src/consts/environments/testnet.json b/typescript/sdk/src/consts/environments/testnet.json index 8750aab9c..920740777 100644 --- a/typescript/sdk/src/consts/environments/testnet.json +++ b/typescript/sdk/src/consts/environments/testnet.json @@ -72,7 +72,7 @@ "proxyAdmin": "0x4eDBf5846D973c53AF478cf62aB5bC92807521e3", "mailbox": "0xEf9F292fcEBC3848bF4bB92a96a04F9ECBb78E59", "validatorAnnounce": "0x3726EE36a2A9e11a40d1ffD7D9A1A16e0154cDA0", - "merkleTreeHook": "0x48D4ede231344A19c92b9cA9Ac8B453116012169", + "merkleTreeHook": "0x221FA9CBaFcd6c1C3d206571Cf4427703e023FFa", "storageGasOracle": "0x8356113754C7aCa297Db3089b89F87CC125499fb", "interchainGasPaymaster": "0x1246529edDcA523AfE5c6b9414299633d2E16697", "aggregationHook": "0xdBabD76358897E68E4964647C1fb8Bf524f5EFdB", diff --git a/typescript/utils/package.json b/typescript/utils/package.json index f81037702..54ff1856d 100644 --- a/typescript/utils/package.json +++ b/typescript/utils/package.json @@ -1,7 +1,7 @@ { "name": "@hyperlane-xyz/utils", "description": "General utilities and types for the Hyperlane network", - "version": "1.5.0", + "version": "1.5.4-beta0", "dependencies": { "@solana/web3.js": "^1.78.0", "bignumber.js": "^9.1.1", @@ -32,5 +32,6 @@ "types": "dist/index.d.ts", "files": [ "/dist" - ] + ], + "stableVersion": "1.5.0" } diff --git a/yarn.lock b/yarn.lock index 11b095c0e..a59e9cfca 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3930,12 +3930,12 @@ __metadata: languageName: node linkType: hard -"@hyperlane-xyz/core@1.5.0, @hyperlane-xyz/core@workspace:solidity": +"@hyperlane-xyz/core@1.5.4-beta0, @hyperlane-xyz/core@workspace:solidity": version: 0.0.0-use.local resolution: "@hyperlane-xyz/core@workspace:solidity" dependencies: "@eth-optimism/contracts": ^0.6.0 - "@hyperlane-xyz/utils": 1.5.0 + "@hyperlane-xyz/utils": 1.5.4-beta0 "@nomiclabs/hardhat-ethers": ^2.2.1 "@nomiclabs/hardhat-waffle": ^2.0.3 "@openzeppelin/contracts": ^4.8.0 @@ -3958,12 +3958,12 @@ __metadata: languageName: unknown linkType: soft -"@hyperlane-xyz/helloworld@1.5.0, @hyperlane-xyz/helloworld@workspace:typescript/helloworld": +"@hyperlane-xyz/helloworld@1.5.4-beta0, @hyperlane-xyz/helloworld@workspace:typescript/helloworld": version: 0.0.0-use.local resolution: "@hyperlane-xyz/helloworld@workspace:typescript/helloworld" dependencies: - "@hyperlane-xyz/core": 1.5.0 - "@hyperlane-xyz/sdk": 1.5.0 + "@hyperlane-xyz/core": 1.5.4-beta0 + "@hyperlane-xyz/sdk": 1.5.4-beta0 "@nomiclabs/hardhat-ethers": ^2.2.1 "@nomiclabs/hardhat-waffle": ^2.0.3 "@openzeppelin/contracts-upgradeable": ^4.8.0 @@ -4003,9 +4003,9 @@ __metadata: "@ethersproject/experimental": ^5.7.0 "@ethersproject/hardware-wallets": ^5.7.0 "@ethersproject/providers": ^5.7.2 - "@hyperlane-xyz/helloworld": 1.5.0 - "@hyperlane-xyz/sdk": 1.5.0 - "@hyperlane-xyz/utils": 1.5.0 + "@hyperlane-xyz/helloworld": 1.5.4-beta0 + "@hyperlane-xyz/sdk": 1.5.4-beta0 + "@hyperlane-xyz/utils": 1.5.4-beta0 "@nomiclabs/hardhat-ethers": ^2.2.1 "@nomiclabs/hardhat-etherscan": ^3.0.3 "@nomiclabs/hardhat-waffle": ^2.0.3 @@ -4049,12 +4049,12 @@ __metadata: languageName: unknown linkType: soft -"@hyperlane-xyz/sdk@1.5.0, @hyperlane-xyz/sdk@workspace:typescript/sdk": +"@hyperlane-xyz/sdk@1.5.4-beta0, @hyperlane-xyz/sdk@workspace:typescript/sdk": version: 0.0.0-use.local resolution: "@hyperlane-xyz/sdk@workspace:typescript/sdk" dependencies: - "@hyperlane-xyz/core": 1.5.0 - "@hyperlane-xyz/utils": 1.5.0 + "@hyperlane-xyz/core": 1.5.4-beta0 + "@hyperlane-xyz/utils": 1.5.4-beta0 "@nomiclabs/hardhat-ethers": ^2.2.1 "@nomiclabs/hardhat-waffle": ^2.0.3 "@solana/spl-token": ^0.3.8 @@ -4084,7 +4084,7 @@ __metadata: languageName: unknown linkType: soft -"@hyperlane-xyz/utils@1.5.0, @hyperlane-xyz/utils@workspace:typescript/utils": +"@hyperlane-xyz/utils@1.5.4-beta0, @hyperlane-xyz/utils@workspace:typescript/utils": version: 0.0.0-use.local resolution: "@hyperlane-xyz/utils@workspace:typescript/utils" dependencies: