diff --git a/.changeset/short-boats-suffer.md b/.changeset/short-boats-suffer.md index ecf110c7bb..6d9e8470d9 100644 --- a/.changeset/short-boats-suffer.md +++ b/.changeset/short-boats-suffer.md @@ -2,4 +2,4 @@ '@hyperlane-xyz/cli': patch --- -Update CLI Warp deployment output shape to new WarpCore config +Update CLI Warp route deployment output shape to new WarpCore config diff --git a/.changeset/tasty-eyes-grin.md b/.changeset/tasty-eyes-grin.md new file mode 100644 index 0000000000..7268abad75 --- /dev/null +++ b/.changeset/tasty-eyes-grin.md @@ -0,0 +1,5 @@ +--- +'@hyperlane-xyz/sdk': patch +--- + +Implement message id extraction for CosmWasmCoreAdapter diff --git a/.changeset/wild-horses-burn.md b/.changeset/wild-horses-burn.md new file mode 100644 index 0000000000..44922d2880 --- /dev/null +++ b/.changeset/wild-horses-burn.md @@ -0,0 +1,6 @@ +--- +'@hyperlane-xyz/infra': patch +'@hyperlane-xyz/sdk': patch +--- + +Patch transfer ownership in hook deployer diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 868b037dbc..2761190839 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -226,8 +226,9 @@ jobs: strategy: matrix: include: - - hook: preset_hook_enabled - - hook: configure_hook_enabled + - test-type: preset_hook_enabled + - test-type: configure_hook_enabled + - test-type: pi_with_core_chain steps: - uses: actions/setup-node@v3 with: @@ -284,18 +285,14 @@ jobs: ~/.cargo key: ${{ runner.os }}-cargo-cache-${{ hashFiles('./rust/Cargo.lock') }} - - name: cli e2e tests with preset hook config - run: ./typescript/cli/ci-test.sh false - if: matrix.hook == 'preset_hook_enabled' - - - name: cli e2e tests with configured hook config - run: ./typescript/cli/ci-test.sh true - if: matrix.hook == 'configure_hook_enabled' + - name: cli e2e tests + run: ./typescript/cli/ci-test.sh ${{ matrix.test-type }} env-test: runs-on: ubuntu-latest needs: [yarn-build] strategy: + fail-fast: false matrix: environment: [mainnet3] chain: [ethereum, arbitrum, optimism, inevm, viction] @@ -304,6 +301,9 @@ jobs: - environment: testnet4 chain: sepolia module: core + - environment: mainnet3 + chain: inevm + module: warp steps: - uses: actions/checkout@v3 diff --git a/Dockerfile b/Dockerfile index 4463402489..f40cc6e499 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,6 +15,7 @@ COPY typescript/sdk/package.json ./typescript/sdk/ COPY typescript/helloworld/package.json ./typescript/helloworld/ COPY typescript/cli/package.json ./typescript/cli/ COPY typescript/infra/package.json ./typescript/infra/ +COPY typescript/ccip-server/package.json ./typescript/ccip-server/ COPY solidity/package.json ./solidity/ RUN yarn install && yarn cache clean diff --git a/rust/.gitignore b/rust/.gitignore index 1d73887c2d..ffe12328db 100644 --- a/rust/.gitignore +++ b/rust/.gitignore @@ -2,4 +2,5 @@ target validatordb relayerdb kathydb +hyperlane_db config/test_config.json diff --git a/rust/Cargo.lock b/rust/Cargo.lock index a963320d9c..43350301df 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -4180,6 +4180,7 @@ dependencies = [ "ethers-providers", "eyre", "fixed-hash 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "futures", "getrandom 0.2.12", "hex 0.4.3", "itertools 0.12.0", @@ -4207,7 +4208,9 @@ dependencies = [ "base64 0.21.7", "bech32 0.9.1", "cosmrs", + "cosmwasm-std", "derive-new", + "futures", "hex 0.4.3", "http", "hyper", diff --git a/rust/Cargo.toml b/rust/Cargo.toml index ffdd2f624f..51c0f0f964 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -72,6 +72,7 @@ cosmrs = { version = "0.14", default-features = false, features = [ "tokio", "grpc", ] } +cosmwasm-std = "*" crunchy = "0.2" ctrlc = "3.2" curve25519-dalek = { version = "~3.2", features = ["serde"] } diff --git a/rust/agents/relayer/Cargo.toml b/rust/agents/relayer/Cargo.toml index 1cb2a1d329..8f95fc8431 100644 --- a/rust/agents/relayer/Cargo.toml +++ b/rust/agents/relayer/Cargo.toml @@ -35,7 +35,7 @@ tokio = { workspace = true, features = ["rt", "macros", "parking_lot"] } tracing-futures.workspace = true tracing.workspace = true -hyperlane-core = { path = "../../hyperlane-core", features = ["agent", "fallback-provider"] } +hyperlane-core = { path = "../../hyperlane-core", features = ["agent", "async"] } hyperlane-base = { path = "../../hyperlane-base" } hyperlane-ethereum = { path = "../../chains/hyperlane-ethereum" } diff --git a/rust/agents/relayer/src/msg/pending_message.rs b/rust/agents/relayer/src/msg/pending_message.rs index 385c8db736..1294d45922 100644 --- a/rust/agents/relayer/src/msg/pending_message.rs +++ b/rust/agents/relayer/src/msg/pending_message.rs @@ -193,7 +193,7 @@ impl PendingOperation for PendingMessage { .await, "checking if message meets gas payment requirement" ) else { - info!(?tx_cost_estimate, "Gas payment requirement not met yet"); + warn!(?tx_cost_estimate, "Gas payment requirement not met yet"); return self.on_reprepare(); }; diff --git a/rust/agents/validator/Cargo.toml b/rust/agents/validator/Cargo.toml index 9f90f47730..98a5fe6f83 100644 --- a/rust/agents/validator/Cargo.toml +++ b/rust/agents/validator/Cargo.toml @@ -27,7 +27,7 @@ tokio = { workspace = true, features = ["rt", "macros", "parking_lot"] } tracing-futures.workspace = true tracing.workspace = true -hyperlane-core = { path = "../../hyperlane-core", features = ["agent", "fallback-provider"] } +hyperlane-core = { path = "../../hyperlane-core", features = ["agent", "async"] } hyperlane-base = { path = "../../hyperlane-base" } hyperlane-ethereum = { path = "../../chains/hyperlane-ethereum" } hyperlane-cosmos = { path = "../../chains/hyperlane-cosmos" } diff --git a/rust/agents/validator/src/submit.rs b/rust/agents/validator/src/submit.rs index 3de0a798af..bc040ed56c 100644 --- a/rust/agents/validator/src/submit.rs +++ b/rust/agents/validator/src/submit.rs @@ -3,12 +3,11 @@ use std::sync::Arc; use std::time::{Duration, Instant}; use std::vec; -use eyre::{bail, Result}; -use hyperlane_core::MerkleTreeHook; +use hyperlane_core::rpc_clients::call_and_retry_indefinitely; +use hyperlane_core::{ChainCommunicationError, ChainResult, MerkleTreeHook}; use prometheus::IntGauge; use tokio::time::sleep; -use tracing::{debug, info}; -use tracing::{error, instrument}; +use tracing::{debug, error, info}; use hyperlane_base::{db::HyperlaneRocksDB, CheckpointSyncer, CoreMetrics}; use hyperlane_core::{ @@ -60,29 +59,28 @@ impl ValidatorSubmitter { /// Submits signed checkpoints from index 0 until the target checkpoint (inclusive). /// Runs idly forever once the target checkpoint is reached to avoid exiting the task. - #[instrument(err, skip(self), fields(domain=%self.merkle_tree_hook.domain()))] - pub(crate) async fn backfill_checkpoint_submitter( - self, - target_checkpoint: Checkpoint, - ) -> Result<()> { + pub(crate) async fn backfill_checkpoint_submitter(self, target_checkpoint: Checkpoint) { let mut tree = IncrementalMerkle::default(); - self.submit_checkpoints_until_correctness_checkpoint(&mut tree, &target_checkpoint) - .await?; + call_and_retry_indefinitely(|| { + let target_checkpoint = target_checkpoint; + let self_clone = self.clone(); + Box::pin(async move { + self_clone + .submit_checkpoints_until_correctness_checkpoint(&mut tree, &target_checkpoint) + .await?; + Ok(()) + }) + }) + .await; info!( ?target_checkpoint, "Backfill checkpoint submitter successfully reached target checkpoint" ); - - // TODO: remove this once validator is tolerant of tasks exiting. - loop { - sleep(Duration::from_secs(u64::MAX)).await; - } } /// Submits signed checkpoints indefinitely, starting from the `tree`. - #[instrument(err, skip(self, tree), fields(domain=%self.merkle_tree_hook.domain()))] - pub(crate) async fn checkpoint_submitter(self, mut tree: IncrementalMerkle) -> Result<()> { + pub(crate) async fn checkpoint_submitter(self, mut tree: IncrementalMerkle) { // How often to log checkpoint info - once every minute let checkpoint_info_log_period = Duration::from_secs(60); // The instant in which we last logged checkpoint info, if at all @@ -102,10 +100,12 @@ impl ValidatorSubmitter { loop { // Lag by reorg period because this is our correctness checkpoint. - let latest_checkpoint = self - .merkle_tree_hook - .latest_checkpoint(self.reorg_period) - .await?; + let latest_checkpoint = call_and_retry_indefinitely(|| { + let merkle_tree_hook = self.merkle_tree_hook.clone(); + Box::pin(async move { merkle_tree_hook.latest_checkpoint(self.reorg_period).await }) + }) + .await; + self.metrics .latest_checkpoint_observed .set(latest_checkpoint.index as i64); @@ -133,8 +133,20 @@ impl ValidatorSubmitter { continue; } - self.submit_checkpoints_until_correctness_checkpoint(&mut tree, &latest_checkpoint) - .await?; + tree = call_and_retry_indefinitely(|| { + let mut tree = tree; + let self_clone = self.clone(); + Box::pin(async move { + self_clone + .submit_checkpoints_until_correctness_checkpoint( + &mut tree, + &latest_checkpoint, + ) + .await?; + Ok(tree) + }) + }) + .await; self.metrics .latest_checkpoint_processed @@ -150,7 +162,7 @@ impl ValidatorSubmitter { &self, tree: &mut IncrementalMerkle, correctness_checkpoint: &Checkpoint, - ) -> Result<()> { + ) -> ChainResult<()> { // This should never be called with a tree that is ahead of the correctness checkpoint. assert!( !tree_exceeds_checkpoint(correctness_checkpoint, tree), @@ -213,7 +225,9 @@ impl ValidatorSubmitter { ?correctness_checkpoint, "Incorrect tree root, something went wrong" ); - bail!("Incorrect tree root, something went wrong"); + return Err(ChainCommunicationError::CustomError( + "Incorrect tree root, something went wrong".to_string(), + )); } if !checkpoint_queue.is_empty() { @@ -238,7 +252,7 @@ impl ValidatorSubmitter { async fn sign_and_submit_checkpoints( &self, checkpoints: Vec, - ) -> Result<()> { + ) -> ChainResult<()> { let last_checkpoint = checkpoints.as_slice()[checkpoints.len() - 1]; for queued_checkpoint in checkpoints { diff --git a/rust/agents/validator/src/validator.rs b/rust/agents/validator/src/validator.rs index 19c1ccf02c..1f9b86effa 100644 --- a/rust/agents/validator/src/validator.rs +++ b/rust/agents/validator/src/validator.rs @@ -141,7 +141,6 @@ impl BaseAgent for Validator { .expect("Failed to create server"); let server_task = tokio::spawn(async move { server.run(routes); - Ok(()) }) .instrument(info_span!("Validator server")); tasks.push(server_task); @@ -150,7 +149,6 @@ impl BaseAgent for Validator { tasks.push( tokio::spawn(async move { signer_instance.run().await; - Ok(()) }) .instrument(info_span!("SingletonSigner")), ); @@ -168,7 +166,6 @@ impl BaseAgent for Validator { tasks.push( tokio::spawn(async move { metrics_updater.spawn().await.unwrap(); - Ok(()) }) .instrument(info_span!("MetricsUpdater")), ); @@ -200,6 +197,7 @@ impl BaseAgent for Validator { } } + // Note that this only returns an error if one of the tasks panics if let Err(err) = try_join_all(tasks).await { error!(?err, "One of the validator tasks returned an error"); } @@ -207,7 +205,7 @@ impl BaseAgent for Validator { } impl Validator { - async fn run_merkle_tree_hook_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.merkle_tree_hook_sync.clone(); @@ -216,12 +214,11 @@ impl Validator { .await; tokio::spawn(async move { contract_sync.clone().sync("merkle_tree_hook", cursor).await; - Ok(()) }) .instrument(info_span!("MerkleTreeHookSyncer")) } - async fn run_checkpoint_submitters(&self) -> Vec>>> { + async fn run_checkpoint_submitters(&self) -> Vec>> { let submitter = ValidatorSubmitter::new( self.interval, self.reorg_period, diff --git a/rust/chains/hyperlane-cosmos/Cargo.toml b/rust/chains/hyperlane-cosmos/Cargo.toml index c105faec66..d02327111f 100644 --- a/rust/chains/hyperlane-cosmos/Cargo.toml +++ b/rust/chains/hyperlane-cosmos/Cargo.toml @@ -14,7 +14,9 @@ async-trait = { workspace = true } base64 = { workspace = true } bech32 = { workspace = true } cosmrs = { workspace = true, features = ["cosmwasm", "tokio", "grpc", "rpc"] } +cosmwasm-std = { workspace = true } derive-new = { workspace = true } +futures = { workspace = true } hex = { workspace = true } http = { workspace = true } hyperlane-cosmwasm-interface.workspace = true @@ -39,4 +41,4 @@ tracing = { workspace = true } tracing-futures = { workspace = true } url = { workspace = true } -hyperlane-core = { path = "../../hyperlane-core", features = ["fallback-provider"]} +hyperlane-core = { path = "../../hyperlane-core", features = ["async"]} diff --git a/rust/chains/hyperlane-cosmos/src/error.rs b/rust/chains/hyperlane-cosmos/src/error.rs index 06fffaff7e..d266d317c4 100644 --- a/rust/chains/hyperlane-cosmos/src/error.rs +++ b/rust/chains/hyperlane-cosmos/src/error.rs @@ -26,6 +26,9 @@ pub enum HyperlaneCosmosError { #[error("{0}")] /// Cosmrs Tendermint Error CosmrsTendermintError(#[from] cosmrs::tendermint::Error), + #[error("{0}")] + /// CosmWasm Error + CosmWasmError(#[from] cosmwasm_std::StdError), /// Tonic error #[error("{0}")] Tonic(#[from] tonic::transport::Error), diff --git a/rust/chains/hyperlane-cosmos/src/interchain_gas.rs b/rust/chains/hyperlane-cosmos/src/interchain_gas.rs index 2beafe4e78..60e0e1bb1f 100644 --- a/rust/chains/hyperlane-cosmos/src/interchain_gas.rs +++ b/rust/chains/hyperlane-cosmos/src/interchain_gas.rs @@ -1,6 +1,6 @@ use async_trait::async_trait; use base64::{engine::general_purpose::STANDARD as BASE64, Engine}; -use cosmrs::tendermint::abci::EventAttribute; +use futures::future; use hyperlane_core::{ ChainCommunicationError, ChainResult, ContractLocator, HyperlaneChain, HyperlaneContract, HyperlaneDomain, HyperlaneProvider, Indexer, InterchainGasPaymaster, InterchainGasPayment, @@ -8,6 +8,8 @@ use hyperlane_core::{ }; use once_cell::sync::Lazy; use std::ops::RangeInclusive; +use tendermint::abci::EventAttribute; +use tracing::{instrument, warn}; use crate::{ rpc::{CosmosWasmIndexer, ParsedEvent, WasmIndexer}, @@ -83,7 +85,7 @@ static DESTINATION_ATTRIBUTE_KEY_BASE64: Lazy = Lazy::new(|| BASE64.encode(DESTINATION_ATTRIBUTE_KEY)); /// A reference to a InterchainGasPaymasterIndexer contract on some Cosmos chain -#[derive(Debug)] +#[derive(Debug, Clone)] pub struct CosmosInterchainGasPaymasterIndexer { indexer: Box, } @@ -110,6 +112,7 @@ impl CosmosInterchainGasPaymasterIndexer { }) } + #[instrument(err)] fn interchain_gas_payment_parser( attrs: &Vec, ) -> ChainResult> { @@ -203,10 +206,38 @@ impl Indexer for CosmosInterchainGasPaymasterIndexer { &self, range: RangeInclusive, ) -> ChainResult> { - let result = self - .indexer - .get_range_event_logs(range, Self::interchain_gas_payment_parser) - .await?; + let logs_futures: Vec<_> = range + .map(|block_number| { + let self_clone = self.clone(); + tokio::spawn(async move { + let logs = self_clone + .indexer + .get_logs_in_block( + block_number, + Self::interchain_gas_payment_parser, + "InterchainGasPaymentCursor", + ) + .await; + (logs, block_number) + }) + }) + .collect(); + + // TODO: this can be refactored when we rework indexing, to be part of the block-by-block indexing + let result = future::join_all(logs_futures) + .await + .into_iter() + .flatten() + .filter_map(|(res, block_number)| match res { + Ok(logs) => Some(logs), + Err(err) => { + warn!(?err, ?block_number, "Failed to fetch logs for block"); + None + } + }) + .flatten() + .collect(); + Ok(result) } @@ -260,7 +291,6 @@ impl TryInto for IncompleteInterchainGasPayment { #[cfg(test)] mod tests { - use cosmrs::tendermint::abci::EventAttribute; use hyperlane_core::{InterchainGasPayment, H256, U256}; use std::str::FromStr; diff --git a/rust/chains/hyperlane-cosmos/src/mailbox.rs b/rust/chains/hyperlane-cosmos/src/mailbox.rs index 8f5bab03d6..fcda4e78af 100644 --- a/rust/chains/hyperlane-cosmos/src/mailbox.rs +++ b/rust/chains/hyperlane-cosmos/src/mailbox.rs @@ -1,4 +1,5 @@ use base64::{engine::general_purpose::STANDARD as BASE64, Engine}; +use futures::future; use std::{ fmt::{Debug, Formatter}, io::Cursor, @@ -18,8 +19,8 @@ use crate::{grpc::WasmProvider, HyperlaneCosmosError}; use crate::{signers::Signer, utils::get_block_height_for_lag, ConnectionConf}; use async_trait::async_trait; use cosmrs::proto::cosmos::base::abci::v1beta1::TxResponse; -use cosmrs::tendermint::abci::EventAttribute; use once_cell::sync::Lazy; +use tendermint::abci::EventAttribute; use crate::utils::{CONTRACT_ADDRESS_ATTRIBUTE_KEY, CONTRACT_ADDRESS_ATTRIBUTE_KEY_BASE64}; use hyperlane_core::{ @@ -32,6 +33,7 @@ use hyperlane_core::{ }; use tracing::{instrument, warn}; +#[derive(Clone)] /// A reference to a Mailbox contract on some Cosmos chain pub struct CosmosMailbox { config: ConnectionConf, @@ -262,7 +264,7 @@ static MESSAGE_ATTRIBUTE_KEY_BASE64: Lazy = Lazy::new(|| BASE64.encode(MESSAGE_ATTRIBUTE_KEY)); /// Struct that retrieves event data for a Cosmos Mailbox contract -#[derive(Debug)] +#[derive(Debug, Clone)] pub struct CosmosMailboxIndexer { mailbox: CosmosMailbox, indexer: Box, @@ -294,6 +296,7 @@ impl CosmosMailboxIndexer { }) } + #[instrument(err)] fn hyperlane_message_parser( attrs: &Vec, ) -> ChainResult> { @@ -352,10 +355,37 @@ impl Indexer for CosmosMailboxIndexer { &self, range: RangeInclusive, ) -> ChainResult> { - let result = self - .indexer - .get_range_event_logs(range, Self::hyperlane_message_parser) - .await?; + let logs_futures: Vec<_> = range + .map(|block_number| { + let self_clone = self.clone(); + tokio::spawn(async move { + let logs = self_clone + .indexer + .get_logs_in_block( + block_number, + Self::hyperlane_message_parser, + "HyperlaneMessageCursor", + ) + .await; + (logs, block_number) + }) + }) + .collect(); + + // TODO: this can be refactored when we rework indexing, to be part of the block-by-block indexing + let result = future::join_all(logs_futures) + .await + .into_iter() + .flatten() + .filter_map(|(logs_res, block_number)| match logs_res { + Ok(logs) => Some(logs), + Err(err) => { + warn!(?err, ?block_number, "Failed to fetch logs for block"); + None + } + }) + .flatten() + .collect(); Ok(result) } @@ -400,7 +430,6 @@ impl SequenceAwareIndexer for CosmosMailboxIndexer { #[cfg(test)] mod tests { - use cosmrs::tendermint::abci::EventAttribute; use hyperlane_core::HyperlaneMessage; use crate::{rpc::ParsedEvent, utils::event_attributes_from_str}; diff --git a/rust/chains/hyperlane-cosmos/src/merkle_tree_hook.rs b/rust/chains/hyperlane-cosmos/src/merkle_tree_hook.rs index 6d8ebe9104..9cab0e9f90 100644 --- a/rust/chains/hyperlane-cosmos/src/merkle_tree_hook.rs +++ b/rust/chains/hyperlane-cosmos/src/merkle_tree_hook.rs @@ -2,14 +2,15 @@ use std::{fmt::Debug, num::NonZeroU64, ops::RangeInclusive, str::FromStr}; use async_trait::async_trait; use base64::{engine::general_purpose::STANDARD as BASE64, Engine}; -use cosmrs::tendermint::abci::EventAttribute; +use futures::future; use hyperlane_core::{ accumulator::incremental::IncrementalMerkle, ChainCommunicationError, ChainResult, Checkpoint, ContractLocator, HyperlaneChain, HyperlaneContract, HyperlaneDomain, HyperlaneProvider, Indexer, LogMeta, MerkleTreeHook, MerkleTreeInsertion, SequenceAwareIndexer, H256, }; use once_cell::sync::Lazy; -use tracing::instrument; +use tendermint::abci::EventAttribute; +use tracing::{instrument, warn}; use crate::{ grpc::WasmProvider, @@ -25,7 +26,7 @@ use crate::{ ConnectionConf, CosmosProvider, HyperlaneCosmosError, Signer, }; -#[derive(Debug)] +#[derive(Debug, Clone)] /// A reference to a MerkleTreeHook contract on some Cosmos chain pub struct CosmosMerkleTreeHook { /// Domain @@ -184,7 +185,7 @@ const MESSAGE_ID_ATTRIBUTE_KEY: &str = "message_id"; pub(crate) static MESSAGE_ID_ATTRIBUTE_KEY_BASE64: Lazy = Lazy::new(|| BASE64.encode(MESSAGE_ID_ATTRIBUTE_KEY)); -#[derive(Debug)] +#[derive(Debug, Clone)] /// A reference to a MerkleTreeHookIndexer contract on some Cosmos chain pub struct CosmosMerkleTreeHookIndexer { /// The CosmosMerkleTreeHook @@ -217,6 +218,7 @@ impl CosmosMerkleTreeHookIndexer { }) } + #[instrument(err)] fn merkle_tree_insertion_parser( attrs: &Vec, ) -> ChainResult> { @@ -285,10 +287,37 @@ impl Indexer for CosmosMerkleTreeHookIndexer { &self, range: RangeInclusive, ) -> ChainResult> { - let result = self - .indexer - .get_range_event_logs(range, Self::merkle_tree_insertion_parser) - .await?; + let logs_futures: Vec<_> = range + .map(|block_number| { + let self_clone = self.clone(); + tokio::spawn(async move { + let logs = self_clone + .indexer + .get_logs_in_block( + block_number, + Self::merkle_tree_insertion_parser, + "MerkleTreeInsertionCursor", + ) + .await; + (logs, block_number) + }) + }) + .collect(); + + // TODO: this can be refactored when we rework indexing, to be part of the block-by-block indexing + let result = future::join_all(logs_futures) + .await + .into_iter() + .flatten() + .filter_map(|(logs_res, block_number)| match logs_res { + Ok(logs) => Some(logs), + Err(err) => { + warn!(?err, ?block_number, "Failed to fetch logs for block"); + None + } + }) + .flatten() + .collect(); Ok(result) } @@ -335,7 +364,6 @@ impl TryInto for IncompleteMerkleTreeInsertion { #[cfg(test)] mod tests { - use cosmrs::tendermint::abci::EventAttribute; use hyperlane_core::H256; use std::str::FromStr; diff --git a/rust/chains/hyperlane-cosmos/src/payloads/general.rs b/rust/chains/hyperlane-cosmos/src/payloads/general.rs index af2a4b0b6e..bf0931220d 100644 --- a/rust/chains/hyperlane-cosmos/src/payloads/general.rs +++ b/rust/chains/hyperlane-cosmos/src/payloads/general.rs @@ -9,6 +9,11 @@ pub struct Log { pub events: Vec, } +#[derive(Serialize, Deserialize, Debug, Clone)] +pub struct Events { + pub events: Vec, +} + #[derive(Serialize, Deserialize, Debug, Clone)] pub struct Event { #[serde(rename = "type")] diff --git a/rust/chains/hyperlane-cosmos/src/providers/grpc.rs b/rust/chains/hyperlane-cosmos/src/providers/grpc.rs index a6bc070aba..f91be32bb5 100644 --- a/rust/chains/hyperlane-cosmos/src/providers/grpc.rs +++ b/rust/chains/hyperlane-cosmos/src/providers/grpc.rs @@ -191,12 +191,13 @@ impl WasmGrpcProvider { self.gas_price.amount.clone() } - /// Generates an unsigned SignDoc for a transaction. - async fn generate_unsigned_sign_doc( + /// Generates an unsigned SignDoc for a transaction and the Coin amount + /// required to pay for tx fees. + async fn generate_unsigned_sign_doc_and_fee( &self, msgs: Vec, gas_limit: u64, - ) -> ChainResult { + ) -> ChainResult<(SignDoc, Coin)> { // As this function is only used for estimating gas or sending transactions, // we can reasonably expect to have a signer. let signer = self.get_signer()?; @@ -215,15 +216,14 @@ impl WasmGrpcProvider { let amount: u128 = (FixedPointNumber::from(gas_limit) * self.gas_price()) .ceil_to_integer() .try_into()?; - let auth_info = signer_info.auth_info(Fee::from_amount_and_gas( - Coin::new( - // The fee to pay is the gas limit * the gas price - amount, - self.conf.get_canonical_asset().as_str(), - ) - .map_err(Into::::into)?, - gas_limit, - )); + let fee_coin = Coin::new( + // The fee to pay is the gas limit * the gas price + amount, + self.conf.get_canonical_asset().as_str(), + ) + .map_err(Into::::into)?; + let auth_info = + signer_info.auth_info(Fee::from_amount_and_gas(fee_coin.clone(), gas_limit)); let chain_id = self .conf @@ -231,39 +231,46 @@ impl WasmGrpcProvider { .parse() .map_err(Into::::into)?; - Ok( + Ok(( SignDoc::new(&tx_body, &auth_info, &chain_id, account_info.account_number) .map_err(Into::::into)?, - ) + fee_coin, + )) } - /// Generates a raw signed transaction including `msgs`, estimating gas if a limit is not provided. - async fn generate_raw_signed_tx( + /// Generates a raw signed transaction including `msgs`, estimating gas if a limit is not provided, + /// and the Coin amount required to pay for tx fees. + async fn generate_raw_signed_tx_and_fee( &self, msgs: Vec, gas_limit: Option, - ) -> ChainResult> { + ) -> ChainResult<(Vec, Coin)> { let gas_limit = if let Some(l) = gas_limit { l } else { self.estimate_gas(msgs.clone()).await? }; - let sign_doc = self.generate_unsigned_sign_doc(msgs, gas_limit).await?; + let (sign_doc, fee) = self + .generate_unsigned_sign_doc_and_fee(msgs, gas_limit) + .await?; let signer = self.get_signer()?; let tx_signed = sign_doc .sign(&signer.signing_key()?) .map_err(Into::::into)?; - Ok(tx_signed - .to_bytes() - .map_err(Into::::into)?) + Ok(( + tx_signed + .to_bytes() + .map_err(Into::::into)?, + fee, + )) } /// Estimates gas for a transaction containing `msgs`. async fn estimate_gas(&self, msgs: Vec) -> ChainResult { // Get a sign doc with 0 gas, because we plan to simulate - let sign_doc = self.generate_unsigned_sign_doc(msgs, 0).await?; + let (sign_doc, _) = self.generate_unsigned_sign_doc_and_fee(msgs, 0).await?; let raw_tx = TxRaw { body_bytes: sign_doc.body_bytes, @@ -551,7 +558,21 @@ impl WasmProvider for WasmGrpcProvider { None } }); - let tx_bytes = self.generate_raw_signed_tx(msgs, gas_limit).await?; + let (tx_bytes, fee) = self.generate_raw_signed_tx_and_fee(msgs, gas_limit).await?; + + // Check if the signer has enough funds to pay for the fee so we can get + // a more informative error. + let signer_balance = self + .get_balance(signer.address.clone(), fee.denom.to_string()) + .await?; + let fee_amount: U256 = fee.amount.into(); + if signer_balance < fee_amount { + return Err(ChainCommunicationError::InsufficientFunds { + required: fee_amount, + available: signer_balance, + }); + } + let tx_res = self .provider .call(move |provider| { diff --git a/rust/chains/hyperlane-cosmos/src/providers/rpc.rs b/rust/chains/hyperlane-cosmos/src/providers/rpc.rs index 04c4f2f12f..7648e879e0 100644 --- a/rust/chains/hyperlane-cosmos/src/providers/rpc.rs +++ b/rust/chains/hyperlane-cosmos/src/providers/rpc.rs @@ -1,33 +1,35 @@ -use std::ops::RangeInclusive; - use async_trait::async_trait; use cosmrs::rpc::client::Client; -use cosmrs::rpc::endpoint::{tx, tx_search::Response as TxSearchResponse}; -use cosmrs::rpc::query::Query; -use cosmrs::rpc::Order; -use cosmrs::tendermint::abci::EventAttribute; +use hyperlane_core::rpc_clients::call_with_retry; use hyperlane_core::{ChainCommunicationError, ChainResult, ContractLocator, LogMeta, H256, U256}; -use tracing::{instrument, trace}; +use sha256::digest; +use std::fmt::Debug; +use tendermint::abci::{Event, EventAttribute}; +use tendermint::hash::Algorithm; +use tendermint::Hash; +use tendermint_rpc::endpoint::block::Response as BlockResponse; +use tendermint_rpc::endpoint::block_results::Response as BlockResultsResponse; +use tendermint_rpc::HttpClient; +use tracing::{debug, instrument, trace}; use crate::address::CosmosAddress; use crate::{ConnectionConf, CosmosProvider, HyperlaneCosmosError}; -const PAGINATION_LIMIT: u8 = 100; - #[async_trait] /// Trait for wasm indexer. Use rpc provider pub trait WasmIndexer: Send + Sync { /// Get the finalized block height. async fn get_finalized_block_number(&self) -> ChainResult; - /// Get logs for the given range using the given parser. - async fn get_range_event_logs( + /// Get logs for the given block using the given parser. + async fn get_logs_in_block( &self, - range: RangeInclusive, + block_number: u32, parser: for<'a> fn(&'a Vec) -> ChainResult>, + cursor_label: &'static str, ) -> ChainResult> where - T: Send + Sync + PartialEq + 'static; + T: Send + Sync + PartialEq + Debug + 'static; } #[derive(Debug, Eq, PartialEq)] @@ -45,9 +47,14 @@ impl ParsedEvent { event, } } + + /// Get the inner event + pub fn inner(self) -> T { + self.event + } } -#[derive(Debug)] +#[derive(Debug, Clone)] /// Cosmwasm RPC Provider pub struct CosmosWasmIndexer { provider: CosmosProvider, @@ -83,58 +90,94 @@ impl CosmosWasmIndexer { reorg_period, }) } -} -impl CosmosWasmIndexer { - #[instrument(level = "trace", err, skip(self))] - async fn tx_search(&self, query: Query, page: u32) -> ChainResult { - Ok(self - .provider - .rpc() - .tx_search(query, false, page, PAGINATION_LIMIT, Order::Ascending) + async fn get_block(client: HttpClient, block_number: u32) -> ChainResult { + Ok(client + .block(block_number) .await .map_err(Into::::into)?) } + async fn get_block_results( + client: HttpClient, + block_number: u32, + ) -> ChainResult { + Ok(client + .block_results(block_number) + .await + .map_err(Into::::into)?) + } + + async fn get_latest_block(client: HttpClient) -> ChainResult { + Ok(client + .latest_block() + .await + .map_err(Into::::into)?) + } +} + +impl CosmosWasmIndexer { // Iterate through all txs, filter out failed txs, find target events // in successful txs, and parse them. fn handle_txs( &self, - txs: Vec, + block: BlockResponse, + block_results: BlockResultsResponse, parser: for<'a> fn(&'a Vec) -> ChainResult>, - ) -> ChainResult + '_> + cursor_label: &'static str, + ) -> Vec<(T, LogMeta)> where - T: PartialEq + 'static, + T: PartialEq + Debug + 'static, { - let logs_iter = txs + let Some(tx_results) = block_results.txs_results else { + return vec![]; + }; + + let tx_hashes: Vec = block + .clone() + .block + .data .into_iter() - .filter(|tx| { - // Filter out failed txs - let tx_failed = tx.tx_result.code.is_err(); - if tx_failed { - trace!(tx_hash=?tx.hash, "Indexed tx has failed, skipping"); - } - !tx_failed + .filter_map(|tx| hex::decode(digest(tx.as_slice())).ok()) + .filter_map(|hash| { + Hash::from_bytes(Algorithm::Sha256, hash.as_slice()) + .ok() + .map(|hash| H256::from_slice(hash.as_bytes())) }) - .flat_map(move |tx| { - // Find target events in successful txs - self.handle_tx(tx, parser) - }); + .collect(); - Ok(logs_iter) + tx_results + .into_iter() + .enumerate() + .filter_map(move |(idx, tx)| { + let Some(tx_hash) = tx_hashes.get(idx) else { + debug!(?tx, "No tx hash found for tx"); + return None; + }; + if tx.code.is_err() { + debug!(?tx_hash, "Not indexing failed transaction"); + return None; + } + Some(self.handle_tx(block.clone(), tx.events, *tx_hash, idx, parser)) + }) + .flatten() + .collect() } // Iter through all events in the tx, looking for any target events // made by the contract we are indexing. fn handle_tx( &self, - tx: tx::Response, + block: BlockResponse, + tx_events: Vec, + tx_hash: H256, + transaction_index: usize, parser: for<'a> fn(&'a Vec) -> ChainResult>, ) -> impl Iterator + '_ where T: PartialEq + 'static, { - tx.tx_result.events.into_iter().enumerate().filter_map(move |(log_idx, event)| { + tx_events.into_iter().enumerate().filter_map(move |(log_idx, event)| { if event.kind.as_str() != self.target_event_kind { return None; } @@ -143,7 +186,7 @@ impl CosmosWasmIndexer { .map_err(|err| { // This can happen if we attempt to parse an event that just happens // to have the same name but a different structure. - tracing::trace!(?err, tx_hash=?tx.hash, log_idx, ?event, "Failed to parse event attributes"); + tracing::trace!(?err, tx_hash=?tx_hash, log_idx, ?event, "Failed to parse event attributes"); }) .ok() .and_then(|parsed_event| { @@ -152,18 +195,16 @@ impl CosmosWasmIndexer { // Otherwise, we might index events from other contracts that happen // to have the same target event name. if parsed_event.contract_address != self.contract_address.address() { - trace!(tx_hash=?tx.hash, log_idx, ?event, "Event contract address does not match indexer contract address"); + trace!(tx_hash=?tx_hash, log_idx, ?event, "Event contract address does not match indexer contract address"); return None; } Some((parsed_event.event, LogMeta { address: self.contract_address.digest(), - block_number: tx.height.value(), - // FIXME: block_hash is not available in tx_search. - // This isn't strictly required atm. - block_hash: H256::zero(), - transaction_id: H256::from_slice(tx.hash.as_bytes()).into(), - transaction_index: tx.index.into(), + block_number: block.block.header.height.into(), + block_hash: H256::from_slice(block.block_id.hash.as_bytes()), + transaction_id: H256::from_slice(tx_hash.as_bytes()).into(), + transaction_index: transaction_index as u64, log_index: U256::from(log_idx), })) }) @@ -173,13 +214,12 @@ impl CosmosWasmIndexer { #[async_trait] impl WasmIndexer for CosmosWasmIndexer { + #[instrument(err, skip(self))] async fn get_finalized_block_number(&self) -> ChainResult { - let latest_height: u32 = self - .provider - .rpc() - .latest_block() - .await - .map_err(Into::::into)? + let latest_block = + call_with_retry(move || Box::pin(Self::get_latest_block(self.provider.rpc().clone()))) + .await?; + let latest_height: u32 = latest_block .block .header .height @@ -190,47 +230,23 @@ impl WasmIndexer for CosmosWasmIndexer { } #[instrument(err, skip(self, parser))] - async fn get_range_event_logs( + async fn get_logs_in_block( &self, - range: RangeInclusive, + block_number: u32, parser: for<'a> fn(&'a Vec) -> ChainResult>, + cursor_label: &'static str, ) -> ChainResult> where - T: PartialEq + Send + Sync + 'static, + T: Send + Sync + PartialEq + Debug + 'static, { - // Page starts from 1 - let query = Query::default() - .and_gte("tx.height", *range.start() as u64) - .and_lte("tx.height", *range.end() as u64) - .and_eq( - format!("{}._contract_address", self.target_event_kind), - self.contract_address.address(), - ); + let client = self.provider.rpc().clone(); + debug!(?block_number, cursor_label, domain=?self.provider.domain, "Getting logs in block"); - let tx_search_result = self.tx_search(query.clone(), 1).await?; + let (block, block_results) = tokio::join!( + call_with_retry(|| { Box::pin(Self::get_block(client.clone(), block_number)) }), + call_with_retry(|| { Box::pin(Self::get_block_results(client.clone(), block_number)) }), + ); - // Using the first tx_search_result, we can calculate the total number of pages. - let total_count = tx_search_result.total_count; - let last_page = div_ceil(total_count, PAGINATION_LIMIT.into()); - - let mut logs = self - .handle_txs(tx_search_result.txs, parser)? - .collect::>(); - - // If there are any more pages, fetch them and append to the result. - for page in 2..=last_page { - trace!(page, "Performing tx search"); - - let tx_search_result = self.tx_search(query.clone(), page).await?; - - logs.extend(self.handle_txs(tx_search_result.txs, parser)?); - } - - Ok(logs) + Ok(self.handle_txs(block?, block_results?, parser, cursor_label)) } } - -// TODO: just use div_ceil when upgrading from 1.72.1 to 1.73.0 or above -fn div_ceil(numerator: u32, denominator: u32) -> u32 { - (numerator as f32 / denominator as f32).ceil() as u32 -} diff --git a/rust/chains/hyperlane-ethereum/Cargo.toml b/rust/chains/hyperlane-ethereum/Cargo.toml index a72855a00b..82b5ff82b0 100644 --- a/rust/chains/hyperlane-ethereum/Cargo.toml +++ b/rust/chains/hyperlane-ethereum/Cargo.toml @@ -30,7 +30,7 @@ tracing-futures.workspace = true tracing.workspace = true url.workspace = true -hyperlane-core = { path = "../../hyperlane-core", features = ["fallback-provider"]} +hyperlane-core = { path = "../../hyperlane-core", features = ["async"]} ethers-prometheus = { path = "../../ethers-prometheus", features = ["serde"] } [build-dependencies] diff --git a/rust/chains/hyperlane-fuel/Cargo.toml b/rust/chains/hyperlane-fuel/Cargo.toml index 82bdbc782e..d2a711feb2 100644 --- a/rust/chains/hyperlane-fuel/Cargo.toml +++ b/rust/chains/hyperlane-fuel/Cargo.toml @@ -19,7 +19,7 @@ tracing-futures.workspace = true tracing.workspace = true url.workspace = true -hyperlane-core = { path = "../../hyperlane-core", features = ["fallback-provider"]} +hyperlane-core = { path = "../../hyperlane-core", features = ["async"]} [build-dependencies] abigen = { path = "../../utils/abigen", features = ["fuels"] } diff --git a/rust/chains/hyperlane-sealevel/Cargo.toml b/rust/chains/hyperlane-sealevel/Cargo.toml index ab4e9b17f6..2a3eed634f 100644 --- a/rust/chains/hyperlane-sealevel/Cargo.toml +++ b/rust/chains/hyperlane-sealevel/Cargo.toml @@ -24,7 +24,7 @@ tracing.workspace = true url.workspace = true account-utils = { path = "../../sealevel/libraries/account-utils" } -hyperlane-core = { path = "../../hyperlane-core", features = ["solana", "fallback-provider"] } +hyperlane-core = { path = "../../hyperlane-core", features = ["solana", "async"] } hyperlane-sealevel-interchain-security-module-interface = { path = "../../sealevel/libraries/interchain-security-module-interface" } hyperlane-sealevel-mailbox = { path = "../../sealevel/programs/mailbox", features = ["no-entrypoint"] } hyperlane-sealevel-igp = { path = "../../sealevel/programs/hyperlane-sealevel-igp", features = ["no-entrypoint"] } diff --git a/rust/config/mainnet3_config.json b/rust/config/mainnet3_config.json index 61c2a0de74..f7683cd30c 100644 --- a/rust/config/mainnet3_config.json +++ b/rust/config/mainnet3_config.json @@ -494,7 +494,7 @@ "contractAddressBytes": 32, "index": { "from": 4000000, - "chunk": 100000 + "chunk": 50 }, "blocks": { "reorgPeriod": 1 @@ -516,7 +516,7 @@ "protocol": "cosmos", "rpcUrls": [ { - "http": "https://rpc-injective.goldenratiostaking.net:443" + "http": "https://injective-rpc.polkachu.com" } ], "grpcUrls": [ @@ -533,7 +533,7 @@ "contractAddressBytes": 20, "index": { "from": 58419500, - "chunk": 100000 + "chunk": 50 }, "blocks": { "reorgPeriod": 10 diff --git a/rust/config/testnet4_config.json b/rust/config/testnet4_config.json index 252584b5f4..ccee524eb1 100644 --- a/rust/config/testnet4_config.json +++ b/rust/config/testnet4_config.json @@ -583,52 +583,52 @@ "index": { "from": 4517401 } - } - }, - "solanatestnet": { - "name": "solanatestnet", - "chainId": 1399811150, - "domainId": 1399811150, - "mailbox": "75HBBLae3ddeneJVrZeyrDfv6vb7SMC3aCpBucSXS5aR", - "merkleTreeHook": "75HBBLae3ddeneJVrZeyrDfv6vb7SMC3aCpBucSXS5aR", - "interchainGasPaymaster": "9SQVtTNsbipdMzumhzi6X8GwojiSMwBfqAhS7FgyTcqy", - "validatorAnnounce": "8qNYSi9EP1xSnRjtMpyof88A26GBbdcrsa61uSaHiwx3", - "protocol": "sealevel", - "blocks": { - "reorgPeriod": 0, - "confirmations": 0 }, - "rpcUrls": [ - { - "http": "https://api.testnet.solana.com" + "solanatestnet": { + "name": "solanatestnet", + "chainId": 1399811150, + "domainId": 1399811150, + "mailbox": "75HBBLae3ddeneJVrZeyrDfv6vb7SMC3aCpBucSXS5aR", + "merkleTreeHook": "75HBBLae3ddeneJVrZeyrDfv6vb7SMC3aCpBucSXS5aR", + "interchainGasPaymaster": "9SQVtTNsbipdMzumhzi6X8GwojiSMwBfqAhS7FgyTcqy", + "validatorAnnounce": "8qNYSi9EP1xSnRjtMpyof88A26GBbdcrsa61uSaHiwx3", + "protocol": "sealevel", + "blocks": { + "reorgPeriod": 0, + "confirmations": 0 + }, + "rpcUrls": [ + { + "http": "https://api.testnet.solana.com" + } + ], + "index": { + "from": 1, + "mode": "sequence" } - ], - "index": { - "from": 1, - "mode": "sequence" - } - }, - "eclipsetestnet": { - "name": "eclipsetestnet", - "chainId": 239092742, - "domainId": 239092742, - "mailbox": "75HBBLae3ddeneJVrZeyrDfv6vb7SMC3aCpBucSXS5aR", - "merkleTreeHook": "75HBBLae3ddeneJVrZeyrDfv6vb7SMC3aCpBucSXS5aR", - "interchainGasPaymaster": "9SQVtTNsbipdMzumhzi6X8GwojiSMwBfqAhS7FgyTcqy", - "validatorAnnounce": "8qNYSi9EP1xSnRjtMpyof88A26GBbdcrsa61uSaHiwx3", - "protocol": "sealevel", - "blocks": { - "reorgPeriod": 0, - "confirmations": 0 }, - "rpcUrls": [ - { - "http": "https://testnet.dev2.eclipsenetwork.xyz" + "eclipsetestnet": { + "name": "eclipsetestnet", + "chainId": 239092742, + "domainId": 239092742, + "mailbox": "75HBBLae3ddeneJVrZeyrDfv6vb7SMC3aCpBucSXS5aR", + "merkleTreeHook": "75HBBLae3ddeneJVrZeyrDfv6vb7SMC3aCpBucSXS5aR", + "interchainGasPaymaster": "9SQVtTNsbipdMzumhzi6X8GwojiSMwBfqAhS7FgyTcqy", + "validatorAnnounce": "8qNYSi9EP1xSnRjtMpyof88A26GBbdcrsa61uSaHiwx3", + "protocol": "sealevel", + "blocks": { + "reorgPeriod": 0, + "confirmations": 0 + }, + "rpcUrls": [ + { + "http": "https://testnet.dev2.eclipsenetwork.xyz" + } + ], + "index": { + "from": 1, + "mode": "sequence" } - ], - "index": { - "from": 1, - "mode": "sequence" } }, "defaultRpcConsensusType": "fallback" diff --git a/rust/helm/hyperlane-agent/templates/external-secret.yaml b/rust/helm/hyperlane-agent/templates/external-secret.yaml index a6c82953e3..9be0700b75 100644 --- a/rust/helm/hyperlane-agent/templates/external-secret.yaml +++ b/rust/helm/hyperlane-agent/templates/external-secret.yaml @@ -26,20 +26,17 @@ spec: * to replace the correct value in the created secret. */}} {{- range .Values.hyperlane.chains }} - {{- if not .disabled }} HYP_CHAINS_{{ .name | upper }}_CUSTOMRPCURLS: {{ printf "'{{ .%s_rpcs | mustFromJson | join \",\" }}'" .name }} {{- if eq .protocol "cosmos" }} HYP_CHAINS_{{ .name | upper }}_CUSTOMGRPCURLS: {{ printf "'{{ .%s_grpcs | mustFromJson | join \",\" }}'" .name }} {{- end }} {{- end }} - {{- end }} data: {{- /* * For each network, load the secret in GCP secret manager with the form: environment-rpc-endpoints-network, * and associate it with the secret key networkname_rpcs. */}} {{- range .Values.hyperlane.chains }} - {{- if not .disabled }} - secretKey: {{ printf "%s_rpcs" .name }} remoteRef: key: {{ printf "%s-rpc-endpoints-%s" $.Values.hyperlane.runEnv .name }} @@ -49,4 +46,3 @@ spec: key: {{ printf "%s-grpc-endpoints-%s" $.Values.hyperlane.runEnv .name }} {{- end }} {{- end }} - {{- end }} diff --git a/rust/helm/hyperlane-agent/values.yaml b/rust/helm/hyperlane-agent/values.yaml index 7b2ca9de71..691bb81c61 100644 --- a/rust/helm/hyperlane-agent/values.yaml +++ b/rust/helm/hyperlane-agent/values.yaml @@ -50,7 +50,6 @@ hyperlane: # This should mirror @hyperlane-xyz/sdk AgentChainMetadata chains: - name: examplechain - disabled: false rpcConsensusType: fallback signer: type: # aws diff --git a/rust/hyperlane-base/src/agent.rs b/rust/hyperlane-base/src/agent.rs index b11a2a00f5..5f6b504e9a 100644 --- a/rust/hyperlane-base/src/agent.rs +++ b/rust/hyperlane-base/src/agent.rs @@ -3,6 +3,7 @@ use std::{env, fmt::Debug, sync::Arc}; use async_trait::async_trait; use eyre::Result; use hyperlane_core::config::*; +use tracing::info; use crate::{ create_chain_metrics, @@ -79,7 +80,8 @@ pub async fn agent_main() -> Result<()> { let chain_metrics = create_chain_metrics(&metrics)?; let agent = A::from_settings(settings, metrics.clone(), agent_metrics, chain_metrics).await?; - // This await will never end unless a panic occurs + // This await will only end if a panic happens. We won't crash, but instead gracefully shut down agent.run().await; + info!(agent = A::AGENT_NAME, "Shutting down agent..."); Ok(()) } diff --git a/rust/hyperlane-base/src/db/rocks/mod.rs b/rust/hyperlane-base/src/db/rocks/mod.rs index 1cec492dec..e9a626a157 100644 --- a/rust/hyperlane-base/src/db/rocks/mod.rs +++ b/rust/hyperlane-base/src/db/rocks/mod.rs @@ -1,7 +1,7 @@ use std::path::PathBuf; use std::{io, path::Path, sync::Arc}; -use hyperlane_core::HyperlaneProtocolError; +use hyperlane_core::{ChainCommunicationError, HyperlaneProtocolError}; use rocksdb::{Options, DB as Rocks}; use tracing::info; @@ -58,6 +58,12 @@ pub enum DbError { HyperlaneError(#[from] HyperlaneProtocolError), } +impl From for ChainCommunicationError { + fn from(value: DbError) -> Self { + ChainCommunicationError::from_other(value) + } +} + type Result = std::result::Result; impl DB { diff --git a/rust/hyperlane-base/src/settings/trace/mod.rs b/rust/hyperlane-base/src/settings/trace/mod.rs index a8d835494e..b0640f36ee 100644 --- a/rust/hyperlane-base/src/settings/trace/mod.rs +++ b/rust/hyperlane-base/src/settings/trace/mod.rs @@ -24,7 +24,7 @@ pub enum Level { /// Warn Warn = 2, /// Debug - Debug = 3, + Debug = 4, /// Trace Trace = 5, /// Trace + Additional logs from dependencies @@ -32,7 +32,7 @@ pub enum Level { /// Info #[serde(other)] #[default] - Info = 4, + Info = 3, } impl From for LevelFilter { @@ -68,6 +68,7 @@ impl TracingConfig { target_layer = target_layer .with_target("hyper", Level::Info) .with_target("rusoto_core", Level::Info) + .with_target("rustls", Level::Info) .with_target("reqwest", Level::Info) .with_target("h2", Level::Info) .with_target("tower", Level::Info) diff --git a/rust/hyperlane-core/Cargo.toml b/rust/hyperlane-core/Cargo.toml index 40468bef6c..5f34bc2091 100644 --- a/rust/hyperlane-core/Cargo.toml +++ b/rust/hyperlane-core/Cargo.toml @@ -26,6 +26,7 @@ ethers-core = { workspace = true, optional = true } ethers-providers = { workspace = true, optional = true } eyre.workspace = true fixed-hash.workspace = true +futures = { workspace = true, optional = true } getrandom.workspace = true hex.workspace = true itertools.workspace = true @@ -55,4 +56,4 @@ agent = ["ethers", "strum"] strum = ["dep:strum"] ethers = ["dep:ethers-core", "dep:ethers-contract", "dep:ethers-providers", "dep:primitive-types"] solana = ["dep:solana-sdk"] -fallback-provider = ["tokio"] +async = ["tokio", "futures"] diff --git a/rust/hyperlane-core/src/chain.rs b/rust/hyperlane-core/src/chain.rs index d01e061758..9a23774b72 100644 --- a/rust/hyperlane-core/src/chain.rs +++ b/rust/hyperlane-core/src/chain.rs @@ -85,6 +85,7 @@ pub enum KnownHyperlaneDomain { Neutron = 1853125230, Injective = 6909546, + InEvm = 2525, PlumeTestnet = 161221135, @@ -220,7 +221,7 @@ impl KnownHyperlaneDomain { many_to_one!(match self { Mainnet: [ Ethereum, Avalanche, Arbitrum, Polygon, Optimism, BinanceSmartChain, Celo, - Moonbeam, Gnosis, MantaPacific, Neutron, Injective + Moonbeam, Gnosis, MantaPacific, Neutron, Injective, InEvm ], Testnet: [ Goerli, Mumbai, Fuji, ArbitrumGoerli, OptimismGoerli, BinanceSmartChainTestnet, @@ -237,7 +238,7 @@ impl KnownHyperlaneDomain { HyperlaneDomainProtocol::Ethereum: [ Ethereum, Goerli, Sepolia, Polygon, Mumbai, Avalanche, Fuji, Arbitrum, ArbitrumGoerli, Optimism, OptimismGoerli, BinanceSmartChain, BinanceSmartChainTestnet, Celo, Gnosis, - Alfajores, Moonbeam, MoonbaseAlpha, PolygonZkEvmTestnet, LineaGoerli, ScrollSepolia, + Alfajores, Moonbeam, InEvm, MoonbaseAlpha, PolygonZkEvmTestnet, LineaGoerli, ScrollSepolia, Chiado, MantaPacific, PlumeTestnet, Test1, Test2, Test3 ], HyperlaneDomainProtocol::Fuel: [FuelTest1], @@ -254,7 +255,7 @@ impl KnownHyperlaneDomain { HyperlaneDomainTechnicalStack::Other: [ Ethereum, Goerli, Sepolia, Polygon, Mumbai, Avalanche, Fuji, Optimism, OptimismGoerli, BinanceSmartChain, BinanceSmartChainTestnet, Celo, Gnosis, Alfajores, Moonbeam, MoonbaseAlpha, - PolygonZkEvmTestnet, LineaGoerli, ScrollSepolia, Chiado, MantaPacific, Neutron, Injective, + PolygonZkEvmTestnet, LineaGoerli, ScrollSepolia, Chiado, MantaPacific, Neutron, Injective, InEvm, Test1, Test2, Test3, FuelTest1, SealevelTest1, SealevelTest2, CosmosTest99990, CosmosTest99991 ], }) diff --git a/rust/hyperlane-core/src/error.rs b/rust/hyperlane-core/src/error.rs index 2f3c880793..3eb1ea5b58 100644 --- a/rust/hyperlane-core/src/error.rs +++ b/rust/hyperlane-core/src/error.rs @@ -10,9 +10,8 @@ use crate::config::StrOrIntParseError; use crate::rpc_clients::RpcClientError; use std::string::FromUtf8Error; -use crate::Error as PrimitiveTypeError; use crate::HyperlaneProviderError; -use crate::H256; +use crate::{Error as PrimitiveTypeError, HyperlaneSignerError, H256, U256}; /// The result of interacting with a chain. pub type ChainResult = Result; @@ -122,9 +121,14 @@ pub enum ChainCommunicationError { /// Error message msg: String, }, - /// Failed to estimate transaction gas cost. - #[error("Failed to estimate transaction gas cost {0}")] - TxCostEstimateError(String), + /// Insufficient funds. + #[error("Insufficient funds. Required: {required:?}, available: {available:?}")] + InsufficientFunds { + /// The required amount of funds. + required: U256, + /// The available amount of funds. + available: U256, + }, /// Primitive type error #[error(transparent)] PrimitiveTypeError(#[from] PrimitiveTypeError), @@ -134,6 +138,19 @@ pub enum ChainCommunicationError { /// Rpc client error #[error(transparent)] RpcClientError(#[from] RpcClientError), + /// Tokio join error + #[cfg(feature = "async")] + #[error(transparent)] + TokioJoinError(#[from] tokio::task::JoinError), + /// Custom error + #[error("{0}")] + CustomError(String), + /// Eyre error + #[error("{0}")] + EyreError(#[from] eyre::Report), + /// Hyperlane signer error + #[error("{0}")] + HyperlaneSignerError(#[from] HyperlaneSignerError), } impl ChainCommunicationError { diff --git a/rust/hyperlane-core/src/rpc_clients/mod.rs b/rust/hyperlane-core/src/rpc_clients/mod.rs index 02aaae99f5..892718918f 100644 --- a/rust/hyperlane-core/src/rpc_clients/mod.rs +++ b/rust/hyperlane-core/src/rpc_clients/mod.rs @@ -1,8 +1,14 @@ pub use self::error::*; -#[cfg(feature = "fallback-provider")] +#[cfg(feature = "async")] pub use self::fallback::*; +#[cfg(feature = "async")] +pub use self::retry::*; + mod error; -#[cfg(feature = "fallback-provider")] +#[cfg(feature = "async")] mod fallback; + +#[cfg(feature = "async")] +mod retry; diff --git a/rust/hyperlane-core/src/rpc_clients/retry.rs b/rust/hyperlane-core/src/rpc_clients/retry.rs new file mode 100644 index 0000000000..b5c4e0bd72 --- /dev/null +++ b/rust/hyperlane-core/src/rpc_clients/retry.rs @@ -0,0 +1,51 @@ +use futures::Future; +use std::{pin::Pin, time::Duration}; +use tokio::time::sleep; +use tracing::{instrument, warn}; + +use crate::{ChainCommunicationError, ChainResult}; + +/// Max number of times to retry a call for +pub const DEFAULT_MAX_RPC_RETRIES: usize = 10; + +/// Duration to sleep between retries +pub const RPC_RETRY_SLEEP_DURATION: Duration = Duration::from_secs(2); + +// TODO: Refactor this function into a retrying provider +/// Retry calling a fallible async function a certain number of times, with a delay between each retry +#[instrument(err, skip(f))] +pub async fn call_and_retry_n_times( + mut f: impl FnMut() -> Pin> + Send>>, + n: usize, +) -> ChainResult { + for retry_number in 1..n { + match f().await { + Ok(res) => return Ok(res), + Err(err) => { + warn!(retries=retry_number, error=?err, "Retrying call"); + sleep(RPC_RETRY_SLEEP_DURATION).await; + } + } + } + + // TODO: Return the last error, or a vec of all the error instead of this string error + Err(ChainCommunicationError::CustomError( + "Retrying call failed".to_string(), + )) +} + +/// Retry calling a fallible async function a predefined number of times +#[instrument(err, skip(f))] +pub async fn call_with_retry( + f: impl FnMut() -> Pin> + Send>>, +) -> ChainResult { + call_and_retry_n_times(f, DEFAULT_MAX_RPC_RETRIES).await +} + +/// Retry calling a fallible async function indefinitely, until it succeeds +pub async fn call_and_retry_indefinitely( + f: impl FnMut() -> Pin> + Send>>, +) -> T { + // It's ok to unwrap, because `usize::MAX * RPC_RETRY_SLEEP_DURATION` means billions of years worth of retrying + call_and_retry_n_times(f, usize::MAX).await.unwrap() +} diff --git a/rust/utils/run-locally/src/cosmos/mod.rs b/rust/utils/run-locally/src/cosmos/mod.rs index b1b2b4dd47..ab14818295 100644 --- a/rust/utils/run-locally/src/cosmos/mod.rs +++ b/rust/utils/run-locally/src/cosmos/mod.rs @@ -570,7 +570,7 @@ fn termination_invariants_met( let expected_gas_payments = messages_expected; if gas_payments_scraped != expected_gas_payments { log!( - "Scraper has scraped {} gas payments, expected {}", + "Relayer has indexed {} gas payments, expected {}", gas_payments_scraped, expected_gas_payments ); diff --git a/solidity/test/test-data/getProof-data.json b/solidity/test/test-data/getProof-data.json new file mode 100644 index 0000000000..73744c40e3 --- /dev/null +++ b/solidity/test/test-data/getProof-data.json @@ -0,0 +1,25 @@ +{ + "address": "0x3ef546f04a1b24eaf9dce2ed4338a1b5c32e2a56", + "balance": "0x0", + "codeHash": "0x2a5a7c6a053518aea9c1affe22c95e2e692204d39c9bdb0826de5012e7c93c4d", + "nonce": "0x1", + "storageHash": "0x3f85413bd5bccd8348f123724fb024c5fbab1ab934b0a7485202f75d84803743", + "accountProof": [ + "0xf90211a0857923ed0df1a7e89c6c157d9f228ca778b5028cce0fe977bbacdc29ebdcbe1da04cc511d34d843e5ed02112368d4885e8bc25e8e394abbc526459f4e38b842737a07f59950cdd53d4bb97096bbd99e7c04a5d21a97dac8a049f9b308610ea66c98fa02b8ce5f6b67ac79c8947b1919460f7bed77488762c059e5e88c64dfc722aaa56a03521e9571b798e0f86681b9ce0f0e9bf698e9059542d778cc4cde5659a31f9d2a0b90c6a5217bfd233f103dba76e18067f90001297c801cb6feb0c1f7912e0a522a0831099c940ebe93be0a1044566150044d22a8d414518eeb5d919d05468c8f510a054a09da1ca52551a35be75a623e419840060f2e56f86eb3678a689f66b38051da05945b528b186c0162d7cbfa281d30a361ece2a9f1788b33e7fda6bd7c3c5eb07a0401c3ac89520c5a59a19086e82314bb30ad2ecc5ddce09cdf613dd19adb41feca031e6288dc6db773d11cd579b974658473547abfcd82531cf1833484079baff58a099184994c461f1d6ce42e5e91ac66d6c6a5b4cc7ed845f058b795005b46328c1a054bde23ceae3fe9564654f16f867f3f321e0b7e16e3b08e925beb5fb5ffcb1fda040f8d48347ec397a261b090c7e3506f939b6033993c2836c24a487318310da67a0a6e90ed0e95843baeec2c8a6a017e61702556b67ca90c9576342fe268d0a9edba0ca8b4b3ea82cc66299ee45708b555de9b6272d3df24cb472c7baffaa72b39a0d80", + "0xf90211a0d124c71cf01214346e6facb7cd9e7743fca3a36f4252045573e37dd5b1fc208aa09318652584a16019f80279509f3133ee0f6fed3d391c1c0522b590b923b9283fa0fc90168fe3e76ff17c23781513065c71d13b5f963e492106f2b9a05ed1c9e3dca0c919acc2a76e4fef630534efea6f77a197646db3823ff861c430944385391672a0708cd1310ea8f59c163d0d7b905b456ed377000e989a343dbc61523ec4da6de3a0ade6811b1e1dc547362bfb0cdc943d6ae5d8283252f1e73d3000176a24ed8320a0effada816260fe1f7053c9c6f0cb49e0ee5ebb72be8a05f0cbcad3e7c95dd518a087d09c9bd032f470eed0637da12daa8e6d7c52102d51e87dfdecfdd0f01fc665a0d830bd0ebb1b7d0ddc716138e4341e64fa0c96d4330ac643c3306a842fdfb72ea05fb1c8a24c36a2ccae1ab7c39c0efdf56325dbc5de011f3c548827d592bd7f3ba0e127892391fcf8d6640c45c518ea6f1014b6983586e97e3ec4ae0e546ac22696a0573a0337bba203efa7a2ba3fab1a145e3cfd3b7a70d096489c2c549f9abad184a0daeb93e98ba67210f9e62088838adf7b2e83caa8ec9902e669095066f5abd1f4a0907a2f066f7bad1ebb9ba8998e217c82b2169336daa0f4c0db3b8ac05ad59fc5a03ac759b9a285ceb7293f13071d838261585bb87ae6a8c5489d13b7a818a60e8ea042abb78fd5f125d0dfd6ea10da83f064ed39920c3616e97b7810ee1f306559ec80", + "0xf90211a0316755c60ab5ac6d1ca0ce7fc7131544cb41bb5907b6c44b0659731c5196f505a0f4d87833b3b7fdb40011cd61f5e4fddf82a99e195e15a6650310d59f276111aba04c923074395b960cd08d04910a3c14ec3cb7d1ae858f9aef5cc888e6e03fbfb8a07c9d54b33c8a9db1e3efe12d0adb042d741fa2f2bccab2bf7d0afcb03626fba8a066400964da5b44e27fadbac20d48cfafc511c3c6bfaa68c1b92ae215e914f61ca038e0e323e92c7a20aaf13c302a493a5241c52a2c169aaaf8d48d23e17f44f643a0646a80b8ac762550cf167377f0837a5993536789eb065369829fd3b13bb52cc5a0de5c001063a09ee8b228199fcd393226a04ac68bc38f600729f7af2305c10368a035cb84ac8c8bb1ddb01e3377a7a17e22e23de20c89f4fa1bd7997bdc0421516aa01a598f35bf00309ed051c4096b8aac157d3411013211b2df2a02a8246eb5d0b6a0fab8ac4cedece1fe1ba89c617413a8df9a28e287e32f92bc52db1485ebb2396ea036f69b2bdc01e9b90102d5df53f9c02f3474db4f613f91d13c46f341b9fb9746a0d0bda7e73681df8b78903454ae252ebd8d34e48af88aa0ad18d6c2fb86a99d89a00d98621a3d3071cc04c492fd2c666637f27138eea11b83f516467f33a00b5eefa0198f566c5350232b08192dfe9cb7dd0a07b21c15638a80f912114a2b5c96be59a035092d3d51e3cd65ad2dcdb2d6c19aadb63a944ac9cedb7093ea68be58b7d83e80", + "0xf90211a0a7aea3e55e49172a7da1f511fceb247072cb0b4d8a87d9cd5cde0bc87046665ca08a057cd8f49b6ad4841f8e23b81706b8a424eb092663e4e1e60f98dba1e07e44a064098aa80e0d7e101f4e87fa5983f9a43ff6c26d8adaafea0c8f745e0fb9099aa09a5ec75b929e80a80ae115a1aec2827dcdb3eec116fce7a805eebe02d51ff3d7a027c8ef5bfc576ad5e7577005716a18d16ae203c440d65e12a9581a252b9f0e4ba01d352d5770faf1ab8a8096739876d9af10846effbd5f0a4bbb3a53bcb687fc9ca0a9da86853b0a80f1be569b6563aa35e8ab5d635132836b9dc95952b83192bdd3a0aa42135324b35a446ec3620ab361bb98d4636ebd2774715f142550b66cb5c723a0cc9734326b403f694d73ee6dd774e56c5675428ebf24b2ec28b319146f0d1ebda0a0d2c0664e654776405127a978a6edf6c249a71e94747158b2cae156b795b9eaa07a5811d019afead667944b567e595b7ef6084036be9bfde82097a479f3b9d01ca009e0186fe2bbb6f5f8399fabcbda45902405241f25b34352ff7ec66c78fa124aa0cacc8baa6b996e057fe8abaa433f50ba5f9b7afd501a1dbb8b952371e4b604efa081e453659b14017d3f3492fecfa4e9b3a03b8b8d3236fd2c3082c9abf528b6aca030e4ddd56b0b072e820f1afd7bd32cf5cf06f92d69231cbdc236a968c1f43283a0961d902b6b6ee68fb1d75a633a76786a7783f7603f8812ada01f865639e9daf880", + "0xf90211a045376ea7070c6b6bba71480a083c5ee916a4c72aa89ddc0539f69ca2f951ce96a0786afe5e76d004a35a17fb7931e70f40b0ce3a57e5246c94ebc4629e0a61e5bca0ce44e7e569e415dc667a71d212d260023fee99415bd0bcfd1e5aeee1cdbd8ec9a051cabbabc99fbd009590821598f342f3c2606a4241c81c46dd7e65c18d9ee098a0dbae505b1ce907ff5d451c5d113736ed911b239897d1f6887d3350da314f174ba047f6b90756987d0268044b85bc44da5a34e988044014a6c27cf62d185c7b46e9a0f7566eb4d5c9bc2361ecfffe8fc6a5ac5b5b9380c8b8152284cd714d44e79b12a0cc4a7ee9c4e83d67d64a9bfb0aec93cc3b8966c235b5b65f17333832b023a464a00b9024cfba692f2385d58ea3dca746f9e062982fb21f6f16ead2cefb70d25657a0d187348c2d25747788855d8094ce6e3df6940e26dca20cec4cc26e4f2292ee67a0355474e9a646331b74d171dd023e68f7c50f4bc1257a6433ee01a9ea8ce1577aa096f7bfa110a35e95127808a58ec44f3478b8b67f98ff3b8b140a3e9d249a6deba0dac2dea453ebb23f8a6a8a82db61ca160792aa967db905d98ee0dbcb2b81ef88a0bf7bac1cc4c2e30b47c5bc62ef9aedba995e46ad0432cf78cc8ec064ebf62ec7a0a0b931ee3c50545a4f91864c9501fb02eaa879ab02e4f677b11a1667d42cd55ca0654f679d8743df36bb61fe7eecca444d1a1773435b876fcafadd36c1c9bfe24980", + "0xf901d1a0c6d1570250983b95bd625c871d0627cc5bf6557738904ec34f6ce54c4d4782dba098975098243c73d0de47c1e3edf85d54a2010b50e85ffdac2192cc71484993e0a028e68d0c580151049649c5c882ddc4fa3f946f832b6fe34f210420f82ad18e0c80a0a0c6abc7c7b8c738ddb43a72c19c6a0dc4eee7808e4653d2ac67d5d777c5cfe8a0a3843b012a7d6170298a6e0024a79e466614296d4d09a72876be8049294d7dcfa02370c2a2892d2eacc15cdc46cef02125499df7afe41a16af6ce78d5fb8d5a7b9a0e9c8fa9b7269050b18b76ac5f07847e93e2403a438783e27bb69bb89484a7a52a08a7fef1f6d80c56ae256362f9de34169d3d66b17a8f0be6dbd0fe82c31a0c4da80a081b05ed42fc65a32afabe8f3ab58eedc8658472f383150e4c631ce1b3a36bacda04fe5deb98851372cb69ab014dba185f1c488ccd9810b4998d7737d0bee884718a0c8d739dcf5707542a9f751ec6a0acb228f28e55659c35973ee8a46aefa9a7a4fa0f0128b39c576d4e23e8180b154d7e8f7031a7d6775191188c87cc11573730008a0d391bf99084848ebff2c014653ec6f9634c80b1115850174cdf0edf83669b073a031d14af58dae3d2fdf510a3c48e988b860d1bfe406e6365be92252d63f4c316080", + "0xf8679e20bc9ed3e4003248a3f81d89ecc98e14f0359535a5195a1d33a6fe19556bb846f8440180a03f85413bd5bccd8348f123724fb024c5fbab1ab934b0a7485202f75d84803743a02a5a7c6a053518aea9c1affe22c95e2e692204d39c9bdb0826de5012e7c93c4d" + ], + "storageProof": [ + { + "key": "0x02c1eed75677f1bd39cc3abdd3042974bf12ab4a12ecc40df73fe3aa103e5e0e", + "proof": [ + "0xf844a120443dd0be11dd8e645a2e5675fd62011681443445ea8b04c77d2cdeb1326739eca1a031ede38d2e93c5aee49c836f329a626d8c6322abfbff3783e82e5759f870d7e9" + ], + "value": "0x31ede38d2e93c5aee49c836f329a626d8c6322abfbff3783e82e5759f870d7e9" + } + ] +} diff --git a/solidity/test/test/TestSendReceiver.t.sol b/solidity/test/test/TestSendReceiver.t.sol index 4ca8cf666b..09b584a8bb 100644 --- a/solidity/test/test/TestSendReceiver.t.sol +++ b/solidity/test/test/TestSendReceiver.t.sol @@ -98,9 +98,8 @@ contract TestSendReceiverTest is Test { vm.assume(blockNumber > 0); vm.roll(blockNumber); - // blockhash(n) = n for forge tests - // previousBlockHash() = blockhash(n-1) = n-1 - if (blockNumber % 16 == 1) { + // previousBlockHash() = blockhash(n-1) + if (uint256(blockhash(blockNumber - 1)) % 16 == 0) { vm.expectRevert("block hash ends in 0"); // blockhash(n-1) ends in 0 } else { vm.expectEmit(true, true, true, false, address(testSendReceiver)); // Process diff --git a/typescript/ccip-server/.eslintrc b/typescript/ccip-server/.eslintrc new file mode 100644 index 0000000000..05936cd4e4 --- /dev/null +++ b/typescript/ccip-server/.eslintrc @@ -0,0 +1,6 @@ +{ + "rules": { + "no-console": ["off"] + } + } + \ No newline at end of file diff --git a/typescript/ccip-server/.gitignore b/typescript/ccip-server/.gitignore new file mode 100644 index 0000000000..66abda2f13 --- /dev/null +++ b/typescript/ccip-server/.gitignore @@ -0,0 +1,4 @@ +.env* +/dist +/cache +/configs \ No newline at end of file diff --git a/typescript/ccip-server/README.md b/typescript/ccip-server/README.md new file mode 100644 index 0000000000..915acfd999 --- /dev/null +++ b/typescript/ccip-server/README.md @@ -0,0 +1,45 @@ +# CCIP-read service framework + +This package contains the service framework for the CCIP-read project, built off of the [CCIP-server framework](https://github.com/smartcontractkit/ccip-read). It allows building of any execution logic, given a Hyperlane Relayer call. + +# Definitions + +- Server: The main entry point, and refers to `server.ts`. +- Service: A class that handles all logic for a particular service, e.g. ProofService, RPCService, etc. +- Service ABI: The interface for a service that tells the Server what input and output to expect. It serves similar functionalities as the Solidity ABIs, i.e., used for encoding and decoding data. + +# Usage + +The Relayer will make a POST request to the Server with a request body similar to the following: + +```json +{ + "data": "0x0ee9bb2f000000000000000000000000873afca0319f5c04421e90e882566c496877aff8000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001a2d9059b6d822aa460229510c754e9ecec100bb9f649186f5c7d4da8edf59858", + "sender": "0x4a679253410272dd5232b3ff7cf5dbb88f295319" +} +``` + +The `data` property will be ABI-encoded, and server will parse it according to the Service ABI. It then will call the handler function with the parsed input. + +# Building a Service + +1. Create a Service ABI for your Service. This ABI tells the Server how to parse the incoming `data`, and how to encode the output. See `/abi/ProofsServiceAbi.ts` for an example. +2. Create a new Service class to handle your logic. This should inherit from `HandlerDescriptionEnumerated` if a function will be used to handle a Server request. The handler function should return a Promise that resolves to the output of the Service. See `/service/ProofsService.ts` for examples. +3. Instantiate the new Service in `server.ts`. For example: + +```typescript +const proofsService = new ProofsService( + config.LIGHT_CLIENT_ADDR, + config.RPC_ADDRESS, + config.STEP_FN_ID, + config.CHAIN_ID, + config.SUCCINCT_PLATFORM_URL, + config.SUCCINCT_API_KEY, +); +``` + +4. Add the new Service by calling `server.add(...)` by providing the Service ABI, and the handler function. For example: + +```typescript +server.add(ProofsServiceAbi, [proofsService.handler('getProofs')]); +``` diff --git a/typescript/ccip-server/jest.config.js b/typescript/ccip-server/jest.config.js new file mode 100644 index 0000000000..3745fc2237 --- /dev/null +++ b/typescript/ccip-server/jest.config.js @@ -0,0 +1,5 @@ +/** @type {import('ts-jest').JestConfigWithTsJest} */ +module.exports = { + preset: 'ts-jest', + testEnvironment: 'node', +}; diff --git a/typescript/ccip-server/package.json b/typescript/ccip-server/package.json new file mode 100644 index 0000000000..46a4a4ebb1 --- /dev/null +++ b/typescript/ccip-server/package.json @@ -0,0 +1,38 @@ +{ + "name": "@hyperlane-xyz/ccip-server", + "version": "0.0.0", + "description": "CCIP server", + "typings": "dist/index.d.ts", + "typedocMain": "src/index.ts", + "private": true, + "files": [ + "src" + ], + "engines": { + "node": ">=14" + }, + "scripts": { + "start": "ts-node src/server.ts", + "dev": "nodemon src/server.ts", + "test": "jest", + "prettier": "prettier --write ./src/* ./tests/" + }, + "author": "brolee", + "license": "Apache-2.0", + "devDependencies": { + "@jest/globals": "^29.7.0", + "@types/node": "^16.9.1", + "jest": "^29.7.0", + "nodemon": "^3.0.3", + "prettier": "^2.8.8", + "ts-jest": "^29.1.2", + "ts-node": "^10.8.0", + "typescript": "5.1.6" + }, + "dependencies": { + "@chainlink/ccip-read-server": "^0.2.1", + "dotenv-flow": "^4.1.0", + "ethers": "5.7.2", + "hyperlane-explorer": "https://github.com/hyperlane-xyz/hyperlane-explorer.git" + } +} diff --git a/typescript/ccip-server/src/abis/ProofsServiceAbi.ts b/typescript/ccip-server/src/abis/ProofsServiceAbi.ts new file mode 100644 index 0000000000..d9960c21da --- /dev/null +++ b/typescript/ccip-server/src/abis/ProofsServiceAbi.ts @@ -0,0 +1,7 @@ +// This is the ABI for the ProofsService. +// This is used to 1) Select the function 2) encode output +const ProofsServiceAbi = [ + 'function getProofs(address, bytes32, uint256) public view returns (string[][])', +]; + +export { ProofsServiceAbi }; diff --git a/typescript/ccip-server/src/abis/TelepathyCcipReadIsmAbi.ts b/typescript/ccip-server/src/abis/TelepathyCcipReadIsmAbi.ts new file mode 100644 index 0000000000..68a61a543f --- /dev/null +++ b/typescript/ccip-server/src/abis/TelepathyCcipReadIsmAbi.ts @@ -0,0 +1,7 @@ +const TelepathyCcipReadIsmAbi = [ + 'function verify(bytes, bytes) public view returns (bool)', + 'function step(uint256) external', + 'function syncCommitteePoseidons(uint256) external view returns (bytes32)', +]; + +export { TelepathyCcipReadIsmAbi }; diff --git a/typescript/ccip-server/src/config.ts b/typescript/ccip-server/src/config.ts new file mode 100644 index 0000000000..f5fa74658a --- /dev/null +++ b/typescript/ccip-server/src/config.ts @@ -0,0 +1,23 @@ +import dotenvFlow from 'dotenv-flow'; + +dotenvFlow.config(); + +const RPC_ADDRESS = process.env.RPC_ADDRESS as string; +const LIGHT_CLIENT_ADDR = process.env.LIGHT_CLIENT_ADDR as string; +const STEP_FN_ID = process.env.STEP_FN_ID as string; +const CHAIN_ID = process.env.CHAIN_ID as string; +const SUCCINCT_PLATFORM_URL = process.env.SUCCINCT_PLATFORM_URL as string; +const SUCCINCT_API_KEY = process.env.SUCCINCT_API_KEY as string; +const SERVER_PORT = process.env.SERVER_PORT as string; +const SERVER_URL_PREFIX = process.env.SERVER_URL_PREFIX as string; + +export { + RPC_ADDRESS, + LIGHT_CLIENT_ADDR, + STEP_FN_ID, + CHAIN_ID, + SUCCINCT_PLATFORM_URL, + SUCCINCT_API_KEY, + SERVER_PORT, + SERVER_URL_PREFIX, +}; diff --git a/typescript/ccip-server/src/server.ts b/typescript/ccip-server/src/server.ts new file mode 100644 index 0000000000..ddd2fa330d --- /dev/null +++ b/typescript/ccip-server/src/server.ts @@ -0,0 +1,28 @@ +import { Server } from '@chainlink/ccip-read-server'; + +import { ProofsServiceAbi } from './abis/ProofsServiceAbi'; +import * as config from './config'; +import { ProofsService } from './services/ProofsService'; + +// Initalize Services +const proofsService = new ProofsService( + config.LIGHT_CLIENT_ADDR, + config.RPC_ADDRESS, + config.STEP_FN_ID, + config.CHAIN_ID, + config.SUCCINCT_PLATFORM_URL, + config.SUCCINCT_API_KEY, +); + +// Initalize Server and add Service handlers +const server = new Server(); + +server.add(ProofsServiceAbi, [ + { type: 'getProofs', func: proofsService.getProofs.bind(this) }, +]); + +// Start Server +const app = server.makeApp(config.SERVER_URL_PREFIX); +app.listen(config.SERVER_PORT, () => + console.log(`Listening on port ${config.SERVER_PORT}`), +); diff --git a/typescript/ccip-server/src/services/HyperlaneService.ts b/typescript/ccip-server/src/services/HyperlaneService.ts new file mode 100644 index 0000000000..2898a386ed --- /dev/null +++ b/typescript/ccip-server/src/services/HyperlaneService.ts @@ -0,0 +1,36 @@ +import { info } from 'console'; +import { Message, MessageTx } from 'hyperlane-explorer/src/types'; + +// These types are copied from hyperlane-explorer. TODO: export them so this file can use them directly. +interface ApiResult { + status: '0' | '1'; + message: string; + result: R; +} + +enum API_ACTION { + GetMessages = 'get-messages', +} + +class HyperlaneService { + constructor(readonly baseUrl: string) {} + + /** + * Makes a request to the Explorer API to get the block info by message Id. Throws if request fails, or no results + * @param id: Message id to look up + */ + async getOriginBlockByMessageId(id: string): Promise { + info(`Fetching block for id: ${id}`); + const response = await fetch( + `${this.baseUrl}?module=message&action=${API_ACTION.GetMessages}&id=${id}`, + ); + const responseAsJson: ApiResult = await response.json(); + if (responseAsJson.status === '1') { + return responseAsJson.result[0]?.origin; + } else { + throw new Error(responseAsJson.message); + } + } +} + +export { HyperlaneService }; diff --git a/typescript/ccip-server/src/services/LightClientService.ts b/typescript/ccip-server/src/services/LightClientService.ts new file mode 100644 index 0000000000..3d5238b94b --- /dev/null +++ b/typescript/ccip-server/src/services/LightClientService.ts @@ -0,0 +1,99 @@ +import { ethers, utils } from 'ethers'; + +import { TelepathyCcipReadIsmAbi } from '../abis/TelepathyCcipReadIsmAbi'; + +import { ProofStatus } from './common/ProofStatusEnum'; + +export type SuccinctConfig = { + readonly lightClientAddress: string; + readonly stepFunctionId: string; + readonly platformUrl: string; + readonly apiKey: string; +}; + +// Service that interacts with the LightClient/ISM +class LightClientService { + constructor( + private readonly lightClientContract: ethers.Contract, // TODO USE TYPECHAIN + private succinctConfig: SuccinctConfig, + ) {} + + private getSyncCommitteePeriod(slot: bigint): bigint { + return slot / 8192n; // Slots Per Period + } + + /** + * Gets syncCommitteePoseidons from ISM/LightClient + * @param slot + * @returns + */ + async getSyncCommitteePoseidons(slot: bigint): Promise { + return await this.lightClientContract.syncCommitteePoseidons( + this.getSyncCommitteePeriod(slot), + ); + } + + /** + * Calculates the slot given a timestamp, and the LightClient's configured Genesis Time and Secods Per Slot + * @param timestamp timestamp to calculate slot with + */ + async calculateSlot(timestamp: bigint): Promise { + return ( + (timestamp - (await this.lightClientContract.GENESIS_TIME())) / + (await this.lightClientContract.SECONDS_PER_SLOT()) + ); + } + + /** + * Request the proof from Succinct. + * @param slot + * @param syncCommitteePoseidon + */ + async requestProof( + syncCommitteePoseidon: string, + slot: bigint, + ): Promise { + console.log(`Requesting proof for${slot}`); + + // Note that Succinct will asynchronously call step() on the ISM/LightClient + const telepathyIface = new utils.Interface(TelepathyCcipReadIsmAbi); + + const body = { + chainId: this.lightClientContract.chainId, + to: this.lightClientContract.address, + data: telepathyIface.encodeFunctionData('step', [slot]), + functionId: this.lightClientContract.stepFunctionId, + input: utils.defaultAbiCoder.encode( + ['bytes32', 'uint64'], + [syncCommitteePoseidon, slot], + ), + retry: true, + }; + + const response = await fetch( + `${this.lightClientContract.platformUrl}/new`, + { + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${this.succinctConfig.apiKey}`, + }, + body: JSON.stringify(body), + }, + ); + const responseAsJson = await response.json(); + + return responseAsJson.proof_id; + } + + // @dev in the case of when a proof doesn't exist, the request returns an object of { error: 'failed to get proof' }. + // Example: GET https://alpha.succinct.xyz/api/proof/4dfd2802-4edf-4c4f-91db-b2d05eb69791 + async getProofStatus(proofId: string): Promise { + const response = await fetch( + `${this.lightClientContract.platformUrl}/${proofId}`, + ); + const responseAsJson = await response.json(); + return responseAsJson.status ?? ProofStatus.error; + } +} + +export { LightClientService, ProofStatus }; diff --git a/typescript/ccip-server/src/services/ProofsService.ts b/typescript/ccip-server/src/services/ProofsService.ts new file mode 100644 index 0000000000..1d05e7a3f7 --- /dev/null +++ b/typescript/ccip-server/src/services/ProofsService.ts @@ -0,0 +1,149 @@ +import { ethers } from 'ethers'; + +import { TelepathyCcipReadIsmAbi } from '../abis/TelepathyCcipReadIsmAbi'; + +import { HyperlaneService } from './HyperlaneService'; +import { LightClientService, SuccinctConfig } from './LightClientService'; +import { RPCService } from './RPCService'; +import { ProofResult } from './RPCService'; +import { ProofStatus } from './common/ProofStatusEnum'; + +type RPCConfig = { + readonly url: string; + readonly chainId: string; +}; + +type HyperlaneConfig = { + readonly url: string; +}; + +// Service that requests proofs from Succinct and RPC Provider +class ProofsService { + // Maps from pendingProofKey to pendingProofId + pendingProof = new Map(); + + // External Services + rpcService: RPCService; + lightClientService: LightClientService; + hyperlaneService: HyperlaneService; + + constructor( + succinctConfig: Required, + rpcConfig: Required, + hyperlaneConfig: Required, + ) { + this.rpcService = new RPCService(rpcConfig.url); + const lightClientContract = new ethers.Contract( + succinctConfig.lightClientAddress, + TelepathyCcipReadIsmAbi, + this.rpcService.provider, + ); + + this.lightClientService = new LightClientService( + lightClientContract, + succinctConfig, + ); + + this.hyperlaneService = new HyperlaneService(hyperlaneConfig.url); + } + + /** + * Requests the Succinct proof, state proof, and returns account and storage proof + * @dev Upon requesting Succinct Proof, this function will revert to force the relayer to re-check the pending proof + * @param target contract address to get the proof for + * @param storageKeys storage keys to get the proof for + * @param messageId messageId that will be used to get the block info from hyperlane + * @returns The account and a single storage proof + */ + async getProofs([ + target, + storageKey, + messageId, + ]: ethers.utils.Result): Promise> { + const proofs: Array<[string[], string[]]> = []; + const pendingProofKey = this.getPendingProofKey( + target, + storageKey, + messageId, + ); + if (!this.pendingProof.has(pendingProofKey)) { + // Request a Proof from Succinct + const pendingProofId = await this.requestProofFromSuccinct(messageId); + this.pendingProof.set(pendingProofKey, pendingProofId); + this.forceRelayerRecheck(); + } else { + // Proof is being generated, check status + const proofStatus = await this.lightClientService.getProofStatus( + this.pendingProof.get(pendingProofKey)!, + ); + if (proofStatus === ProofStatus.success) { + // Succinct Proof is ready. + // This means that the LightClient should have the latest state root. Fetch and return the storage proofs from eth_getProof + proofs.push(await this.getStorageProofs(target, storageKey, messageId)); + this.pendingProof.delete(pendingProofKey); + } else { + this.forceRelayerRecheck(); + } + } + // TODO Write tests to check proofs + return proofs; + } + + /** + * Requests the Succinct proof + * @param messageId messageId that will be used to get the block info from hyperlane + * @returns the proofId + */ + async requestProofFromSuccinct(messageId: string) { + const { timestamp } = await this.hyperlaneService.getOriginBlockByMessageId( + messageId, + ); + const slot = await this.lightClientService.calculateSlot(BigInt(timestamp)); + const syncCommitteePoseidon = ''; // TODO get from LC + return await this.lightClientService.requestProof( + syncCommitteePoseidon, + slot, + ); + } + + /** + * Gets the account and single storage proof from eth_getProof + * @param target contract address to get the proof for + * @param storageKeys storage keys to get the proof for + * @param messageId messageId that will be used to get the block info from hyperlane + * @returns The account and a single storage proof + */ + async getStorageProofs( + target: string, + storageKey: string, + messageId: string, + ): Promise<[string[], string[]]> { + const { blockNumber } = + await this.hyperlaneService.getOriginBlockByMessageId(messageId); + const { accountProof, storageProof }: ProofResult = + await this.rpcService.getProofs( + target, + [storageKey], + new Number(blockNumber).toString(16), // Converts to hexstring + ); + + return [accountProof, storageProof[0].proof]; // Since we only expect one storage key, we only return the first proof + } + + getPendingProofKey( + target: string, + storageKey: string, + messageId: string, + ): string { + return ethers.utils.defaultAbiCoder.encode( + ['string', 'string', 'string'], + [target, storageKey, messageId], + ); + } + + forceRelayerRecheck(): void { + throw new Error('Proof is not ready'); + } +} + +export { ProofsService }; diff --git a/typescript/ccip-server/src/services/RPCService.ts b/typescript/ccip-server/src/services/RPCService.ts new file mode 100644 index 0000000000..353e5af707 --- /dev/null +++ b/typescript/ccip-server/src/services/RPCService.ts @@ -0,0 +1,47 @@ +import { ethers } from 'ethers'; + +type ProofResultStorageProof = { + key: string; + proof: Array; + value: string; +}; + +type ProofResult = { + accountProof: Array; + storageProof: Array; + address: string; + balance: string; + codeHash: string; + nonce: string; + storageHash: string; +}; + +class RPCService { + provider: ethers.providers.JsonRpcProvider; + constructor(private readonly providerAddress: string) { + this.provider = new ethers.providers.JsonRpcProvider(this.providerAddress); + } + + /** + * Request state proofs using eth_getProofs + * @param address + * @param storageKeys + * @param block + * @returns + */ + async getProofs( + address: string, + storageKeys: string[], + block: string, + ): Promise { + const results = await this.provider.send('eth_getProof', [ + address, + storageKeys, + block, + ]); + + return results; + } +} + +export { RPCService, ProofResult }; diff --git a/typescript/ccip-server/src/services/__mocks__/HyperlaneService.ts b/typescript/ccip-server/src/services/__mocks__/HyperlaneService.ts new file mode 100644 index 0000000000..b197fc3f87 --- /dev/null +++ b/typescript/ccip-server/src/services/__mocks__/HyperlaneService.ts @@ -0,0 +1,25 @@ +import { MessageTx } from 'hyperlane-explorer/src/types'; + +class HyperlaneService { + async getOriginBlockByMessageId(id: string): Promise { + return { + timestamp: 123456789, + hash: '0x123abc456def789', + from: '0x9876543210abcdef', + to: '0xabcdef0123456789', + blockHash: '0x456789abc123def', + blockNumber: 12345, + mailbox: '0xabcdef0123456789', + nonce: 0, + gasLimit: 1000000, + gasPrice: 100, + effectiveGasPrice: 90, + gasUsed: 50000, + cumulativeGasUsed: 1234567, + maxFeePerGas: 150, + maxPriorityPerGas: 100, + }; + } +} + +export { HyperlaneService }; diff --git a/typescript/ccip-server/src/services/__mocks__/LightClientService.ts b/typescript/ccip-server/src/services/__mocks__/LightClientService.ts new file mode 100644 index 0000000000..097cb57ff1 --- /dev/null +++ b/typescript/ccip-server/src/services/__mocks__/LightClientService.ts @@ -0,0 +1,27 @@ +// TODO figure out why I cannot import this from LightClientService. +enum ProofStatus { + running = 'running', + success = 'success', + error = 'error', +} + +class LightClientService { + proofStatus: ProofStatus = ProofStatus.running; + async calculateSlot(timestamp: bigint): Promise { + return ( + (timestamp - 1606824023n) / 12n // (timestamp - GENESIS TIME) / SLOTS_PER_SECOND + ); + } + + async requestProof( + syncCommitteePoseidon: string, + slot: BigInt, + ): Promise { + return 'pendingProofId12'; + } + async getProofStatus(pendingProofId: string): Promise { + return ProofStatus.success; + } +} + +export { LightClientService }; diff --git a/typescript/ccip-server/src/services/__mocks__/RPCService.ts b/typescript/ccip-server/src/services/__mocks__/RPCService.ts new file mode 100644 index 0000000000..801c93bdbb --- /dev/null +++ b/typescript/ccip-server/src/services/__mocks__/RPCService.ts @@ -0,0 +1,13 @@ +import ETH_GET_PROOFS from '../../../../../solidity/test/test-data/getProof-data.json'; + +class RPCService { + getProofs = async ( + address: string, + storageKeys: string[], + block: string, + ): Promise => { + return ETH_GET_PROOFS; + }; +} + +export { RPCService }; diff --git a/typescript/ccip-server/src/services/common/ProofStatusEnum.ts b/typescript/ccip-server/src/services/common/ProofStatusEnum.ts new file mode 100644 index 0000000000..aa1b593bd7 --- /dev/null +++ b/typescript/ccip-server/src/services/common/ProofStatusEnum.ts @@ -0,0 +1,8 @@ +// Needs to be in its own file because Mocks will mock the entire file +enum ProofStatus { + running = 'running', + success = 'success', + error = 'error', +} + +export { ProofStatus }; diff --git a/typescript/ccip-server/tests/services/HyperlaneService.test.ts b/typescript/ccip-server/tests/services/HyperlaneService.test.ts new file mode 100644 index 0000000000..894f377107 --- /dev/null +++ b/typescript/ccip-server/tests/services/HyperlaneService.test.ts @@ -0,0 +1,18 @@ +import { describe, expect, test } from '@jest/globals'; + +import { HyperlaneService } from '../../src/services/HyperlaneService'; + +describe('HyperlaneServiceTest', () => { + let hyperlaneService: HyperlaneService; + beforeEach(() => { + hyperlaneService = new HyperlaneService( + 'https://explorer.hyperlane.xyz/api', + ); + }); + test('should get the block by messageId', async () => { + await hyperlaneService.getOriginBlockByMessageId( + '0xb0430e396f4014883c01bb3ee43df17ce93d8257a0a0b5778d9d3229a1bf02bb', + ); + expect(true).toBe(true); + }); +}); diff --git a/typescript/ccip-server/tests/services/LightClientService.test.ts b/typescript/ccip-server/tests/services/LightClientService.test.ts new file mode 100644 index 0000000000..4541762096 --- /dev/null +++ b/typescript/ccip-server/tests/services/LightClientService.test.ts @@ -0,0 +1,29 @@ +import { describe, expect, jest, test } from '@jest/globals'; +import { ethers } from 'ethers'; + +import { TelepathyCcipReadIsmAbi } from '../../src/abis/TelepathyCcipReadIsmAbi'; +import { LightClientService } from '../../src/services/LightClientService'; +import { RPCService } from '../../src/services/RPCService'; + +describe('LightClientService', () => { + let lightClientService: LightClientService; + beforeEach(() => { + const rpcService = new RPCService('http://localhost:8545'); + const lightClientContract = new ethers.Contract( + 'lightClientAddress', + TelepathyCcipReadIsmAbi, + rpcService.provider, + ); + lightClientService = new LightClientService(lightClientContract, { + lightClientAddress: ethers.constants.AddressZero, + stepFunctionId: ethers.constants.HashZero, + platformUrl: 'http://localhost:8080', + apiKey: 'apiKey', + }); + + jest.resetModules(); + }); + test('should return the correct proof status', () => { + expect(lightClientService.calculateSlot(1n)).toBeGreaterThan(0); + }); +}); diff --git a/typescript/ccip-server/tests/services/ProofsService.test.ts b/typescript/ccip-server/tests/services/ProofsService.test.ts new file mode 100644 index 0000000000..be063e9185 --- /dev/null +++ b/typescript/ccip-server/tests/services/ProofsService.test.ts @@ -0,0 +1,77 @@ +import { describe, expect, jest, test } from '@jest/globals'; +import { ethers } from 'ethers'; + +// import { LightClientService } from '../../src/services/LightClientService'; +import { ProofsService } from '../../src/services/ProofsService'; + +// Fixtures +jest.mock('../../src/services/HyperlaneService'); +jest.mock('../../src/services/LightClientService'); +jest.mock('../../src/services/RPCService'); + +describe('ProofsService', () => { + const TARGET_ADDR = 'targetAddress'; + const MESSAGE_ID = 'msgId'; + const STORAGE_KEY = ethers.utils.formatBytes32String('10'); + let proofsService: ProofsService; + let pendingProofKey: string; + + beforeEach(() => { + proofsService = new ProofsService( + { + lightClientAddress: ethers.constants.AddressZero, + stepFunctionId: ethers.constants.HashZero, + platformUrl: 'http://localhost:8080', + apiKey: 'apiKey', + }, + { + url: 'http://localhost:8545', + chainId: '1337', + }, + { + url: 'http://localhost:8545', + }, + ); + pendingProofKey = proofsService.getPendingProofKey( + TARGET_ADDR, + STORAGE_KEY, + MESSAGE_ID, + ); + jest.clearAllMocks(); + }); + + test('should set currentProofId, if proof is not ready', async () => { + try { + await proofsService.getProofs([TARGET_ADDR, STORAGE_KEY, MESSAGE_ID]); + } catch (e) { + expect(proofsService.pendingProof.get(pendingProofKey)).toEqual( + 'pendingProofId12', + ); + } + }); + + test('should reset currentProofId, if proof is ready', async () => { + const pendingProofKey = proofsService.getPendingProofKey( + TARGET_ADDR, + STORAGE_KEY, + MESSAGE_ID, + ); + try { + await proofsService.getProofs([TARGET_ADDR, STORAGE_KEY, MESSAGE_ID]); + expect(proofsService.pendingProof.get(pendingProofKey)).toEqual( + 'pendingProofId12', + ); + } catch (e) { + // Try to get the proof again + const proofs = await proofsService.getProofs([ + TARGET_ADDR, + STORAGE_KEY, + MESSAGE_ID, + ]); + expect(proofs[0][1]).toEqual([ + '0xf844a120443dd0be11dd8e645a2e5675fd62011681443445ea8b04c77d2cdeb1326739eca1a031ede38d2e93c5aee49c836f329a626d8c6322abfbff3783e82e5759f870d7e9', + ]); + expect(proofsService.pendingProof.get(pendingProofKey)).toBeUndefined(); + } + }); +}); diff --git a/typescript/ccip-server/tests/services/RPCService.test.ts b/typescript/ccip-server/tests/services/RPCService.test.ts new file mode 100644 index 0000000000..fde1373f2d --- /dev/null +++ b/typescript/ccip-server/tests/services/RPCService.test.ts @@ -0,0 +1,18 @@ +import { describe, expect, test } from '@jest/globals'; + +import * as config from '../../src/config'; +import { RPCService } from '../../src/services/RPCService'; + +describe('RPCService', () => { + const rpcService = new RPCService(config.RPC_ADDRESS); + + test('should return the proofs from api', async () => { + const proofs = await rpcService.getProofs( + '0x3ef546f04a1b24eaf9dce2ed4338a1b5c32e2a56', + ['0x02c1eed75677f1bd39cc3abdd3042974bf12ab4a12ecc40df73fe3aa103e5e0e'], + '0x1221E88', + ); + + expect(proofs).not.toBeNull(); + }); +}); diff --git a/typescript/cli/ci-test.sh b/typescript/cli/ci-test.sh index 43f6cf875a..d0c49ad75b 100755 --- a/typescript/cli/ci-test.sh +++ b/typescript/cli/ci-test.sh @@ -1,18 +1,47 @@ #!/usr/bin/env bash -# NOTE: This script is intended to be run from the root of the repo - -# the first arg to this script is a flag to enable the hook config as part of core deployment -# motivation is to test both the bare bone deployment (included in the docs) and the deployment with the routing over igp hook (which is closer to production deployment) -HOOK_FLAG=$1 -if [ -z "$HOOK_FLAG" ]; then - echo "Usage: ci-test.sh " - exit 1 +# set script location as repo root +cd "$(dirname "$0")/../.." + +TEST_TYPE_PRESET_HOOK="preset_hook_enabled" +TEST_TYPE_CONFIGURED_HOOK="configure_hook_enabled" +TEST_TYPE_PI_CORE="pi_with_core_chain" + +# set the first arg to 'configured_hook' to set the hook config as part of core deployment +# motivation is to test both the bare bone deployment (included in the docs) and the deployment +# with the routing over igp hook (which is closer to production deployment) +TEST_TYPE=$1 +if [ -z "$TEST_TYPE" ]; then + echo "Usage: ci-test.sh " + exit 1 fi +HOOK_FLAG=false +if [ "$TEST_TYPE" == $TEST_TYPE_CONFIGURED_HOOK ]; then + HOOK_FLAG=true +fi + +CHAIN1=anvil1 +CHAIN2=anvil2 +EXAMPLES_PATH=./examples + +# use different chain names and config for pi<>core test +if [ "$TEST_TYPE" == $TEST_TYPE_PI_CORE ]; then + CHAIN1=anvil + CHAIN2=ethereum + EXAMPLES_PATH=./examples/fork +fi + +CHAIN1_CAPS=$(echo "${CHAIN1}" | tr '[:lower:]' '[:upper:]') +CHAIN2_CAPS=$(echo "${CHAIN2}" | tr '[:lower:]' '[:upper:]') + +CHAIN1_PORT=8545 +CHAIN2_PORT=8555 + # Optional cleanup for previous runs, useful when running locally pkill -f anvil -rm -rf /tmp/anvil* +rm -rf /tmp/${CHAIN1}* +rm -rf /tmp/${CHAIN2}* rm -rf /tmp/relayer if [[ $OSTYPE == 'darwin'* ]]; then @@ -22,16 +51,36 @@ if [[ $OSTYPE == 'darwin'* ]]; then fi # Setup directories for anvil chains -for CHAIN in anvil1 anvil2 +for CHAIN in ${CHAIN1} ${CHAIN2} do mkdir -p /tmp/$CHAIN /tmp/$CHAIN/state /tmp/$CHAIN/validator /tmp/relayer chmod -R 777 /tmp/relayer /tmp/$CHAIN done -anvil --chain-id 31337 -p 8545 --state /tmp/anvil1/state --gas-price 1 > /dev/null & -anvil --chain-id 31338 -p 8555 --state /tmp/anvil2/state --gas-price 1 > /dev/null & +# run the PI chain +anvil --chain-id 31337 -p ${CHAIN1_PORT} --state /tmp/${CHAIN1}/state --gas-price 1 > /dev/null & sleep 1 +# use different chain names for pi<>core test +if [ "$TEST_TYPE" == $TEST_TYPE_PI_CORE ]; then + # Fetch the RPC of chain to fork + cd typescript/infra + RPC_URL=$(yarn ts-node scripts/print-chain-metadatas.ts -e mainnet3 | jq -r ".${CHAIN2}.rpcUrls[0].http") + cd ../../ + + # run the fork chain + anvil -p ${CHAIN2_PORT} --state /tmp/${CHAIN2}/state --gas-price 1 --fork-url $RPC_URL --fork-retry-backoff 3 --compute-units-per-second 200 > /dev/null & + + # wait for fork to be ready + while ! cast bn --rpc-url http://127.0.0.1:${CHAIN2_PORT} &> /dev/null; do + sleep 1 + done +else + # run a second PI chain + anvil --chain-id 31338 -p ${CHAIN2_PORT} --state /tmp/${CHAIN2}/state --gas-price 1 > /dev/null & + sleep 1 +fi + set -e echo "{}" > /tmp/empty-artifacts.json @@ -39,74 +88,75 @@ echo "{}" > /tmp/empty-artifacts.json export DEBUG=hyperlane:* DEPLOYER=$(cast rpc eth_accounts | jq -r '.[0]') -BEFORE=$(cast balance $DEPLOYER --rpc-url http://localhost:8545) +BEFORE=$(cast balance $DEPLOYER --rpc-url http://127.0.0.1:${CHAIN1_PORT}) - -echo "Deploying contracts to anvil1 and anvil2" +echo "Deploying contracts to ${CHAIN1} and ${CHAIN2}" yarn workspace @hyperlane-xyz/cli run hyperlane deploy core \ - --targets anvil1,anvil2 \ - --chains ./examples/anvil-chains.yaml \ + --targets ${CHAIN1},${CHAIN2} \ + --chains ${EXAMPLES_PATH}/anvil-chains.yaml \ --artifacts /tmp/empty-artifacts.json \ - $(if [ "$HOOK_FLAG" == "true" ]; then echo "--hook ./examples/hooks.yaml"; fi) \ - --ism ./examples/ism.yaml \ + $(if [ "$HOOK_FLAG" == "true" ]; then echo "--hook ${EXAMPLES_PATH}/hooks.yaml"; fi) \ + --ism ${EXAMPLES_PATH}/ism.yaml \ --out /tmp \ --key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 \ --yes -AFTER_CORE=$(cast balance $DEPLOYER --rpc-url http://localhost:8545) -GAS_PRICE=$(cast gas-price --rpc-url http://localhost:8545) +AFTER_CORE=$(cast balance $DEPLOYER --rpc-url http://127.0.0.1:${CHAIN1_PORT}) +GAS_PRICE=$(cast gas-price --rpc-url http://127.0.0.1:${CHAIN1_PORT}) CORE_MIN_GAS=$(bc <<< "($BEFORE - $AFTER_CORE) / $GAS_PRICE") echo "Gas used: $CORE_MIN_GAS" CORE_ARTIFACTS_PATH=`find /tmp/core-deployment* -type f -exec ls -t1 {} + | head -1` echo "Core artifacts:" echo $CORE_ARTIFACTS_PATH +cat $CORE_ARTIFACTS_PATH AGENT_CONFIG_FILENAME=`ls -t1 /tmp | grep agent-config | head -1` echo "Deploying warp routes" yarn workspace @hyperlane-xyz/cli run hyperlane deploy warp \ - --chains ./examples/anvil-chains.yaml \ + --chains ${EXAMPLES_PATH}/anvil-chains.yaml \ --core $CORE_ARTIFACTS_PATH \ - --config ./examples/warp-deployment.yaml \ + --config ${EXAMPLES_PATH}/warp-route-deployment.yaml \ --out /tmp \ --key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 \ --yes -AFTER_WARP=$(cast balance $DEPLOYER --rpc-url http://localhost:8545) -GAS_PRICE=$(cast gas-price --rpc-url http://localhost:8545) +AFTER_WARP=$(cast balance $DEPLOYER --rpc-url http://127.0.0.1:${CHAIN1_PORT}) +GAS_PRICE=$(cast gas-price --rpc-url http://127.0.0.1:${CHAIN1_PORT}) WARP_MIN_GAS=$(bc <<< "($AFTER_CORE - $AFTER_WARP) / $GAS_PRICE") echo "Gas used: $WARP_MIN_GAS" echo "Sending test message" yarn workspace @hyperlane-xyz/cli run hyperlane send message \ - --origin anvil1 \ - --destination anvil2 \ + --origin ${CHAIN1} \ + --destination ${CHAIN2} \ --messageBody "Howdy!" \ - --chains ./examples/anvil-chains.yaml \ + --chains ${EXAMPLES_PATH}/anvil-chains.yaml \ --core $CORE_ARTIFACTS_PATH \ --quick \ --key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 \ | tee /tmp/message1 -AFTER_MSG=$(cast balance $DEPLOYER --rpc-url http://localhost:8545) -GAS_PRICE=$(cast gas-price --rpc-url http://localhost:8545) +AFTER_MSG=$(cast balance $DEPLOYER --rpc-url http://127.0.0.1:${CHAIN1_PORT}) +GAS_PRICE=$(cast gas-price --rpc-url http://127.0.0.1:${CHAIN1_PORT}) MSG_MIN_GAS=$(bc <<< "($AFTER_WARP - $AFTER_MSG) / $GAS_PRICE") echo "Gas used: $MSG_MIN_GAS" MESSAGE1_ID=`cat /tmp/message1 | grep "Message ID" | grep -E -o '0x[0-9a-f]+'` echo "Message 1 ID: $MESSAGE1_ID" -WARP_ARTIFACTS_FILE=`find /tmp/warp-deployment* -type f -exec ls -t1 {} + | head -1` -ANVIL1_ROUTER=`cat $WARP_ARTIFACTS_FILE | jq -r ".anvil1.router"` +WARP_ARTIFACTS_FILE=`find /tmp/warp-route-deployment* -type f -exec ls -t1 {} + | head -1` +CHAIN1_ROUTER="${CHAIN1_CAPS}_ROUTER" +declare $CHAIN1_ROUTER=$(cat $WARP_ARTIFACTS_FILE | jq -r ".${CHAIN1}.router") echo "Sending test warp transfer" yarn workspace @hyperlane-xyz/cli run hyperlane send transfer \ - --origin anvil1 \ - --destination anvil2 \ - --chains ./examples/anvil-chains.yaml \ + --origin ${CHAIN1} \ + --destination ${CHAIN2} \ + --chains ${EXAMPLES_PATH}/anvil-chains.yaml \ --core $CORE_ARTIFACTS_PATH \ - --router $ANVIL1_ROUTER \ + --router ${!CHAIN1_ROUTER} \ --quick \ --key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 \ | tee /tmp/message2 @@ -118,28 +168,36 @@ cd ./rust echo "Pre-building validator with cargo" cargo build --bin validator -ANVIL_CONNECTION_URL="http://127.0.0.1" +# set some default agent env vars, used by both validators and relayer +export HYP_CHAINS_${CHAIN1_CAPS}_BLOCKS_REORGPERIOD=0 +export HYP_CHAINS_${CHAIN1_CAPS}_CUSTOMRPCURLS="http://127.0.0.1:${CHAIN1_PORT}" +export HYP_CHAINS_${CHAIN2_CAPS}_BLOCKS_REORGPERIOD=0 +export HYP_CHAINS_${CHAIN2_CAPS}_CUSTOMRPCURLS="http://127.0.0.1:${CHAIN2_PORT}" + VALIDATOR_PORT=9091 -for i in "anvil1 8545 ANVIL1" "anvil2 8555 ANVIL2" +for CHAIN in ${CHAIN1} ${CHAIN2} do + # don't need the second validator for pi<>core test + if [ "$CHAIN" == "$CHAIN2" ] && [ "$TEST_TYPE" == "$TEST_TYPE_PI_CORE" ]; then + echo "Skipping validator for $CHAIN2 due to $TEST_TYPE_PI_CORE test type" + continue + fi + VALIDATOR_PORT=$((VALIDATOR_PORT+1)) - set -- $i - echo "Running validator on $1 on port $VALIDATOR_PORT" + echo "Running validator on $CHAIN on port $VALIDATOR_PORT" export CONFIG_FILES=/tmp/${AGENT_CONFIG_FILENAME} - export HYP_ORIGINCHAINNAME=$1 - export HYP_CHAINS_${3}_BLOCKS_REORGPERIOD=0 + export HYP_ORIGINCHAINNAME=${CHAIN} export HYP_VALIDATOR_INTERVAL=1 - export HYP_CHAINS_${3}_CUSTOMRPCURLS=${ANVIL_CONNECTION_URL}:${2} export HYP_VALIDATOR_TYPE=hexKey export HYP_VALIDATOR_KEY=0x2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6 export HYP_CHECKPOINTSYNCER_TYPE=localStorage - export HYP_CHECKPOINTSYNCER_PATH=/tmp/${1}/validator + export HYP_CHECKPOINTSYNCER_PATH=/tmp/${CHAIN}/validator export HYP_TRACING_LEVEL=debug export HYP_TRACING_FMT=compact export HYP_METRICSPORT=$VALIDATOR_PORT - cargo run --bin validator > /tmp/${1}/validator-logs.txt & + cargo run --bin validator > /tmp/${CHAIN}/validator-logs.txt & done echo "Validator running, sleeping to let it sync" @@ -147,26 +205,37 @@ echo "Validator running, sleeping to let it sync" sleep 15 echo "Done sleeping" -echo "Validator Announcement:" -cat /tmp/anvil1/validator/announcement.json +for CHAIN in ${CHAIN1} ${CHAIN2} +do + # only have one validator announce in pi<>core test + if [ "$CHAIN" == "$CHAIN2" ] && [ "$TEST_TYPE" == "$TEST_TYPE_PI_CORE" ]; then + echo "Skipping validator for $CHAIN2 due to $TEST_TYPE_PI_CORE test type" + continue + fi + + echo "Validator Announcement for ${CHAIN}:" + cat /tmp/${CHAIN}/validator/announcement.json +done echo "Pre-building relayer with cargo" cargo build --bin relayer echo "Running relayer" -export HYP_RELAYCHAINS=anvil1,anvil2 +export CONFIG_FILES=/tmp/${AGENT_CONFIG_FILENAME} +export HYP_RELAYCHAINS=${CHAIN1},${CHAIN2} export HYP_ALLOWLOCALCHECKPOINTSYNCERS=true export HYP_DB=/tmp/relayer export HYP_GASPAYMENTENFORCEMENT='[{"type":"none"}]' -export HYP_CHAINS_ANVIL1_SIGNER_TYPE=hexKey -export HYP_CHAINS_ANVIL1_SIGNER_KEY=0xdbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97 -export HYP_CHAINS_ANVIL2_SIGNER_TYPE=hexKey -export HYP_CHAINS_ANVIL2_SIGNER_KEY=0xdbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97 -export HYP_METRICSPORT=9091 +export HYP_CHAINS_${CHAIN1_CAPS}_SIGNER_TYPE=hexKey +export HYP_CHAINS_${CHAIN1_CAPS}_SIGNER_KEY=0xdbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97 +export HYP_CHAINS_${CHAIN2_CAPS}_SIGNER_TYPE=hexKey +export HYP_CHAINS_${CHAIN2_CAPS}_SIGNER_KEY=0xdbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97 +export HYP_METRICSPORT=9090 cargo run --bin relayer > /tmp/relayer/relayer-logs.txt & # This needs to be long to allow time for the cargo build to finish +echo "Waiting for relayer..." sleep 20 echo "Done running relayer, checking message delivery statuses" @@ -176,8 +245,8 @@ do echo "Checking delivery status of $1: $2" yarn workspace @hyperlane-xyz/cli run hyperlane status \ --id $2 \ - --destination anvil2 \ - --chains ./examples/anvil-chains.yaml \ + --destination ${CHAIN2} \ + --chains ${EXAMPLES_PATH}/anvil-chains.yaml \ --core $CORE_ARTIFACTS_PATH \ | tee /tmp/message-status-$1 if ! grep -q "$2 was delivered" /tmp/message-status-$1; then diff --git a/typescript/cli/examples/fork/anvil-chains.yaml b/typescript/cli/examples/fork/anvil-chains.yaml new file mode 100644 index 0000000000..70b889af38 --- /dev/null +++ b/typescript/cli/examples/fork/anvil-chains.yaml @@ -0,0 +1,21 @@ +# Configs for describing chain metadata for use in Hyperlane deployments or apps +# Consists of a map of chain names to metadata +# Schema here: https://github.com/hyperlane-xyz/hyperlane-monorepo/blob/main/typescript/sdk/src/metadata/chainMetadataTypes.ts +--- +anvil: + chainId: 31337 + domainId: 31337 + name: anvil + protocol: ethereum + rpcUrls: + - http: http://127.0.0.1:8545 + nativeToken: + name: Ether + symbol: ETH + decimals: 18 +ethereum: + rpcUrls: + - http: http://127.0.0.1:8555 + blocks: + confirmations: 1 + estimateBlockTime: 1 diff --git a/typescript/cli/examples/fork/ism.yaml b/typescript/cli/examples/fork/ism.yaml new file mode 100644 index 0000000000..f5eab57405 --- /dev/null +++ b/typescript/cli/examples/fork/ism.yaml @@ -0,0 +1,9 @@ +# A config for a multisig Interchain Security Module (ISM) +# Schema: https://github.com/hyperlane-xyz/hyperlane-monorepo/blob/main/typescript/sdk/src/ism/types.ts +# + +--- +anvil: + threshold: 1 # Number: Signatures required to approve a message + validators: # Array: List of validator addresses + - '0xa0ee7a142d267c1f36714e4a8f75612f20a79720' diff --git a/typescript/cli/examples/fork/warp-route-deployment.yaml b/typescript/cli/examples/fork/warp-route-deployment.yaml new file mode 100644 index 0000000000..95755bd191 --- /dev/null +++ b/typescript/cli/examples/fork/warp-route-deployment.yaml @@ -0,0 +1,26 @@ +# A config for a Warp Route deployment +# Typically used with the 'hyperlane deploy warp' command +# +# Token Types: +# native +# collateral +# synthetic +# collateralUri +# syntheticUri +# fastCollateral +# fastSynthetic +--- +base: + chainName: anvil + type: native + # address: 0x123... # Required for collateral types + # isNft: true # If the token is an NFT (ERC721), set to true + # owner: 0x123 # Optional owner address for synthetic token + # mailbox: 0x123 # Optional mailbox address route + # interchainGasPaymaster: 0x123 # Optional interchainGasPaymaster address +synthetics: + - chainName: ethereum + # You can optionally set the token metadata, otherwise the base token's will be used + # name: "MySyntheticToken" + # symbol: "MST" + # totalSupply: 10000000 diff --git a/typescript/cli/examples/warp-deployment.yaml b/typescript/cli/examples/warp-route-deployment.yaml similarity index 100% rename from typescript/cli/examples/warp-deployment.yaml rename to typescript/cli/examples/warp-route-deployment.yaml diff --git a/typescript/cli/src/commands/config.ts b/typescript/cli/src/commands/config.ts index e122ae3d84..5823f3a6ab 100644 --- a/typescript/cli/src/commands/config.ts +++ b/typescript/cli/src/commands/config.ts @@ -9,8 +9,8 @@ import { readMultisigConfig, } from '../config/multisig.js'; import { - createWarpDeployConfig, - readWarpDeployConfig, + createWarpRouteDeployConfig, + readWarpRouteDeployConfig, } from '../config/warp.js'; import { FileFormat } from '../utils/files.js'; @@ -46,7 +46,7 @@ const createCommand: CommandModule = { .command(createChainConfigCommand) .command(createIsmConfigCommand) .command(createHookConfigCommand) - .command(createWarpDeployConfigCommand) + .command(createWarpRouteDeployConfigCommand) .version(false) .demandCommand(), handler: () => log('Command required'), @@ -116,12 +116,12 @@ const createHookConfigCommand: CommandModule = { }, }; -const createWarpDeployConfigCommand: CommandModule = { +const createWarpRouteDeployConfigCommand: CommandModule = { command: 'warp', describe: 'Create a new Warp Route deployment config', builder: (yargs) => yargs.options({ - output: outputFileOption('./configs/warp-deployment.yaml'), + output: outputFileOption('./configs/warp-route-deployment.yaml'), format: fileFormatOption, chains: chainsCommandOption, }), @@ -129,7 +129,7 @@ const createWarpDeployConfigCommand: CommandModule = { const format: FileFormat = argv.format; const outPath: string = argv.output; const chainConfigPath: string = argv.chains; - await createWarpDeployConfig({ format, outPath, chainConfigPath }); + await createWarpRouteDeployConfig({ format, outPath, chainConfigPath }); process.exit(0); }, }; @@ -220,7 +220,7 @@ const validateWarpCommand: CommandModule = { }), handler: async (argv) => { const path = argv.path as string; - readWarpDeployConfig(path); + readWarpRouteDeployConfig(path); logGreen('Config is valid'); process.exit(0); }, diff --git a/typescript/cli/src/commands/deploy.ts b/typescript/cli/src/commands/deploy.ts index 1260cbe6c2..54a34a2533 100644 --- a/typescript/cli/src/commands/deploy.ts +++ b/typescript/cli/src/commands/deploy.ts @@ -3,7 +3,7 @@ import { CommandModule } from 'yargs'; import { log, logGray } from '../../logger.js'; import { runKurtosisAgentDeploy } from '../deploy/agent.js'; import { runCoreDeploy } from '../deploy/core.js'; -import { runWarpDeploy } from '../deploy/warp.js'; +import { runWarpRouteDeploy } from '../deploy/warp.js'; import { ENV } from '../utils/env.js'; import { @@ -134,8 +134,8 @@ const warpCommand: CommandModule = { config: { type: 'string', description: - 'A path to a JSON or YAML file with a warp deployment config.', - default: './configs/warp-deployment.yaml', + 'A path to a JSON or YAML file with a warp route deployment config.', + default: './configs/warp-route-deployment.yaml', }, core: coreArtifactsOption, chains: chainsCommandOption, @@ -146,14 +146,14 @@ const warpCommand: CommandModule = { handler: async (argv: any) => { const key: string = argv.key || ENV.HYP_KEY; const chainConfigPath: string = argv.chains; - const warpDeploymentConfigPath: string | undefined = argv.config; + const warpRouteDeploymentConfigPath: string | undefined = argv.config; const coreArtifactsPath: string | undefined = argv.core; const outPath: string = argv.out; const skipConfirmation: boolean = argv.yes; - await runWarpDeploy({ + await runWarpRouteDeploy({ key, chainConfigPath, - warpDeploymentConfigPath, + warpRouteDeploymentConfigPath, coreArtifactsPath, outPath, skipConfirmation, diff --git a/typescript/cli/src/config/warp.ts b/typescript/cli/src/config/warp.ts index 1cb223e641..794d9bdef6 100644 --- a/typescript/cli/src/config/warp.ts +++ b/typescript/cli/src/config/warp.ts @@ -19,7 +19,7 @@ const ConnectionConfigSchema = { foreignDeployment: z.string().optional(), }; -export const WarpDeployConfigSchema = z.object({ +export const WarpRouteDeployConfigSchema = z.object({ base: z.object({ type: z.literal(TokenType.native).or(z.literal(TokenType.collateral)), chainName: z.string(), @@ -43,17 +43,18 @@ export const WarpDeployConfigSchema = z.object({ .nonempty(), }); -type InferredType = z.infer; +type InferredType = z.infer; // A workaround for Zod's terrible typing for nonEmpty arrays -export type WarpDeployConfig = { +export type WarpRouteDeployConfig = { base: InferredType['base']; synthetics: Array; }; -export function readWarpDeployConfig(filePath: string) { +export function readWarpRouteDeployConfig(filePath: string) { const config = readYamlOrJson(filePath); - if (!config) throw new Error(`No warp deploy config found at ${filePath}`); - const result = WarpDeployConfigSchema.safeParse(config); + if (!config) + throw new Error(`No warp route deploy config found at ${filePath}`); + const result = WarpRouteDeployConfigSchema.safeParse(config); if (!result.success) { const firstIssue = result.error.issues[0]; throw new Error( @@ -63,11 +64,11 @@ export function readWarpDeployConfig(filePath: string) { return result.data; } -export function isValidWarpDeployConfig(config: any) { - return WarpDeployConfigSchema.safeParse(config).success; +export function isValidWarpRouteDeployConfig(config: any) { + return WarpRouteDeployConfigSchema.safeParse(config).success; } -export async function createWarpDeployConfig({ +export async function createWarpRouteDeployConfig({ format, outPath, chainConfigPath, @@ -103,7 +104,7 @@ export async function createWarpDeployConfig({ // TODO add more prompts here to support customizing the token metadata - const result: WarpDeployConfig = { + const result: WarpRouteDeployConfig = { base: { chainName: baseChain, type: baseType, @@ -113,12 +114,12 @@ export async function createWarpDeployConfig({ synthetics: syntheticChains.map((chain) => ({ chainName: chain })), }; - if (isValidWarpDeployConfig(result)) { + if (isValidWarpRouteDeployConfig(result)) { logGreen(`Warp Route config is valid, writing to file ${outPath}`); writeYamlOrJson(outPath, result, format); } else { errorRed( - `Warp config is invalid, please see https://github.com/hyperlane-xyz/hyperlane-monorepo/blob/main/typescript/cli/examples/warp-deployment.yaml for an example`, + `Warp route deployment config is invalid, please see https://github.com/hyperlane-xyz/hyperlane-monorepo/blob/main/typescript/cli/examples/warp-route-deployment.yaml for an example`, ); throw new Error('Invalid multisig config'); } diff --git a/typescript/cli/src/deploy/warp.ts b/typescript/cli/src/deploy/warp.ts index fbb6f2cd19..392bcf7be4 100644 --- a/typescript/cli/src/deploy/warp.ts +++ b/typescript/cli/src/deploy/warp.ts @@ -23,7 +23,10 @@ import { import { Address, ProtocolType, objMap } from '@hyperlane-xyz/utils'; import { log, logBlue, logGray, logGreen } from '../../logger.js'; -import { WarpDeployConfig, readWarpDeployConfig } from '../config/warp.js'; +import { + WarpRouteDeployConfig, + readWarpRouteDeployConfig, +} from '../config/warp.js'; import { MINIMUM_WARP_DEPLOY_GAS } from '../consts.js'; import { getContext, getMergedContractAddresses } from '../context.js'; import { @@ -35,17 +38,17 @@ import { import { runPreflightChecks } from './utils.js'; -export async function runWarpDeploy({ +export async function runWarpRouteDeploy({ key, chainConfigPath, - warpDeploymentConfigPath, + warpRouteDeploymentConfigPath, coreArtifactsPath, outPath, skipConfirmation, }: { key: string; chainConfigPath: string; - warpDeploymentConfigPath?: string; + warpRouteDeploymentConfigPath?: string; coreArtifactsPath?: string; outPath: string; skipConfirmation: boolean; @@ -57,17 +60,25 @@ export async function runWarpDeploy({ skipConfirmation, }); - if (!warpDeploymentConfigPath || !isFile(warpDeploymentConfigPath)) { - if (skipConfirmation) throw new Error('Warp deployment config required'); - warpDeploymentConfigPath = await runFileSelectionStep( + if ( + !warpRouteDeploymentConfigPath || + !isFile(warpRouteDeploymentConfigPath) + ) { + if (skipConfirmation) + throw new Error('Warp route deployment config required'); + warpRouteDeploymentConfigPath = await runFileSelectionStep( './configs', - 'Warp deployment config', + 'Warp route deployment config', 'warp', ); } else { - log(`Using warp deployment config at ${warpDeploymentConfigPath}`); + log( + `Using warp route deployment config at ${warpRouteDeploymentConfigPath}`, + ); } - const warpRouteConfig = readWarpDeployConfig(warpDeploymentConfigPath); + const warpRouteConfig = readWarpRouteDeployConfig( + warpRouteDeploymentConfigPath, + ); const configs = await runBuildConfigStep({ warpRouteConfig, @@ -85,7 +96,7 @@ export async function runWarpDeploy({ skipConfirmation, }; - logBlue('Warp Deployment plan'); + logBlue('Warp route deployment plan'); await runDeployPlanStep(deploymentParams); await runPreflightChecks({ @@ -102,7 +113,7 @@ async function runBuildConfigStep({ coreArtifacts, skipConfirmation, }: { - warpRouteConfig: WarpDeployConfig; + warpRouteConfig: WarpRouteDeployConfig; multiProvider: MultiProvider; signer: ethers.Signer; coreArtifacts?: HyperlaneContractsMap; @@ -241,7 +252,7 @@ async function executeDeploy(params: DeployParams) { const { configMap, isNft, multiProvider, outPath } = params; const [contractsFilePath, tokenConfigPath] = prepNewArtifactsFiles(outPath, [ - { filename: 'warp-deployment', description: 'Contract addresses' }, + { filename: 'warp-route-deployment', description: 'Contract addresses' }, { filename: 'warp-ui-token-config', description: 'Warp UI token config' }, ]); @@ -262,7 +273,7 @@ async function executeDeploy(params: DeployParams) { } async function fetchBaseTokenMetadata( - base: WarpDeployConfig['base'], + base: WarpRouteDeployConfig['base'], multiProvider: MultiProvider, ): Promise { const { type, name, symbol, chainName, address, decimals } = base; diff --git a/typescript/helloworld/src/app/app.ts b/typescript/helloworld/src/app/app.ts index 44c1fcceed..be22a55393 100644 --- a/typescript/helloworld/src/app/app.ts +++ b/typescript/helloworld/src/app/app.ts @@ -61,7 +61,7 @@ export class HelloWorldApp extends RouterApp { message, tx, }); - return tx.wait(blocks?.confirmations || 1); + return tx.wait(blocks?.confirmations ?? 1); } async waitForMessageReceipt( diff --git a/typescript/infra/config/aw-multisig.json b/typescript/infra/config/aw-multisig.json index 6f33097861..2abd102e87 100644 --- a/typescript/infra/config/aw-multisig.json +++ b/typescript/infra/config/aw-multisig.json @@ -6,6 +6,13 @@ "0x86485dcec5f7bb8478dd251676372d054dea6653" ] }, + "arbitrum": { + "validators": [ + "0x4d966438fe9e2b1e7124c87bbb90cb4f0f6c59a1", + "0x6333e110b8a261cab28acb43030bcde59f26978a", + "0x3369e12edd52570806f126eb50be269ba5e65843" + ] + }, "arbitrumgoerli": { "validators": [ "0x071c8d135845ae5a2cb73f98d681d519014c0a8b", @@ -13,6 +20,27 @@ "0xc1590eaaeaf380e7859564c5ebcdcc87e8369e0d" ] }, + "avalanche": { + "validators": [ + "0x3fb8263859843bffb02950c492d492cae169f4cf", + "0xe58c63ad669b946e7c8211299f22679deecc9c83", + "0x6c754f1e9cd8287088b46a7c807303d55d728b49" + ] + }, + "base": { + "validators": [ + "0xb9453d675e0fa3c178a17b4ce1ad5b1a279b3af9", + "0x4512985a574cb127b2af2d4bb676876ce804e3f8", + "0xb144bb2f599a5af095bc30367856f27ea8a8adc7" + ] + }, + "bsc": { + "validators": [ + "0x570af9b7b36568c8877eebba6c6727aa9dab7268", + "0x7bf928d5d262365d31d64eaa24755d48c3cae313", + "0x03047213365800f065356b4a2fe97c3c3a52296a" + ] + }, "bsctestnet": { "validators": [ "0x242d8a855a8c932dec51f7999ae7d1e48b10c95e", @@ -20,6 +48,23 @@ "0x1f030345963c54ff8229720dd3a711c15c554aeb" ] }, + "celo": { + "validators": [ + "0x63478422679303c3e4fc611b771fa4a707ef7f4a", + "0x2f4e808744df049d8acc050628f7bdd8265807f9", + "0x7bf30afcb6a7d92146d5a910ea4c154fba38d25e" + ] + }, + "eclipsetestnet": { + "validators": ["0xf344f34abca9a444545b5295066348a0ae22dda3"] + }, + "ethereum": { + "validators": [ + "0x03c842db86a6a3e524d4a6615390c1ea8e2b9541", + "0x4346776b10f5e0d9995d884b7a1dbaee4e24c016", + "0x749d6e7ad949e522c92181dc77f7bbc1c5d71506" + ] + }, "fuji": { "validators": [ "0xd8154f73d04cc7f7f0c332793692e6e6f6b2402e", @@ -27,6 +72,13 @@ "0x43e915573d9f1383cbf482049e4a012290759e7f" ] }, + "gnosis": { + "validators": [ + "0xd4df66a859585678f2ea8357161d896be19cc1ca", + "0x06a833508579f8b59d756b3a1e72451fc70840c3", + "0xb93a72cee19402553c9dd7fed2461aebd04e2454" + ] + }, "goerli": { "validators": [ "0x05a9b5efe9f61f9142453d8e9f61565f333c6768", @@ -34,6 +86,34 @@ "0x7940a12c050e24e1839c21ecb12f65afd84e8c5b" ] }, + "inevm": { + "validators": [ + "0xf9e35ee88e4448a3673b4676a4e153e3584a08eb", + "0xae3e6bb6b3ece1c425aa6f47adc8cb0453c1f9a2", + "0xd98c9522cd9d3e3e00bee05ff76c34b91b266ec3" + ] + }, + "injective": { + "validators": [ + "0xbfb8911b72cfb138c7ce517c57d9c691535dc517", + "0x6faa139c33a7e6f53cb101f6b2ae392298283ed2", + "0x0115e3a66820fb99da30d30e2ce52a453ba99d92" + ] + }, + "mantapacific": { + "validators": [ + "0x8e668c97ad76d0e28375275c41ece4972ab8a5bc", + "0x80afdde2a81f3fb056fd088a97f0af3722dbc4f3", + "0x5dda0c4cf18de3b3ab637f8df82b24921082b54c" + ] + }, + "moonbeam": { + "validators": [ + "0x2225e2f4e9221049456da93b71d2de41f3b6b2a8", + "0x4fe067bb455358e295bfcfb92519a6f9de94b98e", + "0xcc4a78aa162482bea43313cd836ba7b560b44fc4" + ] + }, "mumbai": { "validators": [ "0xebc301013b6cd2548e347c28d2dc43ec20c068f2", @@ -41,6 +121,20 @@ "0x17517c98358c5937c5d9ee47ce1f5b4c2b7fc9f5" ] }, + "neutron": { + "validators": [ + "0xa9b8c1f4998f781f958c63cfcd1708d02f004ff0", + "0x60e890b34cb44ce3fa52f38684f613f31b47a1a6", + "0x7885fae56dbcf5176657f54adbbd881dc6714132" + ] + }, + "optimism": { + "validators": [ + "0x20349eadc6c72e94ce38268b96692b1a5c20de4f", + "0x04d040cee072272789e2d1f29aef73b3ad098db5", + "0x779a17e035018396724a6dec8a59bda1b5adf738" + ] + }, "optimismgoerli": { "validators": [ "0x79e58546e2faca865c6732ad5f6c4951051c4d67", @@ -55,6 +149,20 @@ "0xc906470a73e6b5aad65a4ceb4acd73e3eaf80e2c" ] }, + "polygon": { + "validators": [ + "0x12ecb319c7f4e8ac5eb5226662aeb8528c5cefac", + "0x8dd8f8d34b5ecaa5f66de24b01acd7b8461c3916", + "0xdbf3666de031bea43ec35822e8c33b9a9c610322" + ] + }, + "polygonzkevm": { + "validators": [ + "0x86f2a44592bb98da766e880cfd70d3bbb295e61a", + "0xc84076030bdabaabb9e61161d833dd84b700afda", + "0x6a1da2e0b7ae26aaece1377c0a4dbe25b85fa3ca" + ] + }, "polygonzkevmtestnet": { "validators": [ "0x3f06b725bc9648917eb11c414e9f8d76fd959550", @@ -62,6 +170,13 @@ "0xd476548222f43206d0abaa30e46e28670aa7859c" ] }, + "scroll": { + "validators": [ + "0xad557170a9f2f21c35e03de07cb30dcbcc3dff63", + "0xb37fe43a9f47b7024c2d5ae22526cc66b5261533", + "0x7210fa0a6be39a75cb14d682ebfb37e2b53ecbe5" + ] + }, "scrollsepolia": { "validators": [ "0xbe18dbd758afb367180260b524e6d4bcd1cb6d05", @@ -75,5 +190,11 @@ "0x469f0940684d147defc44f3647146cb90dd0bc8e", "0xd3c75dcf15056012a4d74c483a0c6ea11d8c2b83" ] + }, + "solanatestnet": { + "validators": ["0xd4ce8fa138d4e083fc0e480cca0dbfa4f5f30bd5"] + }, + "viction": { + "validators": ["0x1f87c368f8e05a85ef9126d984a980a20930cb9c"] } } diff --git a/typescript/infra/config/environments/mainnet3/agent.ts b/typescript/infra/config/environments/mainnet3/agent.ts index ea038e2549..3d83b0a941 100644 --- a/typescript/infra/config/environments/mainnet3/agent.ts +++ b/typescript/infra/config/environments/mainnet3/agent.ts @@ -1,11 +1,16 @@ import { + Chains, GasPaymentEnforcementPolicyType, RpcConsensusType, chainMetadata, getDomainId, } from '@hyperlane-xyz/sdk'; -import { RootAgentConfig, allAgentChainNames } from '../../../src/config'; +import { + AgentChainConfig, + RootAgentConfig, + getAgentChainNamesFromConfig, +} from '../../../src/config'; import { GasPaymentEnforcementConfig, routerMatchingList, @@ -13,24 +18,98 @@ import { import { ALL_KEY_ROLES, Role } from '../../../src/roles'; import { Contexts } from '../../contexts'; -import { agentChainNames, environment, ethereumChainNames } from './chains'; +import { environment, supportedChainNames } from './chains'; import { helloWorld } from './helloworld'; import { validatorChainConfig } from './validators'; import arbitrumTIAAddresses from './warp/arbitrum-TIA-addresses.json'; import injectiveInevmAddresses from './warp/injective-inevm-addresses.json'; import mantaTIAAddresses from './warp/manta-TIA-addresses.json'; -// const releaseCandidateHelloworldMatchingList = routerMatchingList( -// helloWorld[Contexts.ReleaseCandidate].addresses, -// ); +const releaseCandidateHelloworldMatchingList = routerMatchingList( + helloWorld[Contexts.ReleaseCandidate].addresses, +); const repo = 'gcr.io/abacus-labs-dev/hyperlane-agent'; +// The chains here must be consistent with the environment's supportedChainNames, which is +// checked / enforced at runtime & in the CI pipeline. +// +// This is intentionally separate and not derived from the environment's supportedChainNames +// to allow for more fine-grained control over which chains are enabled for each agent role. +export const hyperlaneContextAgentChainConfig: AgentChainConfig = { + // Generally, we run all production validators in the Hyperlane context. + [Role.Validator]: { + [Chains.arbitrum]: true, + [Chains.avalanche]: true, + [Chains.bsc]: true, + [Chains.celo]: true, + [Chains.ethereum]: true, + [Chains.neutron]: true, + [Chains.mantapacific]: true, + [Chains.moonbeam]: true, + [Chains.optimism]: true, + [Chains.polygon]: true, + [Chains.gnosis]: true, + [Chains.base]: true, + [Chains.scroll]: true, + [Chains.polygonzkevm]: true, + [Chains.injective]: true, + [Chains.inevm]: true, + [Chains.viction]: true, + }, + [Role.Relayer]: { + [Chains.arbitrum]: true, + [Chains.avalanche]: true, + [Chains.bsc]: true, + [Chains.celo]: true, + [Chains.ethereum]: true, + // At the moment, we only relay between Neutron and Manta Pacific on the neutron context. + [Chains.neutron]: false, + [Chains.mantapacific]: false, + [Chains.moonbeam]: true, + [Chains.optimism]: true, + [Chains.polygon]: true, + [Chains.gnosis]: true, + [Chains.base]: true, + [Chains.scroll]: true, + [Chains.polygonzkevm]: true, + [Chains.injective]: true, + [Chains.inevm]: true, + [Chains.viction]: true, + }, + [Role.Scraper]: { + [Chains.arbitrum]: true, + [Chains.avalanche]: true, + [Chains.bsc]: true, + [Chains.celo]: true, + [Chains.ethereum]: true, + // Cannot scrape non-EVM chains + [Chains.neutron]: false, + [Chains.mantapacific]: true, + [Chains.moonbeam]: true, + [Chains.optimism]: true, + [Chains.polygon]: true, + [Chains.gnosis]: true, + [Chains.base]: true, + [Chains.scroll]: true, + [Chains.polygonzkevm]: true, + // Cannot scrape non-EVM chains + [Chains.injective]: false, + [Chains.inevm]: true, + // Has RPC non-compliance that breaks scraping. + [Chains.viction]: false, + }, +}; + +export const hyperlaneContextAgentChainNames = getAgentChainNamesFromConfig( + hyperlaneContextAgentChainConfig, + supportedChainNames, +); + const contextBase = { namespace: environment, runEnv: environment, - contextChainNames: agentChainNames, - environmentChainNames: allAgentChainNames(agentChainNames), + environmentChainNames: supportedChainNames, aws: { region: 'us-east-1', }, @@ -45,14 +124,24 @@ const gasPaymentEnforcement: GasPaymentEnforcementConfig[] = [ const hyperlane: RootAgentConfig = { ...contextBase, context: Contexts.Hyperlane, + contextChainNames: hyperlaneContextAgentChainNames, rolesWithKeys: ALL_KEY_ROLES, relayer: { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: '54aeb64-20240206-163119', + // Includes Cosmos block-by-block indexing. + tag: 'c2bf423-20240308-164604', }, - gasPaymentEnforcement, + gasPaymentEnforcement: [ + // Temporary measure to ensure all inEVM warp route messages are delivered - + // we saw some issues with IGP indexing. + { + type: GasPaymentEnforcementPolicyType.None, + matchingList: routerMatchingList(injectiveInevmAddresses), + }, + ...gasPaymentEnforcement, + ], metricAppContexts: [ { name: 'helloworld', @@ -69,7 +158,7 @@ const hyperlane: RootAgentConfig = { validators: { docker: { repo, - tag: '54aeb64-20240206-163119', + tag: '9736164-20240307-131918', }, rpcConsensusType: RpcConsensusType.Quorum, chains: validatorChainConfig(Contexts.Hyperlane), @@ -86,18 +175,15 @@ const hyperlane: RootAgentConfig = { const releaseCandidate: RootAgentConfig = { ...contextBase, context: Contexts.ReleaseCandidate, - contextChainNames: { - ...contextBase.contextChainNames, - [Role.Validator]: ethereumChainNames, - }, + contextChainNames: hyperlaneContextAgentChainNames, rolesWithKeys: [Role.Relayer, Role.Kathy, Role.Validator], relayer: { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: '54aeb64-20240206-163119', + tag: '9736164-20240307-131918', }, - // whitelist: releaseCandidateHelloworldMatchingList, + whitelist: releaseCandidateHelloworldMatchingList, gasPaymentEnforcement, transactionGasLimit: 750000, // Skipping arbitrum because the gas price estimates are inclusive of L1 @@ -107,7 +193,7 @@ const releaseCandidate: RootAgentConfig = { validators: { docker: { repo, - tag: '54aeb64-20240206-163119', + tag: '9736164-20240307-131918', }, rpcConsensusType: RpcConsensusType.Quorum, chains: validatorChainConfig(Contexts.ReleaseCandidate), @@ -131,7 +217,8 @@ const neutron: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: '54aeb64-20240206-163119', + // Includes Cosmos block-by-block indexing. + tag: '9736164-20240307-131918', }, gasPaymentEnforcement: [ { diff --git a/typescript/infra/config/environments/mainnet3/chains.ts b/typescript/infra/config/environments/mainnet3/chains.ts index 60a30dbefe..73a1681a06 100644 --- a/typescript/infra/config/environments/mainnet3/chains.ts +++ b/typescript/infra/config/environments/mainnet3/chains.ts @@ -1,19 +1,23 @@ import { ChainMap, ChainMetadata, - Chains, Mainnets, chainMetadata, } from '@hyperlane-xyz/sdk'; -import { ProtocolType } from '@hyperlane-xyz/utils'; -import { AgentChainNames, Role } from '../../../src/roles'; +import { getChainMetadatas } from '../../../src/config/chain'; -const defaultEthereumMainnetConfigs = Object.fromEntries( - Mainnets.map((chain) => chainMetadata[chain]) - .filter((metadata) => metadata.protocol === ProtocolType.Ethereum) - .map((metadata) => [metadata.name, metadata]), -); +// The `Mainnets` from the SDK are all supported chains for the mainnet3 environment. +// These chains may be any protocol type. +export const supportedChainNames = Mainnets; + +export type MainnetChains = (typeof supportedChainNames)[number]; +export const environment = 'mainnet3'; + +const { + ethereumMetadatas: defaultEthereumMainnetConfigs, + nonEthereumMetadatas: nonEthereumMainnetConfigs, +} = getChainMetadatas(supportedChainNames); export const ethereumMainnetConfigs: ChainMap = { ...defaultEthereumMainnetConfigs, @@ -48,44 +52,11 @@ export const ethereumMainnetConfigs: ChainMap = { }, }; -// Blessed non-Ethereum chains. -export const nonEthereumMainnetConfigs: ChainMap = { - // solana: chainMetadata.solana, - // neutron: chainMetadata.neutron, - injective: chainMetadata.injective, -}; - export const mainnetConfigs: ChainMap = { ...ethereumMainnetConfigs, ...nonEthereumMainnetConfigs, }; -export type MainnetChains = keyof typeof mainnetConfigs; -export const supportedChainNames = Object.keys( - mainnetConfigs, -) as MainnetChains[]; -export const environment = 'mainnet3'; - export const ethereumChainNames = Object.keys( ethereumMainnetConfigs, ) as MainnetChains[]; - -// Remove mantapacific, as it's not considered a "blessed" -// chain and we don't relay to mantapacific on the Hyperlane or RC contexts. -const relayerHyperlaneContextChains = supportedChainNames.filter( - (chainName) => chainName !== Chains.mantapacific, -); - -// Ethereum chains only. -const scraperHyperlaneContextChains = ethereumChainNames.filter( - // Has RPC non-compliance that breaks scraping. - (chainName) => chainName !== Chains.viction, -); - -// Hyperlane & RC context agent chain names. -export const agentChainNames: AgentChainNames = { - // Run validators for all chains. - [Role.Validator]: supportedChainNames, - [Role.Relayer]: relayerHyperlaneContextChains, - [Role.Scraper]: scraperHyperlaneContextChains, -}; diff --git a/typescript/infra/config/environments/mainnet3/core.ts b/typescript/infra/config/environments/mainnet3/core.ts index 8dc23b6a38..8332de9250 100644 --- a/typescript/infra/config/environments/mainnet3/core.ts +++ b/typescript/infra/config/environments/mainnet3/core.ts @@ -22,7 +22,7 @@ import { objMap } from '@hyperlane-xyz/utils'; import { supportedChainNames } from './chains'; import { igp } from './igp'; -import { owners } from './owners'; +import { DEPLOYER, owners } from './owners'; export const core: ChainMap = objMap(owners, (local, owner) => { const originMultisigs: ChainMap = Object.fromEntries( @@ -56,7 +56,7 @@ export const core: ChainMap = objMap(owners, (local, owner) => { const pausableIsm: PausableIsmConfig = { type: IsmType.PAUSABLE, - ...owner, + owner: DEPLOYER, // keep pausable hot }; const defaultIsm: AggregationIsmConfig = { @@ -76,7 +76,7 @@ export const core: ChainMap = objMap(owners, (local, owner) => { const pausableHook: PausableHookConfig = { type: HookType.PAUSABLE, - ...owner, + owner: DEPLOYER, // keep pausable hot }; const aggregationHooks = objMap( originMultisigs, diff --git a/typescript/infra/config/environments/mainnet3/funding.ts b/typescript/infra/config/environments/mainnet3/funding.ts index f2744eea4b..84d38631cb 100644 --- a/typescript/infra/config/environments/mainnet3/funding.ts +++ b/typescript/infra/config/environments/mainnet3/funding.ts @@ -26,20 +26,21 @@ export const keyFunderConfig: KeyFunderConfig = { connectionType: RpcConsensusType.Single, // desired balance config desiredBalancePerChain: { - arbitrum: '3', avalanche: '5', - base: '3', bsc: '5', celo: '3', - ethereum: '5', + ethereum: '0.5', gnosis: '5', inevm: '3', moonbeam: '5', - optimism: '3', polygon: '20', - polygonzkevm: '3', - scroll: '3', viction: '3', + // Funder boosts itself upto 5x balance on L2 before dispersing funds + arbitrum: '0.5', + base: '0.5', + optimism: '0.5', + polygonzkevm: '0.5', + scroll: '0.5', }, desiredKathyBalancePerChain: { arbitrum: '0.1', diff --git a/typescript/infra/config/environments/mainnet3/gasPrices.json b/typescript/infra/config/environments/mainnet3/gasPrices.json index 1796b74f7a..1d647540cc 100644 --- a/typescript/infra/config/environments/mainnet3/gasPrices.json +++ b/typescript/infra/config/environments/mainnet3/gasPrices.json @@ -14,5 +14,6 @@ "polygonzkevm": "3.95", "inevm": "0.1", "viction": "0.25", + "neutron": "0.1", "injective": "0.1" } diff --git a/typescript/infra/config/environments/mainnet3/igp.ts b/typescript/infra/config/environments/mainnet3/igp.ts index f883c2f183..c6b66f7c25 100644 --- a/typescript/infra/config/environments/mainnet3/igp.ts +++ b/typescript/infra/config/environments/mainnet3/igp.ts @@ -12,11 +12,7 @@ import { supportedChainNames, } from './chains'; import { storageGasOracleConfig } from './gas-oracle'; -import { owners } from './owners'; - -// TODO: make this generic -const KEY_FUNDER_ADDRESS = '0xa7ECcdb9Be08178f896c26b7BbD8C3D4E844d9Ba'; -const DEPLOYER_ADDRESS = '0xa7ECcdb9Be08178f896c26b7BbD8C3D4E844d9Ba'; +import { DEPLOYER, owners } from './owners'; const FOREIGN_DEFAULT_OVERHEAD = 600_000; // cosmwasm warp route somewhat arbitrarily chosen @@ -30,12 +26,17 @@ const remoteOverhead = (remote: MainnetChains) => export const igp: ChainMap = objMap(owners, (local, owner) => ({ ...owner, - oracleKey: DEPLOYER_ADDRESS, - beneficiary: KEY_FUNDER_ADDRESS, + ownerOverrides: { + ...owner.ownerOverrides, + interchainGasPaymaster: DEPLOYER, + storageGasOracle: DEPLOYER, + }, + oracleKey: DEPLOYER, + beneficiary: DEPLOYER, overhead: Object.fromEntries( exclude(local, supportedChainNames).map((remote) => [ remote, - remoteOverhead(remote), + remoteOverhead(remote as MainnetChains), ]), ), oracleConfig: storageGasOracleConfig[local], diff --git a/typescript/infra/config/environments/mainnet3/owners.ts b/typescript/infra/config/environments/mainnet3/owners.ts index 1a1a87a7a2..8f9c21615a 100644 --- a/typescript/infra/config/environments/mainnet3/owners.ts +++ b/typescript/infra/config/environments/mainnet3/owners.ts @@ -18,18 +18,20 @@ export const safes: ChainMap
= { optimism: '0xb523CFAf45AACF472859f8B793CB0BFDB16bD257', moonbeam: '0xF0cb1f968Df01fc789762fddBfA704AE0F952197', gnosis: '0x36b0AA0e7d04e7b825D7E409FEa3c9A3d57E4C22', + inevm: '0x77F3863ea99F2360D84d4BA1A2E441857D0357fa', // caldera + injective + // injective: 'inj1632x8j35kenryam3mkrsez064sqg2y2fr0frzt', // solana: 'EzppBFV2taxWw8kEjxNYvby6q7W1biJEqwP3iC7YgRe3', }; -const deployer = '0xa7ECcdb9Be08178f896c26b7BbD8C3D4E844d9Ba'; +export const DEPLOYER = '0xa7ECcdb9Be08178f896c26b7BbD8C3D4E844d9Ba'; export const owners: ChainMap = Object.fromEntries( ethereumChainNames.map((local) => [ local, { - owner: deployer, // TODO: change this to the safe + owner: safes[local] ?? DEPLOYER, ownerOverrides: { - proxyAdmin: timelocks[local] ?? safes[local] ?? deployer, + proxyAdmin: timelocks[local] ?? safes[local] ?? DEPLOYER, }, }, ]), diff --git a/typescript/infra/config/environments/mainnet3/tokenPrices.json b/typescript/infra/config/environments/mainnet3/tokenPrices.json index deab6cff09..c7365ff84d 100644 --- a/typescript/infra/config/environments/mainnet3/tokenPrices.json +++ b/typescript/infra/config/environments/mainnet3/tokenPrices.json @@ -14,5 +14,6 @@ "polygonzkevm": "2914.61", "inevm": "32.77", "viction": "0.750231", + "neutron": "1.76", "injective": "32.77" } diff --git a/typescript/infra/config/environments/mainnet3/warp/addresses.json b/typescript/infra/config/environments/mainnet3/warp/addresses.json index 2e38c664a0..c0f9371c34 100644 --- a/typescript/infra/config/environments/mainnet3/warp/addresses.json +++ b/typescript/infra/config/environments/mainnet3/warp/addresses.json @@ -1,8 +1,9 @@ { - "inevm": { - "HypERC20": "0x8358D8291e3bEDb04804975eEa0fe9fe0fAfB147" + "injective": { + "router": "inj1mv9tjvkaw7x8w8y9vds8pkfq46g2vcfkjehc6k" }, - "ethereum": { - "HypERC20Collateral": "0xED56728fb977b0bBdacf65bCdD5e17Bb7e84504f" + "inevm": { + "HypNative": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4", + "router": "0x26f32245fCF5Ad53159E875d5Cae62aEcf19c2d4" } } diff --git a/typescript/infra/config/environments/testnet4/agent.ts b/typescript/infra/config/environments/testnet4/agent.ts index 1c7b76ec1b..0d76116c91 100644 --- a/typescript/infra/config/environments/testnet4/agent.ts +++ b/typescript/infra/config/environments/testnet4/agent.ts @@ -1,4 +1,5 @@ import { + Chains, GasPaymentEnforcementPolicyType, RpcConsensusType, chainMetadata, @@ -6,15 +7,16 @@ import { } from '@hyperlane-xyz/sdk'; import { + AgentChainConfig, RootAgentConfig, - allAgentChainNames, + getAgentChainNamesFromConfig, routerMatchingList, } from '../../../src/config'; import { GasPaymentEnforcementConfig } from '../../../src/config/agent/relayer'; import { ALL_KEY_ROLES, Role } from '../../../src/roles'; import { Contexts } from '../../contexts'; -import { agentChainNames, environment } from './chains'; +import { environment, supportedChainNames } from './chains'; import { helloWorld } from './helloworld'; import { validatorChainConfig } from './validators'; import plumetestnetSepoliaAddresses from './warp/plumetestnet-sepolia-addresses.json'; @@ -25,11 +27,70 @@ const releaseCandidateHelloworldMatchingList = routerMatchingList( const repo = 'gcr.io/abacus-labs-dev/hyperlane-agent'; +// The chains here must be consistent with the environment's supportedChainNames, which is +// checked / enforced at runtime & in the CI pipeline. +// +// This is intentionally separate and not derived from the environment's supportedChainNames +// to allow for more fine-grained control over which chains are enabled for each agent role. +export const hyperlaneContextAgentChainConfig: AgentChainConfig = { + [Role.Validator]: { + [Chains.alfajores]: true, + [Chains.arbitrumgoerli]: true, + [Chains.bsctestnet]: true, + [Chains.eclipsetestnet]: true, + [Chains.fuji]: true, + [Chains.goerli]: true, + [Chains.mumbai]: true, + [Chains.optimismgoerli]: true, + [Chains.plumetestnet]: true, + [Chains.polygonzkevmtestnet]: true, + [Chains.scrollsepolia]: true, + [Chains.sepolia]: true, + [Chains.solanatestnet]: true, + }, + [Role.Relayer]: { + [Chains.alfajores]: true, + [Chains.arbitrumgoerli]: true, + [Chains.bsctestnet]: true, + [Chains.eclipsetestnet]: true, + [Chains.fuji]: true, + [Chains.goerli]: true, + [Chains.mumbai]: true, + [Chains.optimismgoerli]: true, + [Chains.plumetestnet]: true, + [Chains.polygonzkevmtestnet]: true, + [Chains.scrollsepolia]: true, + [Chains.sepolia]: true, + [Chains.solanatestnet]: true, + }, + [Role.Scraper]: { + [Chains.alfajores]: true, + [Chains.arbitrumgoerli]: true, + [Chains.bsctestnet]: true, + // Cannot scrape non-EVM chains + [Chains.eclipsetestnet]: false, + [Chains.fuji]: true, + [Chains.goerli]: true, + [Chains.mumbai]: true, + [Chains.optimismgoerli]: true, + [Chains.plumetestnet]: true, + [Chains.polygonzkevmtestnet]: true, + [Chains.scrollsepolia]: true, + [Chains.sepolia]: true, + // Cannot scrape non-EVM chains + [Chains.solanatestnet]: false, + }, +}; + +export const hyperlaneContextAgentChainNames = getAgentChainNamesFromConfig( + hyperlaneContextAgentChainConfig, + supportedChainNames, +); + const contextBase = { namespace: environment, runEnv: environment, - contextChainNames: agentChainNames, - environmentChainNames: allAgentChainNames(agentChainNames), + environmentChainNames: supportedChainNames, aws: { region: 'us-east-1', }, @@ -44,14 +105,14 @@ const gasPaymentEnforcement: GasPaymentEnforcementConfig[] = [ const hyperlane: RootAgentConfig = { ...contextBase, - contextChainNames: agentChainNames, + contextChainNames: hyperlaneContextAgentChainNames, context: Contexts.Hyperlane, rolesWithKeys: ALL_KEY_ROLES, relayer: { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: 'd1ff3aa-20240226-122224', + tag: '9736164-20240307-131918', }, blacklist: [ ...releaseCandidateHelloworldMatchingList, @@ -98,7 +159,7 @@ const hyperlane: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: '6b5b324-20240223-122143', + tag: '9736164-20240307-131918', }, chains: validatorChainConfig(Contexts.Hyperlane), }, @@ -106,7 +167,7 @@ const hyperlane: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: '6b5b324-20240223-122143', + tag: 'dd8ac43-20240306-113016', }, }, }; @@ -114,12 +175,13 @@ const hyperlane: RootAgentConfig = { const releaseCandidate: RootAgentConfig = { ...contextBase, context: Contexts.ReleaseCandidate, + contextChainNames: hyperlaneContextAgentChainNames, rolesWithKeys: [Role.Relayer, Role.Kathy, Role.Validator], relayer: { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: '95fe655-20240222-183959', + tag: '9736164-20240307-131918', }, whitelist: [...releaseCandidateHelloworldMatchingList], gasPaymentEnforcement, @@ -132,7 +194,7 @@ const releaseCandidate: RootAgentConfig = { rpcConsensusType: RpcConsensusType.Fallback, docker: { repo, - tag: '95fe655-20240222-183959', + tag: '9736164-20240307-131918', }, chains: validatorChainConfig(Contexts.ReleaseCandidate), }, diff --git a/typescript/infra/config/environments/testnet4/chains.ts b/typescript/infra/config/environments/testnet4/chains.ts index cc690a4911..502a667f99 100644 --- a/typescript/infra/config/environments/testnet4/chains.ts +++ b/typescript/infra/config/environments/testnet4/chains.ts @@ -4,26 +4,30 @@ import { Chains, chainMetadata, } from '@hyperlane-xyz/sdk'; -import { plumetestnet } from '@hyperlane-xyz/sdk/dist/consts/chainMetadata'; -import { AgentChainNames, Role } from '../../../src/roles'; - -const selectedChains = [ +// All supported chains for the testnet4 environment. +// These chains may be any protocol type. +export const supportedChainNames = [ Chains.alfajores, Chains.arbitrumgoerli, Chains.bsctestnet, + Chains.eclipsetestnet, Chains.fuji, Chains.goerli, + Chains.mumbai, Chains.optimismgoerli, + Chains.plumetestnet, Chains.polygonzkevmtestnet, Chains.scrollsepolia, Chains.sepolia, - Chains.plumetestnet, + Chains.solanatestnet, ]; +export const environment = 'testnet4'; + export const testnetConfigs: ChainMap = { ...Object.fromEntries( - selectedChains.map((chain) => [chain, chainMetadata[chain]]), + supportedChainNames.map((chain) => [chain, chainMetadata[chain]]), ), mumbai: { ...chainMetadata.mumbai, @@ -39,14 +43,3 @@ export const testnetConfigs: ChainMap = { }, }, }; - -export const supportedChainNames = Object.keys(testnetConfigs); -export const environment = 'testnet4'; - -// Hyperlane & RC context agent chain names. -export const agentChainNames: AgentChainNames = { - [Role.Validator]: supportedChainNames, - // Only run relayers for Ethereum chains at the moment. - [Role.Relayer]: supportedChainNames, - [Role.Scraper]: supportedChainNames, -}; diff --git a/typescript/infra/config/environments/testnet4/funding.ts b/typescript/infra/config/environments/testnet4/funding.ts index 43228eb1e2..1e5ce53003 100644 --- a/typescript/infra/config/environments/testnet4/funding.ts +++ b/typescript/infra/config/environments/testnet4/funding.ts @@ -27,16 +27,17 @@ export const keyFunderConfig: KeyFunderConfig = { // desired balance config desiredBalancePerChain: { alfajores: '5', - arbitrumgoerli: '0.5', bsctestnet: '5', fuji: '5', goerli: '0.5', mumbai: '5', - optimismgoerli: '0.5', plumetestnet: '0.2', + sepolia: '5', + // Funder boosts itself upto 5x balance on L2 before dispersing funds + arbitrumgoerli: '0.5', + optimismgoerli: '0.5', polygonzkevmtestnet: '1', scrollsepolia: '1', - sepolia: '5', }, desiredKathyBalancePerChain: { plumetestnet: '0.05', diff --git a/typescript/infra/config/relayer.json b/typescript/infra/config/relayer.json index 3def0bdaa9..0d943716a7 100644 --- a/typescript/infra/config/relayer.json +++ b/typescript/infra/config/relayer.json @@ -1,7 +1,7 @@ { "mainnet3": { "hyperlane": "0x74cae0ecc47b02ed9b9d32e000fd70b9417970c5", - "neutron": "", + "neutron": "0x03787bc64a4f352b4ad172947473342028513ef3", "rc": "0x09b96417602ed6ac76651f7a8c4860e60e3aa6d0" }, "test": { diff --git a/typescript/infra/fork.sh b/typescript/infra/fork.sh index 13ed5a9a9e..1e29e4dd55 100755 --- a/typescript/infra/fork.sh +++ b/typescript/infra/fork.sh @@ -36,9 +36,6 @@ yarn ts-node ./scripts/deploy.ts -e $ENVIRONMENT -f $CHAIN -m $MODULE AFTER=$(cast balance $DEPLOYER --rpc-url http://localhost:8545) DEPLOY_DELTA="$((BEFORE-AFTER))" -# build SDK to get the latest addresses -yarn --cwd ../sdk build - BEFORE=$(cast balance $DEPLOYER --rpc-url http://localhost:8545) yarn ts-node ./scripts/check-deploy.ts -e $ENVIRONMENT -f $CHAIN --govern -m $MODULE diff --git a/typescript/infra/package.json b/typescript/infra/package.json index f3a15d2a6c..cd81257e2f 100644 --- a/typescript/infra/package.json +++ b/typescript/infra/package.json @@ -70,7 +70,7 @@ "announce": "hardhat announce --network localhost", "node": "hardhat node", "prettier": "prettier --write *.ts ./src ./config ./scripts ./test", - "test": "mocha --config ../sdk/.mocharc.json test/agents.test.ts", + "test": "mocha --config ../sdk/.mocharc.json test/**/*.test.ts", "test:ci": "yarn test" }, "peerDependencies": { diff --git a/typescript/infra/scripts/agent-utils.ts b/typescript/infra/scripts/agent-utils.ts index e41b19bf25..f43c7489dd 100644 --- a/typescript/infra/scripts/agent-utils.ts +++ b/typescript/infra/scripts/agent-utils.ts @@ -365,6 +365,10 @@ export function getAgentConfigDirectory() { return path.join('../../', 'rust', 'config'); } +export function getAgentConfigJsonPath(environment: DeployEnvironment) { + return path.join(getAgentConfigDirectory(), `${environment}_config.json`); +} + export async function assertCorrectKubeContext(coreConfig: EnvironmentConfig) { const currentKubeContext = await getCurrentKubernetesContext(); if ( diff --git a/typescript/infra/scripts/check-deploy.ts b/typescript/infra/scripts/check-deploy.ts index 52b73c34b3..81902dc4fe 100644 --- a/typescript/infra/scripts/check-deploy.ts +++ b/typescript/infra/scripts/check-deploy.ts @@ -51,7 +51,8 @@ async function check() { }); const owner = config.core[fork].owner; - const signer = await impersonateAccount(owner); + const signer = await impersonateAccount(owner, 1e18); + multiProvider.setSigner(fork, signer); } } diff --git a/typescript/infra/scripts/deploy.ts b/typescript/infra/scripts/deploy.ts index b83d1019b8..e1545c5879 100644 --- a/typescript/infra/scripts/deploy.ts +++ b/typescript/infra/scripts/deploy.ts @@ -23,7 +23,7 @@ import { import { objMap } from '@hyperlane-xyz/utils'; import { Contexts } from '../config/contexts'; -import { aggregationIsm } from '../config/routingIsm'; +import { safes } from '../config/environments/mainnet3/owners'; import { deployEnvToSdkEnv } from '../src/config/environment'; import { deployWithArtifacts } from '../src/deployment/deploy'; import { TestQuerySenderDeployer } from '../src/deployment/testcontracts/testquerysender'; @@ -69,7 +69,14 @@ async function main() { }); await useLocalProvider(multiProvider, fork); - const signer = await impersonateAccount(envConfig.owners[fork].owner); + // const deployers = await envConfig.getKeys( + // Contexts.Hyperlane, + // Role.Deployer, + // ); + // const deployer = deployers[fork].address; + const deployer = '0xa7ECcdb9Be08178f896c26b7BbD8C3D4E844d9Ba'; + const signer = await impersonateAccount(deployer); + multiProvider.setSharedSigner(signer); } @@ -114,25 +121,19 @@ async function main() { multiProvider, ); const routerConfig = core.getRouterConfig(envConfig.owners); - const plumetestnet = { - ...routerConfig.plumetestnet, - type: TokenType.synthetic, - name: 'Wrapped Ether', - symbol: 'WETH', - decimals: 18, - totalSupply: '0', + const inevm = { + ...routerConfig.inevm, + type: TokenType.native, + interchainSecurityModule: ethers.constants.AddressZero, + owner: safes.inevm, }; - const sepolia = { - ...routerConfig.sepolia, + const injective = { + ...routerConfig.injective, type: TokenType.native, - interchainSecurityModule: aggregationIsm( - 'plumetestnet', - Contexts.Hyperlane, - ), }; config = { - plumetestnet, - sepolia, + inevm, + injective, }; deployer = new HypERC20Deployer( multiProvider, diff --git a/typescript/infra/src/agents/agent.ts b/typescript/infra/src/agents/agent.ts index 206ede3452..e6afe9f02e 100644 --- a/typescript/infra/src/agents/agent.ts +++ b/typescript/infra/src/agents/agent.ts @@ -48,7 +48,7 @@ export function userIdentifier( return identifier(false, environment, context, role, chainName, index); } -// Doesn't perform any checks on whether the parsed values are valid, +// Does not perform any checks on whether the parsed values are valid, // this is left to the caller. export function parseKeyIdentifier(identifier: string): { environment: string; diff --git a/typescript/infra/src/agents/index.ts b/typescript/infra/src/agents/index.ts index 8802ccdaa7..2acbbe4a5b 100644 --- a/typescript/infra/src/agents/index.ts +++ b/typescript/infra/src/agents/index.ts @@ -112,7 +112,7 @@ export abstract class AgentHelmManager { runEnv: this.environment, context: this.context, aws: !!this.config.aws, - chains: this.config.environmentChainNames.map((chain) => { + chains: this.config.contextChainNames[this.role].map((chain) => { const metadata = chainMetadata[chain]; const reorgPeriod = metadata.blocks?.reorgPeriod; if (reorgPeriod === undefined) { @@ -120,7 +120,6 @@ export abstract class AgentHelmManager { } return { name: chain, - disabled: !this.config.contextChainNames[this.role].includes(chain), rpcConsensusType: this.rpcConsensusType(chain), protocol: metadata.protocol, blocks: { reorgPeriod }, diff --git a/typescript/infra/src/agents/key-utils.ts b/typescript/infra/src/agents/key-utils.ts index 0f6a082994..c008b9afbc 100644 --- a/typescript/infra/src/agents/key-utils.ts +++ b/typescript/infra/src/agents/key-utils.ts @@ -385,6 +385,16 @@ async function persistAddressesLocally( const multisigValidatorKeys: ChainMap<{ validators: Address[] }> = {}; let relayer, kathy; for (const key of keys) { + // Some types of keys come in an AWS and a GCP variant. We prefer + // to persist the AWS version of the key if AWS is enabled. + // Note this means we prefer EVM addresses here, as even if AWS + // is enabled, we use the GCP address for non-EVM chains because + // only the EVM has the tooling & cryptographic compatibility with + // our AWS KMS keys. + if (agentConfig.aws && !(key instanceof AgentAwsKey)) { + continue; + } + if (key.role === Role.Relayer) { if (relayer) throw new Error('More than one Relayer found in gcpCloudAgentKeys'); @@ -395,15 +405,29 @@ async function persistAddressesLocally( throw new Error('More than one Kathy found in gcpCloudAgentKeys'); kathy = key.address; } - if (!key.chainName) continue; - multisigValidatorKeys[key.chainName] ||= { - validators: [], - }; - if (key.chainName) - multisigValidatorKeys[key.chainName].validators.push(key.address); + + if (key.chainName) { + multisigValidatorKeys[key.chainName] ||= { + validators: [], + }; + + // The validator role always has a chainName. + if (key.role === Role.Validator) { + multisigValidatorKeys[key.chainName].validators.push(key.address); + } + } } if (!relayer) throw new Error('No Relayer found in awsCloudAgentKeys'); - if (!kathy) throw new Error('No Kathy found in awsCloudAgentKeys'); + if (agentConfig.context === Contexts.Hyperlane) { + if (!kathy) throw new Error('No Kathy found in awsCloudAgentKeys'); + await persistRoleAddressesToLocalArtifacts( + Role.Kathy, + agentConfig.runEnv, + agentConfig.context, + kathy, + kathyAddresses, + ); + } await persistRoleAddressesToLocalArtifacts( Role.Relayer, agentConfig.runEnv, @@ -411,13 +435,7 @@ async function persistAddressesLocally( relayer, relayerAddresses, ); - await persistRoleAddressesToLocalArtifacts( - Role.Kathy, - agentConfig.runEnv, - agentConfig.context, - kathy, - kathyAddresses, - ); + await persistValidatorAddressesToLocalArtifacts(multisigValidatorKeys); } diff --git a/typescript/infra/src/config/agent/agent.ts b/typescript/infra/src/config/agent/agent.ts index d53e68e056..85b379e5e3 100644 --- a/typescript/infra/src/config/agent/agent.ts +++ b/typescript/infra/src/config/agent/agent.ts @@ -2,14 +2,15 @@ import { AgentChainMetadata, AgentSignerAwsKey, AgentSignerKeyType, + ChainMap, ChainName, RpcConsensusType, chainMetadata, } from '@hyperlane-xyz/sdk'; -import { ProtocolType } from '@hyperlane-xyz/utils'; +import { ProtocolType, objMap } from '@hyperlane-xyz/utils'; import { Contexts } from '../../../config/contexts'; -import { AgentChainNames, Role } from '../../roles'; +import { AgentChainNames, AgentRole, Role } from '../../roles'; import { DeployEnvironment } from '../environment'; import { HelmImageValues } from '../infrastructure'; @@ -56,7 +57,6 @@ interface HelmHyperlaneValues { export interface HelmAgentChainOverride extends DeepPartial { name: AgentChainMetadata['name']; - disabled?: boolean; } export interface RootAgentConfig extends AgentContextConfig { @@ -207,3 +207,41 @@ export function defaultChainSignerKeyConfig(chainName: ChainName): KeyConfig { return { type: AgentSignerKeyType.Hex }; } } + +export type AgentChainConfig = Record>; + +/// Converts an AgentChainConfig to an AgentChainNames object. +export function getAgentChainNamesFromConfig( + config: AgentChainConfig, + supportedChainNames: ChainName[], +): AgentChainNames { + ensureAgentChainConfigIncludesAllChainNames(config, supportedChainNames); + + return objMap(config, (role, roleConfig) => + Object.entries(roleConfig) + .filter(([_chain, enabled]) => enabled) + .map(([chain]) => chain), + ); +} + +// Throws if any of the roles in the config do not have all the expected chain names. +export function ensureAgentChainConfigIncludesAllChainNames( + config: AgentChainConfig, + expectedChainNames: ChainName[], +) { + for (const [role, roleConfig] of Object.entries(config)) { + const chainNames = Object.keys(roleConfig); + const missingChainNames = expectedChainNames.filter( + (chainName) => !chainNames.includes(chainName), + ); + const unknownChainNames = chainNames.filter( + (chainName) => !expectedChainNames.includes(chainName), + ); + + if (missingChainNames.length > 0 || unknownChainNames.length > 0) { + throw new Error( + `${role} agent chain config incorrect. Missing chain names: ${missingChainNames}, unknown chain names: ${unknownChainNames}`, + ); + } + } +} diff --git a/typescript/infra/src/config/chain.ts b/typescript/infra/src/config/chain.ts index af99549c8f..dda0edc7c4 100644 --- a/typescript/infra/src/config/chain.ts +++ b/typescript/infra/src/config/chain.ts @@ -1,13 +1,17 @@ import { providers } from 'ethers'; import { + ChainMap, + ChainMetadata, ChainMetadataManager, ChainName, + CoreChainName, HyperlaneSmartProvider, ProviderRetryOptions, RpcConsensusType, chainMetadata, } from '@hyperlane-xyz/sdk'; +import { ProtocolType, objFilter } from '@hyperlane-xyz/utils'; import { getSecretRpcEndpoint } from '../agents'; @@ -52,3 +56,24 @@ export async function fetchProvider( throw Error(`Unsupported connectionType: ${connectionType}`); } } + +export function getChainMetadatas(chains: Array) { + const allMetadatas = Object.fromEntries( + chains + .map((chain) => chainMetadata[chain]) + .map((metadata) => [metadata.name, metadata]), + ); + + const ethereumMetadatas = objFilter( + allMetadatas, + (_, metadata): metadata is ChainMetadata => + metadata.protocol === ProtocolType.Ethereum, + ); + const nonEthereumMetadatas = objFilter( + allMetadatas, + (_, metadata): metadata is ChainMetadata => + metadata.protocol !== ProtocolType.Ethereum, + ); + + return { ethereumMetadatas, nonEthereumMetadatas }; +} diff --git a/typescript/infra/src/deployment/deploy.ts b/typescript/infra/src/deployment/deploy.ts index 5088a672e5..5c2f4c1a8d 100644 --- a/typescript/infra/src/deployment/deploy.ts +++ b/typescript/infra/src/deployment/deploy.ts @@ -11,7 +11,7 @@ import { } from '@hyperlane-xyz/sdk'; import { objMap, objMerge, promiseObjAll } from '@hyperlane-xyz/utils'; -import { getAgentConfigDirectory } from '../../scripts/agent-utils'; +import { getAgentConfigJsonPath } from '../../scripts/agent-utils'; import { DeployEnvironment } from '../config'; import { readJSONAtPath, @@ -143,9 +143,5 @@ export async function writeAgentConfig( addresses as ChainMap, startBlocks, ); - writeMergedJSON( - getAgentConfigDirectory(), - `${environment}_config.json`, - agentConfig, - ); + writeMergedJSONAtPath(getAgentConfigJsonPath(environment), agentConfig); } diff --git a/typescript/infra/src/utils/fork.ts b/typescript/infra/src/utils/fork.ts index 3d50f8eac3..c51d40a8b1 100644 --- a/typescript/infra/src/utils/fork.ts +++ b/typescript/infra/src/utils/fork.ts @@ -15,9 +15,13 @@ export const resetFork = async (url: string) => { export const impersonateAccount = async ( account: string, + spoofBalance?: number, ): Promise => { const provider = new JsonRpcProvider('http://127.0.0.1:8545'); await provider.send('hardhat_impersonateAccount', [account]); + if (spoofBalance) { + await provider.send('hardhat_setBalance', [account, spoofBalance]); + } return provider.getSigner(account); }; diff --git a/typescript/infra/test/agent-configs.test.ts b/typescript/infra/test/agent-configs.test.ts new file mode 100644 index 0000000000..ea7c6f3777 --- /dev/null +++ b/typescript/infra/test/agent-configs.test.ts @@ -0,0 +1,47 @@ +import { expect } from 'chai'; + +import { hyperlaneContextAgentChainConfig as mainnet3AgentChainConfig } from '../config/environments/mainnet3/agent'; +import { supportedChainNames as mainnet3SupportedChainNames } from '../config/environments/mainnet3/chains'; +import { hyperlaneContextAgentChainConfig as testnet4AgentChainConfig } from '../config/environments/testnet4/agent'; +import { supportedChainNames as testnet4SupportedChainNames } from '../config/environments/testnet4/chains'; +import { getAgentConfigJsonPath } from '../scripts/agent-utils'; +import { ensureAgentChainConfigIncludesAllChainNames } from '../src/config'; +import { readJSONAtPath } from '../src/utils/utils'; + +const environmentChainConfigs = { + mainnet3: { + agentChainConfig: mainnet3AgentChainConfig, + // We read the agent config from the file system instead of importing + // to get around the agent JSON configs living outside the typescript rootDir + agentJsonConfig: readJSONAtPath(getAgentConfigJsonPath('mainnet3')), + supportedChainNames: mainnet3SupportedChainNames, + }, + testnet4: { + agentChainConfig: testnet4AgentChainConfig, + agentJsonConfig: readJSONAtPath(getAgentConfigJsonPath('testnet4')), + supportedChainNames: testnet4SupportedChainNames, + }, +}; + +describe('Agent configs', () => { + Object.entries(environmentChainConfigs).forEach(([environment, config]) => { + describe(`Environment: ${environment}`, () => { + it('AgentChainConfig specifies all chains for each role in the agent chain config', () => { + // This will throw if there are any inconsistencies + ensureAgentChainConfigIncludesAllChainNames( + config.agentChainConfig, + config.supportedChainNames, + ); + }); + + it('Agent JSON config matches environment chains', () => { + const agentJsonConfigChains = Object.keys( + config.agentJsonConfig.chains, + ); + expect(agentJsonConfigChains).to.have.members( + config.supportedChainNames, + ); + }); + }); + }); +}); diff --git a/typescript/infra/test/agents.test.ts b/typescript/infra/test/cloud-agent-keys.test.ts similarity index 100% rename from typescript/infra/test/agents.test.ts rename to typescript/infra/test/cloud-agent-keys.test.ts diff --git a/typescript/sdk/src/consts/multisigIsm.ts b/typescript/sdk/src/consts/multisigIsm.ts index 22059db955..74de5c62fb 100644 --- a/typescript/sdk/src/consts/multisigIsm.ts +++ b/typescript/sdk/src/consts/multisigIsm.ts @@ -138,8 +138,8 @@ export const defaultMultisigConfigs: ChainMap = { threshold: 2, validators: [ '0xf9e35ee88e4448a3673b4676a4e153e3584a08eb', - '0xae3e6bb6b3ece1c425aa6f47adc8cb0453c1f9a2', - '0xd98c9522cd9d3e3e00bee05ff76c34b91b266ec3', + '0x6B1d09A97b813D53e9D4b7523DA36604C0B52242', // caldera + '0x9ab11f38a609940153850df611c9a2175dcffe0f', // imperator ], }, @@ -147,8 +147,8 @@ export const defaultMultisigConfigs: ChainMap = { threshold: 2, validators: [ '0xbfb8911b72cfb138c7ce517c57d9c691535dc517', - '0x6faa139c33a7e6f53cb101f6b2ae392298283ed2', - '0x0115e3a66820fb99da30d30e2ce52a453ba99d92', + '0x6B1d09A97b813D53e9D4b7523DA36604C0B52242', // caldera + '0x9e551b6694bbd295d7d6e6a2540c7d41ce70a3b9', // imperator ], }, diff --git a/typescript/sdk/src/core/MultiProtocolCore.ts b/typescript/sdk/src/core/MultiProtocolCore.ts index ee0100bf9a..dcc9c00302 100644 --- a/typescript/sdk/src/core/MultiProtocolCore.ts +++ b/typescript/sdk/src/core/MultiProtocolCore.ts @@ -1,6 +1,6 @@ import debug from 'debug'; -import { ProtocolType } from '@hyperlane-xyz/utils'; +import { HexString, ProtocolType } from '@hyperlane-xyz/utils'; import { AdapterClassType, MultiProtocolApp } from '../app/MultiProtocolApp'; import { @@ -59,6 +59,13 @@ export class MultiProtocolCore extends MultiProtocolApp< throw new Error(`No adapter for protocol ${protocol}`); } + extractMessageIds( + origin: ChainName, + sourceTx: TypedTransactionReceipt, + ): Array<{ messageId: HexString; destination: ChainName }> { + return this.adapter(origin).extractMessageIds(sourceTx); + } + async waitForMessagesProcessed( origin: ChainName, destination: ChainName, diff --git a/typescript/sdk/src/core/adapters/CosmWasmCoreAdapter.test.ts b/typescript/sdk/src/core/adapters/CosmWasmCoreAdapter.test.ts new file mode 100644 index 0000000000..686b044f27 --- /dev/null +++ b/typescript/sdk/src/core/adapters/CosmWasmCoreAdapter.test.ts @@ -0,0 +1,36 @@ +import { expect } from 'chai'; + +import { Chains } from '../../consts/chains'; +import { MultiProtocolProvider } from '../../providers/MultiProtocolProvider'; +import { ProviderType } from '../../providers/ProviderType'; + +import { CosmWasmCoreAdapter } from './CosmWasmCoreAdapter'; + +const TX_RECEIPT = JSON.parse( + `{"height":62609917,"transactionHash":"3106A2BECE7FC03EC6F7FD3BC1577B9456C8B481A017A3A51AD7E9D27D9240A7","events":[{"type":"coin_spent","attributes":[{"key":"spender","value":"inj16paaazy6t2ac02q5t8en099csy7pkyh3hw35up"},{"key":"amount","value":"948228000000000inj"}]},{"type":"coin_received","attributes":[{"key":"receiver","value":"inj17xpfvakm2amg962yls6f84z3kell8c5l6s5ye9"},{"key":"amount","value":"948228000000000inj"}]},{"type":"transfer","attributes":[{"key":"recipient","value":"inj17xpfvakm2amg962yls6f84z3kell8c5l6s5ye9"},{"key":"sender","value":"inj16paaazy6t2ac02q5t8en099csy7pkyh3hw35up"},{"key":"amount","value":"948228000000000inj"}]},{"type":"message","attributes":[{"key":"sender","value":"inj16paaazy6t2ac02q5t8en099csy7pkyh3hw35up"}]},{"type":"tx","attributes":[{"key":"fee","value":"948228000000000inj"},{"key":"fee_payer","value":"inj16paaazy6t2ac02q5t8en099csy7pkyh3hw35up"}]},{"type":"tx","attributes":[{"key":"acc_seq","value":"inj16paaazy6t2ac02q5t8en099csy7pkyh3hw35up/20"}]},{"type":"tx","attributes":[{"key":"signature","value":"9XC7pL/hEa4PvJQxyAKdLpucpA/t+lNKzqfeSgUYTw9Old05Lbfx95GkIaXnuTOspCvYIZIuLesJ5wQHdL1Ljw=="}]},{"type":"message","attributes":[{"key":"action","value":"/cosmwasm.wasm.v1.MsgExecuteContract"},{"key":"sender","value":"inj16paaazy6t2ac02q5t8en099csy7pkyh3hw35up"},{"key":"module","value":"wasm"}]},{"type":"coin_spent","attributes":[{"key":"spender","value":"inj16paaazy6t2ac02q5t8en099csy7pkyh3hw35up"},{"key":"amount","value":"31000000000000000inj"}]},{"type":"coin_received","attributes":[{"key":"receiver","value":"inj1mv9tjvkaw7x8w8y9vds8pkfq46g2vcfkjehc6k"},{"key":"amount","value":"31000000000000000inj"}]},{"type":"transfer","attributes":[{"key":"recipient","value":"inj1mv9tjvkaw7x8w8y9vds8pkfq46g2vcfkjehc6k"},{"key":"sender","value":"inj16paaazy6t2ac02q5t8en099csy7pkyh3hw35up"},{"key":"amount","value":"31000000000000000inj"}]},{"type":"execute","attributes":[{"key":"_contract_address","value":"inj1mv9tjvkaw7x8w8y9vds8pkfq46g2vcfkjehc6k"}]},{"type":"wasm-hpl_warp_native::transfer-remote","attributes":[{"key":"_contract_address","value":"inj1mv9tjvkaw7x8w8y9vds8pkfq46g2vcfkjehc6k"},{"key":"sender","value":"inj16paaazy6t2ac02q5t8en099csy7pkyh3hw35up"},{"key":"recipient","value":"0000000000000000000000009a2d8681ffcc45b0c18e72b16fba9b2270b911ed"},{"key":"token","value":"inj"},{"key":"amount","value":"1000000000000000"}]},{"type":"coin_spent","attributes":[{"key":"amount","value":"30000000000000000inj"},{"key":"spender","value":"inj1mv9tjvkaw7x8w8y9vds8pkfq46g2vcfkjehc6k"}]},{"type":"coin_received","attributes":[{"key":"amount","value":"30000000000000000inj"},{"key":"receiver","value":"inj1palm2wtp6urg0c6j4f2ukv5u5ahdcrqek0sapt"}]},{"type":"transfer","attributes":[{"key":"amount","value":"30000000000000000inj"},{"key":"recipient","value":"inj1palm2wtp6urg0c6j4f2ukv5u5ahdcrqek0sapt"},{"key":"sender","value":"inj1mv9tjvkaw7x8w8y9vds8pkfq46g2vcfkjehc6k"}]},{"type":"execute","attributes":[{"key":"_contract_address","value":"inj1palm2wtp6urg0c6j4f2ukv5u5ahdcrqek0sapt"}]},{"type":"wasm-mailbox_dispatch_id","attributes":[{"key":"_contract_address","value":"inj1palm2wtp6urg0c6j4f2ukv5u5ahdcrqek0sapt"},{"key":"message_id","value":"afc6cabcf735ac7b13fb4f1a045c4d675ecf8363cac76a21612411e644041af2"}]},{"type":"wasm-mailbox_dispatch","attributes":[{"key":"_contract_address","value":"inj1palm2wtp6urg0c6j4f2ukv5u5ahdcrqek0sapt"},{"key":"destination","value":"2525"},{"key":"message","value":"030000032e00696e6a000000000000000000000000db0ab932dd778c771c85636070d920ae90a66136000009dd00000000000000000000000026f32245fcf5ad53159e875d5cae62aecf19c2d40000000000000000000000009a2d8681ffcc45b0c18e72b16fba9b2270b911ed00000000000000000000000000000000000000000000000000038d7ea4c68000"},{"key":"recipient","value":"00000000000000000000000026f32245fcf5ad53159e875d5cae62aecf19c2d4"},{"key":"sender","value":"000000000000000000000000db0ab932dd778c771c85636070d920ae90a66136"}]},{"type":"execute","attributes":[{"key":"_contract_address","value":"inj1269dxcuyglc8mmecf95lf63elt3cq2tz57ka6h"}]},{"type":"wasm-hpl_hook_merkle::post_dispatch","attributes":[{"key":"_contract_address","value":"inj1269dxcuyglc8mmecf95lf63elt3cq2tz57ka6h"},{"key":"index","value":"814"},{"key":"message_id","value":"afc6cabcf735ac7b13fb4f1a045c4d675ecf8363cac76a21612411e644041af2"}]},{"type":"wasm-hpl_hook_merkle::inserted_into_tree","attributes":[{"key":"_contract_address","value":"inj1269dxcuyglc8mmecf95lf63elt3cq2tz57ka6h"},{"key":"index","value":"814"}]},{"type":"coin_spent","attributes":[{"key":"amount","value":"30000000000000000inj"},{"key":"spender","value":"inj1palm2wtp6urg0c6j4f2ukv5u5ahdcrqek0sapt"}]},{"type":"coin_received","attributes":[{"key":"amount","value":"30000000000000000inj"},{"key":"receiver","value":"inj1y7h9y2vwtdfmxjm6ur9x8czcghp3u86e2wtcxr"}]},{"type":"transfer","attributes":[{"key":"amount","value":"30000000000000000inj"},{"key":"recipient","value":"inj1y7h9y2vwtdfmxjm6ur9x8czcghp3u86e2wtcxr"},{"key":"sender","value":"inj1palm2wtp6urg0c6j4f2ukv5u5ahdcrqek0sapt"}]},{"type":"execute","attributes":[{"key":"_contract_address","value":"inj1y7h9y2vwtdfmxjm6ur9x8czcghp3u86e2wtcxr"}]},{"type":"wasm-igp-core-pay-for-gas","attributes":[{"key":"_contract_address","value":"inj1y7h9y2vwtdfmxjm6ur9x8czcghp3u86e2wtcxr"},{"key":"dest_domain","value":"2525"},{"key":"gas_amount","value":"250000"},{"key":"gas_refunded","value":"29999999999997500"},{"key":"gas_required","value":"2500"},{"key":"message_id","value":"afc6cabcf735ac7b13fb4f1a045c4d675ecf8363cac76a21612411e644041af2"},{"key":"payment","value":"30000000000000000"},{"key":"sender","value":"inj1palm2wtp6urg0c6j4f2ukv5u5ahdcrqek0sapt"}]},{"type":"wasm-igp-core-post-dispatch","attributes":[{"key":"_contract_address","value":"inj1y7h9y2vwtdfmxjm6ur9x8czcghp3u86e2wtcxr"},{"key":"message","value":"030000032e00696e6a000000000000000000000000db0ab932dd778c771c85636070d920ae90a66136000009dd00000000000000000000000026f32245fcf5ad53159e875d5cae62aecf19c2d40000000000000000000000009a2d8681ffcc45b0c18e72b16fba9b2270b911ed00000000000000000000000000000000000000000000000000038d7ea4c68000"},{"key":"metadata","value":"0x"}]},{"type":"coin_spent","attributes":[{"key":"amount","value":"29999999999997500inj"},{"key":"spender","value":"inj1y7h9y2vwtdfmxjm6ur9x8czcghp3u86e2wtcxr"}]},{"type":"coin_received","attributes":[{"key":"amount","value":"29999999999997500inj"},{"key":"receiver","value":"inj1mv9tjvkaw7x8w8y9vds8pkfq46g2vcfkjehc6k"}]},{"type":"transfer","attributes":[{"key":"amount","value":"29999999999997500inj"},{"key":"recipient","value":"inj1mv9tjvkaw7x8w8y9vds8pkfq46g2vcfkjehc6k"},{"key":"sender","value":"inj1y7h9y2vwtdfmxjm6ur9x8czcghp3u86e2wtcxr"}]}],"gasWanted":948228,"gasUsed":695543}`, +); + +describe('CosmWasmCoreAdapter', () => { + let adapter: CosmWasmCoreAdapter; + + it('constructs', () => { + adapter = new CosmWasmCoreAdapter( + Chains.injective, + new MultiProtocolProvider(), + { mailbox: '' }, + ); + expect(adapter).to.be.instanceOf(CosmWasmCoreAdapter); + }); + + it('extracts message IDs', () => { + const messages = adapter.extractMessageIds({ + type: ProviderType.CosmJsWasm, + receipt: TX_RECEIPT, + }); + expect(messages).to.have.length(1); + expect(messages[0].messageId).to.equal( + '0xafc6cabcf735ac7b13fb4f1a045c4d675ecf8363cac76a21612411e644041af2', + ); + expect(messages[0].destination).to.equal('inevm'); + }); +}); diff --git a/typescript/sdk/src/core/adapters/CosmWasmCoreAdapter.ts b/typescript/sdk/src/core/adapters/CosmWasmCoreAdapter.ts index 87517dd6b6..d7187d28a1 100644 --- a/typescript/sdk/src/core/adapters/CosmWasmCoreAdapter.ts +++ b/typescript/sdk/src/core/adapters/CosmWasmCoreAdapter.ts @@ -1,6 +1,6 @@ import { ExecuteInstruction } from '@cosmjs/cosmwasm-stargate'; -import { Address, HexString } from '@hyperlane-xyz/utils'; +import { Address, HexString, assert, ensure0x } from '@hyperlane-xyz/utils'; import { BaseCosmWasmAdapter } from '../../app/MultiProtocolApp'; import { @@ -24,6 +24,11 @@ import { ChainName } from '../../types'; import { ICoreAdapter } from './types'; +const MESSAGE_DISPATCH_EVENT_TYPE = 'wasm-mailbox_dispatch'; +const MESSAGE_DISPATCH_ID_EVENT_TYPE = 'wasm-mailbox_dispatch_id'; +const MESSAGE_ID_ATTRIBUTE_KEY = 'message_id'; +const MESSAGE_DESTINATION_ATTRIBUTE_KEY = 'destination'; + type MailboxResponse = | DefaultHookResponse | RequiredHookResponse @@ -169,8 +174,32 @@ export class CosmWasmCoreAdapter `Unsupported provider type for CosmosCoreAdapter ${sourceTx.type}`, ); } - // TODO: parse mailbox logs and extract message ids - throw new Error('Method not implemented.'); + const dispatchIdEvents = sourceTx.receipt.events.filter( + (e) => e.type === MESSAGE_DISPATCH_ID_EVENT_TYPE, + ); + const dispatchEvents = sourceTx.receipt.events.filter( + (e) => e.type === MESSAGE_DISPATCH_EVENT_TYPE, + ); + assert( + dispatchIdEvents.length === dispatchEvents.length, + 'Mismatched dispatch and dispatch id events', + ); + const result: Array<{ messageId: string; destination: ChainName }> = []; + for (let i = 0; i < dispatchIdEvents.length; i++) { + const idAttribute = dispatchIdEvents[i].attributes.find( + (a) => a.key === MESSAGE_ID_ATTRIBUTE_KEY, + ); + const destAttribute = dispatchEvents[i].attributes.find( + (a) => a.key === MESSAGE_DESTINATION_ATTRIBUTE_KEY, + ); + assert(idAttribute, 'No message id attribute found in dispatch event'); + assert(destAttribute, 'No destination attribute found in dispatch event'); + result.push({ + messageId: ensure0x(idAttribute.value), + destination: this.multiProvider.getChainName(destAttribute.value), + }); + } + return result; } async waitForMessageProcessed( diff --git a/typescript/sdk/src/core/adapters/SealevelCoreAdapter.ts b/typescript/sdk/src/core/adapters/SealevelCoreAdapter.ts index bd5adce441..4c584c2311 100644 --- a/typescript/sdk/src/core/adapters/SealevelCoreAdapter.ts +++ b/typescript/sdk/src/core/adapters/SealevelCoreAdapter.ts @@ -45,7 +45,6 @@ export class SealevelCoreAdapter if (!logs) throw new Error('Transaction logs required to check message delivery'); const parsedLogs = SealevelCoreAdapter.parseMessageDispatchLogs(logs); - if (!parsedLogs.length) throw new Error('Message dispatch log not found'); return parsedLogs.map(({ destination, messageId }) => ({ messageId: ensure0x(messageId), destination: this.multiProvider.getChainName(destination), diff --git a/typescript/sdk/src/deploy/HyperlaneDeployer.ts b/typescript/sdk/src/deploy/HyperlaneDeployer.ts index c0370701ff..4714657610 100644 --- a/typescript/sdk/src/deploy/HyperlaneDeployer.ts +++ b/typescript/sdk/src/deploy/HyperlaneDeployer.ts @@ -640,7 +640,7 @@ export abstract class HyperlaneDeployer< return ret; } - protected async transferOwnershipOfContracts( + async transferOwnershipOfContracts( chain: ChainName, config: OwnableConfig, ownables: Partial>, diff --git a/typescript/sdk/src/hook/HyperlaneHookDeployer.ts b/typescript/sdk/src/hook/HyperlaneHookDeployer.ts index c87d8777b7..0af7d4fd3c 100644 --- a/typescript/sdk/src/hook/HyperlaneHookDeployer.ts +++ b/typescript/sdk/src/hook/HyperlaneHookDeployer.ts @@ -258,13 +258,15 @@ export class HyperlaneHookDeployer extends HyperlaneDeployer< throw new Error(`Mailbox address is required for ${config.type}`); } + const deployer = await this.multiProvider.getSigner(chain).getAddress(); + let routingHook: DomainRoutingHook | FallbackDomainRoutingHook; switch (config.type) { case HookType.ROUTING: { this.logger('Deploying DomainRoutingHook for %s', chain); routingHook = await this.deployContract(chain, HookType.ROUTING, [ mailbox, - config.owner, + deployer, ]); break; } @@ -278,7 +280,7 @@ export class HyperlaneHookDeployer extends HyperlaneDeployer< routingHook = await this.deployContract( chain, HookType.FALLBACK_ROUTING, - [mailbox, config.owner, fallbackHook[config.fallback.type].address], + [mailbox, deployer, fallbackHook[config.fallback.type].address], ); break; } @@ -309,13 +311,17 @@ export class HyperlaneHookDeployer extends HyperlaneDeployer< } const overrides = this.multiProvider.getTransactionOverrides(chain); - await this.multiProvider.handleTx( - chain, - routingHook.setHooks(routingConfigs, { - ...overrides, - }), + await this.runIfOwner(chain, routingHook, async () => + this.multiProvider.handleTx( + chain, + routingHook.setHooks(routingConfigs, overrides), + ), ); + await this.transferOwnershipOfContracts(chain, config, { + [config.type]: routingHook, + }); + return routingHook; } } diff --git a/typescript/sdk/src/index.ts b/typescript/sdk/src/index.ts index d0435e5770..10997102b5 100644 --- a/typescript/sdk/src/index.ts +++ b/typescript/sdk/src/index.ts @@ -63,6 +63,7 @@ export { TestRecipientConfig, TestRecipientDeployer, } from './core/TestRecipientDeployer'; +export { CosmWasmCoreAdapter } from './core/adapters/CosmWasmCoreAdapter'; export { EvmCoreAdapter } from './core/adapters/EvmCoreAdapter'; export { SealevelCoreAdapter } from './core/adapters/SealevelCoreAdapter'; export { ICoreAdapter } from './core/adapters/types'; diff --git a/typescript/sdk/src/ism/HyperlaneIsmFactory.ts b/typescript/sdk/src/ism/HyperlaneIsmFactory.ts index b51c1131f1..ae0dd6d8b3 100644 --- a/typescript/sdk/src/ism/HyperlaneIsmFactory.ts +++ b/typescript/sdk/src/ism/HyperlaneIsmFactory.ts @@ -27,6 +27,7 @@ import { } from '@hyperlane-xyz/utils'; import { HyperlaneApp } from '../app/HyperlaneApp'; +import { chainMetadata } from '../consts/chainMetadata'; import { HyperlaneEnvironment, hyperlaneEnvironments, @@ -164,6 +165,9 @@ export class HyperlaneIsmFactory extends HyperlaneApp { IsmType.PAUSABLE, [config.owner], ); + await this.deployer?.transferOwnershipOfContracts(destination, config, { + [IsmType.PAUSABLE]: contract, + }); break; case IsmType.TEST_ISM: if (!this.deployer) { @@ -236,7 +240,9 @@ export class HyperlaneIsmFactory extends HyperlaneApp { config.domains = objFilter( config.domains, (domain, config): config is IsmConfig => { - const domainId = this.multiProvider.tryGetDomainId(domain); + const domainId = + chainMetadata[domain]?.domainId ?? + this.multiProvider.tryGetDomainId(domain); if (domainId === null) { warn( `Domain ${domain} doesn't have chain metadata provided, skipping ...`, @@ -245,8 +251,10 @@ export class HyperlaneIsmFactory extends HyperlaneApp { return domainId !== null; }, ); - const safeConfigDomains = Object.keys(config.domains).map((domain) => - this.multiProvider.getDomainId(domain), + const safeConfigDomains = Object.keys(config.domains).map( + (domain) => + chainMetadata[domain]?.domainId ?? + this.multiProvider.getDomainId(domain), ); const delta: RoutingIsmDelta = existingIsmAddress ? await routingModuleDelta( diff --git a/yarn.lock b/yarn.lock index 16e0a54516..e7f51888e5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,6 +12,16 @@ __metadata: languageName: node linkType: hard +"@ampproject/remapping@npm:^2.2.0": + version: 2.2.1 + resolution: "@ampproject/remapping@npm:2.2.1" + dependencies: + "@jridgewell/gen-mapping": "npm:^0.3.0" + "@jridgewell/trace-mapping": "npm:^0.3.9" + checksum: e15fecbf3b54c988c8b4fdea8ef514ab482537e8a080b2978cc4b47ccca7140577ca7b65ad3322dcce65bc73ee6e5b90cbfe0bbd8c766dad04d5c62ec9634c42 + languageName: node + linkType: hard + "@arbitrum/sdk@npm:^3.0.0": version: 3.0.0 resolution: "@arbitrum/sdk@npm:3.0.0" @@ -2428,6 +2438,16 @@ __metadata: languageName: node linkType: hard +"@babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.23.5": + version: 7.23.5 + resolution: "@babel/code-frame@npm:7.23.5" + dependencies: + "@babel/highlight": "npm:^7.23.4" + chalk: "npm:^2.4.2" + checksum: 44e58529c9d93083288dc9e649c553c5ba997475a7b0758cc3ddc4d77b8a7d985dbe78cc39c9bbc61f26d50af6da1ddf0a3427eae8cc222a9370619b671ed8f5 + languageName: node + linkType: hard + "@babel/code-frame@npm:^7.22.13": version: 7.22.13 resolution: "@babel/code-frame@npm:7.22.13" @@ -2438,6 +2458,36 @@ __metadata: languageName: node linkType: hard +"@babel/compat-data@npm:^7.23.5": + version: 7.23.5 + resolution: "@babel/compat-data@npm:7.23.5" + checksum: 088f14f646ecbddd5ef89f120a60a1b3389a50a9705d44603dca77662707d0175a5e0e0da3943c3298f1907a4ab871468656fbbf74bb7842cd8b0686b2c19736 + languageName: node + linkType: hard + +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3": + version: 7.23.9 + resolution: "@babel/core@npm:7.23.9" + dependencies: + "@ampproject/remapping": "npm:^2.2.0" + "@babel/code-frame": "npm:^7.23.5" + "@babel/generator": "npm:^7.23.6" + "@babel/helper-compilation-targets": "npm:^7.23.6" + "@babel/helper-module-transforms": "npm:^7.23.3" + "@babel/helpers": "npm:^7.23.9" + "@babel/parser": "npm:^7.23.9" + "@babel/template": "npm:^7.23.9" + "@babel/traverse": "npm:^7.23.9" + "@babel/types": "npm:^7.23.9" + convert-source-map: "npm:^2.0.0" + debug: "npm:^4.1.0" + gensync: "npm:^1.0.0-beta.2" + json5: "npm:^2.2.3" + semver: "npm:^6.3.1" + checksum: 268cdbb86bef1b8ea5b1300f2f325e56a1740a5051360cb228ffeaa0f80282b6674f3a2b4d6466adb0691183759b88d4c37b4a4f77232c84a49ed771c84cdc27 + languageName: node + linkType: hard + "@babel/generator@npm:7.17.7": version: 7.17.7 resolution: "@babel/generator@npm:7.17.7" @@ -2461,6 +2511,31 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.23.6, @babel/generator@npm:^7.7.2": + version: 7.23.6 + resolution: "@babel/generator@npm:7.23.6" + dependencies: + "@babel/types": "npm:^7.23.6" + "@jridgewell/gen-mapping": "npm:^0.3.2" + "@jridgewell/trace-mapping": "npm:^0.3.17" + jsesc: "npm:^2.5.1" + checksum: 864090d5122c0aa3074471fd7b79d8a880c1468480cbd28925020a3dcc7eb6e98bedcdb38983df299c12b44b166e30915b8085a7bc126e68fa7e2aadc7bd1ac5 + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.23.6": + version: 7.23.6 + resolution: "@babel/helper-compilation-targets@npm:7.23.6" + dependencies: + "@babel/compat-data": "npm:^7.23.5" + "@babel/helper-validator-option": "npm:^7.23.5" + browserslist: "npm:^4.22.2" + lru-cache: "npm:^5.1.1" + semver: "npm:^6.3.1" + checksum: 05595cd73087ddcd81b82d2f3297aac0c0422858dfdded43d304786cf680ec33e846e2317e6992d2c964ee61d93945cbf1fa8ec80b55aee5bfb159227fb02cb9 + languageName: node + linkType: hard + "@babel/helper-environment-visitor@npm:^7.22.20": version: 7.22.20 resolution: "@babel/helper-environment-visitor@npm:7.22.20" @@ -2487,6 +2562,46 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-imports@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/helper-module-imports@npm:7.22.15" + dependencies: + "@babel/types": "npm:^7.22.15" + checksum: 5ecf9345a73b80c28677cfbe674b9f567bb0d079e37dcba9055e36cb337db24ae71992a58e1affa9d14a60d3c69907d30fe1f80aea105184501750a58d15c81c + languageName: node + linkType: hard + +"@babel/helper-module-transforms@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/helper-module-transforms@npm:7.23.3" + dependencies: + "@babel/helper-environment-visitor": "npm:^7.22.20" + "@babel/helper-module-imports": "npm:^7.22.15" + "@babel/helper-simple-access": "npm:^7.22.5" + "@babel/helper-split-export-declaration": "npm:^7.22.6" + "@babel/helper-validator-identifier": "npm:^7.22.20" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 583fa580f8e50e6f45c4f46aa76a8e49c2528deb84e25f634d66461b9a0e2420e13979b0a607b67aef67eaf8db8668eb9edc038b4514b16e3879fe09e8fd294b + languageName: node + linkType: hard + +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.8.0": + version: 7.22.5 + resolution: "@babel/helper-plugin-utils@npm:7.22.5" + checksum: ab220db218089a2aadd0582f5833fd17fa300245999f5f8784b10f5a75267c4e808592284a29438a0da365e702f05acb369f99e1c915c02f9f9210ec60eab8ea + languageName: node + linkType: hard + +"@babel/helper-simple-access@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-simple-access@npm:7.22.5" + dependencies: + "@babel/types": "npm:^7.22.5" + checksum: 7d5430eecf880937c27d1aed14245003bd1c7383ae07d652b3932f450f60bfcf8f2c1270c593ab063add185108d26198c69d1aca0e6fb7c6fdada4bcf72ab5b7 + languageName: node + linkType: hard + "@babel/helper-split-export-declaration@npm:^7.22.6": version: 7.22.6 resolution: "@babel/helper-split-export-declaration@npm:7.22.6" @@ -2503,6 +2618,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-string-parser@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/helper-string-parser@npm:7.23.4" + checksum: c352082474a2ee1d2b812bd116a56b2e8b38065df9678a32a535f151ec6f58e54633cc778778374f10544b930703cca6ddf998803888a636afa27e2658068a9c + languageName: node + linkType: hard + "@babel/helper-validator-identifier@npm:^7.16.7": version: 7.16.7 resolution: "@babel/helper-validator-identifier@npm:7.16.7" @@ -2524,6 +2646,24 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-option@npm:^7.23.5": + version: 7.23.5 + resolution: "@babel/helper-validator-option@npm:7.23.5" + checksum: 537cde2330a8aede223552510e8a13e9c1c8798afee3757995a7d4acae564124fe2bf7e7c3d90d62d3657434a74340a274b3b3b1c6f17e9a2be1f48af29cb09e + languageName: node + linkType: hard + +"@babel/helpers@npm:^7.23.9": + version: 7.23.9 + resolution: "@babel/helpers@npm:7.23.9" + dependencies: + "@babel/template": "npm:^7.23.9" + "@babel/traverse": "npm:^7.23.9" + "@babel/types": "npm:^7.23.9" + checksum: dd56daac8bbd7ed174bb00fd185926fd449e591d9a00edaceb7ac6edbdd7a8db57e2cb365b4fafda382201752789ced2f7ae010f667eab0f198a4571cda4d2c5 + languageName: node + linkType: hard + "@babel/highlight@npm:^7.16.7": version: 7.17.12 resolution: "@babel/highlight@npm:7.17.12" @@ -2546,6 +2686,26 @@ __metadata: languageName: node linkType: hard +"@babel/highlight@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/highlight@npm:7.23.4" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.22.20" + chalk: "npm:^2.4.2" + js-tokens: "npm:^4.0.0" + checksum: 62fef9b5bcea7131df4626d009029b1ae85332042f4648a4ce6e740c3fd23112603c740c45575caec62f260c96b11054d3be5987f4981a5479793579c3aac71f + languageName: node + linkType: hard + +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9": + version: 7.23.9 + resolution: "@babel/parser@npm:7.23.9" + bin: + parser: ./bin/babel-parser.js + checksum: 727a7a807100f6a26df859e2f009c4ddbd0d3363287b45daa50bd082ccd0d431d0c4d0e610a91f806e04a1918726cd0f5a0592c9b902a815337feed12e1cafd9 + languageName: node + linkType: hard + "@babel/parser@npm:^7.22.15": version: 7.22.16 resolution: "@babel/parser@npm:7.22.16" @@ -2573,6 +2733,169 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-async-generators@npm:^7.8.4": + version: 7.8.4 + resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7ed1c1d9b9e5b64ef028ea5e755c0be2d4e5e4e3d6cf7df757b9a8c4cfa4193d268176d0f1f7fbecdda6fe722885c7fda681f480f3741d8a2d26854736f05367 + languageName: node + linkType: hard + +"@babel/plugin-syntax-bigint@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-bigint@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3a10849d83e47aec50f367a9e56a6b22d662ddce643334b087f9828f4c3dd73bdc5909aaeabe123fed78515767f9ca43498a0e621c438d1cd2802d7fae3c9648 + languageName: node + linkType: hard + +"@babel/plugin-syntax-class-properties@npm:^7.8.3": + version: 7.12.13 + resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.12.13" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 24f34b196d6342f28d4bad303612d7ff566ab0a013ce89e775d98d6f832969462e7235f3e7eaf17678a533d4be0ba45d3ae34ab4e5a9dcbda5d98d49e5efa2fc + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-meta@npm:^7.8.3": + version: 7.10.4 + resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.10.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 166ac1125d10b9c0c430e4156249a13858c0366d38844883d75d27389621ebe651115cb2ceb6dc011534d5055719fa1727b59f39e1ab3ca97820eef3dcab5b9b + languageName: node + linkType: hard + +"@babel/plugin-syntax-json-strings@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bf5aea1f3188c9a507e16efe030efb996853ca3cadd6512c51db7233cc58f3ac89ff8c6bdfb01d30843b161cfe7d321e1bf28da82f7ab8d7e6bc5464666f354a + languageName: node + linkType: hard + +"@babel/plugin-syntax-jsx@npm:^7.7.2": + version: 7.23.3 + resolution: "@babel/plugin-syntax-jsx@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 89037694314a74e7f0e7a9c8d3793af5bf6b23d80950c29b360db1c66859d67f60711ea437e70ad6b5b4b29affe17eababda841b6c01107c2b638e0493bafb4e + languageName: node + linkType: hard + +"@babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": + version: 7.10.4 + resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.10.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: aff33577037e34e515911255cdbb1fd39efee33658aa00b8a5fd3a4b903585112d037cce1cc9e4632f0487dc554486106b79ccd5ea63a2e00df4363f6d4ff886 + languageName: node + linkType: hard + +"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 87aca4918916020d1fedba54c0e232de408df2644a425d153be368313fdde40d96088feed6c4e5ab72aac89be5d07fef2ddf329a15109c5eb65df006bf2580d1 + languageName: node + linkType: hard + +"@babel/plugin-syntax-numeric-separator@npm:^7.8.3": + version: 7.10.4 + resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.10.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 01ec5547bd0497f76cc903ff4d6b02abc8c05f301c88d2622b6d834e33a5651aa7c7a3d80d8d57656a4588f7276eba357f6b7e006482f5b564b7a6488de493a1 + languageName: node + linkType: hard + +"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: fddcf581a57f77e80eb6b981b10658421bc321ba5f0a5b754118c6a92a5448f12a0c336f77b8abf734841e102e5126d69110a306eadb03ca3e1547cab31f5cbf + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 910d90e72bc90ea1ce698e89c1027fed8845212d5ab588e35ef91f13b93143845f94e2539d831dc8d8ededc14ec02f04f7bd6a8179edd43a326c784e7ed7f0b9 + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: eef94d53a1453361553c1f98b68d17782861a04a392840341bc91780838dd4e695209c783631cf0de14c635758beafb6a3a65399846ffa4386bff90639347f30 + languageName: node + linkType: hard + +"@babel/plugin-syntax-top-level-await@npm:^7.8.3": + version: 7.14.5 + resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.14.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bbd1a56b095be7820029b209677b194db9b1d26691fe999856462e66b25b281f031f3dfd91b1619e9dcf95bebe336211833b854d0fb8780d618e35667c2d0d7e + languageName: node + linkType: hard + +"@babel/plugin-syntax-typescript@npm:^7.7.2": + version: 7.23.3 + resolution: "@babel/plugin-syntax-typescript@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.22.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: abfad3a19290d258b028e285a1f34c9b8a0cbe46ef79eafed4ed7ffce11b5d0720b5e536c82f91cbd8442cde35a3dd8e861fa70366d87ff06fdc0d4756e30876 + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.12.5": + version: 7.23.9 + resolution: "@babel/runtime@npm:7.23.9" + dependencies: + regenerator-runtime: "npm:^0.14.0" + checksum: 9a520fe1bf72249f7dd60ff726434251858de15cccfca7aa831bd19d0d3fb17702e116ead82724659b8da3844977e5e13de2bae01eb8a798f2823a669f122be6 + languageName: node + linkType: hard + "@babel/runtime@npm:^7.17.2": version: 7.22.5 resolution: "@babel/runtime@npm:7.22.5" @@ -2620,6 +2943,17 @@ __metadata: languageName: node linkType: hard +"@babel/template@npm:^7.23.9, @babel/template@npm:^7.3.3": + version: 7.23.9 + resolution: "@babel/template@npm:7.23.9" + dependencies: + "@babel/code-frame": "npm:^7.23.5" + "@babel/parser": "npm:^7.23.9" + "@babel/types": "npm:^7.23.9" + checksum: 1b011ba9354dc2e646561d54b6862e0df51760e6179faadd79be05825b0b6da04911e4e192df943f1766748da3037fd8493615b38707f7cadb0cf0c96601c170 + languageName: node + linkType: hard + "@babel/traverse@npm:7.23.2": version: 7.23.2 resolution: "@babel/traverse@npm:7.23.2" @@ -2638,6 +2972,24 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.23.9": + version: 7.23.9 + resolution: "@babel/traverse@npm:7.23.9" + dependencies: + "@babel/code-frame": "npm:^7.23.5" + "@babel/generator": "npm:^7.23.6" + "@babel/helper-environment-visitor": "npm:^7.22.20" + "@babel/helper-function-name": "npm:^7.23.0" + "@babel/helper-hoist-variables": "npm:^7.22.5" + "@babel/helper-split-export-declaration": "npm:^7.22.6" + "@babel/parser": "npm:^7.23.9" + "@babel/types": "npm:^7.23.9" + debug: "npm:^4.3.1" + globals: "npm:^11.1.0" + checksum: e2bb845f7f229feb7c338f7e150f5f1abc5395dcd3a6a47f63a25242ec3ec6b165f04a6df7d4849468547faee34eb3cf52487eb0bd867a7d3c42fec2a648266f + languageName: node + linkType: hard + "@babel/types@npm:7.17.0": version: 7.17.0 resolution: "@babel/types@npm:7.17.0" @@ -2648,6 +3000,17 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.23.6, @babel/types@npm:^7.23.9, @babel/types@npm:^7.3.3": + version: 7.23.9 + resolution: "@babel/types@npm:7.23.9" + dependencies: + "@babel/helper-string-parser": "npm:^7.23.4" + "@babel/helper-validator-identifier": "npm:^7.22.20" + to-fast-properties: "npm:^2.0.0" + checksum: bed9634e5fd0f9dc63c84cfa83316c4cb617192db9fedfea464fca743affe93736d7bf2ebf418ee8358751a9d388e303af87a0c050cb5d87d5870c1b0154f6cb + languageName: node + linkType: hard + "@babel/types@npm:^7.17.0, @babel/types@npm:^7.8.3": version: 7.18.4 resolution: "@babel/types@npm:7.18.4" @@ -2691,6 +3054,24 @@ __metadata: languageName: node linkType: hard +"@bcoe/v8-coverage@npm:^0.2.3": + version: 0.2.3 + resolution: "@bcoe/v8-coverage@npm:0.2.3" + checksum: 1a1f0e356a3bb30b5f1ced6f79c413e6ebacf130421f15fac5fcd8be5ddf98aedb4404d7f5624e3285b700e041f9ef938321f3ca4d359d5b716f96afa120d88d + languageName: node + linkType: hard + +"@chainlink/ccip-read-server@npm:^0.2.1": + version: 0.2.1 + resolution: "@chainlink/ccip-read-server@npm:0.2.1" + dependencies: + cors: "npm:^2.8.5" + ethers: "npm:^5.3.1" + express: "npm:^4.17.1" + checksum: a0a45c7e7f7c612e96caa8bfd1b9cf6b45db569eb7afe5c69f7f09060fcfbd88517d7e32cfe25561b3b0f6b6063d7ee789f562132c6951bb6d09abb080a4cc96 + languageName: node + linkType: hard + "@chainsafe/as-sha256@npm:^0.3.1": version: 0.3.1 resolution: "@chainsafe/as-sha256@npm:0.3.1" @@ -2973,6 +3354,23 @@ __metadata: languageName: node linkType: hard +"@coinbase/wallet-sdk@npm:^3.6.6": + version: 3.9.1 + resolution: "@coinbase/wallet-sdk@npm:3.9.1" + dependencies: + bn.js: "npm:^5.2.1" + buffer: "npm:^6.0.3" + clsx: "npm:^1.2.1" + eth-block-tracker: "npm:^7.1.0" + eth-json-rpc-filters: "npm:^6.0.0" + eventemitter3: "npm:^5.0.1" + keccak: "npm:^3.0.3" + preact: "npm:^10.16.0" + sha.js: "npm:^2.4.11" + checksum: afa2b01ba69edb96c5d8d0b34e68eb9ab1ef99c20f0a6db81c0b42f6f234c4dec538b978e6dc69d9dd37539e6d7290068e3aae960029afee78995bd515bc8077 + languageName: node + linkType: hard + "@confio/ics23@npm:^0.6.8": version: 0.6.8 resolution: "@confio/ics23@npm:0.6.8" @@ -3149,6 +3547,13 @@ __metadata: languageName: node linkType: hard +"@emotion/hash@npm:^0.8.0": + version: 0.8.0 + resolution: "@emotion/hash@npm:0.8.0" + checksum: 4b35d88a97e67275c1d990c96d3b0450451d089d1508619488fc0acb882cb1ac91e93246d471346ebd1b5402215941ef4162efe5b51534859b39d8b3a0e3ffaa + languageName: node + linkType: hard + "@eslint-community/eslint-utils@npm:^4.2.0": version: 4.4.0 resolution: "@eslint-community/eslint-utils@npm:4.4.0" @@ -3397,6 +3802,16 @@ __metadata: languageName: node linkType: hard +"@ethereumjs/common@npm:^3.2.0": + version: 3.2.0 + resolution: "@ethereumjs/common@npm:3.2.0" + dependencies: + "@ethereumjs/util": "npm:^8.1.0" + crc-32: "npm:^1.2.0" + checksum: b3f612406b6bcefaf9117ceb42eff58d311e2b50205e3d55b4c793d803de517efbc84075e058dc0e2ec27a2bff11dfc279dda1fa2b249ed6ab3973be045898f4 + languageName: node + linkType: hard + "@ethereumjs/ethash@npm:^1.1.0": version: 1.1.0 resolution: "@ethereumjs/ethash@npm:1.1.0" @@ -3410,6 +3825,15 @@ __metadata: languageName: node linkType: hard +"@ethereumjs/rlp@npm:^4.0.1": + version: 4.0.1 + resolution: "@ethereumjs/rlp@npm:4.0.1" + bin: + rlp: bin/rlp + checksum: bfdffd634ce72f3b17e3d085d071f2fe7ce9680aebdf10713d74b30afd80ef882d17f19ff7175fcb049431a56e800bd3558d3b028bd0d82341927edb303ab450 + languageName: node + linkType: hard + "@ethereumjs/tx@npm:3.3.2": version: 3.3.2 resolution: "@ethereumjs/tx@npm:3.3.2" @@ -3440,6 +3864,29 @@ __metadata: languageName: node linkType: hard +"@ethereumjs/tx@npm:^4.1.2, @ethereumjs/tx@npm:^4.2.0": + version: 4.2.0 + resolution: "@ethereumjs/tx@npm:4.2.0" + dependencies: + "@ethereumjs/common": "npm:^3.2.0" + "@ethereumjs/rlp": "npm:^4.0.1" + "@ethereumjs/util": "npm:^8.1.0" + ethereum-cryptography: "npm:^2.0.0" + checksum: cbd2ffc3ef76ca5416d58f2f694858d9fcac946e6a107fef44cf3f308a7c9fcc996a6847868609354d72d5b356faee68408e9d5601c4c4f7dad8e18cb2c24a95 + languageName: node + linkType: hard + +"@ethereumjs/util@npm:^8.1.0": + version: 8.1.0 + resolution: "@ethereumjs/util@npm:8.1.0" + dependencies: + "@ethereumjs/rlp": "npm:^4.0.1" + ethereum-cryptography: "npm:^2.0.0" + micro-ftch: "npm:^0.3.1" + checksum: cc35338932e49b15e54ca6e548b32a1f48eed7d7e1d34ee743e4d3600dd616668bd50f70139e86c5c35f55aac35fba3b6cc4e6f679cf650aeba66bf93016200c + languageName: node + linkType: hard + "@ethereumjs/vm@npm:5.6.0": version: 5.6.0 resolution: "@ethereumjs/vm@npm:5.6.0" @@ -4206,6 +4653,19 @@ __metadata: languageName: node linkType: hard +"@headlessui/react@npm:^1.7.17": + version: 1.7.18 + resolution: "@headlessui/react@npm:1.7.18" + dependencies: + "@tanstack/react-virtual": "npm:^3.0.0-beta.60" + client-only: "npm:^0.0.1" + peerDependencies: + react: ^16 || ^17 || ^18 + react-dom: ^16 || ^17 || ^18 + checksum: 9615f7b709842f2e56b3ef1a8f1a77faed7982e86af52f057a5c2a9950d073672073a6c09829f0c26ed7287e298f5e2345f3898dbc2cc13318af10598ceb4bbc + languageName: node + linkType: hard + "@humanwhocodes/config-array@npm:^0.11.10": version: 0.11.10 resolution: "@humanwhocodes/config-array@npm:0.11.10" @@ -4231,6 +4691,25 @@ __metadata: languageName: node linkType: hard +"@hyperlane-xyz/ccip-server@workspace:typescript/ccip-server": + version: 0.0.0-use.local + resolution: "@hyperlane-xyz/ccip-server@workspace:typescript/ccip-server" + dependencies: + "@chainlink/ccip-read-server": "npm:^0.2.1" + "@jest/globals": "npm:^29.7.0" + "@types/node": "npm:^16.9.1" + dotenv-flow: "npm:^4.1.0" + ethers: "npm:5.7.2" + hyperlane-explorer: "https://github.com/hyperlane-xyz/hyperlane-explorer.git" + jest: "npm:^29.7.0" + nodemon: "npm:^3.0.3" + prettier: "npm:^2.8.8" + ts-jest: "npm:^29.1.2" + ts-node: "npm:^10.8.0" + typescript: "npm:5.1.6" + languageName: unknown + linkType: soft + "@hyperlane-xyz/cli@workspace:typescript/cli": version: 0.0.0-use.local resolution: "@hyperlane-xyz/cli@workspace:typescript/cli" @@ -4457,6 +4936,17 @@ __metadata: languageName: unknown linkType: soft +"@hyperlane-xyz/widgets@npm:3.7.0": + version: 3.7.0 + resolution: "@hyperlane-xyz/widgets@npm:3.7.0" + peerDependencies: + "@hyperlane-xyz/sdk": ^3.1 + react: ^18 + react-dom: ^18 + checksum: 5ddf7a7a5f599f1b340bbe4e981e0cb10dd8930cc616c566abb58210658acd2826386afd18e8789f8bb62fc19d14b69db87433adcc97c38ebda2c322cc7865a2 + languageName: node + linkType: hard + "@inquirer/checkbox@npm:^1.3.5": version: 1.3.5 resolution: "@inquirer/checkbox@npm:1.3.5" @@ -4597,21 +5087,278 @@ __metadata: languageName: node linkType: hard -"@jridgewell/gen-mapping@npm:^0.3.2": - version: 0.3.3 - resolution: "@jridgewell/gen-mapping@npm:0.3.3" +"@ioredis/commands@npm:^1.1.1": + version: 1.2.0 + resolution: "@ioredis/commands@npm:1.2.0" + checksum: a8253c9539b7e5463d4a98e6aa5b1b863fb4a4978191ba9dc42ec2c0fb5179d8d1fe4a29096d5954f91ba9600d1bdc6c1d18b044eab36f645f267fd37d7c0906 + languageName: node + linkType: hard + +"@istanbuljs/load-nyc-config@npm:^1.0.0": + version: 1.1.0 + resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" dependencies: - "@jridgewell/set-array": "npm:^1.0.1" - "@jridgewell/sourcemap-codec": "npm:^1.4.10" - "@jridgewell/trace-mapping": "npm:^0.3.9" - checksum: 072ace159c39ab85944bdabe017c3de15c5e046a4a4a772045b00ff05e2ebdcfa3840b88ae27e897d473eb4d4845b37be3c78e28910c779f5aeeeae2fb7f0cc2 + camelcase: "npm:^5.3.1" + find-up: "npm:^4.1.0" + get-package-type: "npm:^0.1.0" + js-yaml: "npm:^3.13.1" + resolve-from: "npm:^5.0.0" + checksum: b000a5acd8d4fe6e34e25c399c8bdbb5d3a202b4e10416e17bfc25e12bab90bb56d33db6089ae30569b52686f4b35ff28ef26e88e21e69821d2b85884bd055b8 languageName: node linkType: hard -"@jridgewell/resolve-uri@npm:3.1.0": - version: 3.1.0 - resolution: "@jridgewell/resolve-uri@npm:3.1.0" - checksum: 320ceb37af56953757b28e5b90c34556157676d41e3d0a3ff88769274d62373582bb0f0276a4f2d29c3f4fdd55b82b8be5731f52d391ad2ecae9b321ee1c742d +"@istanbuljs/schema@npm:^0.1.2": + version: 0.1.3 + resolution: "@istanbuljs/schema@npm:0.1.3" + checksum: a9b1e49acdf5efc2f5b2359f2df7f90c5c725f2656f16099e8b2cd3a000619ecca9fc48cf693ba789cf0fd989f6e0df6a22bc05574be4223ecdbb7997d04384b + languageName: node + linkType: hard + +"@jest/console@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/console@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + jest-message-util: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + slash: "npm:^3.0.0" + checksum: 4a80c750e8a31f344233cb9951dee9b77bf6b89377cb131f8b3cde07ff218f504370133a5963f6a786af4d2ce7f85642db206ff7a15f99fe58df4c38ac04899e + languageName: node + linkType: hard + +"@jest/core@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/core@npm:29.7.0" + dependencies: + "@jest/console": "npm:^29.7.0" + "@jest/reporters": "npm:^29.7.0" + "@jest/test-result": "npm:^29.7.0" + "@jest/transform": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + ansi-escapes: "npm:^4.2.1" + chalk: "npm:^4.0.0" + ci-info: "npm:^3.2.0" + exit: "npm:^0.1.2" + graceful-fs: "npm:^4.2.9" + jest-changed-files: "npm:^29.7.0" + jest-config: "npm:^29.7.0" + jest-haste-map: "npm:^29.7.0" + jest-message-util: "npm:^29.7.0" + jest-regex-util: "npm:^29.6.3" + jest-resolve: "npm:^29.7.0" + jest-resolve-dependencies: "npm:^29.7.0" + jest-runner: "npm:^29.7.0" + jest-runtime: "npm:^29.7.0" + jest-snapshot: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + jest-validate: "npm:^29.7.0" + jest-watcher: "npm:^29.7.0" + micromatch: "npm:^4.0.4" + pretty-format: "npm:^29.7.0" + slash: "npm:^3.0.0" + strip-ansi: "npm:^6.0.0" + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: ab6ac2e562d083faac7d8152ec1cc4eccc80f62e9579b69ed40aedf7211a6b2d57024a6cd53c4e35fd051c39a236e86257d1d99ebdb122291969a0a04563b51e + languageName: node + linkType: hard + +"@jest/environment@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/environment@npm:29.7.0" + dependencies: + "@jest/fake-timers": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + jest-mock: "npm:^29.7.0" + checksum: 90b5844a9a9d8097f2cf107b1b5e57007c552f64315da8c1f51217eeb0a9664889d3f145cdf8acf23a84f4d8309a6675e27d5b059659a004db0ea9546d1c81a8 + languageName: node + linkType: hard + +"@jest/expect-utils@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/expect-utils@npm:29.7.0" + dependencies: + jest-get-type: "npm:^29.6.3" + checksum: ef8d379778ef574a17bde2801a6f4469f8022a46a5f9e385191dc73bb1fc318996beaed4513fbd7055c2847227a1bed2469977821866534593a6e52a281499ee + languageName: node + linkType: hard + +"@jest/expect@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/expect@npm:29.7.0" + dependencies: + expect: "npm:^29.7.0" + jest-snapshot: "npm:^29.7.0" + checksum: fea6c3317a8da5c840429d90bfe49d928e89c9e89fceee2149b93a11b7e9c73d2f6e4d7cdf647163da938fc4e2169e4490be6bae64952902bc7a701033fd4880 + languageName: node + linkType: hard + +"@jest/fake-timers@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/fake-timers@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + "@sinonjs/fake-timers": "npm:^10.0.2" + "@types/node": "npm:*" + jest-message-util: "npm:^29.7.0" + jest-mock: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + checksum: 9b394e04ffc46f91725ecfdff34c4e043eb7a16e1d78964094c9db3fde0b1c8803e45943a980e8c740d0a3d45661906de1416ca5891a538b0660481a3a828c27 + languageName: node + linkType: hard + +"@jest/globals@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/globals@npm:29.7.0" + dependencies: + "@jest/environment": "npm:^29.7.0" + "@jest/expect": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + jest-mock: "npm:^29.7.0" + checksum: 97dbb9459135693ad3a422e65ca1c250f03d82b2a77f6207e7fa0edd2c9d2015fbe4346f3dc9ebff1678b9d8da74754d4d440b7837497f8927059c0642a22123 + languageName: node + linkType: hard + +"@jest/reporters@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/reporters@npm:29.7.0" + dependencies: + "@bcoe/v8-coverage": "npm:^0.2.3" + "@jest/console": "npm:^29.7.0" + "@jest/test-result": "npm:^29.7.0" + "@jest/transform": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@jridgewell/trace-mapping": "npm:^0.3.18" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + collect-v8-coverage: "npm:^1.0.0" + exit: "npm:^0.1.2" + glob: "npm:^7.1.3" + graceful-fs: "npm:^4.2.9" + istanbul-lib-coverage: "npm:^3.0.0" + istanbul-lib-instrument: "npm:^6.0.0" + istanbul-lib-report: "npm:^3.0.0" + istanbul-lib-source-maps: "npm:^4.0.0" + istanbul-reports: "npm:^3.1.3" + jest-message-util: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + jest-worker: "npm:^29.7.0" + slash: "npm:^3.0.0" + string-length: "npm:^4.0.1" + strip-ansi: "npm:^6.0.0" + v8-to-istanbul: "npm:^9.0.1" + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: a17d1644b26dea14445cedd45567f4ba7834f980be2ef74447204e14238f121b50d8b858fde648083d2cd8f305f81ba434ba49e37a5f4237a6f2a61180cc73dc + languageName: node + linkType: hard + +"@jest/schemas@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/schemas@npm:29.6.3" + dependencies: + "@sinclair/typebox": "npm:^0.27.8" + checksum: 910040425f0fc93cd13e68c750b7885590b8839066dfa0cd78e7def07bbb708ad869381f725945d66f2284de5663bbecf63e8fdd856e2ae6e261ba30b1687e93 + languageName: node + linkType: hard + +"@jest/source-map@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/source-map@npm:29.6.3" + dependencies: + "@jridgewell/trace-mapping": "npm:^0.3.18" + callsites: "npm:^3.0.0" + graceful-fs: "npm:^4.2.9" + checksum: bcc5a8697d471396c0003b0bfa09722c3cd879ad697eb9c431e6164e2ea7008238a01a07193dfe3cbb48b1d258eb7251f6efcea36f64e1ebc464ea3c03ae2deb + languageName: node + linkType: hard + +"@jest/test-result@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/test-result@npm:29.7.0" + dependencies: + "@jest/console": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/istanbul-lib-coverage": "npm:^2.0.0" + collect-v8-coverage: "npm:^1.0.0" + checksum: c073ab7dfe3c562bff2b8fee6cc724ccc20aa96bcd8ab48ccb2aa309b4c0c1923a9e703cea386bd6ae9b71133e92810475bb9c7c22328fc63f797ad3324ed189 + languageName: node + linkType: hard + +"@jest/test-sequencer@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/test-sequencer@npm:29.7.0" + dependencies: + "@jest/test-result": "npm:^29.7.0" + graceful-fs: "npm:^4.2.9" + jest-haste-map: "npm:^29.7.0" + slash: "npm:^3.0.0" + checksum: 4420c26a0baa7035c5419b0892ff8ffe9a41b1583ec54a10db3037cd46a7e29dd3d7202f8aa9d376e9e53be5f8b1bc0d16e1de6880a6d319b033b01dc4c8f639 + languageName: node + linkType: hard + +"@jest/transform@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/transform@npm:29.7.0" + dependencies: + "@babel/core": "npm:^7.11.6" + "@jest/types": "npm:^29.6.3" + "@jridgewell/trace-mapping": "npm:^0.3.18" + babel-plugin-istanbul: "npm:^6.1.1" + chalk: "npm:^4.0.0" + convert-source-map: "npm:^2.0.0" + fast-json-stable-stringify: "npm:^2.1.0" + graceful-fs: "npm:^4.2.9" + jest-haste-map: "npm:^29.7.0" + jest-regex-util: "npm:^29.6.3" + jest-util: "npm:^29.7.0" + micromatch: "npm:^4.0.4" + pirates: "npm:^4.0.4" + slash: "npm:^3.0.0" + write-file-atomic: "npm:^4.0.2" + checksum: 30f42293545ab037d5799c81d3e12515790bb58513d37f788ce32d53326d0d72ebf5b40f989e6896739aa50a5f77be44686e510966370d58511d5ad2637c68c1 + languageName: node + linkType: hard + +"@jest/types@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/types@npm:29.6.3" + dependencies: + "@jest/schemas": "npm:^29.6.3" + "@types/istanbul-lib-coverage": "npm:^2.0.0" + "@types/istanbul-reports": "npm:^3.0.0" + "@types/node": "npm:*" + "@types/yargs": "npm:^17.0.8" + chalk: "npm:^4.0.0" + checksum: f74bf512fd09bbe2433a2ad460b04668b7075235eea9a0c77d6a42222c10a79b9747dc2b2a623f140ed40d6865a2ed8f538f3cbb75169120ea863f29a7ed76cd + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.2": + version: 0.3.3 + resolution: "@jridgewell/gen-mapping@npm:0.3.3" + dependencies: + "@jridgewell/set-array": "npm:^1.0.1" + "@jridgewell/sourcemap-codec": "npm:^1.4.10" + "@jridgewell/trace-mapping": "npm:^0.3.9" + checksum: 072ace159c39ab85944bdabe017c3de15c5e046a4a4a772045b00ff05e2ebdcfa3840b88ae27e897d473eb4d4845b37be3c78e28910c779f5aeeeae2fb7f0cc2 + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:3.1.0": + version: 3.1.0 + resolution: "@jridgewell/resolve-uri@npm:3.1.0" + checksum: 320ceb37af56953757b28e5b90c34556157676d41e3d0a3ff88769274d62373582bb0f0276a4f2d29c3f4fdd55b82b8be5731f52d391ad2ecae9b321ee1c742d languageName: node linkType: hard @@ -4622,6 +5369,13 @@ __metadata: languageName: node linkType: hard +"@jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.2 + resolution: "@jridgewell/resolve-uri@npm:3.1.2" + checksum: 97106439d750a409c22c8bff822d648f6a71f3aa9bc8e5129efdc36343cd3096ddc4eeb1c62d2fe48e9bdd4db37b05d4646a17114ecebd3bbcacfa2de51c3c1d + languageName: node + linkType: hard + "@jridgewell/set-array@npm:^1.0.1": version: 1.1.2 resolution: "@jridgewell/set-array@npm:1.1.2" @@ -4643,6 +5397,13 @@ __metadata: languageName: node linkType: hard +"@jridgewell/sourcemap-codec@npm:^1.4.14": + version: 1.4.15 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" + checksum: 89960ac087781b961ad918978975bcdf2051cd1741880469783c42de64239703eab9db5230d776d8e6a09d73bb5e4cb964e07d93ee6e2e7aea5a7d726e865c09 + languageName: node + linkType: hard + "@jridgewell/trace-mapping@npm:0.3.9": version: 0.3.9 resolution: "@jridgewell/trace-mapping@npm:0.3.9" @@ -4653,6 +5414,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.18": + version: 0.3.22 + resolution: "@jridgewell/trace-mapping@npm:0.3.22" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.1.0" + "@jridgewell/sourcemap-codec": "npm:^1.4.14" + checksum: 48d3e3db00dbecb211613649a1849876ba5544a3f41cf5e6b99ea1130272d6cf18591b5b67389bce20f1c871b4ede5900c3b6446a7aab6d0a3b2fe806a834db7 + languageName: node + linkType: hard + "@jridgewell/trace-mapping@npm:^0.3.17": version: 0.3.18 resolution: "@jridgewell/trace-mapping@npm:0.3.18" @@ -4673,6 +5444,13 @@ __metadata: languageName: node linkType: hard +"@ledgerhq/connect-kit-loader@npm:^1.0.1": + version: 1.1.8 + resolution: "@ledgerhq/connect-kit-loader@npm:1.1.8" + checksum: 8352e0932e9c4a7179eb0d162b0e7c92437de9216a2efa04bd274450edf205fdba3fe971ff41593c1ac851cfb3a7a474900b7e467da87f982c85f0c5edba45b5 + languageName: node + linkType: hard + "@ledgerhq/cryptoassets@npm:^5.27.2": version: 5.53.0 resolution: "@ledgerhq/cryptoassets@npm:5.53.0" @@ -4784,6 +5562,22 @@ __metadata: languageName: node linkType: hard +"@lit-labs/ssr-dom-shim@npm:^1.0.0, @lit-labs/ssr-dom-shim@npm:^1.1.0": + version: 1.2.0 + resolution: "@lit-labs/ssr-dom-shim@npm:1.2.0" + checksum: 33679defe08538ac6fb612854e7d32b4ea1e787cceba2c3373d26fd56baa9833881887da7bade3930a176ba518dc00bb42ce95d82ddb6af6b05b8fbe1fc3169f + languageName: node + linkType: hard + +"@lit/reactive-element@npm:^1.3.0, @lit/reactive-element@npm:^1.6.0": + version: 1.6.3 + resolution: "@lit/reactive-element@npm:1.6.3" + dependencies: + "@lit-labs/ssr-dom-shim": "npm:^1.0.0" + checksum: 664c899bb0b144590dc4faf83b358b1504810eac107778c3aeb384affc65a7ef4eda754944bcc34a57237db03dff145332406345ac24da19ca37cf4b3cb343d3 + languageName: node + linkType: hard + "@manypkg/find-root@npm:^1.1.0": version: 1.1.0 resolution: "@manypkg/find-root@npm:1.1.0" @@ -4810,6 +5604,17 @@ __metadata: languageName: node linkType: hard +"@metamask/eth-json-rpc-provider@npm:^1.0.0": + version: 1.0.1 + resolution: "@metamask/eth-json-rpc-provider@npm:1.0.1" + dependencies: + "@metamask/json-rpc-engine": "npm:^7.0.0" + "@metamask/safe-event-emitter": "npm:^3.0.0" + "@metamask/utils": "npm:^5.0.1" + checksum: 4ed1a96afc32eb46f585ff54e16cb2aee2e7027dcf6a142d875b9c6248f15c9a00dd1df43035f2e64efbf01a96954040699d9d97e3b483c958f5b1d6c0fa6f50 + languageName: node + linkType: hard + "@metamask/eth-sig-util@npm:^4.0.0": version: 4.0.1 resolution: "@metamask/eth-sig-util@npm:4.0.1" @@ -4823,6 +5628,234 @@ __metadata: languageName: node linkType: hard +"@metamask/jazzicon@https://github.com/jmrossy/jazzicon#7a8df28974b4e81129bfbe3cab76308b889032a6": + version: 2.1.0 + resolution: "@metamask/jazzicon@https://github.com/jmrossy/jazzicon.git#commit=7a8df28974b4e81129bfbe3cab76308b889032a6" + dependencies: + mersenne-twister: "npm:^1.1.0" + checksum: 5e56251b375eade58294334783fb37a15e8fd48d792f6dc93f7247b8897541324f9cf2d3f1d9b1cffdac1d932a8bc48a89dee7cdbd6e4a312ca2ff85df90131b + languageName: node + linkType: hard + +"@metamask/json-rpc-engine@npm:^7.0.0": + version: 7.3.2 + resolution: "@metamask/json-rpc-engine@npm:7.3.2" + dependencies: + "@metamask/rpc-errors": "npm:^6.1.0" + "@metamask/safe-event-emitter": "npm:^3.0.0" + "@metamask/utils": "npm:^8.3.0" + checksum: d90e5fdf88461aa90af41ba0304729200afa8226ab8b73db348704a1f545e416c49281a1dfd58591dde769e1ab263080b26d5a0ab1be8362398639dc2d6354de + languageName: node + linkType: hard + +"@metamask/rpc-errors@npm:^6.1.0": + version: 6.2.0 + resolution: "@metamask/rpc-errors@npm:6.2.0" + dependencies: + "@metamask/utils": "npm:^8.3.0" + fast-safe-stringify: "npm:^2.0.6" + checksum: 25c05005f461a7db99d7ad6d2942cbdeb49337f47ce86823b8c3b8785d865584f19ca17abcb70c811fbc2bd394227f82fb7f0c5085b3b68e5d65bbe2f1c1dd9b + languageName: node + linkType: hard + +"@metamask/safe-event-emitter@npm:^2.0.0": + version: 2.0.0 + resolution: "@metamask/safe-event-emitter@npm:2.0.0" + checksum: 3e4f00c64aa1ddf9b9ae5c2337fb8cee359b6c481ded0ec21ef70610960c51cdcc4a9b569de334dcd7cb1fe445cafd298360907c1e211e244c5990b55246f350 + languageName: node + linkType: hard + +"@metamask/safe-event-emitter@npm:^3.0.0": + version: 3.0.0 + resolution: "@metamask/safe-event-emitter@npm:3.0.0" + checksum: 8dc58a76f9f75bf2405931465fc311c68043d851e6b8ebe9f82ae339073a08a83430dba9338f8e3adc4bfc8067607125074bcafa32baee3a5157f42343dc89e5 + languageName: node + linkType: hard + +"@metamask/utils@npm:^5.0.1": + version: 5.0.2 + resolution: "@metamask/utils@npm:5.0.2" + dependencies: + "@ethereumjs/tx": "npm:^4.1.2" + "@types/debug": "npm:^4.1.7" + debug: "npm:^4.3.4" + semver: "npm:^7.3.8" + superstruct: "npm:^1.0.3" + checksum: c0d3ee4c3144b557936ab01c1a64950c0f99782bd0cf5596c0fabe8fd224dba48ed3483c0ea954791fe2ee81064a445adb489df50c776bbbeb67b5b96e930115 + languageName: node + linkType: hard + +"@metamask/utils@npm:^8.3.0": + version: 8.3.0 + resolution: "@metamask/utils@npm:8.3.0" + dependencies: + "@ethereumjs/tx": "npm:^4.2.0" + "@noble/hashes": "npm:^1.3.1" + "@scure/base": "npm:^1.1.3" + "@types/debug": "npm:^4.1.7" + debug: "npm:^4.3.4" + pony-cause: "npm:^2.1.10" + semver: "npm:^7.5.4" + superstruct: "npm:^1.0.3" + checksum: 728a4f6b3ab14223a487e8974a21b1917e470ff2c131afc0b8a6a6823839d6cf7454243ddb0ff695ceebede62feaf628f4d32b4b529bb5c044c6c95576a142ef + languageName: node + linkType: hard + +"@motionone/animation@npm:^10.15.1, @motionone/animation@npm:^10.17.0": + version: 10.17.0 + resolution: "@motionone/animation@npm:10.17.0" + dependencies: + "@motionone/easing": "npm:^10.17.0" + "@motionone/types": "npm:^10.17.0" + "@motionone/utils": "npm:^10.17.0" + tslib: "npm:^2.3.1" + checksum: 85ac8a36f33b7510cec239b12d90eec38a8f191158e2686c95c7ba237b17cac0e14b1533748fb27e10c18b8f4f4ea9798bc0a9286cf854852ab957d290a09ba9 + languageName: node + linkType: hard + +"@motionone/dom@npm:^10.16.2, @motionone/dom@npm:^10.16.4": + version: 10.17.0 + resolution: "@motionone/dom@npm:10.17.0" + dependencies: + "@motionone/animation": "npm:^10.17.0" + "@motionone/generators": "npm:^10.17.0" + "@motionone/types": "npm:^10.17.0" + "@motionone/utils": "npm:^10.17.0" + hey-listen: "npm:^1.0.8" + tslib: "npm:^2.3.1" + checksum: 7a9c5f01eacc084b95ac59c5f96de9c153b713d60cc99bc66b4c7619326f6b04d9acc14445ce0f3d9c7f65c8834a9543c59d3c90f7399de916aaaacbf38f4fb9 + languageName: node + linkType: hard + +"@motionone/easing@npm:^10.17.0": + version: 10.17.0 + resolution: "@motionone/easing@npm:10.17.0" + dependencies: + "@motionone/utils": "npm:^10.17.0" + tslib: "npm:^2.3.1" + checksum: 69f0fc4999a209801b128586cbb328937d9db1c091bed26762d30d035ecc5c01b0cbdce610c6550f609c0be78c1ad03c808e6c61f15fc52621f614449ce10a86 + languageName: node + linkType: hard + +"@motionone/generators@npm:^10.17.0": + version: 10.17.0 + resolution: "@motionone/generators@npm:10.17.0" + dependencies: + "@motionone/types": "npm:^10.17.0" + "@motionone/utils": "npm:^10.17.0" + tslib: "npm:^2.3.1" + checksum: 06bd6c16cdb3c9fbb3a3fca05d6941d5e756b6ce151e2e9cc4f49c3b021fb54a5b970b01e3ddae9d77175e58b66cacb00927ee829f545fafd0bbdbdc838933aa + languageName: node + linkType: hard + +"@motionone/svelte@npm:^10.16.2": + version: 10.16.4 + resolution: "@motionone/svelte@npm:10.16.4" + dependencies: + "@motionone/dom": "npm:^10.16.4" + tslib: "npm:^2.3.1" + checksum: 5ad532d4d9bb16a9f311487e6409fa7e1a66ec12f82e3c36434ab6dfe3cedc61b35dae6314cee4fba8dca463b8a259cafb83801a932b7ad5f4a6e45baaa581f4 + languageName: node + linkType: hard + +"@motionone/types@npm:^10.15.1, @motionone/types@npm:^10.17.0": + version: 10.17.0 + resolution: "@motionone/types@npm:10.17.0" + checksum: 9449991493f6e7be59261e4fc1a3d4a5b842da8962084d742905f964b4d3aad5fd6c37bd95d5ab51f65fda7b0c389a332c5f7c7eccd6be54eb765ee2fc6e7070 + languageName: node + linkType: hard + +"@motionone/utils@npm:^10.15.1, @motionone/utils@npm:^10.17.0": + version: 10.17.0 + resolution: "@motionone/utils@npm:10.17.0" + dependencies: + "@motionone/types": "npm:^10.17.0" + hey-listen: "npm:^1.0.8" + tslib: "npm:^2.3.1" + checksum: 030359d37a6edebf29e0477050e638340f3756fc993a75b877e923b31ed4f3092a61f9d2323494f4b561ada1afc5ea774fb34022e7afbe2ec449c215585ab392 + languageName: node + linkType: hard + +"@motionone/vue@npm:^10.16.2": + version: 10.16.4 + resolution: "@motionone/vue@npm:10.16.4" + dependencies: + "@motionone/dom": "npm:^10.16.4" + tslib: "npm:^2.3.1" + checksum: 2400d31bbf5c3e02bc68f4b88d96d9c0672ba646bca0b6566e555cd7e8f14849a645f558f574e658fd90574a0b548b61712ae5edcee055c60288fd9382d711ea + languageName: node + linkType: hard + +"@next/env@npm:13.5.6": + version: 13.5.6 + resolution: "@next/env@npm:13.5.6" + checksum: c81bd6052db366407da701e4e431becbc80ef36a88bec7883b0266cdfeb45a7da959d37c38e1a816006cd2da287e5ff5b928bdb71025e3d4aa59e07dea3edd59 + languageName: node + linkType: hard + +"@next/swc-darwin-arm64@npm:13.5.6": + version: 13.5.6 + resolution: "@next/swc-darwin-arm64@npm:13.5.6" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@next/swc-darwin-x64@npm:13.5.6": + version: 13.5.6 + resolution: "@next/swc-darwin-x64@npm:13.5.6" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@next/swc-linux-arm64-gnu@npm:13.5.6": + version: 13.5.6 + resolution: "@next/swc-linux-arm64-gnu@npm:13.5.6" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@next/swc-linux-arm64-musl@npm:13.5.6": + version: 13.5.6 + resolution: "@next/swc-linux-arm64-musl@npm:13.5.6" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@next/swc-linux-x64-gnu@npm:13.5.6": + version: 13.5.6 + resolution: "@next/swc-linux-x64-gnu@npm:13.5.6" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@next/swc-linux-x64-musl@npm:13.5.6": + version: 13.5.6 + resolution: "@next/swc-linux-x64-musl@npm:13.5.6" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@next/swc-win32-arm64-msvc@npm:13.5.6": + version: 13.5.6 + resolution: "@next/swc-win32-arm64-msvc@npm:13.5.6" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@next/swc-win32-ia32-msvc@npm:13.5.6": + version: 13.5.6 + resolution: "@next/swc-win32-ia32-msvc@npm:13.5.6" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@next/swc-win32-x64-msvc@npm:13.5.6": + version: 13.5.6 + resolution: "@next/swc-win32-x64-msvc@npm:13.5.6" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@noble/curves@npm:1.2.0, @noble/curves@npm:~1.2.0": version: 1.2.0 resolution: "@noble/curves@npm:1.2.0" @@ -4832,6 +5865,15 @@ __metadata: languageName: node linkType: hard +"@noble/curves@npm:1.3.0, @noble/curves@npm:~1.3.0": + version: 1.3.0 + resolution: "@noble/curves@npm:1.3.0" + dependencies: + "@noble/hashes": "npm:1.3.3" + checksum: f3cbdd1af00179e30146eac5539e6df290228fb857a7a8ba36d1a772cbe59288a2ca83d06f175d3446ef00db3a80d7fd8b8347f7de9c2d4d5bf3865d8bb78252 + languageName: node + linkType: hard + "@noble/curves@npm:^1.0.0": version: 1.1.0 resolution: "@noble/curves@npm:1.1.0" @@ -4862,7 +5904,7 @@ __metadata: languageName: node linkType: hard -"@noble/hashes@npm:~1.3.2": +"@noble/hashes@npm:1.3.3, @noble/hashes@npm:~1.3.2": version: 1.3.3 resolution: "@noble/hashes@npm:1.3.3" checksum: 1025ddde4d24630e95c0818e63d2d54ee131b980fe113312d17ed7468bc18f54486ac86c907685759f8a7e13c2f9b9e83ec7b67d1cc20836f36b5e4a65bb102d @@ -5247,10 +6289,155 @@ __metadata: languageName: node linkType: hard -"@pnpm/config.env-replace@npm:^1.1.0": - version: 1.1.0 - resolution: "@pnpm/config.env-replace@npm:1.1.0" - checksum: fabe35cede1b72ad12877b8bed32f7c2fcd89e94408792c4d69009b886671db7988a2132bc18b7157489d2d0fd4266a06c9583be3d2e10c847bf06687420cb2a +"@parcel/watcher-android-arm64@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-android-arm64@npm:2.4.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@parcel/watcher-darwin-arm64@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-darwin-arm64@npm:2.4.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@parcel/watcher-darwin-x64@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-darwin-x64@npm:2.4.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@parcel/watcher-freebsd-x64@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-freebsd-x64@npm:2.4.0" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@parcel/watcher-linux-arm-glibc@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-linux-arm-glibc@npm:2.4.0" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@parcel/watcher-linux-arm64-glibc@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-linux-arm64-glibc@npm:2.4.0" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@parcel/watcher-linux-arm64-musl@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-linux-arm64-musl@npm:2.4.0" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@parcel/watcher-linux-x64-glibc@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-linux-x64-glibc@npm:2.4.0" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@parcel/watcher-linux-x64-musl@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-linux-x64-musl@npm:2.4.0" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@parcel/watcher-wasm@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-wasm@npm:2.4.0" + dependencies: + is-glob: "npm:^4.0.3" + micromatch: "npm:^4.0.5" + napi-wasm: "npm:^1.1.0" + checksum: bb6943b4c4b894d54b42de73fc901d0ad8496e2d761def88cd245eb8e1cbf12bd708755375b616c28c5cdc67209c6f811835d0d073dd8cd78c29c82e54e82840 + languageName: node + linkType: hard + +"@parcel/watcher-win32-arm64@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-win32-arm64@npm:2.4.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@parcel/watcher-win32-ia32@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-win32-ia32@npm:2.4.0" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@parcel/watcher-win32-x64@npm:2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher-win32-x64@npm:2.4.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@parcel/watcher@npm:^2.4.0": + version: 2.4.0 + resolution: "@parcel/watcher@npm:2.4.0" + dependencies: + "@parcel/watcher-android-arm64": "npm:2.4.0" + "@parcel/watcher-darwin-arm64": "npm:2.4.0" + "@parcel/watcher-darwin-x64": "npm:2.4.0" + "@parcel/watcher-freebsd-x64": "npm:2.4.0" + "@parcel/watcher-linux-arm-glibc": "npm:2.4.0" + "@parcel/watcher-linux-arm64-glibc": "npm:2.4.0" + "@parcel/watcher-linux-arm64-musl": "npm:2.4.0" + "@parcel/watcher-linux-x64-glibc": "npm:2.4.0" + "@parcel/watcher-linux-x64-musl": "npm:2.4.0" + "@parcel/watcher-win32-arm64": "npm:2.4.0" + "@parcel/watcher-win32-ia32": "npm:2.4.0" + "@parcel/watcher-win32-x64": "npm:2.4.0" + detect-libc: "npm:^1.0.3" + is-glob: "npm:^4.0.3" + micromatch: "npm:^4.0.5" + node-addon-api: "npm:^7.0.0" + node-gyp: "npm:latest" + dependenciesMeta: + "@parcel/watcher-android-arm64": + optional: true + "@parcel/watcher-darwin-arm64": + optional: true + "@parcel/watcher-darwin-x64": + optional: true + "@parcel/watcher-freebsd-x64": + optional: true + "@parcel/watcher-linux-arm-glibc": + optional: true + "@parcel/watcher-linux-arm64-glibc": + optional: true + "@parcel/watcher-linux-arm64-musl": + optional: true + "@parcel/watcher-linux-x64-glibc": + optional: true + "@parcel/watcher-linux-x64-musl": + optional: true + "@parcel/watcher-win32-arm64": + optional: true + "@parcel/watcher-win32-ia32": + optional: true + "@parcel/watcher-win32-x64": + optional: true + checksum: 2839cf275ea38b47a2c9c6d74ff6fc312613b58e63b072ece75307d718712cecda5ca7f5e88eee3619bdd3cad3bcb1c4048a50573afe76956eb48a94d3949760 + languageName: node + linkType: hard + +"@pnpm/config.env-replace@npm:^1.1.0": + version: 1.1.0 + resolution: "@pnpm/config.env-replace@npm:1.1.0" + checksum: fabe35cede1b72ad12877b8bed32f7c2fcd89e94408792c4d69009b886671db7988a2132bc18b7157489d2d0fd4266a06c9583be3d2e10c847bf06687420cb2a languageName: node linkType: hard @@ -5347,6 +6534,25 @@ __metadata: languageName: node linkType: hard +"@rainbow-me/rainbowkit@npm:0.12.16": + version: 0.12.16 + resolution: "@rainbow-me/rainbowkit@npm:0.12.16" + dependencies: + "@vanilla-extract/css": "npm:1.9.1" + "@vanilla-extract/dynamic": "npm:2.0.2" + "@vanilla-extract/sprinkles": "npm:1.5.0" + clsx: "npm:1.1.1" + qrcode: "npm:1.5.0" + react-remove-scroll: "npm:2.5.4" + peerDependencies: + ethers: ">=5.6.8" + react: ">=17" + react-dom: ">=17" + wagmi: ">=0.12.18 <1.0.0" + checksum: b55af69f295c857f33b01e0d0460912ef1b66b76746b698f49d3d350a59c2f501b58cda0aa2338b53f2d8d8fe9a2b3f7aa57b930a09cb88b504d75148a04e948 + languageName: node + linkType: hard + "@resolver-engine/core@npm:^0.3.3": version: 0.3.3 resolution: "@resolver-engine/core@npm:0.3.3" @@ -5420,6 +6626,36 @@ __metadata: languageName: node linkType: hard +"@safe-global/safe-apps-provider@npm:^0.15.2": + version: 0.15.2 + resolution: "@safe-global/safe-apps-provider@npm:0.15.2" + dependencies: + "@safe-global/safe-apps-sdk": "npm:7.9.0" + events: "npm:^3.3.0" + checksum: 9e4c8a3fd58e6b563452c173d569f0a249a8e122e89d95dbb06a515629e627a5e304ab16bc91bf1c198d2d710426990e1e294f619bbeb48bb931804421dca5c7 + languageName: node + linkType: hard + +"@safe-global/safe-apps-sdk@npm:7.9.0": + version: 7.9.0 + resolution: "@safe-global/safe-apps-sdk@npm:7.9.0" + dependencies: + "@safe-global/safe-gateway-typescript-sdk": "npm:^3.5.3" + ethers: "npm:^5.7.2" + checksum: d350dc1de984ac57ce07b4d5fd3f63b867959c2f0ac57ead91499cf1e57f32c39e33cf5e3740a3449aa06a95b717c9e5798b39e55086123e4cf529f6b7194ba7 + languageName: node + linkType: hard + +"@safe-global/safe-apps-sdk@npm:^7.9.0": + version: 7.11.0 + resolution: "@safe-global/safe-apps-sdk@npm:7.11.0" + dependencies: + "@safe-global/safe-gateway-typescript-sdk": "npm:^3.5.3" + ethers: "npm:^5.7.2" + checksum: 698df52d088496db994d4df065e3624289550821f938e68f21a2f4a732032bbb7c1ab78746c1e8eca3769e9dc8ea07db9b3e5248cc91e145d31f69cfd44f8cb4 + languageName: node + linkType: hard + "@safe-global/safe-core-sdk-types@npm:^2.2.0": version: 2.2.0 resolution: "@safe-global/safe-core-sdk-types@npm:2.2.0" @@ -5442,6 +6678,20 @@ __metadata: languageName: node linkType: hard +"@safe-global/safe-gateway-typescript-sdk@npm:^3.5.3": + version: 3.17.0 + resolution: "@safe-global/safe-gateway-typescript-sdk@npm:3.17.0" + checksum: 8fe4ba9b2811205fad6b4cf1d8ae4cf694cdf9228812a5bc1b08625ec4003efa7c2f7daae45e884bff52b805c6cd67669d82be0a00913a30bb0100198da6d183 + languageName: node + linkType: hard + +"@scure/base@npm:^1.1.3, @scure/base@npm:~1.1.4": + version: 1.1.5 + resolution: "@scure/base@npm:1.1.5" + checksum: 543fa9991c6378b6a0d5ab7f1e27b30bb9c1e860d3ac81119b4213cfdf0ad7b61be004e06506e89de7ce0cec9391c17f5c082bb34c3b617a2ee6a04129f52481 + languageName: node + linkType: hard + "@scure/base@npm:~1.0.0": version: 1.0.0 resolution: "@scure/base@npm:1.0.0" @@ -5485,6 +6735,17 @@ __metadata: languageName: node linkType: hard +"@scure/bip32@npm:1.3.3": + version: 1.3.3 + resolution: "@scure/bip32@npm:1.3.3" + dependencies: + "@noble/curves": "npm:~1.3.0" + "@noble/hashes": "npm:~1.3.2" + "@scure/base": "npm:~1.1.4" + checksum: 4b8b75567866ff7d6b3ba154538add02d2951e9433e8dd7f0014331ac500cda5a88fe3d39b408fcc36e86b633682013f172b967af022c2e4e4ab07336801d688 + languageName: node + linkType: hard + "@scure/bip39@npm:1.0.0": version: 1.0.0 resolution: "@scure/bip39@npm:1.0.0" @@ -5505,6 +6766,16 @@ __metadata: languageName: node linkType: hard +"@scure/bip39@npm:1.2.2": + version: 1.2.2 + resolution: "@scure/bip39@npm:1.2.2" + dependencies: + "@noble/hashes": "npm:~1.3.2" + "@scure/base": "npm:~1.1.4" + checksum: f71aceda10a7937bf3779fd2b4c4156c95ec9813269470ddca464cb8ab610d2451b173037f4b1e6dac45414e406e7adc7b5814c51279f4474d5d38140bbee542 + languageName: node + linkType: hard + "@sentry/core@npm:5.30.0": version: 5.30.0 resolution: "@sentry/core@npm:5.30.0" @@ -5587,6 +6858,13 @@ __metadata: languageName: node linkType: hard +"@sinclair/typebox@npm:^0.27.8": + version: 0.27.8 + resolution: "@sinclair/typebox@npm:0.27.8" + checksum: 297f95ff77c82c54de8c9907f186076e715ff2621c5222ba50b8d40a170661c0c5242c763cba2a4791f0f91cb1d8ffa53ea1d7294570cf8cd4694c0e383e484d + languageName: node + linkType: hard + "@sindresorhus/is@npm:^4.6.0": version: 4.6.0 resolution: "@sindresorhus/is@npm:4.6.0" @@ -5610,6 +6888,15 @@ __metadata: languageName: node linkType: hard +"@sinonjs/commons@npm:^3.0.0": + version: 3.0.1 + resolution: "@sinonjs/commons@npm:3.0.1" + dependencies: + type-detect: "npm:4.0.8" + checksum: a0af217ba7044426c78df52c23cedede6daf377586f3ac58857c565769358ab1f44ebf95ba04bbe38814fba6e316ca6f02870a009328294fc2c555d0f85a7117 + languageName: node + linkType: hard + "@sinonjs/fake-timers@npm:>=5, @sinonjs/fake-timers@npm:^9.1.2": version: 9.1.2 resolution: "@sinonjs/fake-timers@npm:9.1.2" @@ -5619,6 +6906,15 @@ __metadata: languageName: node linkType: hard +"@sinonjs/fake-timers@npm:^10.0.2": + version: 10.3.0 + resolution: "@sinonjs/fake-timers@npm:10.3.0" + dependencies: + "@sinonjs/commons": "npm:^3.0.0" + checksum: 78155c7bd866a85df85e22028e046b8d46cf3e840f72260954f5e3ed5bd97d66c595524305a6841ffb3f681a08f6e5cef572a2cce5442a8a232dc29fb409b83e + languageName: node + linkType: hard + "@sinonjs/samsam@npm:^6.1.1": version: 6.1.1 resolution: "@sinonjs/samsam@npm:6.1.1" @@ -5735,150 +7031,444 @@ __metadata: languageName: node linkType: hard -"@szmarczak/http-timer@npm:^5.0.1": - version: 5.0.1 - resolution: "@szmarczak/http-timer@npm:5.0.1" - dependencies: - defer-to-connect: "npm:^2.0.1" - checksum: fc9cb993e808806692e4a3337c90ece0ec00c89f4b67e3652a356b89730da98bc824273a6d67ca84d5f33cd85f317dcd5ce39d8cc0a2f060145a608a7cb8ce92 +"@stablelib/aead@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/aead@npm:1.0.1" + checksum: 1a6f68d138f105d17dd65349751515bd252ab0498c77255b8555478d28415600dde493f909eb718245047a993f838dfae546071e1687566ffb7b8c3e10c918d9 languageName: node linkType: hard -"@tootallnate/once@npm:2": - version: 2.0.0 - resolution: "@tootallnate/once@npm:2.0.0" - checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 +"@stablelib/binary@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/binary@npm:1.0.1" + dependencies: + "@stablelib/int": "npm:^1.0.1" + checksum: c5ed769e2b5d607a5cdb72d325fcf98db437627862fade839daad934bd9ccf02a6f6e34f9de8cb3b18d72fce2ba6cc019a5d22398187d7d69d2607165f27f8bf languageName: node linkType: hard -"@trivago/prettier-plugin-sort-imports@npm:^4.2.1": - version: 4.3.0 - resolution: "@trivago/prettier-plugin-sort-imports@npm:4.3.0" - dependencies: - "@babel/generator": "npm:7.17.7" - "@babel/parser": "npm:^7.20.5" - "@babel/traverse": "npm:7.23.2" - "@babel/types": "npm:7.17.0" - javascript-natural-sort: "npm:0.7.1" - lodash: "npm:^4.17.21" - peerDependencies: - "@vue/compiler-sfc": 3.x - prettier: 2.x - 3.x - peerDependenciesMeta: - "@vue/compiler-sfc": - optional: true - checksum: eb25cbeeaf85d3acd54019d1f3563447337a2faee7a35558adb69dff44ce3b93714a5b64ba4d0374f3df3191c32c993d441493fdc43a2c97c9b8a0e3d58702cf +"@stablelib/bytes@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/bytes@npm:1.0.1" + checksum: 23d4d632a8a15ca91be1dc56da92eefed695d9b66068d1ab27a5655d0233dc2ac0b8668f875af542ca4ed526893c65dd53e777c72c8056f3648115aac98823ee languageName: node linkType: hard -"@trufflesuite/bigint-buffer@npm:1.1.10": - version: 1.1.10 - resolution: "@trufflesuite/bigint-buffer@npm:1.1.10" +"@stablelib/chacha20poly1305@npm:1.0.1": + version: 1.0.1 + resolution: "@stablelib/chacha20poly1305@npm:1.0.1" dependencies: - node-gyp: "npm:latest" - node-gyp-build: "npm:4.4.0" - checksum: 544b39fe3c7ebf895359bc46d255e350c723700601498674c8797bc2e6b6139cb898307530331d1c96821faa0b4a63d5a38876b4b32891dc3a4b3422014df0bf + "@stablelib/aead": "npm:^1.0.1" + "@stablelib/binary": "npm:^1.0.1" + "@stablelib/chacha": "npm:^1.0.1" + "@stablelib/constant-time": "npm:^1.0.1" + "@stablelib/poly1305": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 2a4df136b078b7c09acb3c6fe029613d4c9f70a0ce8bec65551a4a5016930a4f9091d3b83ed1cfc9c2e7bd6ec7f5ee93a7dc729b784b3900dcb97f3c7f5da84a languageName: node linkType: hard -"@trufflesuite/bigint-buffer@npm:1.1.9": - version: 1.1.9 - resolution: "@trufflesuite/bigint-buffer@npm:1.1.9" +"@stablelib/chacha@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/chacha@npm:1.0.1" dependencies: - node-gyp: "npm:latest" - node-gyp-build: "npm:4.3.0" - checksum: e175bcfdaffe53a5e787146ea93e7687a3d755217a6a736e1efb7cfb9b7230f56671f5d4aa2fc29dba932da76ec26848014912c47c8bee839275fa75e17d01f1 + "@stablelib/binary": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 38cd8095d94eda29a9bb8a742b1c945dba7f9ec91fc07ab351c826680d03976641ac6366c3d004a00a72d746fcd838215fe1263ef4b0660c453c5de18a0a4295 languageName: node linkType: hard -"@tsconfig/node10@npm:^1.0.7": - version: 1.0.9 - resolution: "@tsconfig/node10@npm:1.0.9" - checksum: a33ae4dc2a621c0678ac8ac4bceb8e512ae75dac65417a2ad9b022d9b5411e863c4c198b6ba9ef659e14b9fb609bbec680841a2e84c1172df7a5ffcf076539df +"@stablelib/constant-time@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/constant-time@npm:1.0.1" + checksum: dba4f4bf508de2ff15f7f0cbd875e70391aa3ba3698290fe1ed2feb151c243ba08a90fc6fb390ec2230e30fcc622318c591a7c0e35dcb8150afb50c797eac3d7 languageName: node linkType: hard -"@tsconfig/node12@npm:^1.0.7": - version: 1.0.10 - resolution: "@tsconfig/node12@npm:1.0.10" - checksum: 3683668703d5a2b43fe9b3135c5e475c401b5aaf7a586df8bb7eead1184b901d6606b6aee093dbb82e2d23b58f26104da433c86601a2912f512c1c935e4144a0 +"@stablelib/ed25519@npm:^1.0.2": + version: 1.0.3 + resolution: "@stablelib/ed25519@npm:1.0.3" + dependencies: + "@stablelib/random": "npm:^1.0.2" + "@stablelib/sha512": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 52e861e4fbd9d3d0a1a370d9ad96de8e2e15f133249bbbc32da66b8993e843db598054a3af17a746beb3fd5043b7529613a5dda7f2e79de6613eb3ebe5ffe3dd languageName: node linkType: hard -"@tsconfig/node14@npm:^1.0.0": - version: 1.0.2 - resolution: "@tsconfig/node14@npm:1.0.2" - checksum: 6260dd461728c200921b4848cd9e1df2bfb2c1ee6c1b6dadbc9bf81afadff8ddf11c6312e08c07de89f6c40163916ff8307f6008bf6c76a4d72a2833dae7bf7c +"@stablelib/hash@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/hash@npm:1.0.1" + checksum: 3ff1f12d1a4082aaf4b6cdf40c2010aabe5c4209d3b40b97b5bbb0d9abc0ee94abdc545e57de0614afaea807ca0212ac870e247ec8f66cdce91ec39ce82948cf languageName: node linkType: hard -"@tsconfig/node16@npm:^1.0.2": - version: 1.0.3 - resolution: "@tsconfig/node16@npm:1.0.3" - checksum: 3a8b657dd047495b7ad23437d6afd20297ce90380ff0bdee93fc7d39a900dbd8d9e26e53ff6b465e7967ce2adf0b218782590ce9013285121e6a5928fbd6819f +"@stablelib/hkdf@npm:1.0.1": + version: 1.0.1 + resolution: "@stablelib/hkdf@npm:1.0.1" + dependencies: + "@stablelib/hash": "npm:^1.0.1" + "@stablelib/hmac": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 9d45e303715a1835c8612b78e6c1b9d2b7463699b484241d8681fb5c17e0f2bbde5ce211c882134b64616a402e09177baeba80426995ff227b3654a155ab225d languageName: node linkType: hard -"@typechain/ethers-v5@npm:^10.0.0": - version: 10.2.1 - resolution: "@typechain/ethers-v5@npm:10.2.1" +"@stablelib/hmac@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/hmac@npm:1.0.1" dependencies: - lodash: "npm:^4.17.15" - ts-essentials: "npm:^7.0.1" - peerDependencies: - "@ethersproject/abi": ^5.0.0 - "@ethersproject/providers": ^5.0.0 - ethers: ^5.1.3 - typechain: ^8.1.1 - typescript: ">=4.3.0" - checksum: 463dbb5cd7314d492c3fd53c18e888c33e7c70d1b6bf0ffb38697ef112998c27e9c6bdf22dc7c7662cd43dfca644e53c7f245b6795a6dc615e273b248cd96fa8 + "@stablelib/constant-time": "npm:^1.0.1" + "@stablelib/hash": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: d3ac9e2fea2b4972a5d874ee9d96c94f8c8207452e2d243a2668b1325a7b20bd9a1541df32387789a0e9bfef82c3fe021a785f46eb3442c782443863faf75205 languageName: node linkType: hard -"@typechain/hardhat@npm:^6.0.0": - version: 6.1.0 - resolution: "@typechain/hardhat@npm:6.1.0" - dependencies: - fs-extra: "npm:^9.1.0" - lodash: "npm:^4.17.15" - peerDependencies: - "@ethersproject/abi": ^5.4.7 - "@ethersproject/providers": ^5.4.7 - "@typechain/ethers-v5": ^10.1.0 - ethers: ^5.4.7 - hardhat: ^2.9.9 - typechain: ^8.1.0 - checksum: d905fcd6a49286fffec45c9a1977a43362005c01868ebf1ed30083e34ae0033ca360fed104923ea3dc821990fb7714a8ad9b43bc65971e8fdb48c4dd0406a39b +"@stablelib/int@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/int@npm:1.0.1" + checksum: 65bfbf50a382eea70c68e05366bf379cfceff8fbc076f1c267ef2f2411d7aed64fd140c415cb6c29f19a3910d3b8b7805d4b32ad5721a5007a8e744a808c7ae3 languageName: node linkType: hard -"@types/abstract-leveldown@npm:*": - version: 7.2.5 - resolution: "@types/abstract-leveldown@npm:7.2.5" - checksum: 3a99b13c81a53a62b42bea9cff326880de3146b4eeff528b039be69a268515b3120a6c12142e96646fcb0a03c463f298998581e86d9ddb29fbea3612f40edb2b +"@stablelib/keyagreement@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/keyagreement@npm:1.0.1" + dependencies: + "@stablelib/bytes": "npm:^1.0.1" + checksum: 3c8ec904dd50f72f3162f5447a0fa8f1d9ca6e24cd272d3dbe84971267f3b47f9bd5dc4e4eeedf3fbac2fe01f2d9277053e57c8e60db8c5544bfb35c62d290dd languageName: node linkType: hard -"@types/bn.js@npm:^4.11.3": - version: 4.11.6 - resolution: "@types/bn.js@npm:4.11.6" +"@stablelib/poly1305@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/poly1305@npm:1.0.1" dependencies: - "@types/node": "npm:*" - checksum: 9ff3e7a1539a953c381c0d30ea2049162e3cab894cda91ee10f3a84d603f9afa2b2bc2a38fe9b427de94b6e2b7b77aefd217c1c7b07a10ae8d7499f9d6697a41 + "@stablelib/constant-time": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: b01d4b532a42e5260f7f263e3a670924849c7ba51569abd8ece8279a448e625cbe4049bff1d50ad0d3a9d5f268c1b52fc611808640a6e684550edd7589a0a581 languageName: node linkType: hard -"@types/bn.js@npm:^5.1.0": - version: 5.1.0 - resolution: "@types/bn.js@npm:5.1.0" +"@stablelib/random@npm:^1.0.1, @stablelib/random@npm:^1.0.2": + version: 1.0.2 + resolution: "@stablelib/random@npm:1.0.2" dependencies: - "@types/node": "npm:*" - checksum: 43d06b6f802eb7479fc58a7910cfc7af0c540fab86529c1c9b0022b992df916fc41f811da8822b6726f4e20209d5809b456c25e7f3fce37c338ebdf684b8a4b6 + "@stablelib/binary": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: f5ace0a588dc4c21f01cb85837892d4c872e994ae77a58a8eb7dd61aa0b26fb1e9b46b0445e71af57d963ef7d9f5965c64258fc0d04df7b2947bc48f2d3560c5 languageName: node linkType: hard -"@types/bn.js@npm:^5.1.1": - version: 5.1.1 +"@stablelib/sha256@npm:1.0.1": + version: 1.0.1 + resolution: "@stablelib/sha256@npm:1.0.1" + dependencies: + "@stablelib/binary": "npm:^1.0.1" + "@stablelib/hash": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 4d55f6c676e2cc0dd2a32be0cfa96837f3e15ae48dc50a340e56db2b201f1341a9ecabb429a3a44a5bf31adee0a8151467a8e7cc15346c561c914faad415d4d4 + languageName: node + linkType: hard + +"@stablelib/sha512@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/sha512@npm:1.0.1" + dependencies: + "@stablelib/binary": "npm:^1.0.1" + "@stablelib/hash": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 35d188cd62f20d27e1d61ea07984022e9a78815a023c8f7c747d92456a60823f0683138591e87158a47cd72e73cf24ecf97f8936aa6fba8b3bef6fcb138e723d + languageName: node + linkType: hard + +"@stablelib/wipe@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/wipe@npm:1.0.1" + checksum: 287802eb146810a46ba72af70b82022caf83a8aeebde23605f5ee0decf64fe2b97a60c856e43b6617b5801287c30cfa863cfb0469e7fcde6f02d143cf0c6cbf4 + languageName: node + linkType: hard + +"@stablelib/x25519@npm:^1.0.3": + version: 1.0.3 + resolution: "@stablelib/x25519@npm:1.0.3" + dependencies: + "@stablelib/keyagreement": "npm:^1.0.1" + "@stablelib/random": "npm:^1.0.2" + "@stablelib/wipe": "npm:^1.0.1" + checksum: fb5469e390ee2515d926633e3e179038894ac4f5e8c8cd2c2fc912022e34a051112eab0fe80c4dbc6e59129679844182562a036abff89444e5c4a05dd42ed329 + languageName: node + linkType: hard + +"@swc/helpers@npm:0.5.2": + version: 0.5.2 + resolution: "@swc/helpers@npm:0.5.2" + dependencies: + tslib: "npm:^2.4.0" + checksum: 3a3b179b3369acd26c5da89a0e779c756ae5231eb18a5507524c7abf955f488d34d86649f5b8417a0e19879688470d06319f5cfca2273d6d6b2046950e0d79af + languageName: node + linkType: hard + +"@szmarczak/http-timer@npm:^5.0.1": + version: 5.0.1 + resolution: "@szmarczak/http-timer@npm:5.0.1" + dependencies: + defer-to-connect: "npm:^2.0.1" + checksum: fc9cb993e808806692e4a3337c90ece0ec00c89f4b67e3652a356b89730da98bc824273a6d67ca84d5f33cd85f317dcd5ce39d8cc0a2f060145a608a7cb8ce92 + languageName: node + linkType: hard + +"@tanstack/query-core@npm:4.36.1": + version: 4.36.1 + resolution: "@tanstack/query-core@npm:4.36.1" + checksum: 7c648872cd491bcab2aa4c18e0b7ca130c072f05c277a5876977fa3bfa87634bbfde46e9d249236587d78c39866889a02e4e202b478dc6074ff96093732ae56d + languageName: node + linkType: hard + +"@tanstack/query-persist-client-core@npm:4.36.1": + version: 4.36.1 + resolution: "@tanstack/query-persist-client-core@npm:4.36.1" + dependencies: + "@tanstack/query-core": "npm:4.36.1" + checksum: b511da36e5648f2680ba168db6ddc3f2e8fadda98431643ff21323726eb45bbf9334dd9e8a37687279526b464a0c8f1762332470f32e2bd8a0e72511878371cf + languageName: node + linkType: hard + +"@tanstack/query-sync-storage-persister@npm:^4.27.1": + version: 4.36.1 + resolution: "@tanstack/query-sync-storage-persister@npm:4.36.1" + dependencies: + "@tanstack/query-persist-client-core": "npm:4.36.1" + checksum: 27a31696ecf7f7ed64294a5212a873fc2852973982edcedf36d1fa53f1cb8b20654a79509f819d35f64861cdcf5d0d7e8782136a4f9aabcc8160cc577c1a4c03 + languageName: node + linkType: hard + +"@tanstack/react-query-persist-client@npm:^4.28.0": + version: 4.36.1 + resolution: "@tanstack/react-query-persist-client@npm:4.36.1" + dependencies: + "@tanstack/query-persist-client-core": "npm:4.36.1" + peerDependencies: + "@tanstack/react-query": ^4.36.1 + checksum: d6720fba52d98401d593be2f2d0a6e429394581082164c36629937abd788c8d80838749d36dce2b20558efd9cbbfa3131bf0212a187f0bef63811ea160d7b390 + languageName: node + linkType: hard + +"@tanstack/react-query@npm:^4.24.10, @tanstack/react-query@npm:^4.28.0": + version: 4.36.1 + resolution: "@tanstack/react-query@npm:4.36.1" + dependencies: + "@tanstack/query-core": "npm:4.36.1" + use-sync-external-store: "npm:^1.2.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-native: "*" + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + checksum: 764b860c3ac8d254fc6b07e01054a0f58058644d59626c724b213293fbf1e31c198cbb26e4c32c0d16dcaec0353c0ae19147d9c667675b31f8cea1d64f1ff4ac + languageName: node + linkType: hard + +"@tanstack/react-virtual@npm:^3.0.0-beta.60": + version: 3.1.2 + resolution: "@tanstack/react-virtual@npm:3.1.2" + dependencies: + "@tanstack/virtual-core": "npm:3.1.2" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: dd7a241b4ea047bdf0fedc102ee73e9908cfe49145e48b2bbfa24279eb6ee2861465cb4f779a77182ffb4809ed8ffb584415f0670046ad2ccf2c43c03c59859a + languageName: node + linkType: hard + +"@tanstack/virtual-core@npm:3.1.2": + version: 3.1.2 + resolution: "@tanstack/virtual-core@npm:3.1.2" + checksum: 0e5c251050362eb0803b658210196e364172b9874900ea6bd1621ac58cb7b5d5add90a0e86a5b7a8f696921f9ff955effb58e65c02931056ce73adbc170af5cb + languageName: node + linkType: hard + +"@tootallnate/once@npm:2": + version: 2.0.0 + resolution: "@tootallnate/once@npm:2.0.0" + checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 + languageName: node + linkType: hard + +"@trivago/prettier-plugin-sort-imports@npm:^4.2.1": + version: 4.3.0 + resolution: "@trivago/prettier-plugin-sort-imports@npm:4.3.0" + dependencies: + "@babel/generator": "npm:7.17.7" + "@babel/parser": "npm:^7.20.5" + "@babel/traverse": "npm:7.23.2" + "@babel/types": "npm:7.17.0" + javascript-natural-sort: "npm:0.7.1" + lodash: "npm:^4.17.21" + peerDependencies: + "@vue/compiler-sfc": 3.x + prettier: 2.x - 3.x + peerDependenciesMeta: + "@vue/compiler-sfc": + optional: true + checksum: eb25cbeeaf85d3acd54019d1f3563447337a2faee7a35558adb69dff44ce3b93714a5b64ba4d0374f3df3191c32c993d441493fdc43a2c97c9b8a0e3d58702cf + languageName: node + linkType: hard + +"@trufflesuite/bigint-buffer@npm:1.1.10": + version: 1.1.10 + resolution: "@trufflesuite/bigint-buffer@npm:1.1.10" + dependencies: + node-gyp: "npm:latest" + node-gyp-build: "npm:4.4.0" + checksum: 544b39fe3c7ebf895359bc46d255e350c723700601498674c8797bc2e6b6139cb898307530331d1c96821faa0b4a63d5a38876b4b32891dc3a4b3422014df0bf + languageName: node + linkType: hard + +"@trufflesuite/bigint-buffer@npm:1.1.9": + version: 1.1.9 + resolution: "@trufflesuite/bigint-buffer@npm:1.1.9" + dependencies: + node-gyp: "npm:latest" + node-gyp-build: "npm:4.3.0" + checksum: e175bcfdaffe53a5e787146ea93e7687a3d755217a6a736e1efb7cfb9b7230f56671f5d4aa2fc29dba932da76ec26848014912c47c8bee839275fa75e17d01f1 + languageName: node + linkType: hard + +"@tsconfig/node10@npm:^1.0.7": + version: 1.0.9 + resolution: "@tsconfig/node10@npm:1.0.9" + checksum: a33ae4dc2a621c0678ac8ac4bceb8e512ae75dac65417a2ad9b022d9b5411e863c4c198b6ba9ef659e14b9fb609bbec680841a2e84c1172df7a5ffcf076539df + languageName: node + linkType: hard + +"@tsconfig/node12@npm:^1.0.7": + version: 1.0.10 + resolution: "@tsconfig/node12@npm:1.0.10" + checksum: 3683668703d5a2b43fe9b3135c5e475c401b5aaf7a586df8bb7eead1184b901d6606b6aee093dbb82e2d23b58f26104da433c86601a2912f512c1c935e4144a0 + languageName: node + linkType: hard + +"@tsconfig/node14@npm:^1.0.0": + version: 1.0.2 + resolution: "@tsconfig/node14@npm:1.0.2" + checksum: 6260dd461728c200921b4848cd9e1df2bfb2c1ee6c1b6dadbc9bf81afadff8ddf11c6312e08c07de89f6c40163916ff8307f6008bf6c76a4d72a2833dae7bf7c + languageName: node + linkType: hard + +"@tsconfig/node16@npm:^1.0.2": + version: 1.0.3 + resolution: "@tsconfig/node16@npm:1.0.3" + checksum: 3a8b657dd047495b7ad23437d6afd20297ce90380ff0bdee93fc7d39a900dbd8d9e26e53ff6b465e7967ce2adf0b218782590ce9013285121e6a5928fbd6819f + languageName: node + linkType: hard + +"@typechain/ethers-v5@npm:^10.0.0": + version: 10.2.1 + resolution: "@typechain/ethers-v5@npm:10.2.1" + dependencies: + lodash: "npm:^4.17.15" + ts-essentials: "npm:^7.0.1" + peerDependencies: + "@ethersproject/abi": ^5.0.0 + "@ethersproject/providers": ^5.0.0 + ethers: ^5.1.3 + typechain: ^8.1.1 + typescript: ">=4.3.0" + checksum: 463dbb5cd7314d492c3fd53c18e888c33e7c70d1b6bf0ffb38697ef112998c27e9c6bdf22dc7c7662cd43dfca644e53c7f245b6795a6dc615e273b248cd96fa8 + languageName: node + linkType: hard + +"@typechain/hardhat@npm:^6.0.0": + version: 6.1.0 + resolution: "@typechain/hardhat@npm:6.1.0" + dependencies: + fs-extra: "npm:^9.1.0" + lodash: "npm:^4.17.15" + peerDependencies: + "@ethersproject/abi": ^5.4.7 + "@ethersproject/providers": ^5.4.7 + "@typechain/ethers-v5": ^10.1.0 + ethers: ^5.4.7 + hardhat: ^2.9.9 + typechain: ^8.1.0 + checksum: d905fcd6a49286fffec45c9a1977a43362005c01868ebf1ed30083e34ae0033ca360fed104923ea3dc821990fb7714a8ad9b43bc65971e8fdb48c4dd0406a39b + languageName: node + linkType: hard + +"@types/abstract-leveldown@npm:*": + version: 7.2.5 + resolution: "@types/abstract-leveldown@npm:7.2.5" + checksum: 3a99b13c81a53a62b42bea9cff326880de3146b4eeff528b039be69a268515b3120a6c12142e96646fcb0a03c463f298998581e86d9ddb29fbea3612f40edb2b + languageName: node + linkType: hard + +"@types/babel__core@npm:^7.1.14": + version: 7.20.5 + resolution: "@types/babel__core@npm:7.20.5" + dependencies: + "@babel/parser": "npm:^7.20.7" + "@babel/types": "npm:^7.20.7" + "@types/babel__generator": "npm:*" + "@types/babel__template": "npm:*" + "@types/babel__traverse": "npm:*" + checksum: c32838d280b5ab59d62557f9e331d3831f8e547ee10b4f85cb78753d97d521270cebfc73ce501e9fb27fe71884d1ba75e18658692c2f4117543f0fc4e3e118b3 + languageName: node + linkType: hard + +"@types/babel__generator@npm:*": + version: 7.6.8 + resolution: "@types/babel__generator@npm:7.6.8" + dependencies: + "@babel/types": "npm:^7.0.0" + checksum: b53c215e9074c69d212402990b0ca8fa57595d09e10d94bda3130aa22b55d796e50449199867879e4ea0ee968f3a2099e009cfb21a726a53324483abbf25cd30 + languageName: node + linkType: hard + +"@types/babel__template@npm:*": + version: 7.4.4 + resolution: "@types/babel__template@npm:7.4.4" + dependencies: + "@babel/parser": "npm:^7.1.0" + "@babel/types": "npm:^7.0.0" + checksum: d7a02d2a9b67e822694d8e6a7ddb8f2b71a1d6962dfd266554d2513eefbb205b33ca71a0d163b1caea3981ccf849211f9964d8bd0727124d18ace45aa6c9ae29 + languageName: node + linkType: hard + +"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": + version: 7.20.5 + resolution: "@types/babel__traverse@npm:7.20.5" + dependencies: + "@babel/types": "npm:^7.20.7" + checksum: f0352d537448e1e37f27e6bb8c962d7893720a92fde9d8601a68a93dbc14e15c088b4c0c8f71021d0966d09fba802ef3de11fdb6766c33993f8cf24f1277c6a9 + languageName: node + linkType: hard + +"@types/bn.js@npm:^4.11.3": + version: 4.11.6 + resolution: "@types/bn.js@npm:4.11.6" + dependencies: + "@types/node": "npm:*" + checksum: 9ff3e7a1539a953c381c0d30ea2049162e3cab894cda91ee10f3a84d603f9afa2b2bc2a38fe9b427de94b6e2b7b77aefd217c1c7b07a10ae8d7499f9d6697a41 + languageName: node + linkType: hard + +"@types/bn.js@npm:^5.1.0": + version: 5.1.0 + resolution: "@types/bn.js@npm:5.1.0" + dependencies: + "@types/node": "npm:*" + checksum: 43d06b6f802eb7479fc58a7910cfc7af0c540fab86529c1c9b0022b992df916fc41f811da8822b6726f4e20209d5809b456c25e7f3fce37c338ebdf684b8a4b6 + languageName: node + linkType: hard + +"@types/bn.js@npm:^5.1.1": + version: 5.1.1 resolution: "@types/bn.js@npm:5.1.1" dependencies: "@types/node": "npm:*" @@ -5958,6 +7548,25 @@ __metadata: languageName: node linkType: hard +"@types/graceful-fs@npm:^4.1.3": + version: 4.1.9 + resolution: "@types/graceful-fs@npm:4.1.9" + dependencies: + "@types/node": "npm:*" + checksum: 79d746a8f053954bba36bd3d94a90c78de995d126289d656fb3271dd9f1229d33f678da04d10bce6be440494a5a73438e2e363e92802d16b8315b051036c5256 + languageName: node + linkType: hard + +"@types/hoist-non-react-statics@npm:^3.3.1": + version: 3.3.5 + resolution: "@types/hoist-non-react-statics@npm:3.3.5" + dependencies: + "@types/react": "npm:*" + hoist-non-react-statics: "npm:^3.3.0" + checksum: b645b062a20cce6ab1245ada8274051d8e2e0b2ee5c6bd58215281d0ec6dae2f26631af4e2e7c8abe238cdcee73fcaededc429eef569e70908f82d0cc0ea31d7 + languageName: node + linkType: hard + "@types/http-cache-semantics@npm:*": version: 4.0.1 resolution: "@types/http-cache-semantics@npm:4.0.1" @@ -5981,6 +7590,31 @@ __metadata: languageName: node linkType: hard +"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": + version: 2.0.6 + resolution: "@types/istanbul-lib-coverage@npm:2.0.6" + checksum: 3feac423fd3e5449485afac999dcfcb3d44a37c830af898b689fadc65d26526460bedb889db278e0d4d815a670331796494d073a10ee6e3a6526301fe7415778 + languageName: node + linkType: hard + +"@types/istanbul-lib-report@npm:*": + version: 3.0.3 + resolution: "@types/istanbul-lib-report@npm:3.0.3" + dependencies: + "@types/istanbul-lib-coverage": "npm:*" + checksum: b91e9b60f865ff08cb35667a427b70f6c2c63e88105eadd29a112582942af47ed99c60610180aa8dcc22382fa405033f141c119c69b95db78c4c709fbadfeeb4 + languageName: node + linkType: hard + +"@types/istanbul-reports@npm:^3.0.0": + version: 3.0.4 + resolution: "@types/istanbul-reports@npm:3.0.4" + dependencies: + "@types/istanbul-lib-report": "npm:*" + checksum: 93eb18835770b3431f68ae9ac1ca91741ab85f7606f310a34b3586b5a34450ec038c3eed7ab19266635499594de52ff73723a54a72a75b9f7d6a956f01edee95 + languageName: node + linkType: hard + "@types/json-schema@npm:^7.0.9": version: 7.0.11 resolution: "@types/json-schema@npm:7.0.11" @@ -6187,6 +7821,13 @@ __metadata: languageName: node linkType: hard +"@types/prop-types@npm:*": + version: 15.7.11 + resolution: "@types/prop-types@npm:15.7.11" + checksum: 7519ff11d06fbf6b275029fe03fff9ec377b4cb6e864cac34d87d7146c7f5a7560fd164bdc1d2dbe00b60c43713631251af1fd3d34d46c69cd354602bc0c7c54 + languageName: node + linkType: hard + "@types/qs@npm:^6.2.31": version: 6.9.7 resolution: "@types/qs@npm:6.9.7" @@ -6194,6 +7835,17 @@ __metadata: languageName: node linkType: hard +"@types/react@npm:*": + version: 18.2.57 + resolution: "@types/react@npm:18.2.57" + dependencies: + "@types/prop-types": "npm:*" + "@types/scheduler": "npm:*" + csstype: "npm:^3.0.2" + checksum: beee45a8ee48862fb5101f6ebdd89ccc20c5a6df29dcd2315560bc3b57ea3af8d09a8e9bb1c58063a70f9010e0d2c7bd300819438e2ca62810285c3d7275ab5a + languageName: node + linkType: hard + "@types/readable-stream@npm:^2.3.13": version: 2.3.15 resolution: "@types/readable-stream@npm:2.3.15" @@ -6222,6 +7874,13 @@ __metadata: languageName: node linkType: hard +"@types/scheduler@npm:*": + version: 0.16.8 + resolution: "@types/scheduler@npm:0.16.8" + checksum: 6c091b096daa490093bf30dd7947cd28e5b2cd612ec93448432b33f724b162587fed9309a0acc104d97b69b1d49a0f3fc755a62282054d62975d53d7fd13472d + languageName: node + linkType: hard + "@types/secp256k1@npm:^4.0.1": version: 4.0.3 resolution: "@types/secp256k1@npm:4.0.3" @@ -6287,6 +7946,20 @@ __metadata: languageName: node linkType: hard +"@types/stack-utils@npm:^2.0.0": + version: 2.0.3 + resolution: "@types/stack-utils@npm:2.0.3" + checksum: 72576cc1522090fe497337c2b99d9838e320659ac57fa5560fcbdcbafcf5d0216c6b3a0a8a4ee4fdb3b1f5e3420aa4f6223ab57b82fef3578bec3206425c6cf5 + languageName: node + linkType: hard + +"@types/trusted-types@npm:^2.0.2": + version: 2.0.7 + resolution: "@types/trusted-types@npm:2.0.7" + checksum: 8e4202766a65877efcf5d5a41b7dd458480b36195e580a3b1085ad21e948bc417d55d6f8af1fd2a7ad008015d4117d5fdfe432731157da3c68678487174e4ba3 + languageName: node + linkType: hard + "@types/wrap-ansi@npm:^3.0.0": version: 3.0.0 resolution: "@types/wrap-ansi@npm:3.0.0" @@ -6328,6 +8001,15 @@ __metadata: languageName: node linkType: hard +"@types/yargs@npm:^17.0.8": + version: 17.0.32 + resolution: "@types/yargs@npm:17.0.32" + dependencies: + "@types/yargs-parser": "npm:*" + checksum: 1e2b2673847011ce43607df690d392f137d95a2d6ea85aa319403eadda2ef4277365efd4982354d8843f2611ef3846c88599660aaeb537fa9ccddae83c2a89de + languageName: node + linkType: hard + "@typescript-eslint/eslint-plugin@npm:^5.62.0": version: 5.62.0 resolution: "@typescript-eslint/eslint-plugin@npm:5.62.0" @@ -6449,6 +8131,73 @@ __metadata: languageName: node linkType: hard +"@urql/core@npm:^3.2.0": + version: 3.2.2 + resolution: "@urql/core@npm:3.2.2" + dependencies: + wonka: "npm:^6.1.2" + peerDependencies: + graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: 2ad58a282897d6c7ee07d09b5e78c12e86c8820e41390c3b2663262cb86e028557a77138d07476f58daea60e6950ff91063e7ed5827844d3d542d0a256688697 + languageName: node + linkType: hard + +"@vanilla-extract/css@npm:1.9.1": + version: 1.9.1 + resolution: "@vanilla-extract/css@npm:1.9.1" + dependencies: + "@emotion/hash": "npm:^0.8.0" + "@vanilla-extract/private": "npm:^1.0.3" + ahocorasick: "npm:1.0.2" + chalk: "npm:^4.1.1" + css-what: "npm:^5.0.1" + cssesc: "npm:^3.0.0" + csstype: "npm:^3.0.7" + deep-object-diff: "npm:^1.1.0" + deepmerge: "npm:^4.2.2" + media-query-parser: "npm:^2.0.2" + outdent: "npm:^0.8.0" + checksum: 0f3ff175356bdc7dd420bd68c997bedfb539ea2d0a056aca37f0825a518951edcb05a489969d083a97072a6ccc6a89bc64b89d8b26d9cc67774488855c44e1d3 + languageName: node + linkType: hard + +"@vanilla-extract/dynamic@npm:2.0.2": + version: 2.0.2 + resolution: "@vanilla-extract/dynamic@npm:2.0.2" + dependencies: + "@vanilla-extract/private": "npm:^1.0.3" + checksum: 26a73d2273f9da91ccbe3ffdcac92d3bab00921ade71c1bfd1936333d82aa3a8fc32c3c4ef962196d25a79fbdff1ccf060c9dd0fe0d73ca2f14f08fbc16a976c + languageName: node + linkType: hard + +"@vanilla-extract/private@npm:^1.0.3": + version: 1.0.3 + resolution: "@vanilla-extract/private@npm:1.0.3" + checksum: 5f27238d711fc190146869cb76258328d8d8c09bf4fca9df65168ce13704a5c78750824eb469fa961a2ab1cfefca43c37607d755b8a4aa937c8dd7df478036df + languageName: node + linkType: hard + +"@vanilla-extract/sprinkles@npm:1.5.0": + version: 1.5.0 + resolution: "@vanilla-extract/sprinkles@npm:1.5.0" + peerDependencies: + "@vanilla-extract/css": ^1.0.0 + checksum: 20045dc160ba7daa9772219dd4e73d76a6a9d77ede13f0f995a236a87e5f99b31ca409c35c49cab71cb2c568c2660b019bd4d7bbde26a523bd906b7f09146426 + languageName: node + linkType: hard + +"@wagmi/chains@npm:0.2.22": + version: 0.2.22 + resolution: "@wagmi/chains@npm:0.2.22" + peerDependencies: + typescript: ">=4.9.4" + peerDependenciesMeta: + typescript: + optional: true + checksum: 018f798831988579501311b934959dc93e101328794de6048e9fd6a6496260907642039e119d9266458b6884a99a3582d2a4011d823e57980d0145bebc7743d0 + languageName: node + linkType: hard + "@wagmi/chains@npm:^1.8.0": version: 1.8.0 resolution: "@wagmi/chains@npm:1.8.0" @@ -6461,6 +8210,478 @@ __metadata: languageName: node linkType: hard +"@wagmi/connectors@npm:0.3.22": + version: 0.3.22 + resolution: "@wagmi/connectors@npm:0.3.22" + dependencies: + "@coinbase/wallet-sdk": "npm:^3.6.6" + "@ledgerhq/connect-kit-loader": "npm:^1.0.1" + "@safe-global/safe-apps-provider": "npm:^0.15.2" + "@safe-global/safe-apps-sdk": "npm:^7.9.0" + "@walletconnect/ethereum-provider": "npm:2.8.4" + "@walletconnect/legacy-provider": "npm:^2.0.0" + "@walletconnect/modal": "npm:^2.5.4" + abitype: "npm:^0.3.0" + eventemitter3: "npm:^4.0.7" + peerDependencies: + "@wagmi/core": ">=0.9.x" + ethers: ">=5.5.1 <6" + typescript: ">=4.9.4" + peerDependenciesMeta: + "@wagmi/core": + optional: true + typescript: + optional: true + checksum: 1f527a2ec46ff735ee73395cb2f2fa6271324be48aa926c9dea9c5dd779ea4e00dd0f5e6dc35e9cc8adf95e00c00d0597dda61ba9537061f6fedd31c0a23350e + languageName: node + linkType: hard + +"@wagmi/core@npm:0.10.16": + version: 0.10.16 + resolution: "@wagmi/core@npm:0.10.16" + dependencies: + "@wagmi/chains": "npm:0.2.22" + "@wagmi/connectors": "npm:0.3.22" + abitype: "npm:^0.3.0" + eventemitter3: "npm:^4.0.7" + zustand: "npm:^4.3.1" + peerDependencies: + ethers: ">=5.5.1 <6" + typescript: ">=4.9.4" + peerDependenciesMeta: + typescript: + optional: true + checksum: cd1c1c53985bac26fcecd00f3bb6cf6de260e797662518721a80c02902ce20b52e5d435681df6dbc8302665d06cfa84a5043e51fb814e822242575227768b0a9 + languageName: node + linkType: hard + +"@walletconnect/core@npm:2.8.4": + version: 2.8.4 + resolution: "@walletconnect/core@npm:2.8.4" + dependencies: + "@walletconnect/heartbeat": "npm:1.2.1" + "@walletconnect/jsonrpc-provider": "npm:1.0.13" + "@walletconnect/jsonrpc-types": "npm:1.0.3" + "@walletconnect/jsonrpc-utils": "npm:1.0.8" + "@walletconnect/jsonrpc-ws-connection": "npm:^1.0.11" + "@walletconnect/keyvaluestorage": "npm:^1.0.2" + "@walletconnect/logger": "npm:^2.0.1" + "@walletconnect/relay-api": "npm:^1.0.9" + "@walletconnect/relay-auth": "npm:^1.0.4" + "@walletconnect/safe-json": "npm:^1.0.2" + "@walletconnect/time": "npm:^1.0.2" + "@walletconnect/types": "npm:2.8.4" + "@walletconnect/utils": "npm:2.8.4" + events: "npm:^3.3.0" + lodash.isequal: "npm:4.5.0" + uint8arrays: "npm:^3.1.0" + checksum: 4b8089b526f83578ba5e004417e005d79ad33b7a08079e177b6e389e6c03588581a95f1b5c92819a6cc3330f2a8543b404a2a5a6524cb2d47405d1cc5b95f825 + languageName: node + linkType: hard + +"@walletconnect/crypto@npm:^1.0.3": + version: 1.0.3 + resolution: "@walletconnect/crypto@npm:1.0.3" + dependencies: + "@walletconnect/encoding": "npm:^1.0.2" + "@walletconnect/environment": "npm:^1.0.1" + "@walletconnect/randombytes": "npm:^1.0.3" + aes-js: "npm:^3.1.2" + hash.js: "npm:^1.1.7" + tslib: "npm:1.14.1" + checksum: 6749da7f6b1e03a8aa2aa750bff0827ff59c70be6d58f7170e287d18507744fee507cba0f2a67b7ec3e50a4843420dc1f58a01f73735f90a4e75e47c7d39d5ab + languageName: node + linkType: hard + +"@walletconnect/encoding@npm:^1.0.2": + version: 1.0.2 + resolution: "@walletconnect/encoding@npm:1.0.2" + dependencies: + is-typedarray: "npm:1.0.0" + tslib: "npm:1.14.1" + typedarray-to-buffer: "npm:3.1.5" + checksum: 046a7725864aba319a284fe5e8cebb45bb9d3cb81f15dd6a82f12c4a01aafaadf6b8b0239172948eacbbee87bfde4f47c22148a0f760f15f0161a39534e41e41 + languageName: node + linkType: hard + +"@walletconnect/environment@npm:^1.0.1": + version: 1.0.1 + resolution: "@walletconnect/environment@npm:1.0.1" + dependencies: + tslib: "npm:1.14.1" + checksum: f6a1e3456e50cc7cfa58d99fd513ecac75573d0b8bcbbedcb1d7ec04ca9108df16b471afd40761b2a5cb4f66d8e33b7ba25f02c62c8365d68b1bd1ef52c1813e + languageName: node + linkType: hard + +"@walletconnect/ethereum-provider@npm:2.8.4": + version: 2.8.4 + resolution: "@walletconnect/ethereum-provider@npm:2.8.4" + dependencies: + "@walletconnect/jsonrpc-http-connection": "npm:^1.0.7" + "@walletconnect/jsonrpc-provider": "npm:^1.0.13" + "@walletconnect/jsonrpc-types": "npm:^1.0.3" + "@walletconnect/jsonrpc-utils": "npm:^1.0.8" + "@walletconnect/sign-client": "npm:2.8.4" + "@walletconnect/types": "npm:2.8.4" + "@walletconnect/universal-provider": "npm:2.8.4" + "@walletconnect/utils": "npm:2.8.4" + events: "npm:^3.3.0" + peerDependencies: + "@walletconnect/modal": ">=2" + peerDependenciesMeta: + "@walletconnect/modal": + optional: true + checksum: 5aee30c31c16016d5240f215bbae03b276b7cb783371d22d03ae2b7359cbcbcf9d9bce78b70dc035268d7a220c5e032e556477b16fb840c4e8406e6b04b1316b + languageName: node + linkType: hard + +"@walletconnect/events@npm:^1.0.1": + version: 1.0.1 + resolution: "@walletconnect/events@npm:1.0.1" + dependencies: + keyvaluestorage-interface: "npm:^1.0.0" + tslib: "npm:1.14.1" + checksum: b5a105e9ac4d7d0a500085afd77b71e71a8ab78fd38b033e4ce91f8626fd8c254b1ba49a59c8c0ed8a00a7e8b93995163f414eda73c58694f8f830e453a902b6 + languageName: node + linkType: hard + +"@walletconnect/heartbeat@npm:1.2.1": + version: 1.2.1 + resolution: "@walletconnect/heartbeat@npm:1.2.1" + dependencies: + "@walletconnect/events": "npm:^1.0.1" + "@walletconnect/time": "npm:^1.0.2" + tslib: "npm:1.14.1" + checksum: a68d7efe4e69c9749dd7c3a9e351dd22adccbb925447dd7f2b2978a4cd730695cc0b4e717a08bad0d0c60e0177b77618a53f3bfb4347659f3ccfe72d412c27fb + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-http-connection@npm:^1.0.4, @walletconnect/jsonrpc-http-connection@npm:^1.0.7": + version: 1.0.7 + resolution: "@walletconnect/jsonrpc-http-connection@npm:1.0.7" + dependencies: + "@walletconnect/jsonrpc-utils": "npm:^1.0.6" + "@walletconnect/safe-json": "npm:^1.0.1" + cross-fetch: "npm:^3.1.4" + tslib: "npm:1.14.1" + checksum: 2d915df34e37592bdc69712244fd4e19da68eab42a8c576dd94cbca66ccdf30d4bf223c093042c0c5b9c8acb0e0af5cd682e8d9916098bd6cdea9593b9474971 + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-provider@npm:1.0.13, @walletconnect/jsonrpc-provider@npm:^1.0.13, @walletconnect/jsonrpc-provider@npm:^1.0.6": + version: 1.0.13 + resolution: "@walletconnect/jsonrpc-provider@npm:1.0.13" + dependencies: + "@walletconnect/jsonrpc-utils": "npm:^1.0.8" + "@walletconnect/safe-json": "npm:^1.0.2" + tslib: "npm:1.14.1" + checksum: 27c7dfa898896ffd7250aecaf92b889663abe64ea605dae1b638743a9f1609f0e27b2bca761b3bbc2ed722bde1b012d901bba4de4067424905bfce514cc5e909 + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-types@npm:1.0.3, @walletconnect/jsonrpc-types@npm:^1.0.2, @walletconnect/jsonrpc-types@npm:^1.0.3": + version: 1.0.3 + resolution: "@walletconnect/jsonrpc-types@npm:1.0.3" + dependencies: + keyvaluestorage-interface: "npm:^1.0.0" + tslib: "npm:1.14.1" + checksum: 7b1209c2e6ff476e45b0d828bd4d7773873c4cff41e5ed235ff8014b4e8ff09ec704817347702fe3b8ca1c1b7920abfd0af94e0cdf582a92d8a0192d8c42dce8 + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-utils@npm:1.0.8, @walletconnect/jsonrpc-utils@npm:^1.0.4, @walletconnect/jsonrpc-utils@npm:^1.0.6, @walletconnect/jsonrpc-utils@npm:^1.0.7, @walletconnect/jsonrpc-utils@npm:^1.0.8": + version: 1.0.8 + resolution: "@walletconnect/jsonrpc-utils@npm:1.0.8" + dependencies: + "@walletconnect/environment": "npm:^1.0.1" + "@walletconnect/jsonrpc-types": "npm:^1.0.3" + tslib: "npm:1.14.1" + checksum: 4687b4582a5c33883d94e87ca8bb22d129a2a47b6e1d9e2c3210b74f02d9677723b3bf2283d2f0fa69866b0a66a80cdfada9a2f1c204d485fbd10d2baed1f0a6 + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-ws-connection@npm:^1.0.11": + version: 1.0.14 + resolution: "@walletconnect/jsonrpc-ws-connection@npm:1.0.14" + dependencies: + "@walletconnect/jsonrpc-utils": "npm:^1.0.6" + "@walletconnect/safe-json": "npm:^1.0.2" + events: "npm:^3.3.0" + ws: "npm:^7.5.1" + checksum: 2ad66217b62fb57a43c8edd33c27da0c9ba09cfec79f4d43e5d30bcb8224a48c1d1f0d6273be0371f2c7e33d8138a6fe03afa499b429ab7829d719677cd48f4d + languageName: node + linkType: hard + +"@walletconnect/keyvaluestorage@npm:^1.0.2": + version: 1.1.1 + resolution: "@walletconnect/keyvaluestorage@npm:1.1.1" + dependencies: + "@walletconnect/safe-json": "npm:^1.0.1" + idb-keyval: "npm:^6.2.1" + unstorage: "npm:^1.9.0" + peerDependencies: + "@react-native-async-storage/async-storage": 1.x + peerDependenciesMeta: + "@react-native-async-storage/async-storage": + optional: true + checksum: fd9c275b3249d8e9f722866703b5c040eb35d0670c92a297428ffb700ac36c6b9978242beac5d2cfe97eb522ae01307cacd9c79ecf95640878804fce0f13c5e7 + languageName: node + linkType: hard + +"@walletconnect/legacy-client@npm:^2.0.0": + version: 2.0.0 + resolution: "@walletconnect/legacy-client@npm:2.0.0" + dependencies: + "@walletconnect/crypto": "npm:^1.0.3" + "@walletconnect/encoding": "npm:^1.0.2" + "@walletconnect/jsonrpc-utils": "npm:^1.0.4" + "@walletconnect/legacy-types": "npm:^2.0.0" + "@walletconnect/legacy-utils": "npm:^2.0.0" + "@walletconnect/safe-json": "npm:^1.0.1" + "@walletconnect/window-getters": "npm:^1.0.1" + "@walletconnect/window-metadata": "npm:^1.0.1" + detect-browser: "npm:^5.3.0" + query-string: "npm:^6.13.5" + checksum: ae70c9f8a251a4f2eee97a4c6cd24ed64f30fbd38cfc9b4ed9e329e3817a2439bdc2b460515677511c551c2cbbaf23aafff512eb427b77ee61843eb4754430eb + languageName: node + linkType: hard + +"@walletconnect/legacy-modal@npm:^2.0.0": + version: 2.0.0 + resolution: "@walletconnect/legacy-modal@npm:2.0.0" + dependencies: + "@walletconnect/legacy-types": "npm:^2.0.0" + "@walletconnect/legacy-utils": "npm:^2.0.0" + copy-to-clipboard: "npm:^3.3.3" + preact: "npm:^10.12.0" + qrcode: "npm:^1.5.1" + checksum: 3b9c741b781c2bff9c104134f1a17585c8c879ee8c1c2218a06f7a5f5f385a9b0f039d57df55bdc28f9f7d45b8a02e221ce7df025c9182001dad33f5efca18b5 + languageName: node + linkType: hard + +"@walletconnect/legacy-provider@npm:^2.0.0": + version: 2.0.0 + resolution: "@walletconnect/legacy-provider@npm:2.0.0" + dependencies: + "@walletconnect/jsonrpc-http-connection": "npm:^1.0.4" + "@walletconnect/jsonrpc-provider": "npm:^1.0.6" + "@walletconnect/legacy-client": "npm:^2.0.0" + "@walletconnect/legacy-modal": "npm:^2.0.0" + "@walletconnect/legacy-types": "npm:^2.0.0" + "@walletconnect/legacy-utils": "npm:^2.0.0" + checksum: 49b18d2ef7652d71a66ace75957e49b8a38e80cd5af43b8786276b8179cf1281d7158716f0605b6c15189e0c48736bd3779ec23fd46ebbb83d7b770f85d53eab + languageName: node + linkType: hard + +"@walletconnect/legacy-types@npm:^2.0.0": + version: 2.0.0 + resolution: "@walletconnect/legacy-types@npm:2.0.0" + dependencies: + "@walletconnect/jsonrpc-types": "npm:^1.0.2" + checksum: 6d89021d1735a4a3f182aee78421bd8e783fdb1c51c93059f7b4727d66072afdc889b07be8e791919e7c1f52b93735f57b72fc1bfd5b890e17d9037fbb06fec7 + languageName: node + linkType: hard + +"@walletconnect/legacy-utils@npm:^2.0.0": + version: 2.0.0 + resolution: "@walletconnect/legacy-utils@npm:2.0.0" + dependencies: + "@walletconnect/encoding": "npm:^1.0.2" + "@walletconnect/jsonrpc-utils": "npm:^1.0.4" + "@walletconnect/legacy-types": "npm:^2.0.0" + "@walletconnect/safe-json": "npm:^1.0.1" + "@walletconnect/window-getters": "npm:^1.0.1" + "@walletconnect/window-metadata": "npm:^1.0.1" + detect-browser: "npm:^5.3.0" + query-string: "npm:^6.13.5" + checksum: 6dd7738b0b7c11eb8f06f639a37527759440453f350d616e7116e89dbec03f381a462102be2c2175ed02b886f1b420a80a144b623f1a63cf9e02cebe82bcdefe + languageName: node + linkType: hard + +"@walletconnect/logger@npm:^2.0.1": + version: 2.0.1 + resolution: "@walletconnect/logger@npm:2.0.1" + dependencies: + pino: "npm:7.11.0" + tslib: "npm:1.14.1" + checksum: 93ad8fd59a07a512ffb0f250dba83b15ea0b4ba7c5d676241c98238b78910e1c26d86a270b85a8c2809833bfd9e87325c37f55c88255102ad199d73da537bf42 + languageName: node + linkType: hard + +"@walletconnect/modal-core@npm:2.6.2": + version: 2.6.2 + resolution: "@walletconnect/modal-core@npm:2.6.2" + dependencies: + valtio: "npm:1.11.2" + checksum: 671184da341eebb6b7a3ad7c334851113683d71e6118f7203a377e493b61eb94bc0571484e497e577b9f4d7221a8a7034ad4b52af722c89fa4105627bed638ba + languageName: node + linkType: hard + +"@walletconnect/modal-ui@npm:2.6.2": + version: 2.6.2 + resolution: "@walletconnect/modal-ui@npm:2.6.2" + dependencies: + "@walletconnect/modal-core": "npm:2.6.2" + lit: "npm:2.8.0" + motion: "npm:10.16.2" + qrcode: "npm:1.5.3" + checksum: 5460ad7f4591c016b723b3f707ac0020e185b60744cf7132b4b4f48d71c87c1c55826f6e11005860f96bd11e0ed3f88da7cda4c0a1c35a0e5b7d6e53bc14cf15 + languageName: node + linkType: hard + +"@walletconnect/modal@npm:^2.5.4": + version: 2.6.2 + resolution: "@walletconnect/modal@npm:2.6.2" + dependencies: + "@walletconnect/modal-core": "npm:2.6.2" + "@walletconnect/modal-ui": "npm:2.6.2" + checksum: f8f132c89d1d7f44f2fa564c8d5122163610be4afb0cadc9576c77083471297c37ff62aae3a25492c0ddb480240a2a6ffefe3eba1fd48f1664160c6bac01466d + languageName: node + linkType: hard + +"@walletconnect/randombytes@npm:^1.0.3": + version: 1.0.3 + resolution: "@walletconnect/randombytes@npm:1.0.3" + dependencies: + "@walletconnect/encoding": "npm:^1.0.2" + "@walletconnect/environment": "npm:^1.0.1" + randombytes: "npm:^2.1.0" + tslib: "npm:1.14.1" + checksum: 3069e58d3735af15895cade98665a50339275cbf98b20e638ae9266556183b01b8cb286739de6adfd733a86c51fd6322aff034c05dc464d7581f35c33eacb25b + languageName: node + linkType: hard + +"@walletconnect/relay-api@npm:^1.0.9": + version: 1.0.9 + resolution: "@walletconnect/relay-api@npm:1.0.9" + dependencies: + "@walletconnect/jsonrpc-types": "npm:^1.0.2" + tslib: "npm:1.14.1" + checksum: 037781d51427fbaf866848a3f0a0260bd97cfb077c4ebe6db3024b56895ba977633ca8b3e0e37b48673ba04f1abf6e40e9ef46da10ff0a3e1cf5722f0c5ec32a + languageName: node + linkType: hard + +"@walletconnect/relay-auth@npm:^1.0.4": + version: 1.0.4 + resolution: "@walletconnect/relay-auth@npm:1.0.4" + dependencies: + "@stablelib/ed25519": "npm:^1.0.2" + "@stablelib/random": "npm:^1.0.1" + "@walletconnect/safe-json": "npm:^1.0.1" + "@walletconnect/time": "npm:^1.0.2" + tslib: "npm:1.14.1" + uint8arrays: "npm:^3.0.0" + checksum: d9128b2a25f38ebf2f49f8c184dad5c997ad6343513bddd7941459c2f2757e6acfbcdd36dc9c12d0491f55723d5e2c5c0ee2e9cf381b3247274b920e95d4db0e + languageName: node + linkType: hard + +"@walletconnect/safe-json@npm:^1.0.1, @walletconnect/safe-json@npm:^1.0.2": + version: 1.0.2 + resolution: "@walletconnect/safe-json@npm:1.0.2" + dependencies: + tslib: "npm:1.14.1" + checksum: b9d031dab3916d20fa5241d7ad2be425368ae489995ba3ba18d6ad88e81ad3ed093b8e867b8a4fc44759099896aeb5afee5635858cb80c4819ebc7ebb71ed5a6 + languageName: node + linkType: hard + +"@walletconnect/sign-client@npm:2.8.4": + version: 2.8.4 + resolution: "@walletconnect/sign-client@npm:2.8.4" + dependencies: + "@walletconnect/core": "npm:2.8.4" + "@walletconnect/events": "npm:^1.0.1" + "@walletconnect/heartbeat": "npm:1.2.1" + "@walletconnect/jsonrpc-utils": "npm:1.0.8" + "@walletconnect/logger": "npm:^2.0.1" + "@walletconnect/time": "npm:^1.0.2" + "@walletconnect/types": "npm:2.8.4" + "@walletconnect/utils": "npm:2.8.4" + events: "npm:^3.3.0" + checksum: a4c91d45925b7786df3f9a3028bf7adb34aaa55349707d6524e72c6b7f7370fe72b18cb019d92b574eaf86799a736f7ac1670f95a697ba52fcb4ac0a1b43968a + languageName: node + linkType: hard + +"@walletconnect/time@npm:^1.0.2": + version: 1.0.2 + resolution: "@walletconnect/time@npm:1.0.2" + dependencies: + tslib: "npm:1.14.1" + checksum: ea84d0850e63306837f98a228e08a59f6945da38ba5553b1f158abeaa8ec4dc8a0025a0f0cfc843ddf05ce2947da95c02ac1e8cedce7092bbe1c2d46ca816dd9 + languageName: node + linkType: hard + +"@walletconnect/types@npm:2.8.4": + version: 2.8.4 + resolution: "@walletconnect/types@npm:2.8.4" + dependencies: + "@walletconnect/events": "npm:^1.0.1" + "@walletconnect/heartbeat": "npm:1.2.1" + "@walletconnect/jsonrpc-types": "npm:1.0.3" + "@walletconnect/keyvaluestorage": "npm:^1.0.2" + "@walletconnect/logger": "npm:^2.0.1" + events: "npm:^3.3.0" + checksum: ac6dde3acaa324fadf593a7c6d8325428434d21c8b2efa64632245d9a0d1e8e6f19325abc28dfc31cdfe88122da49b727bf6fe5e5f217c0b92b272ef65f39873 + languageName: node + linkType: hard + +"@walletconnect/universal-provider@npm:2.8.4": + version: 2.8.4 + resolution: "@walletconnect/universal-provider@npm:2.8.4" + dependencies: + "@walletconnect/jsonrpc-http-connection": "npm:^1.0.7" + "@walletconnect/jsonrpc-provider": "npm:1.0.13" + "@walletconnect/jsonrpc-types": "npm:^1.0.2" + "@walletconnect/jsonrpc-utils": "npm:^1.0.7" + "@walletconnect/logger": "npm:^2.0.1" + "@walletconnect/sign-client": "npm:2.8.4" + "@walletconnect/types": "npm:2.8.4" + "@walletconnect/utils": "npm:2.8.4" + events: "npm:^3.3.0" + checksum: 5c72ca7fff90e96de5a939dfafaddbba74cddc1da1b76f6d04ce36691b3b8a72e107e90b2acaea53684397bd89da6f27219413da7388b6c8a29141004957288c + languageName: node + linkType: hard + +"@walletconnect/utils@npm:2.8.4": + version: 2.8.4 + resolution: "@walletconnect/utils@npm:2.8.4" + dependencies: + "@stablelib/chacha20poly1305": "npm:1.0.1" + "@stablelib/hkdf": "npm:1.0.1" + "@stablelib/random": "npm:^1.0.2" + "@stablelib/sha256": "npm:1.0.1" + "@stablelib/x25519": "npm:^1.0.3" + "@walletconnect/relay-api": "npm:^1.0.9" + "@walletconnect/safe-json": "npm:^1.0.2" + "@walletconnect/time": "npm:^1.0.2" + "@walletconnect/types": "npm:2.8.4" + "@walletconnect/window-getters": "npm:^1.0.1" + "@walletconnect/window-metadata": "npm:^1.0.1" + detect-browser: "npm:5.3.0" + query-string: "npm:7.1.3" + uint8arrays: "npm:^3.1.0" + checksum: c6947246eea36ce316e2d48922b2c0fe1238a3e83171b9c237bd300e0bc36119c6372c352ad015927f64d860e54b318b0d924972672da52b67c87732af2a6ac0 + languageName: node + linkType: hard + +"@walletconnect/window-getters@npm:^1.0.1": + version: 1.0.1 + resolution: "@walletconnect/window-getters@npm:1.0.1" + dependencies: + tslib: "npm:1.14.1" + checksum: 8d3fcb134fbbe903ba4a63f1fa5a7849fd443874bf45488260afc2fe3b1cbe211f86da1d76ee844be7c0e8618ae67402f94c213432fd80b04715eaf72e2e00e3 + languageName: node + linkType: hard + +"@walletconnect/window-metadata@npm:^1.0.1": + version: 1.0.1 + resolution: "@walletconnect/window-metadata@npm:1.0.1" + dependencies: + "@walletconnect/window-getters": "npm:^1.0.1" + tslib: "npm:1.14.1" + checksum: cf322e0860c4448cefcd81f34bc6d49d1a235a81e74a6146baefb74e47cf6c3c8050b65e534a3dc13f8d2aed3fc59732ccf48d5a01b5b23e08e1847fcffa950c + languageName: node + linkType: hard + "JSONStream@npm:^1.3.5": version: 1.3.5 resolution: "JSONStream@npm:1.3.5" @@ -6498,7 +8719,20 @@ __metadata: optional: true zod: optional: true - checksum: 90940804839b1b65cb5b427d934db9c1cc899157d6091f281b1ce94d9c0c08b1ae946ab43e984e70c031e94c49355f6677475a7242ec60cae5457c074dcd40f9 + checksum: 90940804839b1b65cb5b427d934db9c1cc899157d6091f281b1ce94d9c0c08b1ae946ab43e984e70c031e94c49355f6677475a7242ec60cae5457c074dcd40f9 + languageName: node + linkType: hard + +"abitype@npm:^0.3.0": + version: 0.3.0 + resolution: "abitype@npm:0.3.0" + peerDependencies: + typescript: ">=4.9.4" + zod: ">=3.19.1" + peerDependenciesMeta: + zod: + optional: true + checksum: 5da1f1fa953b77fbe13586419ef5d2908e585a53907dab658b1e87dd7744ec636d990eb09902c9bf216d5976d0ea1b45644de61434971ae94410ae40483b59dd languageName: node linkType: hard @@ -6590,6 +8824,15 @@ __metadata: languageName: node linkType: hard +"acorn@npm:^8.11.3": + version: 8.11.3 + resolution: "acorn@npm:8.11.3" + bin: + acorn: bin/acorn + checksum: b688e7e3c64d9bfb17b596e1b35e4da9d50553713b3b3630cf5690f2b023a84eac90c56851e6912b483fe60e8b4ea28b254c07e92f17ef83d72d78745a8352dd + languageName: node + linkType: hard + "acorn@npm:^8.4.1": version: 8.7.1 resolution: "acorn@npm:8.7.1" @@ -6629,6 +8872,13 @@ __metadata: languageName: node linkType: hard +"aes-js@npm:^3.1.2": + version: 3.1.2 + resolution: "aes-js@npm:3.1.2" + checksum: b65916767034a51375a3ac5aad62af452d89a386c1ae7b607bb9145d0bb8b8823bf2f3eba85bdfa52d61c65d5aed90ba90f677b8c826bfa1a8b7ae2fa3b54d91 + languageName: node + linkType: hard + "agent-base@npm:6, agent-base@npm:^6.0.2": version: 6.0.2 resolution: "agent-base@npm:6.0.2" @@ -6668,6 +8918,13 @@ __metadata: languageName: node linkType: hard +"ahocorasick@npm:1.0.2": + version: 1.0.2 + resolution: "ahocorasick@npm:1.0.2" + checksum: b2da9f3a7e6faae9975ffdb15a0d7a6c6590f8cf902fe8dc08ba972b59b61a25276923d7776fbd1844685a15600c24353dee3ee5a1cb27244fd64f1522b2c04a + languageName: node + linkType: hard + "ajv@npm:^6.10.0, ajv@npm:^6.12.3, ajv@npm:^6.12.4, ajv@npm:^6.12.6": version: 6.12.6 resolution: "ajv@npm:6.12.6" @@ -6720,7 +8977,7 @@ __metadata: languageName: node linkType: hard -"ansi-escapes@npm:^4.3.0, ansi-escapes@npm:^4.3.2": +"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.0, ansi-escapes@npm:^4.3.2": version: 4.3.2 resolution: "ansi-escapes@npm:4.3.2" dependencies: @@ -6791,6 +9048,13 @@ __metadata: languageName: node linkType: hard +"ansi-styles@npm:^5.0.0": + version: 5.2.0 + resolution: "ansi-styles@npm:5.2.0" + checksum: d7f4e97ce0623aea6bc0d90dcd28881ee04cba06c570b97fd3391bd7a268eedfd9d5e2dd4fdcbdd82b8105df5faf6f24aaedc08eaf3da898e702db5948f63469 + languageName: node + linkType: hard + "ansi-styles@npm:^6.0.0": version: 6.1.0 resolution: "ansi-styles@npm:6.1.0" @@ -6814,6 +9078,16 @@ __metadata: languageName: node linkType: hard +"anymatch@npm:^3.0.3, anymatch@npm:^3.1.3": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" + dependencies: + normalize-path: "npm:^3.0.0" + picomatch: "npm:^2.0.4" + checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 + languageName: node + linkType: hard + "anymatch@npm:~3.1.1, anymatch@npm:~3.1.2": version: 3.1.2 resolution: "anymatch@npm:3.1.2" @@ -7056,6 +9330,15 @@ __metadata: languageName: node linkType: hard +"async-mutex@npm:^0.2.6": + version: 0.2.6 + resolution: "async-mutex@npm:0.2.6" + dependencies: + tslib: "npm:^2.0.0" + checksum: 3cf676fc48b4686abf534cc02d4784bab3f35d7836a0a7476c96e57c3f6607dd3d94cc0989b29d33ce5ae5cde8be8e1a96f3e769ba3b0e1ba4a244f873aa5623 + languageName: node + linkType: hard + "async@npm:^2.6.4": version: 2.6.4 resolution: "async@npm:2.6.4" @@ -7079,6 +9362,13 @@ __metadata: languageName: node linkType: hard +"atomic-sleep@npm:^1.0.0": + version: 1.0.0 + resolution: "atomic-sleep@npm:1.0.0" + checksum: 3ab6d2cf46b31394b4607e935ec5c1c3c4f60f3e30f0913d35ea74b51b3585e84f590d09e58067f11762eec71c87d25314ce859030983dc0e4397eed21daa12e + languageName: node + linkType: hard + "available-typed-arrays@npm:^1.0.5": version: 1.0.5 resolution: "available-typed-arrays@npm:1.0.5" @@ -7142,6 +9432,82 @@ __metadata: languageName: node linkType: hard +"babel-jest@npm:^29.7.0": + version: 29.7.0 + resolution: "babel-jest@npm:29.7.0" + dependencies: + "@jest/transform": "npm:^29.7.0" + "@types/babel__core": "npm:^7.1.14" + babel-plugin-istanbul: "npm:^6.1.1" + babel-preset-jest: "npm:^29.6.3" + chalk: "npm:^4.0.0" + graceful-fs: "npm:^4.2.9" + slash: "npm:^3.0.0" + peerDependencies: + "@babel/core": ^7.8.0 + checksum: 8a0953bd813b3a8926008f7351611055548869e9a53dd36d6e7e96679001f71e65fd7dbfe253265c3ba6a4e630dc7c845cf3e78b17d758ef1880313ce8fba258 + languageName: node + linkType: hard + +"babel-plugin-istanbul@npm:^6.1.1": + version: 6.1.1 + resolution: "babel-plugin-istanbul@npm:6.1.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.0.0" + "@istanbuljs/load-nyc-config": "npm:^1.0.0" + "@istanbuljs/schema": "npm:^0.1.2" + istanbul-lib-instrument: "npm:^5.0.4" + test-exclude: "npm:^6.0.0" + checksum: ffd436bb2a77bbe1942a33245d770506ab2262d9c1b3c1f1da7f0592f78ee7445a95bc2efafe619dd9c1b6ee52c10033d6c7d29ddefe6f5383568e60f31dfe8d + languageName: node + linkType: hard + +"babel-plugin-jest-hoist@npm:^29.6.3": + version: 29.6.3 + resolution: "babel-plugin-jest-hoist@npm:29.6.3" + dependencies: + "@babel/template": "npm:^7.3.3" + "@babel/types": "npm:^7.3.3" + "@types/babel__core": "npm:^7.1.14" + "@types/babel__traverse": "npm:^7.0.6" + checksum: 9bfa86ec4170bd805ab8ca5001ae50d8afcb30554d236ba4a7ffc156c1a92452e220e4acbd98daefc12bf0216fccd092d0a2efed49e7e384ec59e0597a926d65 + languageName: node + linkType: hard + +"babel-preset-current-node-syntax@npm:^1.0.0": + version: 1.0.1 + resolution: "babel-preset-current-node-syntax@npm:1.0.1" + dependencies: + "@babel/plugin-syntax-async-generators": "npm:^7.8.4" + "@babel/plugin-syntax-bigint": "npm:^7.8.3" + "@babel/plugin-syntax-class-properties": "npm:^7.8.3" + "@babel/plugin-syntax-import-meta": "npm:^7.8.3" + "@babel/plugin-syntax-json-strings": "npm:^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" + "@babel/plugin-syntax-numeric-separator": "npm:^7.8.3" + "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" + "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" + "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" + "@babel/plugin-syntax-top-level-await": "npm:^7.8.3" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 94561959cb12bfa80867c9eeeace7c3d48d61707d33e55b4c3fdbe82fc745913eb2dbfafca62aef297421b38aadcb58550e5943f50fbcebbeefd70ce2bed4b74 + languageName: node + linkType: hard + +"babel-preset-jest@npm:^29.6.3": + version: 29.6.3 + resolution: "babel-preset-jest@npm:29.6.3" + dependencies: + babel-plugin-jest-hoist: "npm:^29.6.3" + babel-preset-current-node-syntax: "npm:^1.0.0" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: aa4ff2a8a728d9d698ed521e3461a109a1e66202b13d3494e41eea30729a5e7cc03b3a2d56c594423a135429c37bf63a9fa8b0b9ce275298be3095a88c69f6fb + languageName: node + linkType: hard + "balanced-match@npm:^1.0.0": version: 1.0.2 resolution: "balanced-match@npm:1.0.2" @@ -7230,6 +9596,13 @@ __metadata: languageName: node linkType: hard +"bignumber.js@npm:^9.1.2": + version: 9.1.2 + resolution: "bignumber.js@npm:9.1.2" + checksum: d89b8800a987225d2c00dcbf8a69dc08e92aa0880157c851c287b307d31ceb2fc2acb0c62c3e3a3d42b6c5fcae9b004035f13eb4386e56d529d7edac18d5c9d8 + languageName: node + linkType: hard + "binary-extensions@npm:^2.0.0": version: 2.2.0 resolution: "binary-extensions@npm:2.2.0" @@ -7331,6 +9704,26 @@ __metadata: languageName: node linkType: hard +"body-parser@npm:1.20.1": + version: 1.20.1 + resolution: "body-parser@npm:1.20.1" + dependencies: + bytes: "npm:3.1.2" + content-type: "npm:~1.0.4" + debug: "npm:2.6.9" + depd: "npm:2.0.0" + destroy: "npm:1.2.0" + http-errors: "npm:2.0.0" + iconv-lite: "npm:0.4.24" + on-finished: "npm:2.4.1" + qs: "npm:6.11.0" + raw-body: "npm:2.5.1" + type-is: "npm:~1.6.18" + unpipe: "npm:1.0.0" + checksum: 5f8d128022a2fb8b6e7990d30878a0182f300b70e46b3f9d358a9433ad6275f0de46add6d63206da3637c01c3b38b6111a7480f7e7ac2e9f7b989f6133fe5510 + languageName: node + linkType: hard + "borsh@npm:^0.7.0": version: 0.7.0 resolution: "borsh@npm:0.7.0" @@ -7426,6 +9819,29 @@ __metadata: languageName: node linkType: hard +"browserslist@npm:^4.22.2": + version: 4.23.0 + resolution: "browserslist@npm:4.23.0" + dependencies: + caniuse-lite: "npm:^1.0.30001587" + electron-to-chromium: "npm:^1.4.668" + node-releases: "npm:^2.0.14" + update-browserslist-db: "npm:^1.0.13" + bin: + browserslist: cli.js + checksum: 496c3862df74565dd942b4ae65f502c575cbeba1fa4a3894dad7aa3b16130dc3033bc502d8848147f7b625154a284708253d9598bcdbef5a1e34cf11dc7bad8e + languageName: node + linkType: hard + +"bs-logger@npm:0.x": + version: 0.2.6 + resolution: "bs-logger@npm:0.2.6" + dependencies: + fast-json-stable-stringify: "npm:2.x" + checksum: e6d3ff82698bb3f20ce64fb85355c5716a3cf267f3977abe93bf9c32a2e46186b253f48a028ae5b96ab42bacd2c826766d9ae8cf6892f9b944656be9113cf212 + languageName: node + linkType: hard + "bs58@npm:^4.0.0, bs58@npm:^4.0.1": version: 4.0.1 resolution: "bs58@npm:4.0.1" @@ -7446,6 +9862,15 @@ __metadata: languageName: node linkType: hard +"bser@npm:2.1.1": + version: 2.1.1 + resolution: "bser@npm:2.1.1" + dependencies: + node-int64: "npm:^0.4.0" + checksum: edba1b65bae682450be4117b695997972bd9a3c4dfee029cab5bcb72ae5393a79a8f909b8bc77957eb0deec1c7168670f18f4d5c556f46cdd3bca5f3b3a8d020 + languageName: node + linkType: hard + "buffer-from@npm:^1.0.0": version: 1.1.2 resolution: "buffer-from@npm:1.1.2" @@ -7530,7 +9955,7 @@ __metadata: languageName: node linkType: hard -"busboy@npm:^1.6.0": +"busboy@npm:1.6.0, busboy@npm:^1.6.0": version: 1.6.0 resolution: "busboy@npm:1.6.0" dependencies: @@ -7662,13 +10087,27 @@ __metadata: languageName: node linkType: hard -"camelcase@npm:^6.0.0": +"camelcase@npm:^6.0.0, camelcase@npm:^6.2.0": version: 6.3.0 resolution: "camelcase@npm:6.3.0" checksum: 8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d languageName: node linkType: hard +"caniuse-lite@npm:^1.0.30001406": + version: 1.0.30001589 + resolution: "caniuse-lite@npm:1.0.30001589" + checksum: 5e1d2eb7c32d48c52204227bc1377f0f4c758ef889c53b9b479e28470e7f82eb1db5853e7754be9600ee662ae32a1d58e8bef0fde6edab06322ddbabfd9d212f + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.30001587": + version: 1.0.30001587 + resolution: "caniuse-lite@npm:1.0.30001587" + checksum: 960e26927ad876971021186337df1df2d37d7ed4fc7907098c060f56ae8de737d471791e51387ca55bea07f56b0a76553a90125f88a2f958ca1f4f715013cf71 + languageName: node + linkType: hard + "case@npm:^1.6.3": version: 1.6.3 resolution: "case@npm:1.6.3" @@ -7741,7 +10180,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.2": +"chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.1, chalk@npm:^4.1.2": version: 4.1.2 resolution: "chalk@npm:4.1.2" dependencies: @@ -7758,6 +10197,13 @@ __metadata: languageName: node linkType: hard +"char-regex@npm:^1.0.2": + version: 1.0.2 + resolution: "char-regex@npm:1.0.2" + checksum: 1ec5c2906adb9f84e7f6732a40baef05d7c85401b82ffcbc44b85fbd0f7a2b0c2a96f2eb9cf55cae3235dc12d4023003b88f09bcae8be9ae894f52ed746f4d48 + languageName: node + linkType: hard + "chardet@npm:^0.7.0": version: 0.7.0 resolution: "chardet@npm:0.7.0" @@ -7826,6 +10272,25 @@ __metadata: languageName: node linkType: hard +"chokidar@npm:^3.5.2, chokidar@npm:^3.5.3": + version: 3.6.0 + resolution: "chokidar@npm:3.6.0" + dependencies: + anymatch: "npm:~3.1.2" + braces: "npm:~3.0.2" + fsevents: "npm:~2.3.2" + glob-parent: "npm:~5.1.2" + is-binary-path: "npm:~2.1.0" + is-glob: "npm:~4.0.1" + normalize-path: "npm:~3.0.0" + readdirp: "npm:~3.6.0" + dependenciesMeta: + fsevents: + optional: true + checksum: c327fb07704443f8d15f7b4a7ce93b2f0bc0e6cea07ec28a7570aa22cd51fcf0379df589403976ea956c369f25aa82d84561947e227cd925902e1751371658df + languageName: node + linkType: hard + "chownr@npm:^1.1.1, chownr@npm:^1.1.4": version: 1.1.4 resolution: "chownr@npm:1.1.4" @@ -7877,6 +10342,22 @@ __metadata: languageName: node linkType: hard +"citty@npm:^0.1.5": + version: 0.1.6 + resolution: "citty@npm:0.1.6" + dependencies: + consola: "npm:^3.2.3" + checksum: 3208947e73abb699a12578ee2bfee254bf8dd1ce0d5698e8a298411cabf16bd3620d63433aef5bd88cdb2b9da71aef18adefa3b4ffd18273bb62dd1d28c344f5 + languageName: node + linkType: hard + +"cjs-module-lexer@npm:^1.0.0": + version: 1.2.3 + resolution: "cjs-module-lexer@npm:1.2.3" + checksum: f96a5118b0a012627a2b1c13bd2fcb92509778422aaa825c5da72300d6dcadfb47134dd2e9d97dfa31acd674891dd91642742772d19a09a8adc3e56bd2f5928c + languageName: node + linkType: hard + "class-is@npm:^1.1.0": version: 1.1.0 resolution: "class-is@npm:1.1.0" @@ -7962,6 +10443,24 @@ __metadata: languageName: node linkType: hard +"client-only@npm:0.0.1, client-only@npm:^0.0.1": + version: 0.0.1 + resolution: "client-only@npm:0.0.1" + checksum: 0c16bf660dadb90610553c1d8946a7fdfb81d624adea073b8440b7d795d5b5b08beb3c950c6a2cf16279365a3265158a236876d92bce16423c485c322d7dfaf8 + languageName: node + linkType: hard + +"clipboardy@npm:^4.0.0": + version: 4.0.0 + resolution: "clipboardy@npm:4.0.0" + dependencies: + execa: "npm:^8.0.1" + is-wsl: "npm:^3.1.0" + is64bit: "npm:^2.0.0" + checksum: ec4ebe7e5c81d9c9cb994637e7b0e068c1c8fc272167ecd5519f967427271ec66e0e64da7268a2630b860eff42933aeabe25ba5e42bb80dbf1fae6362df059ed + languageName: node + linkType: hard + "cliui@npm:^5.0.0": version: 5.0.0 resolution: "cliui@npm:5.0.0" @@ -8022,6 +10521,34 @@ __metadata: languageName: node linkType: hard +"clsx@npm:1.1.1": + version: 1.1.1 + resolution: "clsx@npm:1.1.1" + checksum: ff052650329773b9b245177305fc4c4dc3129f7b2be84af4f58dc5defa99538c61d4207be7419405a5f8f3d92007c954f4daba5a7b74e563d5de71c28c830063 + languageName: node + linkType: hard + +"clsx@npm:^1.1.1, clsx@npm:^1.2.1": + version: 1.2.1 + resolution: "clsx@npm:1.2.1" + checksum: 5ded6f61f15f1fa0350e691ccec43a28b12fb8e64c8e94715f2a937bc3722d4c3ed41d6e945c971fc4dcc2a7213a43323beaf2e1c28654af63ba70c9968a8643 + languageName: node + linkType: hard + +"cluster-key-slot@npm:^1.1.0": + version: 1.1.2 + resolution: "cluster-key-slot@npm:1.1.2" + checksum: 516ed8b5e1a14d9c3a9c96c72ef6de2d70dfcdbaa0ec3a90bc7b9216c5457e39c09a5775750c272369070308542e671146120153062ab5f2f481bed5de2c925f + languageName: node + linkType: hard + +"co@npm:^4.6.0": + version: 4.6.0 + resolution: "co@npm:4.6.0" + checksum: a5d9f37091c70398a269e625cedff5622f200ed0aa0cff22ee7b55ed74a123834b58711776eb0f1dc58eb6ebbc1185aa7567b57bd5979a948c6e4f85073e2c05 + languageName: node + linkType: hard + "code-point-at@npm:^1.0.0": version: 1.1.0 resolution: "code-point-at@npm:1.1.0" @@ -8036,6 +10563,13 @@ __metadata: languageName: node linkType: hard +"collect-v8-coverage@npm:^1.0.0": + version: 1.0.2 + resolution: "collect-v8-coverage@npm:1.0.2" + checksum: 30ea7d5c9ee51f2fdba4901d4186c5b7114a088ef98fd53eda3979da77eed96758a2cae81cc6d97e239aaea6065868cf908b24980663f7b7e96aa291b3e12fa4 + languageName: node + linkType: hard + "color-convert@npm:^1.9.0": version: 1.9.3 resolution: "color-convert@npm:1.9.3" @@ -8195,6 +10729,13 @@ __metadata: languageName: node linkType: hard +"consola@npm:^3.2.3": + version: 3.2.3 + resolution: "consola@npm:3.2.3" + checksum: 02972dcb048c337357a3628438e5976b8e45bcec22fdcfbe9cd17622992953c4d695d5152f141464a02deac769b1d23028e8ac87f56483838df7a6bbf8e0f5a2 + languageName: node + linkType: hard + "console-control-strings@npm:^1.0.0, console-control-strings@npm:^1.1.0, console-control-strings@npm:~1.1.0": version: 1.1.0 resolution: "console-control-strings@npm:1.1.0" @@ -8229,6 +10770,20 @@ __metadata: languageName: node linkType: hard +"convert-source-map@npm:^2.0.0": + version: 2.0.0 + resolution: "convert-source-map@npm:2.0.0" + checksum: c987be3ec061348cdb3c2bfb924bec86dea1eacad10550a85ca23edb0fe3556c3a61c7399114f3331ccb3499d7fd0285ab24566e5745929412983494c3926e15 + languageName: node + linkType: hard + +"cookie-es@npm:^1.0.0": + version: 1.0.0 + resolution: "cookie-es@npm:1.0.0" + checksum: 7654e65c3a0b6b6e5d695aa05da72e5e77235a0a8bc3ac94afb3be250db82bea721aa18fb879d6ebc9627ea39c3efc8211ef76bf24bc534e600ac575929f2f1b + languageName: node + linkType: hard + "cookie-signature@npm:1.0.6": version: 1.0.6 resolution: "cookie-signature@npm:1.0.6" @@ -8250,6 +10805,15 @@ __metadata: languageName: node linkType: hard +"copy-to-clipboard@npm:^3.3.3": + version: 3.3.3 + resolution: "copy-to-clipboard@npm:3.3.3" + dependencies: + toggle-selection: "npm:^1.0.6" + checksum: e0a325e39b7615108e6c1c8ac110ae7b829cdc4ee3278b1df6a0e4228c490442cc86444cd643e2da344fbc424b3aab8909e2fec82f8bc75e7e5b190b7c24eecf + languageName: node + linkType: hard + "core-js-pure@npm:^3.0.1": version: 3.22.8 resolution: "core-js-pure@npm:3.22.8" @@ -8271,7 +10835,7 @@ __metadata: languageName: node linkType: hard -"cors@npm:^2.8.1": +"cors@npm:^2.8.1, cors@npm:^2.8.5": version: 2.8.5 resolution: "cors@npm:2.8.5" dependencies: @@ -8351,6 +10915,23 @@ __metadata: languageName: node linkType: hard +"create-jest@npm:^29.7.0": + version: 29.7.0 + resolution: "create-jest@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + chalk: "npm:^4.0.0" + exit: "npm:^0.1.2" + graceful-fs: "npm:^4.2.9" + jest-config: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + prompts: "npm:^2.0.1" + bin: + create-jest: bin/create-jest.js + checksum: 847b4764451672b4174be4d5c6d7d63442ec3aa5f3de52af924e4d996d87d7801c18e125504f25232fc75840f6625b3ac85860fac6ce799b5efae7bdcaf4a2b7 + languageName: node + linkType: hard + "create-require@npm:^1.1.0": version: 1.1.1 resolution: "create-require@npm:1.1.1" @@ -8389,6 +10970,13 @@ __metadata: languageName: node linkType: hard +"crossws@npm:^0.1.0": + version: 0.1.1 + resolution: "crossws@npm:0.1.1" + checksum: 2029638e059f4bb62c10fe420e24d7fff97bcf9f93e380e0d90f117cf055deb7f07dae16df65a0aaeeb8ecd7b71fedd735deca7dde56351ea7b377915c37b68b + languageName: node + linkType: hard + "crypt@npm:>= 0.0.1": version: 0.0.2 resolution: "crypt@npm:0.0.2" @@ -8403,6 +10991,29 @@ __metadata: languageName: node linkType: hard +"css-what@npm:^5.0.1": + version: 5.1.0 + resolution: "css-what@npm:5.1.0" + checksum: 3b1f0abdf104a2e887be45c5b710b063d3fa7468d1d1eea071fbd6e5b3e2e7d4c0cb001edec07ea5a360c06425f351e0356539155b70ea461382c9c7bcaba4d7 + languageName: node + linkType: hard + +"cssesc@npm:^3.0.0": + version: 3.0.0 + resolution: "cssesc@npm:3.0.0" + bin: + cssesc: bin/cssesc + checksum: 0e161912c1306861d8f46e1883be1cbc8b1b2879f0f509287c0db71796e4ddfb97ac96bdfca38f77f452e2c10554e1bb5678c99b07a5cf947a12778f73e47e12 + languageName: node + linkType: hard + +"csstype@npm:^3.0.2, csstype@npm:^3.0.7": + version: 3.1.3 + resolution: "csstype@npm:3.1.3" + checksum: f593cce41ff5ade23f44e77521e3a1bcc2c64107041e1bf6c3c32adc5187d0d60983292fda326154d20b01079e24931aa5b08e4467cc488b60bb1e7f6d478ade + languageName: node + linkType: hard + "csv-generate@npm:^3.4.3": version: 3.4.3 resolution: "csv-generate@npm:3.4.3" @@ -8480,7 +11091,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:4.3.4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": +"debug@npm:4, debug@npm:4.3.4, debug@npm:^4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": version: 4.3.4 resolution: "debug@npm:4.3.4" dependencies: @@ -8532,6 +11143,13 @@ __metadata: languageName: node linkType: hard +"decode-uri-component@npm:^0.2.2": + version: 0.2.2 + resolution: "decode-uri-component@npm:0.2.2" + checksum: 17a0e5fa400bf9ea84432226e252aa7b5e72793e16bf80b907c99b46a799aeacc139ec20ea57121e50c7bd875a1a4365928f884e92abf02e21a5a13790a0f33e + languageName: node + linkType: hard + "decompress-response@npm:^3.2.0, decompress-response@npm:^3.3.0": version: 3.3.0 resolution: "decompress-response@npm:3.3.0" @@ -8559,6 +11177,18 @@ __metadata: languageName: node linkType: hard +"dedent@npm:^1.0.0": + version: 1.5.1 + resolution: "dedent@npm:1.5.1" + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + checksum: fc00a8bc3dfb7c413a778dc40ee8151b6c6ff35159d641f36ecd839c1df5c6e0ec5f4992e658c82624a1a62aaecaffc23b9c965ceb0bbf4d698bfc16469ac27d + languageName: node + linkType: hard + "deep-eql@npm:^3.0.1": version: 3.0.1 resolution: "deep-eql@npm:3.0.1" @@ -8591,6 +11221,27 @@ __metadata: languageName: node linkType: hard +"deep-object-diff@npm:^1.1.0": + version: 1.1.9 + resolution: "deep-object-diff@npm:1.1.9" + checksum: b9771cc1ca08a34e408309eaab967bd2ab697684abdfa1262f4283ced8230a9ace966322f356364ff71a785c6e9cc356b7596582e900da5726e6b87d4b2a1463 + languageName: node + linkType: hard + +"deepmerge@npm:^2.1.1": + version: 2.2.1 + resolution: "deepmerge@npm:2.2.1" + checksum: a3da411cd3d471a8ae86ff7fd5e19abb648377b3f8c42a9e4c822406c2960a391cb829e4cca53819b73715e68f56b06f53c643ca7bba21cab569fecc9a723de1 + languageName: node + linkType: hard + +"deepmerge@npm:^4.2.2": + version: 4.3.1 + resolution: "deepmerge@npm:4.3.1" + checksum: 058d9e1b0ff1a154468bf3837aea436abcfea1ba1d165ddaaf48ca93765fdd01a30d33c36173da8fbbed951dd0a267602bc782fe288b0fc4b7e1e7091afc4529 + languageName: node + linkType: hard + "defaults@npm:^1.0.3": version: 1.0.4 resolution: "defaults@npm:1.0.4" @@ -8649,6 +11300,13 @@ __metadata: languageName: node linkType: hard +"defu@npm:^6.1.3, defu@npm:^6.1.4": + version: 6.1.4 + resolution: "defu@npm:6.1.4" + checksum: aeffdb47300f45b4fdef1c5bd3880ac18ea7a1fd5b8a8faf8df29350ff03bf16dd34f9800205cab513d476e4c0a3783aa0cff0a433aff0ac84a67ddc4c8a2d64 + languageName: node + linkType: hard + "delay@npm:^5.0.0": version: 5.0.0 resolution: "delay@npm:5.0.0" @@ -8670,6 +11328,13 @@ __metadata: languageName: node linkType: hard +"denque@npm:^2.1.0": + version: 2.1.0 + resolution: "denque@npm:2.1.0" + checksum: 8ea05321576624b90acfc1ee9208b8d1d04b425cf7573b9b4fa40a2c3ed4d4b0af5190567858f532f677ed2003d4d2b73c8130b34e3c7b8d5e88cdcfbfaa1fe7 + languageName: node + linkType: hard + "depd@npm:2.0.0": version: 2.0.0 resolution: "depd@npm:2.0.0" @@ -8684,6 +11349,13 @@ __metadata: languageName: node linkType: hard +"destr@npm:^2.0.1, destr@npm:^2.0.2": + version: 2.0.3 + resolution: "destr@npm:2.0.3" + checksum: dbb756baa876810ec0ca4bcb702d86cc3b480ed14f36bf5747718ed211f96bca5520b63a4109eb181ad940ee2a645677d9a63d4a0ed11a7510619dae97317201 + languageName: node + linkType: hard + "destroy@npm:1.2.0": version: 1.2.0 resolution: "destroy@npm:1.2.0" @@ -8691,6 +11363,13 @@ __metadata: languageName: node linkType: hard +"detect-browser@npm:5.3.0, detect-browser@npm:^5.3.0": + version: 5.3.0 + resolution: "detect-browser@npm:5.3.0" + checksum: 4a8551e1f5170633c9aa976f16c57f81f1044d071b2eb853c572bd817bf9cd0cc90c9c520d950edb5accd31b1b0c8ddb7a96e82040b0b5579f9f09c77446a117 + languageName: node + linkType: hard + "detect-indent@npm:^6.0.0": version: 6.1.0 resolution: "detect-indent@npm:6.1.0" @@ -8707,6 +11386,20 @@ __metadata: languageName: node linkType: hard +"detect-newline@npm:^3.0.0": + version: 3.1.0 + resolution: "detect-newline@npm:3.1.0" + checksum: ae6cd429c41ad01b164c59ea36f264a2c479598e61cba7c99da24175a7ab80ddf066420f2bec9a1c57a6bead411b4655ff15ad7d281c000a89791f48cbe939e7 + languageName: node + linkType: hard + +"detect-node-es@npm:^1.1.0": + version: 1.1.0 + resolution: "detect-node-es@npm:1.1.0" + checksum: e46307d7264644975b71c104b9f028ed1d3d34b83a15b8a22373640ce5ea630e5640b1078b8ea15f202b54641da71e4aa7597093bd4b91f113db520a26a37449 + languageName: node + linkType: hard + "detect-port@npm:^1.3.0": version: 1.3.0 resolution: "detect-port@npm:1.3.0" @@ -8720,6 +11413,13 @@ __metadata: languageName: node linkType: hard +"diff-sequences@npm:^29.6.3": + version: 29.6.3 + resolution: "diff-sequences@npm:29.6.3" + checksum: 179daf9d2f9af5c57ad66d97cb902a538bcf8ed64963fa7aa0c329b3de3665ce2eb6ffdc2f69f29d445fa4af2517e5e55e5b6e00c00a9ae4f43645f97f7078cb + languageName: node + linkType: hard + "diff@npm:3.5.0": version: 3.5.0 resolution: "diff@npm:3.5.0" @@ -8757,6 +11457,13 @@ __metadata: languageName: node linkType: hard +"dijkstrajs@npm:^1.0.1": + version: 1.0.3 + resolution: "dijkstrajs@npm:1.0.3" + checksum: 0d8429699a6d5897ed371de494ef3c7072e8052b42abbd978e686a9b8689e70af005fa3e93e93263ee3653673ff5f89c36db830a57ae7c2e088cb9c496307507 + languageName: node + linkType: hard + "dir-glob@npm:^3.0.1": version: 3.0.1 resolution: "dir-glob@npm:3.0.1" @@ -8782,6 +11489,15 @@ __metadata: languageName: node linkType: hard +"dotenv-flow@npm:^4.1.0": + version: 4.1.0 + resolution: "dotenv-flow@npm:4.1.0" + dependencies: + dotenv: "npm:^16.0.0" + checksum: 75c36fefbc25e8c4f2cd6cff0a161444c7f2e992ea24662c63887aa57950007355df5bf153a6acc7e20c05ff3e5b783150e255ce543464a748de32bb9c6e222c + languageName: node + linkType: hard + "dotenv@npm:^10.0.0": version: 10.0.0 resolution: "dotenv@npm:10.0.0" @@ -8789,6 +11505,13 @@ __metadata: languageName: node linkType: hard +"dotenv@npm:^16.0.0": + version: 16.4.4 + resolution: "dotenv@npm:16.4.4" + checksum: ddf43ede209d5f54c9da688e93326162eb0fc367ad1869909568cb15571ab8c87a0fab4e1d4af9860be0571c707a8b4aefa060a4f1b0bb14298a81e0ccf0017d + languageName: node + linkType: hard + "duplexer3@npm:^0.1.4": version: 0.1.4 resolution: "duplexer3@npm:0.1.4" @@ -8796,6 +11519,18 @@ __metadata: languageName: node linkType: hard +"duplexify@npm:^4.1.2": + version: 4.1.2 + resolution: "duplexify@npm:4.1.2" + dependencies: + end-of-stream: "npm:^1.4.1" + inherits: "npm:^2.0.3" + readable-stream: "npm:^3.1.1" + stream-shift: "npm:^1.0.0" + checksum: eeb4f362defa4da0b2474d853bc4edfa446faeb1bde76819a68035632c118de91f6a58e6fe05c84f6e6de2548f8323ec8473aa9fe37332c99e4d77539747193e + languageName: node + linkType: hard + "eastasianwidth@npm:^0.2.0": version: 0.2.0 resolution: "eastasianwidth@npm:0.2.0" @@ -8820,6 +11555,13 @@ __metadata: languageName: node linkType: hard +"electron-to-chromium@npm:^1.4.668": + version: 1.4.671 + resolution: "electron-to-chromium@npm:1.4.671" + checksum: 2b3d85feb86800020bb249ace65dec428452a2e035145718c08023de788873ca3d35915845824cbe6773ee40dc35ecd596b45fc9e2c16de58ecdda6f551cba90 + languageName: node + linkType: hard + "elliptic@npm:6.5.4, elliptic@npm:^6.4.0, elliptic@npm:^6.5.2, elliptic@npm:^6.5.4": version: 6.5.4 resolution: "elliptic@npm:6.5.4" @@ -8842,6 +11584,13 @@ __metadata: languageName: node linkType: hard +"emittery@npm:^0.13.1": + version: 0.13.1 + resolution: "emittery@npm:0.13.1" + checksum: fbe214171d878b924eedf1757badf58a5dce071cd1fa7f620fa841a0901a80d6da47ff05929d53163105e621ce11a71b9d8acb1148ffe1745e045145f6e69521 + languageName: node + linkType: hard + "emoji-regex@npm:^7.0.1": version: 7.0.3 resolution: "emoji-regex@npm:7.0.3" @@ -8863,6 +11612,13 @@ __metadata: languageName: node linkType: hard +"encode-utf8@npm:^1.0.3": + version: 1.0.3 + resolution: "encode-utf8@npm:1.0.3" + checksum: 0204c37cda21bf19bb8f87f7ec6c89a23d43488c2ef1e5cfa40b64ee9568e63e15dc323fa7f50a491e2c6d33843a6b409f6de09afbf6cf371cb8da596cc64b44 + languageName: node + linkType: hard + "encodeurl@npm:~1.0.2": version: 1.0.2 resolution: "encodeurl@npm:1.0.2" @@ -9142,6 +11898,13 @@ __metadata: languageName: node linkType: hard +"escape-string-regexp@npm:^2.0.0": + version: 2.0.0 + resolution: "escape-string-regexp@npm:2.0.0" + checksum: 9f8a2d5743677c16e85c810e3024d54f0c8dea6424fad3c79ef6666e81dd0846f7437f5e729dfcdac8981bc9e5294c39b4580814d114076b8d36318f46ae4395 + languageName: node + linkType: hard + "escodegen@npm:1.8.x": version: 1.8.1 resolution: "escodegen@npm:1.8.1" @@ -9339,6 +12102,19 @@ __metadata: languageName: node linkType: hard +"eth-block-tracker@npm:^7.1.0": + version: 7.1.0 + resolution: "eth-block-tracker@npm:7.1.0" + dependencies: + "@metamask/eth-json-rpc-provider": "npm:^1.0.0" + "@metamask/safe-event-emitter": "npm:^3.0.0" + "@metamask/utils": "npm:^5.0.1" + json-rpc-random-id: "npm:^1.0.1" + pify: "npm:^3.0.0" + checksum: b001ecb126e949a9ff19950596d5180b2f1bc5504e3dec0c01b3417e8ad190f4a53dfc61be901b72ab6dd558d1d711b73eca560bc8a605d0348eef9f501defab + languageName: node + linkType: hard + "eth-ens-namehash@npm:2.0.8": version: 2.0.8 resolution: "eth-ens-namehash@npm:2.0.8" @@ -9377,6 +12153,19 @@ __metadata: languageName: node linkType: hard +"eth-json-rpc-filters@npm:^6.0.0": + version: 6.0.1 + resolution: "eth-json-rpc-filters@npm:6.0.1" + dependencies: + "@metamask/safe-event-emitter": "npm:^3.0.0" + async-mutex: "npm:^0.2.6" + eth-query: "npm:^2.1.2" + json-rpc-engine: "npm:^6.1.0" + pify: "npm:^5.0.0" + checksum: d1fa8bb21da07c2f5d37c1e6053d499b272b4f49542077efc6b05eebe49affa9df7221c8c2439c4e33caa3f4ccb35240a6105abc83b83375dae03c0de53113a7 + languageName: node + linkType: hard + "eth-lib@npm:0.2.8": version: 0.2.8 resolution: "eth-lib@npm:0.2.8" @@ -9402,6 +12191,25 @@ __metadata: languageName: node linkType: hard +"eth-query@npm:^2.1.2": + version: 2.1.2 + resolution: "eth-query@npm:2.1.2" + dependencies: + json-rpc-random-id: "npm:^1.0.0" + xtend: "npm:^4.0.1" + checksum: af4f3575b8315f8156a83a24e850881053748aca97e4aee12dd6645ab56f0985c7000a5c45ccf315702f3e532f0c6464e03f4aba294c658dee89f5e5d1b86702 + languageName: node + linkType: hard + +"eth-rpc-errors@npm:^4.0.2": + version: 4.0.3 + resolution: "eth-rpc-errors@npm:4.0.3" + dependencies: + fast-safe-stringify: "npm:^2.0.6" + checksum: 47ce14170eabaee51ab1cc7e643bb3ef96ee6b15c6404806aedcd51750e00ae0b1a12c37785b180679b8d452b6dd44a0240bb018d01fa73efc85fcfa808b35a7 + languageName: node + linkType: hard + "ethereum-bloom-filters@npm:^1.0.6": version: 1.0.10 resolution: "ethereum-bloom-filters@npm:1.0.10" @@ -9446,6 +12254,18 @@ __metadata: languageName: node linkType: hard +"ethereum-cryptography@npm:^2.0.0": + version: 2.1.3 + resolution: "ethereum-cryptography@npm:2.1.3" + dependencies: + "@noble/curves": "npm:1.3.0" + "@noble/hashes": "npm:1.3.3" + "@scure/bip32": "npm:1.3.3" + "@scure/bip39": "npm:1.2.2" + checksum: cc5aa9a4368dc1dd7680ba921957c098ced7b3d7dbb1666334013ab2f8d4cd25a785ad84e66fd9f5c5a9b6de337930ea24ff8c722938f36a9c00cec597ca16b5 + languageName: node + linkType: hard + "ethereum-waffle@npm:^4.0.10": version: 4.0.10 resolution: "ethereum-waffle@npm:4.0.10" @@ -9515,24 +12335,7 @@ __metadata: languageName: node linkType: hard -"ethers@npm:^4.0.40": - version: 4.0.49 - resolution: "ethers@npm:4.0.49" - dependencies: - aes-js: "npm:3.0.0" - bn.js: "npm:^4.11.9" - elliptic: "npm:6.5.4" - hash.js: "npm:1.1.3" - js-sha3: "npm:0.5.7" - scrypt-js: "npm:2.0.4" - setimmediate: "npm:1.0.4" - uuid: "npm:2.0.1" - xmlhttprequest: "npm:1.8.0" - checksum: a4cec0254f940a0fb118317d23676faa46eb5540fc0a3b9177b8aef71318f509ed19b8264f102b1a2a32d0256274ecc526fd926bd22a4a4ac25cd8e0e6560f12 - languageName: node - linkType: hard - -"ethers@npm:^5.1.0, ethers@npm:^5.7.0, ethers@npm:^5.7.1, ethers@npm:^5.7.2": +"ethers@npm:5.7.2, ethers@npm:^5.1.0, ethers@npm:^5.3.1, ethers@npm:^5.7.0, ethers@npm:^5.7.1, ethers@npm:^5.7.2": version: 5.7.2 resolution: "ethers@npm:5.7.2" dependencies: @@ -9570,6 +12373,23 @@ __metadata: languageName: node linkType: hard +"ethers@npm:^4.0.40": + version: 4.0.49 + resolution: "ethers@npm:4.0.49" + dependencies: + aes-js: "npm:3.0.0" + bn.js: "npm:^4.11.9" + elliptic: "npm:6.5.4" + hash.js: "npm:1.1.3" + js-sha3: "npm:0.5.7" + scrypt-js: "npm:2.0.4" + setimmediate: "npm:1.0.4" + uuid: "npm:2.0.1" + xmlhttprequest: "npm:1.8.0" + checksum: a4cec0254f940a0fb118317d23676faa46eb5540fc0a3b9177b8aef71318f509ed19b8264f102b1a2a32d0256274ecc526fd926bd22a4a4ac25cd8e0e6560f12 + languageName: node + linkType: hard + "ethjs-unit@npm:0.1.6": version: 0.1.6 resolution: "ethjs-unit@npm:0.1.6" @@ -9604,6 +12424,13 @@ __metadata: languageName: node linkType: hard +"eventemitter3@npm:^5.0.1": + version: 5.0.1 + resolution: "eventemitter3@npm:5.0.1" + checksum: ac6423ec31124629c84c7077eed1e6987f6d66c31cf43c6fcbf6c87791d56317ce808d9ead483652436df171b526fc7220eccdc9f3225df334e81582c3cf7dd5 + languageName: node + linkType: hard + "events@npm:^3.2.0, events@npm:^3.3.0": version: 3.3.0 resolution: "events@npm:3.3.0" @@ -9622,7 +12449,7 @@ __metadata: languageName: node linkType: hard -"execa@npm:^5.1.1": +"execa@npm:^5.0.0, execa@npm:^5.1.1": version: 5.1.1 resolution: "execa@npm:5.1.1" dependencies: @@ -9639,6 +12466,30 @@ __metadata: languageName: node linkType: hard +"execa@npm:^8.0.1": + version: 8.0.1 + resolution: "execa@npm:8.0.1" + dependencies: + cross-spawn: "npm:^7.0.3" + get-stream: "npm:^8.0.1" + human-signals: "npm:^5.0.0" + is-stream: "npm:^3.0.0" + merge-stream: "npm:^2.0.0" + npm-run-path: "npm:^5.1.0" + onetime: "npm:^6.0.0" + signal-exit: "npm:^4.1.0" + strip-final-newline: "npm:^3.0.0" + checksum: d2ab5fe1e2bb92b9788864d0713f1fce9a07c4594e272c0c97bc18c90569897ab262e4ea58d27a694d288227a2e24f16f5e2575b44224ad9983b799dc7f1098d + languageName: node + linkType: hard + +"exit@npm:^0.1.2": + version: 0.1.2 + resolution: "exit@npm:0.1.2" + checksum: 387555050c5b3c10e7a9e8df5f43194e95d7737c74532c409910e585d5554eaff34960c166643f5e23d042196529daad059c292dcf1fb61b8ca878d3677f4b87 + languageName: node + linkType: hard + "expand-template@npm:^2.0.3": version: 2.0.3 resolution: "expand-template@npm:2.0.3" @@ -9646,6 +12497,19 @@ __metadata: languageName: node linkType: hard +"expect@npm:^29.7.0": + version: 29.7.0 + resolution: "expect@npm:29.7.0" + dependencies: + "@jest/expect-utils": "npm:^29.7.0" + jest-get-type: "npm:^29.6.3" + jest-matcher-utils: "npm:^29.7.0" + jest-message-util: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + checksum: 63f97bc51f56a491950fb525f9ad94f1916e8a014947f8d8445d3847a665b5471b768522d659f5e865db20b6c2033d2ac10f35fcbd881a4d26407a4f6f18451a + languageName: node + linkType: hard + "express@npm:^4.14.0": version: 4.18.1 resolution: "express@npm:4.18.1" @@ -9685,6 +12549,45 @@ __metadata: languageName: node linkType: hard +"express@npm:^4.17.1": + version: 4.18.2 + resolution: "express@npm:4.18.2" + dependencies: + accepts: "npm:~1.3.8" + array-flatten: "npm:1.1.1" + body-parser: "npm:1.20.1" + content-disposition: "npm:0.5.4" + content-type: "npm:~1.0.4" + cookie: "npm:0.5.0" + cookie-signature: "npm:1.0.6" + debug: "npm:2.6.9" + depd: "npm:2.0.0" + encodeurl: "npm:~1.0.2" + escape-html: "npm:~1.0.3" + etag: "npm:~1.8.1" + finalhandler: "npm:1.2.0" + fresh: "npm:0.5.2" + http-errors: "npm:2.0.0" + merge-descriptors: "npm:1.0.1" + methods: "npm:~1.1.2" + on-finished: "npm:2.4.1" + parseurl: "npm:~1.3.3" + path-to-regexp: "npm:0.1.7" + proxy-addr: "npm:~2.0.7" + qs: "npm:6.11.0" + range-parser: "npm:~1.2.1" + safe-buffer: "npm:5.2.1" + send: "npm:0.18.0" + serve-static: "npm:1.15.0" + setprototypeof: "npm:1.2.0" + statuses: "npm:2.0.1" + type-is: "npm:~1.6.18" + utils-merge: "npm:1.0.1" + vary: "npm:~1.1.2" + checksum: 869ae89ed6ff4bed7b373079dc58e5dddcf2915a2669b36037ff78c99d675ae930e5fe052b35c24f56557d28a023bb1cbe3e2f2fb87eaab96a1cedd7e597809d + languageName: node + linkType: hard + "ext@npm:^1.1.2": version: 1.6.0 resolution: "ext@npm:1.6.0" @@ -9774,7 +12677,7 @@ __metadata: languageName: node linkType: hard -"fast-json-stable-stringify@npm:^2.0.0": +"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" checksum: 2c20055c1fa43c922428f16ca8bb29f2807de63e5c851f665f7ac9790176c01c3b40335257736b299764a8d383388dabc73c8083b8e1bc3d99f0a941444ec60e @@ -9788,6 +12691,20 @@ __metadata: languageName: node linkType: hard +"fast-redact@npm:^3.0.0": + version: 3.3.0 + resolution: "fast-redact@npm:3.3.0" + checksum: a69c5cb52396eafc4f466f46864406cbd4a6ead6782caf74750ce817794829048baaa933ad98543e744dd54ffb4cddff71f3e75e465a86e3d887894e281ec154 + languageName: node + linkType: hard + +"fast-safe-stringify@npm:^2.0.6": + version: 2.1.1 + resolution: "fast-safe-stringify@npm:2.1.1" + checksum: dc1f063c2c6ac9533aee14d406441f86783a8984b2ca09b19c2fe281f9ff59d315298bc7bc22fd1f83d26fe19ef2f20e2ddb68e96b15040292e555c5ced0c1e4 + languageName: node + linkType: hard + "fast-stable-stringify@npm:^1.0.0": version: 1.0.0 resolution: "fast-stable-stringify@npm:1.0.0" @@ -9813,6 +12730,15 @@ __metadata: languageName: node linkType: hard +"fb-watchman@npm:^2.0.0": + version: 2.0.2 + resolution: "fb-watchman@npm:2.0.2" + dependencies: + bser: "npm:2.1.1" + checksum: 4f95d336fb805786759e383fd7fff342ceb7680f53efcc0ef82f502eb479ce35b98e8b207b6dfdfeea0eba845862107dc73813775fc6b56b3098c6e90a2dad77 + languageName: node + linkType: hard + "figures@npm:^3.2.0": version: 3.2.0 resolution: "figures@npm:3.2.0" @@ -9847,6 +12773,13 @@ __metadata: languageName: node linkType: hard +"filter-obj@npm:^1.1.0": + version: 1.1.0 + resolution: "filter-obj@npm:1.1.0" + checksum: 9d681939eec2b4b129cb4f307b7e93d954a0657421d4e5357d86093b26d3f4f570909ed43717dcfd62428b3cf8cddd9841b35f9d40d12ac62cfabaa677942593 + languageName: node + linkType: hard + "finalhandler@npm:1.2.0": version: 1.2.0 resolution: "finalhandler@npm:1.2.0" @@ -10028,6 +12961,24 @@ __metadata: languageName: node linkType: hard +"formik@npm:^2.2.9": + version: 2.4.5 + resolution: "formik@npm:2.4.5" + dependencies: + "@types/hoist-non-react-statics": "npm:^3.3.1" + deepmerge: "npm:^2.1.1" + hoist-non-react-statics: "npm:^3.3.0" + lodash: "npm:^4.17.21" + lodash-es: "npm:^4.17.21" + react-fast-compare: "npm:^2.0.1" + tiny-warning: "npm:^1.0.2" + tslib: "npm:^2.0.0" + peerDependencies: + react: ">=16.8.0" + checksum: 223fb3e6b0a7803221c030364a015b9adb01b61f7aed7c64e28ef8341a3e7c94c7a70aef7ed9f65d03ac44e4e19972c1247fb0e39538e4e084833fd1fa3b11c4 + languageName: node + linkType: hard + "forwarded@npm:0.2.0": version: 0.2.0 resolution: "forwarded@npm:0.2.0" @@ -10153,6 +13104,16 @@ __metadata: languageName: node linkType: hard +"fsevents@npm:^2.3.2": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: "npm:latest" + checksum: 4c1ade961ded57cdbfbb5cac5106ec17bc8bccd62e16343c569a0ceeca83b9dfef87550b4dc5cbb89642da412b20c5071f304c8c464b80415446e8e155a038c0 + conditions: os=darwin + languageName: node + linkType: hard + "fsevents@npm:~2.1.1": version: 2.1.3 resolution: "fsevents@npm:2.1.3" @@ -10173,6 +13134,15 @@ __metadata: languageName: node linkType: hard +"fsevents@patch:fsevents@npm%3A^2.3.2#optional!builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: "npm:latest" + conditions: os=darwin + languageName: node + linkType: hard + "fsevents@patch:fsevents@npm%3A~2.1.1#optional!builtin": version: 2.1.3 resolution: "fsevents@patch:fsevents@npm%3A2.1.3#optional!builtin::version=2.1.3&hash=31d12a" @@ -10301,6 +13271,13 @@ __metadata: languageName: node linkType: hard +"gensync@npm:^1.0.0-beta.2": + version: 1.0.0-beta.2 + resolution: "gensync@npm:1.0.0-beta.2" + checksum: 17d8333460204fbf1f9160d067e1e77f908a5447febb49424b8ab043026049835c9ef3974445c57dbd39161f4d2b04356d7de12b2eecaa27a7a7ea7d871cbedd + languageName: node + linkType: hard + "get-caller-file@npm:^2.0.1, get-caller-file@npm:^2.0.5": version: 2.0.5 resolution: "get-caller-file@npm:2.0.5" @@ -10345,6 +13322,27 @@ __metadata: languageName: node linkType: hard +"get-nonce@npm:^1.0.0": + version: 1.0.1 + resolution: "get-nonce@npm:1.0.1" + checksum: ad5104871d114a694ecc506a2d406e2331beccb961fe1e110dc25556b38bcdbf399a823a8a375976cd8889668156a9561e12ebe3fa6a4c6ba169c8466c2ff868 + languageName: node + linkType: hard + +"get-package-type@npm:^0.1.0": + version: 0.1.0 + resolution: "get-package-type@npm:0.1.0" + checksum: bba0811116d11e56d702682ddef7c73ba3481f114590e705fc549f4d868972263896af313c57a25c076e3c0d567e11d919a64ba1b30c879be985fc9d44f96148 + languageName: node + linkType: hard + +"get-port-please@npm:^3.1.2": + version: 3.1.2 + resolution: "get-port-please@npm:3.1.2" + checksum: ec8b8da9f816edde114b76742ec29695730094904bb0e94309081e4adf3f797b483b9d648abcf5e0511c4e21a7bf68334672b9575f8b23bccf93bf97eb517f0e + languageName: node + linkType: hard + "get-port@npm:^3.1.0": version: 3.2.0 resolution: "get-port@npm:3.2.0" @@ -10375,6 +13373,13 @@ __metadata: languageName: node linkType: hard +"get-stream@npm:^8.0.1": + version: 8.0.1 + resolution: "get-stream@npm:8.0.1" + checksum: dde5511e2e65a48e9af80fea64aff11b4921b14b6e874c6f8294c50975095af08f41bfb0b680c887f28b566dd6ec2cb2f960f9d36a323359be324ce98b766e9e + languageName: node + linkType: hard + "get-symbol-description@npm:^1.0.0": version: 1.0.0 resolution: "get-symbol-description@npm:1.0.0" @@ -10431,6 +13436,13 @@ __metadata: languageName: node linkType: hard +"glob-to-regexp@npm:^0.4.1": + version: 0.4.1 + resolution: "glob-to-regexp@npm:0.4.1" + checksum: 9009529195a955c40d7b9690794aeff5ba665cc38f1519e111c58bb54366fd0c106bde80acf97ba4e533208eb53422c83b136611a54c5fefb1edd8dc267cb62e + languageName: node + linkType: hard + "glob@npm:7.1.3": version: 7.1.3 resolution: "glob@npm:7.1.3" @@ -10708,7 +13720,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.5": +"graceful-fs@npm:^4.1.5, graceful-fs@npm:^4.2.9": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: bf152d0ed1dc159239db1ba1f74fdbc40cb02f626770dcd5815c427ce0688c2635a06ed69af364396da4636d0408fcf7d4afdf7881724c3307e46aff30ca49e2 @@ -10729,6 +13741,13 @@ __metadata: languageName: node linkType: hard +"graphql@npm:^16.6.0": + version: 16.8.1 + resolution: "graphql@npm:16.8.1" + checksum: 7a09d3ec5f75061afe2bd2421a2d53cf37273d2ecaad8f34febea1f1ac205dfec2834aec3419fa0a10fcc9fb345863b2f893562fb07ea825da2ae82f6392893c + languageName: node + linkType: hard + "growl@npm:1.10.5": version: 1.10.5 resolution: "growl@npm:1.10.5" @@ -10736,6 +13755,23 @@ __metadata: languageName: node linkType: hard +"h3@npm:^1.10.1, h3@npm:^1.8.2": + version: 1.10.2 + resolution: "h3@npm:1.10.2" + dependencies: + cookie-es: "npm:^1.0.0" + defu: "npm:^6.1.4" + destr: "npm:^2.0.2" + iron-webcrypto: "npm:^1.0.0" + ohash: "npm:^1.1.3" + radix3: "npm:^1.1.0" + ufo: "npm:^1.3.2" + uncrypto: "npm:^0.1.3" + unenv: "npm:^1.9.0" + checksum: 7dbf129fe2d7eb9d4f306a3fb79e381842500476de49a124cfbc5cf94aff95cffa8b6e5e88b523b252abe3f20688de05fff837e8a4197eb3acec27b664427be2 + languageName: node + linkType: hard + "handlebars@npm:^4.0.1": version: 4.7.7 resolution: "handlebars@npm:4.7.7" @@ -11005,6 +14041,13 @@ __metadata: languageName: node linkType: hard +"hey-listen@npm:^1.0.8": + version: 1.0.8 + resolution: "hey-listen@npm:1.0.8" + checksum: 744b5f4c18c7cfb82b22bd22e1d300a9ac4eafe05a22e58fb87e48addfca8be00604d9aa006434ea02f9530990eb4b393ddb28659e2ab7f833ce873e32eb809c + languageName: node + linkType: hard + "hmac-drbg@npm:^1.0.1": version: 1.0.1 resolution: "hmac-drbg@npm:1.0.1" @@ -11016,6 +14059,15 @@ __metadata: languageName: node linkType: hard +"hoist-non-react-statics@npm:^3.3.0": + version: 3.3.2 + resolution: "hoist-non-react-statics@npm:3.3.2" + dependencies: + react-is: "npm:^16.7.0" + checksum: 1acbe85f33e5a39f90c822ad4d28b24daeb60f71c545279431dc98c312cd28a54f8d64788e477fe21dc502b0e3cf58589ebe5c1ad22af27245370391c2d24ea6 + languageName: node + linkType: hard + "hosted-git-info@npm:^2.1.4, hosted-git-info@npm:^2.6.0": version: 2.8.9 resolution: "hosted-git-info@npm:2.8.9" @@ -11023,6 +14075,13 @@ __metadata: languageName: node linkType: hard +"html-escaper@npm:^2.0.0": + version: 2.0.2 + resolution: "html-escaper@npm:2.0.2" + checksum: 034d74029dcca544a34fb6135e98d427acd73019796ffc17383eaa3ec2fe1c0471dcbbc8f8ed39e46e86d43ccd753a160631615e4048285e313569609b66d5b7 + languageName: node + linkType: hard + "http-basic@npm:^8.1.1": version: 8.1.3 resolution: "http-basic@npm:8.1.3" @@ -11089,6 +14148,13 @@ __metadata: languageName: node linkType: hard +"http-shutdown@npm:^1.2.2": + version: 1.2.2 + resolution: "http-shutdown@npm:1.2.2" + checksum: 1c99b575b1a7ebd749950e7f59410348723638808336063321d89588b7f7b548d61c8e3566af0f1f4f961d941c758677d062d2289bc63356ead143da4d8f3daf + languageName: node + linkType: hard + "http-signature@npm:~1.2.0": version: 1.2.0 resolution: "http-signature@npm:1.2.0" @@ -11134,6 +14200,13 @@ __metadata: languageName: node linkType: hard +"human-signals@npm:^5.0.0": + version: 5.0.0 + resolution: "human-signals@npm:5.0.0" + checksum: 30f8870d831cdcd2d6ec0486a7d35d49384996742052cee792854273fa9dd9e7d5db06bb7985d4953e337e10714e994e0302e90dc6848069171b05ec836d65b0 + languageName: node + linkType: hard + "humanize-ms@npm:^1.2.1": version: 1.2.1 resolution: "humanize-ms@npm:1.2.1" @@ -11152,6 +14225,35 @@ __metadata: languageName: node linkType: hard +"hyperlane-explorer@https://github.com/hyperlane-xyz/hyperlane-explorer.git": + version: 3.7.0 + resolution: "hyperlane-explorer@https://github.com/hyperlane-xyz/hyperlane-explorer.git#commit=72243333c4883b0dd3480af66a939f224ed64cd7" + dependencies: + "@headlessui/react": "npm:^1.7.17" + "@hyperlane-xyz/sdk": "npm:3.7.0" + "@hyperlane-xyz/utils": "npm:3.7.0" + "@hyperlane-xyz/widgets": "npm:3.7.0" + "@metamask/jazzicon": "https://github.com/jmrossy/jazzicon#7a8df28974b4e81129bfbe3cab76308b889032a6" + "@rainbow-me/rainbowkit": "npm:0.12.16" + "@tanstack/react-query": "npm:^4.24.10" + bignumber.js: "npm:^9.1.2" + buffer: "npm:^6.0.3" + ethers: "npm:^5.7.2" + formik: "npm:^2.2.9" + graphql: "npm:^16.6.0" + next: "npm:^13.4.19" + nextjs-cors: "npm:^2.1.2" + react: "npm:^18.2.0" + react-dom: "npm:^18.2.0" + react-toastify: "npm:^9.1.1" + urql: "npm:^3.0.3" + wagmi: "npm:0.12.18" + zod: "npm:^3.21.2" + zustand: "npm:4.3.8" + checksum: 8caec09863f13297b7af12fde0c7df373eb0665e6302914ffdd9df939e6fd24a5aff563ada554014ff58e967f8710df4fa08d81414a93ee5266d569d9cb7b89e + languageName: node + linkType: hard + "iconv-lite@npm:0.4.24, iconv-lite@npm:^0.4.24": version: 0.4.24 resolution: "iconv-lite@npm:0.4.24" @@ -11170,6 +14272,13 @@ __metadata: languageName: node linkType: hard +"idb-keyval@npm:^6.2.1": + version: 6.2.1 + resolution: "idb-keyval@npm:6.2.1" + checksum: 9a1416ff5e2ceff3832f5645518f438833a5ff6ee316fe3ec111d580db120425991d64d8098a847be7541bbbb7cc941984b4d0d62d541c39f7a0f415594837c2 + languageName: node + linkType: hard + "idna-uts46-hx@npm:^2.3.1": version: 2.3.1 resolution: "idna-uts46-hx@npm:2.3.1" @@ -11186,6 +14295,13 @@ __metadata: languageName: node linkType: hard +"ignore-by-default@npm:^1.0.1": + version: 1.0.1 + resolution: "ignore-by-default@npm:1.0.1" + checksum: 441509147b3615e0365e407a3c18e189f78c07af08564176c680be1fabc94b6c789cad1342ad887175d4ecd5225de86f73d376cec8e06b42fd9b429505ffcf8a + languageName: node + linkType: hard + "ignore@npm:^5.1.1, ignore@npm:^5.2.0": version: 5.2.0 resolution: "ignore@npm:5.2.0" @@ -11231,6 +14347,18 @@ __metadata: languageName: node linkType: hard +"import-local@npm:^3.0.2": + version: 3.1.0 + resolution: "import-local@npm:3.1.0" + dependencies: + pkg-dir: "npm:^4.2.0" + resolve-cwd: "npm:^3.0.0" + bin: + import-local-fixture: fixtures/cli.js + checksum: bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd + languageName: node + linkType: hard + "imurmurhash@npm:^0.1.4": version: 0.1.4 resolution: "imurmurhash@npm:0.1.4" @@ -11305,7 +14433,7 @@ __metadata: languageName: node linkType: hard -"invariant@npm:2": +"invariant@npm:2, invariant@npm:^2.2.4": version: 2.2.4 resolution: "invariant@npm:2.2.4" dependencies: @@ -11323,6 +14451,23 @@ __metadata: languageName: node linkType: hard +"ioredis@npm:^5.3.2": + version: 5.3.2 + resolution: "ioredis@npm:5.3.2" + dependencies: + "@ioredis/commands": "npm:^1.1.1" + cluster-key-slot: "npm:^1.1.0" + debug: "npm:^4.3.4" + denque: "npm:^2.1.0" + lodash.defaults: "npm:^4.2.0" + lodash.isarguments: "npm:^3.1.0" + redis-errors: "npm:^1.2.0" + redis-parser: "npm:^3.0.0" + standard-as-callback: "npm:^2.1.0" + checksum: 0140f055ef81d28e16ca8400b99dabb9ce82009f54afd83cba952c7d0c5d736841e43247765b8ee1af1f02843531c5b8df240af18bd3d7e2ca3d60b36e76213f + languageName: node + linkType: hard + "ip@npm:^1.1.5": version: 1.1.8 resolution: "ip@npm:1.1.8" @@ -11337,6 +14482,13 @@ __metadata: languageName: node linkType: hard +"iron-webcrypto@npm:^1.0.0": + version: 1.0.0 + resolution: "iron-webcrypto@npm:1.0.0" + checksum: 1af9fc319c21d44023e08b7019b4c5d0b58f32c6fccab6e4885522b3efa2f6c17491f9caccba74d816f04b4af3148f5bd91a9b506b6d84c2db6ac0a678fbd88a + languageName: node + linkType: hard + "is-arguments@npm:^1.0.4": version: 1.1.1 resolution: "is-arguments@npm:1.1.1" @@ -11452,6 +14604,15 @@ __metadata: languageName: node linkType: hard +"is-docker@npm:^3.0.0": + version: 3.0.0 + resolution: "is-docker@npm:3.0.0" + bin: + is-docker: cli.js + checksum: b698118f04feb7eaf3338922bd79cba064ea54a1c3db6ec8c0c8d8ee7613e7e5854d802d3ef646812a8a3ace81182a085dfa0a71cc68b06f3fa794b9783b3c90 + languageName: node + linkType: hard + "is-extglob@npm:^2.1.1": version: 2.1.1 resolution: "is-extglob@npm:2.1.1" @@ -11496,6 +14657,13 @@ __metadata: languageName: node linkType: hard +"is-generator-fn@npm:^2.0.0": + version: 2.1.0 + resolution: "is-generator-fn@npm:2.1.0" + checksum: a6ad5492cf9d1746f73b6744e0c43c0020510b59d56ddcb78a91cbc173f09b5e6beff53d75c9c5a29feb618bfef2bf458e025ecf3a57ad2268e2fb2569f56215 + languageName: node + linkType: hard + "is-generator-function@npm:^1.0.7": version: 1.0.10 resolution: "is-generator-function@npm:1.0.10" @@ -11521,6 +14689,17 @@ __metadata: languageName: node linkType: hard +"is-inside-container@npm:^1.0.0": + version: 1.0.0 + resolution: "is-inside-container@npm:1.0.0" + dependencies: + is-docker: "npm:^3.0.0" + bin: + is-inside-container: cli.js + checksum: c50b75a2ab66ab3e8b92b3bc534e1ea72ca25766832c0623ac22d134116a98bcf012197d1caabe1d1c4bd5f84363d4aa5c36bb4b585fbcaf57be172cd10a1a03 + languageName: node + linkType: hard + "is-lambda@npm:^1.0.1": version: 1.0.1 resolution: "is-lambda@npm:1.0.1" @@ -11619,6 +14798,13 @@ __metadata: languageName: node linkType: hard +"is-stream@npm:^3.0.0": + version: 3.0.0 + resolution: "is-stream@npm:3.0.0" + checksum: 172093fe99119ffd07611ab6d1bcccfe8bc4aa80d864b15f43e63e54b7abc71e779acd69afdb854c4e2a67fdc16ae710e370eda40088d1cfc956a50ed82d8f16 + languageName: node + linkType: hard + "is-string@npm:^1.0.5, is-string@npm:^1.0.7": version: 1.0.7 resolution: "is-string@npm:1.0.7" @@ -11668,7 +14854,7 @@ __metadata: languageName: node linkType: hard -"is-typedarray@npm:^1.0.0, is-typedarray@npm:~1.0.0": +"is-typedarray@npm:1.0.0, is-typedarray@npm:^1.0.0, is-typedarray@npm:~1.0.0": version: 1.0.0 resolution: "is-typedarray@npm:1.0.0" checksum: 4b433bfb0f9026f079f4eb3fbaa4ed2de17c9995c3a0b5c800bec40799b4b2a8b4e051b1ada77749deb9ded4ae52fe2096973f3a93ff83df1a5a7184a669478c @@ -11705,6 +14891,24 @@ __metadata: languageName: node linkType: hard +"is-wsl@npm:^3.1.0": + version: 3.1.0 + resolution: "is-wsl@npm:3.1.0" + dependencies: + is-inside-container: "npm:^1.0.0" + checksum: f9734c81f2f9cf9877c5db8356bfe1ff61680f1f4c1011e91278a9c0564b395ae796addb4bf33956871041476ec82c3e5260ed57b22ac91794d4ae70a1d2f0a9 + languageName: node + linkType: hard + +"is64bit@npm:^2.0.0": + version: 2.0.0 + resolution: "is64bit@npm:2.0.0" + dependencies: + system-architecture: "npm:^0.1.0" + checksum: 94dafd5f29bfb96c542e89ef8c33e811159ca7d07a2890ab83026fa87706612af4101308d9392e9ee68e046e8604a6b59a8f41091f8556f6235efbcfd9c5574c + languageName: node + linkType: hard + "isarray@npm:0.0.1": version: 0.0.1 resolution: "isarray@npm:0.0.1" @@ -11733,67 +14937,580 @@ __metadata: languageName: node linkType: hard -"isomorphic-ws@npm:^4.0.1": - version: 4.0.1 - resolution: "isomorphic-ws@npm:4.0.1" - peerDependencies: - ws: "*" - checksum: d7190eadefdc28bdb93d67b5f0c603385aaf87724fa2974abb382ac1ec9756ed2cfb27065cbe76122879c2d452e2982bc4314317f3d6c737ddda6c047328771a +"isomorphic-ws@npm:^4.0.1": + version: 4.0.1 + resolution: "isomorphic-ws@npm:4.0.1" + peerDependencies: + ws: "*" + checksum: d7190eadefdc28bdb93d67b5f0c603385aaf87724fa2974abb382ac1ec9756ed2cfb27065cbe76122879c2d452e2982bc4314317f3d6c737ddda6c047328771a + languageName: node + linkType: hard + +"isows@npm:1.0.3": + version: 1.0.3 + resolution: "isows@npm:1.0.3" + peerDependencies: + ws: "*" + checksum: 9cacd5cf59f67deb51e825580cd445ab1725ecb05a67c704050383fb772856f3cd5e7da8ad08f5a3bd2823680d77d099459d0c6a7037972a74d6429af61af440 + languageName: node + linkType: hard + +"isstream@npm:~0.1.2": + version: 0.1.2 + resolution: "isstream@npm:0.1.2" + checksum: 22d9c181015226d4534a227539256897bbbcb7edd1066ca4fc4d3a06dbd976325dfdd16b3983c7d236a89f256805c1a685a772e0364e98873d3819b064ad35a1 + languageName: node + linkType: hard + +"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": + version: 3.2.2 + resolution: "istanbul-lib-coverage@npm:3.2.2" + checksum: 40bbdd1e937dfd8c830fa286d0f665e81b7a78bdabcd4565f6d5667c99828bda3db7fb7ac6b96a3e2e8a2461ddbc5452d9f8bc7d00cb00075fa6a3e99f5b6a81 + languageName: node + linkType: hard + +"istanbul-lib-instrument@npm:^5.0.4": + version: 5.2.1 + resolution: "istanbul-lib-instrument@npm:5.2.1" + dependencies: + "@babel/core": "npm:^7.12.3" + "@babel/parser": "npm:^7.14.7" + "@istanbuljs/schema": "npm:^0.1.2" + istanbul-lib-coverage: "npm:^3.2.0" + semver: "npm:^6.3.0" + checksum: bbc4496c2f304d799f8ec22202ab38c010ac265c441947f075c0f7d46bd440b45c00e46017cf9053453d42182d768b1d6ed0e70a142c95ab00df9843aa5ab80e + languageName: node + linkType: hard + +"istanbul-lib-instrument@npm:^6.0.0": + version: 6.0.1 + resolution: "istanbul-lib-instrument@npm:6.0.1" + dependencies: + "@babel/core": "npm:^7.12.3" + "@babel/parser": "npm:^7.14.7" + "@istanbuljs/schema": "npm:^0.1.2" + istanbul-lib-coverage: "npm:^3.2.0" + semver: "npm:^7.5.4" + checksum: 95fd8c66e586840989cb3c7819c6da66c4742a6fedbf16b51a5c7f1898941ad07b79ddff020f479d3a1d76743ecdbf255d93c35221875687477d4b118026e7e7 + languageName: node + linkType: hard + +"istanbul-lib-report@npm:^3.0.0": + version: 3.0.1 + resolution: "istanbul-lib-report@npm:3.0.1" + dependencies: + istanbul-lib-coverage: "npm:^3.0.0" + make-dir: "npm:^4.0.0" + supports-color: "npm:^7.1.0" + checksum: 86a83421ca1cf2109a9f6d193c06c31ef04a45e72a74579b11060b1e7bb9b6337a4e6f04abfb8857e2d569c271273c65e855ee429376a0d7c91ad91db42accd1 + languageName: node + linkType: hard + +"istanbul-lib-source-maps@npm:^4.0.0": + version: 4.0.1 + resolution: "istanbul-lib-source-maps@npm:4.0.1" + dependencies: + debug: "npm:^4.1.1" + istanbul-lib-coverage: "npm:^3.0.0" + source-map: "npm:^0.6.1" + checksum: 5526983462799aced011d776af166e350191b816821ea7bcf71cab3e5272657b062c47dc30697a22a43656e3ced78893a42de677f9ccf276a28c913190953b82 + languageName: node + linkType: hard + +"istanbul-reports@npm:^3.1.3": + version: 3.1.6 + resolution: "istanbul-reports@npm:3.1.6" + dependencies: + html-escaper: "npm:^2.0.0" + istanbul-lib-report: "npm:^3.0.0" + checksum: 135c178e509b21af5c446a6951fc01c331331bb0fdb1ed1dd7f68a8c875603c2e2ee5c82801db5feb868e5cc35e9babe2d972d322afc50f6de6cce6431b9b2ff + languageName: node + linkType: hard + +"isurl@npm:^1.0.0-alpha5": + version: 1.0.0 + resolution: "isurl@npm:1.0.0" + dependencies: + has-to-string-tag-x: "npm:^1.2.0" + is-object: "npm:^1.0.1" + checksum: 28a96e019269d57015fa5869f19dda5a3ed1f7b21e3e0c4ff695419bd0541547db352aa32ee4a3659e811a177b0e37a5bc1a036731e71939dd16b59808ab92bd + languageName: node + linkType: hard + +"javascript-natural-sort@npm:0.7.1": + version: 0.7.1 + resolution: "javascript-natural-sort@npm:0.7.1" + checksum: 7bf6eab67871865d347f09a95aa770f9206c1ab0226bcda6fdd9edec340bf41111a7f82abac30556aa16a21cfa3b2b1ca4a362c8b73dd5ce15220e5d31f49d79 + languageName: node + linkType: hard + +"jayson@npm:^4.1.0": + version: 4.1.0 + resolution: "jayson@npm:4.1.0" + dependencies: + "@types/connect": "npm:^3.4.33" + "@types/node": "npm:^12.12.54" + "@types/ws": "npm:^7.4.4" + JSONStream: "npm:^1.3.5" + commander: "npm:^2.20.3" + delay: "npm:^5.0.0" + es6-promisify: "npm:^5.0.0" + eyes: "npm:^0.1.8" + isomorphic-ws: "npm:^4.0.1" + json-stringify-safe: "npm:^5.0.1" + uuid: "npm:^8.3.2" + ws: "npm:^7.4.5" + bin: + jayson: bin/jayson.js + checksum: d76b3f220e14388007958b8f79e793009d6bc572b6e5ea65848a0f027b324d1950d836468986d7e38ddfb30b660e8b048b459c8bc8456e9b38dbbebc60a563b4 + languageName: node + linkType: hard + +"jest-changed-files@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-changed-files@npm:29.7.0" + dependencies: + execa: "npm:^5.0.0" + jest-util: "npm:^29.7.0" + p-limit: "npm:^3.1.0" + checksum: 3d93742e56b1a73a145d55b66e96711fbf87ef89b96c2fab7cfdfba8ec06612591a982111ca2b712bb853dbc16831ec8b43585a2a96b83862d6767de59cbf83d + languageName: node + linkType: hard + +"jest-circus@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-circus@npm:29.7.0" + dependencies: + "@jest/environment": "npm:^29.7.0" + "@jest/expect": "npm:^29.7.0" + "@jest/test-result": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + co: "npm:^4.6.0" + dedent: "npm:^1.0.0" + is-generator-fn: "npm:^2.0.0" + jest-each: "npm:^29.7.0" + jest-matcher-utils: "npm:^29.7.0" + jest-message-util: "npm:^29.7.0" + jest-runtime: "npm:^29.7.0" + jest-snapshot: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + p-limit: "npm:^3.1.0" + pretty-format: "npm:^29.7.0" + pure-rand: "npm:^6.0.0" + slash: "npm:^3.0.0" + stack-utils: "npm:^2.0.3" + checksum: 716a8e3f40572fd0213bcfc1da90274bf30d856e5133af58089a6ce45089b63f4d679bd44e6be9d320e8390483ebc3ae9921981993986d21639d9019b523123d + languageName: node + linkType: hard + +"jest-cli@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-cli@npm:29.7.0" + dependencies: + "@jest/core": "npm:^29.7.0" + "@jest/test-result": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + chalk: "npm:^4.0.0" + create-jest: "npm:^29.7.0" + exit: "npm:^0.1.2" + import-local: "npm:^3.0.2" + jest-config: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + jest-validate: "npm:^29.7.0" + yargs: "npm:^17.3.1" + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: 6cc62b34d002c034203065a31e5e9a19e7c76d9e8ef447a6f70f759c0714cb212c6245f75e270ba458620f9c7b26063cd8cf6cd1f7e3afd659a7cc08add17307 + languageName: node + linkType: hard + +"jest-config@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-config@npm:29.7.0" + dependencies: + "@babel/core": "npm:^7.11.6" + "@jest/test-sequencer": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + babel-jest: "npm:^29.7.0" + chalk: "npm:^4.0.0" + ci-info: "npm:^3.2.0" + deepmerge: "npm:^4.2.2" + glob: "npm:^7.1.3" + graceful-fs: "npm:^4.2.9" + jest-circus: "npm:^29.7.0" + jest-environment-node: "npm:^29.7.0" + jest-get-type: "npm:^29.6.3" + jest-regex-util: "npm:^29.6.3" + jest-resolve: "npm:^29.7.0" + jest-runner: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + jest-validate: "npm:^29.7.0" + micromatch: "npm:^4.0.4" + parse-json: "npm:^5.2.0" + pretty-format: "npm:^29.7.0" + slash: "npm:^3.0.0" + strip-json-comments: "npm:^3.1.1" + peerDependencies: + "@types/node": "*" + ts-node: ">=9.0.0" + peerDependenciesMeta: + "@types/node": + optional: true + ts-node: + optional: true + checksum: 6bdf570e9592e7d7dd5124fc0e21f5fe92bd15033513632431b211797e3ab57eaa312f83cc6481b3094b72324e369e876f163579d60016677c117ec4853cf02b + languageName: node + linkType: hard + +"jest-diff@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-diff@npm:29.7.0" + dependencies: + chalk: "npm:^4.0.0" + diff-sequences: "npm:^29.6.3" + jest-get-type: "npm:^29.6.3" + pretty-format: "npm:^29.7.0" + checksum: 6f3a7eb9cd9de5ea9e5aa94aed535631fa6f80221832952839b3cb59dd419b91c20b73887deb0b62230d06d02d6b6cf34ebb810b88d904bb4fe1e2e4f0905c98 + languageName: node + linkType: hard + +"jest-docblock@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-docblock@npm:29.7.0" + dependencies: + detect-newline: "npm:^3.0.0" + checksum: 8d48818055bc96c9e4ec2e217a5a375623c0d0bfae8d22c26e011074940c202aa2534a3362294c81d981046885c05d304376afba9f2874143025981148f3e96d + languageName: node + linkType: hard + +"jest-each@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-each@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + chalk: "npm:^4.0.0" + jest-get-type: "npm:^29.6.3" + jest-util: "npm:^29.7.0" + pretty-format: "npm:^29.7.0" + checksum: bd1a077654bdaa013b590deb5f7e7ade68f2e3289180a8c8f53bc8a49f3b40740c0ec2d3a3c1aee906f682775be2bebbac37491d80b634d15276b0aa0f2e3fda + languageName: node + linkType: hard + +"jest-environment-node@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-environment-node@npm:29.7.0" + dependencies: + "@jest/environment": "npm:^29.7.0" + "@jest/fake-timers": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + jest-mock: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + checksum: 9cf7045adf2307cc93aed2f8488942e39388bff47ec1df149a997c6f714bfc66b2056768973770d3f8b1bf47396c19aa564877eb10ec978b952c6018ed1bd637 + languageName: node + linkType: hard + +"jest-get-type@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-get-type@npm:29.6.3" + checksum: 88ac9102d4679d768accae29f1e75f592b760b44277df288ad76ce5bf038c3f5ce3719dea8aa0f035dac30e9eb034b848ce716b9183ad7cc222d029f03e92205 + languageName: node + linkType: hard + +"jest-haste-map@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-haste-map@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + "@types/graceful-fs": "npm:^4.1.3" + "@types/node": "npm:*" + anymatch: "npm:^3.0.3" + fb-watchman: "npm:^2.0.0" + fsevents: "npm:^2.3.2" + graceful-fs: "npm:^4.2.9" + jest-regex-util: "npm:^29.6.3" + jest-util: "npm:^29.7.0" + jest-worker: "npm:^29.7.0" + micromatch: "npm:^4.0.4" + walker: "npm:^1.0.8" + dependenciesMeta: + fsevents: + optional: true + checksum: 8531b42003581cb18a69a2774e68c456fb5a5c3280b1b9b77475af9e346b6a457250f9d756bfeeae2fe6cbc9ef28434c205edab9390ee970a919baddfa08bb85 + languageName: node + linkType: hard + +"jest-leak-detector@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-leak-detector@npm:29.7.0" + dependencies: + jest-get-type: "npm:^29.6.3" + pretty-format: "npm:^29.7.0" + checksum: e3950e3ddd71e1d0c22924c51a300a1c2db6cf69ec1e51f95ccf424bcc070f78664813bef7aed4b16b96dfbdeea53fe358f8aeaaea84346ae15c3735758f1605 + languageName: node + linkType: hard + +"jest-matcher-utils@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-matcher-utils@npm:29.7.0" + dependencies: + chalk: "npm:^4.0.0" + jest-diff: "npm:^29.7.0" + jest-get-type: "npm:^29.6.3" + pretty-format: "npm:^29.7.0" + checksum: 981904a494299cf1e3baed352f8a3bd8b50a8c13a662c509b6a53c31461f94ea3bfeffa9d5efcfeb248e384e318c87de7e3baa6af0f79674e987482aa189af40 + languageName: node + linkType: hard + +"jest-message-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-message-util@npm:29.7.0" + dependencies: + "@babel/code-frame": "npm:^7.12.13" + "@jest/types": "npm:^29.6.3" + "@types/stack-utils": "npm:^2.0.0" + chalk: "npm:^4.0.0" + graceful-fs: "npm:^4.2.9" + micromatch: "npm:^4.0.4" + pretty-format: "npm:^29.7.0" + slash: "npm:^3.0.0" + stack-utils: "npm:^2.0.3" + checksum: 31d53c6ed22095d86bab9d14c0fa70c4a92c749ea6ceece82cf30c22c9c0e26407acdfbdb0231435dc85a98d6d65ca0d9cbcd25cd1abb377fe945e843fb770b9 + languageName: node + linkType: hard + +"jest-mock@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-mock@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + jest-util: "npm:^29.7.0" + checksum: ae51d1b4f898724be5e0e52b2268a68fcd876d9b20633c864a6dd6b1994cbc48d62402b0f40f3a1b669b30ebd648821f086c26c08ffde192ced951ff4670d51c + languageName: node + linkType: hard + +"jest-pnp-resolver@npm:^1.2.2": + version: 1.2.3 + resolution: "jest-pnp-resolver@npm:1.2.3" + peerDependencies: + jest-resolve: "*" + peerDependenciesMeta: + jest-resolve: + optional: true + checksum: db1a8ab2cb97ca19c01b1cfa9a9c8c69a143fde833c14df1fab0766f411b1148ff0df878adea09007ac6a2085ec116ba9a996a6ad104b1e58c20adbf88eed9b2 + languageName: node + linkType: hard + +"jest-regex-util@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-regex-util@npm:29.6.3" + checksum: 0518beeb9bf1228261695e54f0feaad3606df26a19764bc19541e0fc6e2a3737191904607fb72f3f2ce85d9c16b28df79b7b1ec9443aa08c3ef0e9efda6f8f2a + languageName: node + linkType: hard + +"jest-resolve-dependencies@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-resolve-dependencies@npm:29.7.0" + dependencies: + jest-regex-util: "npm:^29.6.3" + jest-snapshot: "npm:^29.7.0" + checksum: 1e206f94a660d81e977bcfb1baae6450cb4a81c92e06fad376cc5ea16b8e8c6ea78c383f39e95591a9eb7f925b6a1021086c38941aa7c1b8a6a813c2f6e93675 + languageName: node + linkType: hard + +"jest-resolve@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-resolve@npm:29.7.0" + dependencies: + chalk: "npm:^4.0.0" + graceful-fs: "npm:^4.2.9" + jest-haste-map: "npm:^29.7.0" + jest-pnp-resolver: "npm:^1.2.2" + jest-util: "npm:^29.7.0" + jest-validate: "npm:^29.7.0" + resolve: "npm:^1.20.0" + resolve.exports: "npm:^2.0.0" + slash: "npm:^3.0.0" + checksum: faa466fd9bc69ea6c37a545a7c6e808e073c66f46ab7d3d8a6ef084f8708f201b85d5fe1799789578b8b47fa1de47b9ee47b414d1863bc117a49e032ba77b7c7 + languageName: node + linkType: hard + +"jest-runner@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-runner@npm:29.7.0" + dependencies: + "@jest/console": "npm:^29.7.0" + "@jest/environment": "npm:^29.7.0" + "@jest/test-result": "npm:^29.7.0" + "@jest/transform": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + emittery: "npm:^0.13.1" + graceful-fs: "npm:^4.2.9" + jest-docblock: "npm:^29.7.0" + jest-environment-node: "npm:^29.7.0" + jest-haste-map: "npm:^29.7.0" + jest-leak-detector: "npm:^29.7.0" + jest-message-util: "npm:^29.7.0" + jest-resolve: "npm:^29.7.0" + jest-runtime: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + jest-watcher: "npm:^29.7.0" + jest-worker: "npm:^29.7.0" + p-limit: "npm:^3.1.0" + source-map-support: "npm:0.5.13" + checksum: 9d8748a494bd90f5c82acea99be9e99f21358263ce6feae44d3f1b0cd90991b5df5d18d607e73c07be95861ee86d1cbab2a3fc6ca4b21805f07ac29d47c1da1e + languageName: node + linkType: hard + +"jest-runtime@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-runtime@npm:29.7.0" + dependencies: + "@jest/environment": "npm:^29.7.0" + "@jest/fake-timers": "npm:^29.7.0" + "@jest/globals": "npm:^29.7.0" + "@jest/source-map": "npm:^29.6.3" + "@jest/test-result": "npm:^29.7.0" + "@jest/transform": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + cjs-module-lexer: "npm:^1.0.0" + collect-v8-coverage: "npm:^1.0.0" + glob: "npm:^7.1.3" + graceful-fs: "npm:^4.2.9" + jest-haste-map: "npm:^29.7.0" + jest-message-util: "npm:^29.7.0" + jest-mock: "npm:^29.7.0" + jest-regex-util: "npm:^29.6.3" + jest-resolve: "npm:^29.7.0" + jest-snapshot: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + slash: "npm:^3.0.0" + strip-bom: "npm:^4.0.0" + checksum: 59eb58eb7e150e0834a2d0c0d94f2a0b963ae7182cfa6c63f2b49b9c6ef794e5193ef1634e01db41420c36a94cefc512cdd67a055cd3e6fa2f41eaf0f82f5a20 + languageName: node + linkType: hard + +"jest-snapshot@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-snapshot@npm:29.7.0" + dependencies: + "@babel/core": "npm:^7.11.6" + "@babel/generator": "npm:^7.7.2" + "@babel/plugin-syntax-jsx": "npm:^7.7.2" + "@babel/plugin-syntax-typescript": "npm:^7.7.2" + "@babel/types": "npm:^7.3.3" + "@jest/expect-utils": "npm:^29.7.0" + "@jest/transform": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + babel-preset-current-node-syntax: "npm:^1.0.0" + chalk: "npm:^4.0.0" + expect: "npm:^29.7.0" + graceful-fs: "npm:^4.2.9" + jest-diff: "npm:^29.7.0" + jest-get-type: "npm:^29.6.3" + jest-matcher-utils: "npm:^29.7.0" + jest-message-util: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + natural-compare: "npm:^1.4.0" + pretty-format: "npm:^29.7.0" + semver: "npm:^7.5.3" + checksum: cb19a3948256de5f922d52f251821f99657339969bf86843bd26cf3332eae94883e8260e3d2fba46129a27c3971c1aa522490e460e16c7fad516e82d10bbf9f8 + languageName: node + linkType: hard + +"jest-util@npm:^29.0.0, jest-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-util@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + ci-info: "npm:^3.2.0" + graceful-fs: "npm:^4.2.9" + picomatch: "npm:^2.2.3" + checksum: 30d58af6967e7d42bd903ccc098f3b4d3859ed46238fbc88d4add6a3f10bea00c226b93660285f058bc7a65f6f9529cf4eb80f8d4707f79f9e3a23686b4ab8f3 languageName: node linkType: hard -"isows@npm:1.0.3": - version: 1.0.3 - resolution: "isows@npm:1.0.3" - peerDependencies: - ws: "*" - checksum: 9cacd5cf59f67deb51e825580cd445ab1725ecb05a67c704050383fb772856f3cd5e7da8ad08f5a3bd2823680d77d099459d0c6a7037972a74d6429af61af440 +"jest-validate@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-validate@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + camelcase: "npm:^6.2.0" + chalk: "npm:^4.0.0" + jest-get-type: "npm:^29.6.3" + leven: "npm:^3.1.0" + pretty-format: "npm:^29.7.0" + checksum: 8ee1163666d8eaa16d90a989edba2b4a3c8ab0ffaa95ad91b08ca42b015bfb70e164b247a5b17f9de32d096987cada63ed8491ab82761bfb9a28bc34b27ae161 languageName: node linkType: hard -"isstream@npm:~0.1.2": - version: 0.1.2 - resolution: "isstream@npm:0.1.2" - checksum: 22d9c181015226d4534a227539256897bbbcb7edd1066ca4fc4d3a06dbd976325dfdd16b3983c7d236a89f256805c1a685a772e0364e98873d3819b064ad35a1 +"jest-watcher@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-watcher@npm:29.7.0" + dependencies: + "@jest/test-result": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + ansi-escapes: "npm:^4.2.1" + chalk: "npm:^4.0.0" + emittery: "npm:^0.13.1" + jest-util: "npm:^29.7.0" + string-length: "npm:^4.0.1" + checksum: 4f616e0345676631a7034b1d94971aaa719f0cd4a6041be2aa299be437ea047afd4fe05c48873b7963f5687a2f6c7cbf51244be8b14e313b97bfe32b1e127e55 languageName: node linkType: hard -"isurl@npm:^1.0.0-alpha5": - version: 1.0.0 - resolution: "isurl@npm:1.0.0" +"jest-worker@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-worker@npm:29.7.0" dependencies: - has-to-string-tag-x: "npm:^1.2.0" - is-object: "npm:^1.0.1" - checksum: 28a96e019269d57015fa5869f19dda5a3ed1f7b21e3e0c4ff695419bd0541547db352aa32ee4a3659e811a177b0e37a5bc1a036731e71939dd16b59808ab92bd + "@types/node": "npm:*" + jest-util: "npm:^29.7.0" + merge-stream: "npm:^2.0.0" + supports-color: "npm:^8.0.0" + checksum: 364cbaef00d8a2729fc760227ad34b5e60829e0869bd84976bdfbd8c0d0f9c2f22677b3e6dd8afa76ed174765351cd12bae3d4530c62eefb3791055127ca9745 languageName: node linkType: hard -"javascript-natural-sort@npm:0.7.1": - version: 0.7.1 - resolution: "javascript-natural-sort@npm:0.7.1" - checksum: 7bf6eab67871865d347f09a95aa770f9206c1ab0226bcda6fdd9edec340bf41111a7f82abac30556aa16a21cfa3b2b1ca4a362c8b73dd5ce15220e5d31f49d79 +"jest@npm:^29.7.0": + version: 29.7.0 + resolution: "jest@npm:29.7.0" + dependencies: + "@jest/core": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + import-local: "npm:^3.0.2" + jest-cli: "npm:^29.7.0" + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: 97023d78446098c586faaa467fbf2c6b07ff06e2c85a19e3926adb5b0effe9ac60c4913ae03e2719f9c01ae8ffd8d92f6b262cedb9555ceeb5d19263d8c6362a languageName: node linkType: hard -"jayson@npm:^4.1.0": - version: 4.1.0 - resolution: "jayson@npm:4.1.0" - dependencies: - "@types/connect": "npm:^3.4.33" - "@types/node": "npm:^12.12.54" - "@types/ws": "npm:^7.4.4" - JSONStream: "npm:^1.3.5" - commander: "npm:^2.20.3" - delay: "npm:^5.0.0" - es6-promisify: "npm:^5.0.0" - eyes: "npm:^0.1.8" - isomorphic-ws: "npm:^4.0.1" - json-stringify-safe: "npm:^5.0.1" - uuid: "npm:^8.3.2" - ws: "npm:^7.4.5" +"jiti@npm:^1.21.0": + version: 1.21.0 + resolution: "jiti@npm:1.21.0" bin: - jayson: bin/jayson.js - checksum: d76b3f220e14388007958b8f79e793009d6bc572b6e5ea65848a0f027b324d1950d836468986d7e38ddfb30b660e8b048b459c8bc8456e9b38dbbebc60a563b4 + jiti: bin/jiti.js + checksum: 005a0239e50381b5c9919f59dbab86128367bd64872f3376dbbde54b6523f41bd134bf22909e2a509e38fd87e1c22125ca255b9b6b53e7df0fedd23f737334cc languageName: node linkType: hard @@ -11899,6 +15616,23 @@ __metadata: languageName: node linkType: hard +"json-rpc-engine@npm:^6.1.0": + version: 6.1.0 + resolution: "json-rpc-engine@npm:6.1.0" + dependencies: + "@metamask/safe-event-emitter": "npm:^2.0.0" + eth-rpc-errors: "npm:^4.0.2" + checksum: 00d5b5228e90f126dd52176598db6e5611d295d3a3f7be21254c30c1b6555811260ef2ec2df035cd8e583e4b12096259da721e29f4ea2affb615f7dfc960a6a6 + languageName: node + linkType: hard + +"json-rpc-random-id@npm:^1.0.0, json-rpc-random-id@npm:^1.0.1": + version: 1.0.1 + resolution: "json-rpc-random-id@npm:1.0.1" + checksum: fcd2e884193a129ace4002bd65a86e9cdb206733b4693baea77bd8b372cf8de3043fbea27716a2c9a716581a908ca8d978d9dfec4847eb2cf77edb4cf4b2252c + languageName: node + linkType: hard + "json-schema-traverse@npm:^0.4.1": version: 0.4.1 resolution: "json-schema-traverse@npm:0.4.1" @@ -11946,6 +15680,22 @@ __metadata: languageName: node linkType: hard +"json5@npm:^2.2.3": + version: 2.2.3 + resolution: "json5@npm:2.2.3" + bin: + json5: lib/cli.js + checksum: 1db67b853ff0de3534085d630691d3247de53a2ed1390ba0ddff681ea43e9b3e30ecbdb65c5e9aab49435e44059c23dbd6fee8ee619419ba37465bb0dd7135da + languageName: node + linkType: hard + +"jsonc-parser@npm:^3.2.0": + version: 3.2.1 + resolution: "jsonc-parser@npm:3.2.1" + checksum: fe2df6f39e21653781d52cae20c5b9e0ab62461918d97f9430b216cea9b6500efc1d8b42c6584cc0a7548b4c996055e9cdc39f09b9782fa6957af2f45306c530 + languageName: node + linkType: hard + "jsonfile@npm:^2.1.0": version: 2.4.0 resolution: "jsonfile@npm:2.4.0" @@ -12046,6 +15796,18 @@ __metadata: languageName: node linkType: hard +"keccak@npm:^3.0.3": + version: 3.0.4 + resolution: "keccak@npm:3.0.4" + dependencies: + node-addon-api: "npm:^2.0.0" + node-gyp: "npm:latest" + node-gyp-build: "npm:^4.2.0" + readable-stream: "npm:^3.6.0" + checksum: 45478bb0a57e44d0108646499b8360914b0fbc8b0e088f1076659cb34faaa9eb829c40f6dd9dadb3460bb86cc33153c41fed37fe5ce09465a60e71e78c23fa55 + languageName: node + linkType: hard + "keyv@npm:^4.0.0": version: 4.5.2 resolution: "keyv@npm:4.5.2" @@ -12064,6 +15826,13 @@ __metadata: languageName: node linkType: hard +"keyvaluestorage-interface@npm:^1.0.0": + version: 1.0.0 + resolution: "keyvaluestorage-interface@npm:1.0.0" + checksum: e652448bc915f9c21b9916678ed58f5314c831f0a284d190a340c0370296c71918e0cdc1156a17b12d1993941b302f0881e23fb9c395079e2065a7d2f33d0199 + languageName: node + linkType: hard + "kind-of@npm:^6.0.2, kind-of@npm:^6.0.3": version: 6.0.3 resolution: "kind-of@npm:6.0.3" @@ -12259,6 +16028,13 @@ __metadata: languageName: node linkType: hard +"leven@npm:^3.1.0": + version: 3.1.0 + resolution: "leven@npm:3.1.0" + checksum: 638401d534585261b6003db9d99afd244dfe82d75ddb6db5c0df412842d5ab30b2ef18de471aaec70fe69a46f17b4ae3c7f01d8a4e6580ef7adb9f4273ad1e55 + languageName: node + linkType: hard + "levn@npm:^0.4.1": version: 0.4.1 resolution: "levn@npm:0.4.1" @@ -12333,6 +16109,35 @@ __metadata: languageName: node linkType: hard +"listhen@npm:^1.5.5": + version: 1.6.0 + resolution: "listhen@npm:1.6.0" + dependencies: + "@parcel/watcher": "npm:^2.4.0" + "@parcel/watcher-wasm": "npm:2.4.0" + citty: "npm:^0.1.5" + clipboardy: "npm:^4.0.0" + consola: "npm:^3.2.3" + crossws: "npm:^0.1.0" + defu: "npm:^6.1.4" + get-port-please: "npm:^3.1.2" + h3: "npm:^1.10.1" + http-shutdown: "npm:^1.2.2" + jiti: "npm:^1.21.0" + mlly: "npm:^1.5.0" + node-forge: "npm:^1.3.1" + pathe: "npm:^1.1.2" + std-env: "npm:^3.7.0" + ufo: "npm:^1.3.2" + untun: "npm:^0.1.3" + uqr: "npm:^0.1.2" + bin: + listen: bin/listhen.mjs + listhen: bin/listhen.mjs + checksum: 85fc2a6733e18e5d8071debd4a60b17c365210f46abd93f06d4f405be3f00a3e7bd3d1d7439340b3d6b90bc8aa49891fa1baa733418fdd4aff303c67d619f24a + languageName: node + linkType: hard + "listr2@npm:^4.0.5": version: 4.0.5 resolution: "listr2@npm:4.0.5" @@ -12354,6 +16159,37 @@ __metadata: languageName: node linkType: hard +"lit-element@npm:^3.3.0": + version: 3.3.3 + resolution: "lit-element@npm:3.3.3" + dependencies: + "@lit-labs/ssr-dom-shim": "npm:^1.1.0" + "@lit/reactive-element": "npm:^1.3.0" + lit-html: "npm:^2.8.0" + checksum: 7968e7f3ce3994911f27c4c54acc956488c91d8af81677cce3d6f0c2eaea45cceb79b064077159392238d6e43d46015a950269db9914fea8913566aacb17eaa1 + languageName: node + linkType: hard + +"lit-html@npm:^2.8.0": + version: 2.8.0 + resolution: "lit-html@npm:2.8.0" + dependencies: + "@types/trusted-types": "npm:^2.0.2" + checksum: 3503e55e2927c2ff94773cf041fc4128f92291869c9192f36eacb7f95132d11f6b329e5b910ab60a4456349cd2e6d23b33d83291b24d557bcd6b904d6314ac1a + languageName: node + linkType: hard + +"lit@npm:2.8.0": + version: 2.8.0 + resolution: "lit@npm:2.8.0" + dependencies: + "@lit/reactive-element": "npm:^1.6.0" + lit-element: "npm:^3.3.0" + lit-html: "npm:^2.8.0" + checksum: aa64c1136b855ba328d41157dba67657d480345aeec3c1dd829abeb67719d759c9ff2ade9903f9cfb4f9d012b16087034aaa5b33f1182e70c615765562e3251b + languageName: node + linkType: hard + "load-yaml-file@npm:^0.2.0": version: 0.2.0 resolution: "load-yaml-file@npm:0.2.0" @@ -12404,6 +16240,13 @@ __metadata: languageName: node linkType: hard +"lodash-es@npm:^4.17.21": + version: 4.17.21 + resolution: "lodash-es@npm:4.17.21" + checksum: 03f39878ea1e42b3199bd3f478150ab723f93cc8730ad86fec1f2804f4a07c6e30deaac73cad53a88e9c3db33348bb8ceeb274552390e7a75d7849021c02df43 + languageName: node + linkType: hard + "lodash.camelcase@npm:^4.3.0": version: 4.3.0 resolution: "lodash.camelcase@npm:4.3.0" @@ -12411,6 +16254,13 @@ __metadata: languageName: node linkType: hard +"lodash.defaults@npm:^4.2.0": + version: 4.2.0 + resolution: "lodash.defaults@npm:4.2.0" + checksum: 6a2a9ea5ad7585aff8d76836c9e1db4528e5f5fa50fc4ad81183152ba8717d83aef8aec4fa88bf3417ed946fd4b4358f145ee08fbc77fb82736788714d3e12db + languageName: node + linkType: hard + "lodash.get@npm:^4.4.2": version: 4.4.2 resolution: "lodash.get@npm:4.4.2" @@ -12418,6 +16268,27 @@ __metadata: languageName: node linkType: hard +"lodash.isarguments@npm:^3.1.0": + version: 3.1.0 + resolution: "lodash.isarguments@npm:3.1.0" + checksum: e5186d5fe0384dcb0652501d9d04ebb984863ebc9c9faa2d4b9d5dfd81baef9ffe8e2887b9dc471d62ed092bc0788e5f1d42e45c72457a2884bbb54ac132ed92 + languageName: node + linkType: hard + +"lodash.isequal@npm:4.5.0": + version: 4.5.0 + resolution: "lodash.isequal@npm:4.5.0" + checksum: 82fc58a83a1555f8df34ca9a2cd300995ff94018ac12cc47c349655f0ae1d4d92ba346db4c19bbfc90510764e0c00ddcc985a358bdcd4b3b965abf8f2a48a214 + languageName: node + linkType: hard + +"lodash.memoize@npm:4.x": + version: 4.1.2 + resolution: "lodash.memoize@npm:4.1.2" + checksum: 192b2168f310c86f303580b53acf81ab029761b9bd9caa9506a019ffea5f3363ea98d7e39e7e11e6b9917066c9d36a09a11f6fe16f812326390d8f3a54a1a6da + languageName: node + linkType: hard + "lodash.merge@npm:^4.6.2": version: 4.6.2 resolution: "lodash.merge@npm:4.6.2" @@ -12484,7 +16355,7 @@ __metadata: languageName: node linkType: hard -"loose-envify@npm:^1.0.0": +"loose-envify@npm:^1.0.0, loose-envify@npm:^1.1.0": version: 1.4.0 resolution: "loose-envify@npm:1.4.0" dependencies: @@ -12534,6 +16405,13 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^10.0.2": + version: 10.2.0 + resolution: "lru-cache@npm:10.2.0" + checksum: 502ec42c3309c0eae1ce41afca471f831c278566d45a5273a0c51102dee31e0e250a62fa9029c3370988df33a14188a38e682c16143b794de78668de3643e302 + languageName: node + linkType: hard + "lru-cache@npm:^4.0.1": version: 4.1.5 resolution: "lru-cache@npm:4.1.5" @@ -12583,7 +16461,16 @@ __metadata: languageName: node linkType: hard -"make-error@npm:^1.1.1": +"make-dir@npm:^4.0.0": + version: 4.0.0 + resolution: "make-dir@npm:4.0.0" + dependencies: + semver: "npm:^7.5.3" + checksum: bf0731a2dd3aab4db6f3de1585cea0b746bb73eb5a02e3d8d72757e376e64e6ada190b1eddcde5b2f24a81b688a9897efd5018737d05e02e2a671dda9cff8a8a + languageName: node + linkType: hard + +"make-error@npm:1.x, make-error@npm:^1.1.1": version: 1.3.6 resolution: "make-error@npm:1.3.6" checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 @@ -12614,6 +16501,15 @@ __metadata: languageName: node linkType: hard +"makeerror@npm:1.0.12": + version: 1.0.12 + resolution: "makeerror@npm:1.0.12" + dependencies: + tmpl: "npm:1.0.5" + checksum: 4c66ddfc654537333da952c084f507fa4c30c707b1635344eb35be894d797ba44c901a9cebe914aa29a7f61357543ba09b09dddbd7f65b4aee756b450f169f40 + languageName: node + linkType: hard + "map-obj@npm:^1.0.0": version: 1.0.1 resolution: "map-obj@npm:1.0.1" @@ -12653,6 +16549,15 @@ __metadata: languageName: node linkType: hard +"media-query-parser@npm:^2.0.2": + version: 2.0.2 + resolution: "media-query-parser@npm:2.0.2" + dependencies: + "@babel/runtime": "npm:^7.12.5" + checksum: 9dff3ed135149944717a8687567f4fda1d39d28637f265c6ce7efe5ed55cd88ed49136c912ee0c7f3a6e5debc50b1ff969db609d862318f1af97f48752b08b0b + languageName: node + linkType: hard + "media-typer@npm:0.3.0": version: 0.3.0 resolution: "media-typer@npm:0.3.0" @@ -12759,6 +16664,13 @@ __metadata: languageName: node linkType: hard +"mersenne-twister@npm:^1.1.0": + version: 1.1.0 + resolution: "mersenne-twister@npm:1.1.0" + checksum: 1123526199091097102f2f91639ad7d5b3df4b098de9a4a72c835920e11ef0ce08e25737d5af1d363325a60da8804365eae8a41e03b7a46a1acc22e18fa8f261 + languageName: node + linkType: hard + "methods@npm:~1.1.2": version: 1.1.2 resolution: "methods@npm:1.1.2" @@ -12766,6 +16678,13 @@ __metadata: languageName: node linkType: hard +"micro-ftch@npm:^0.3.1": + version: 0.3.1 + resolution: "micro-ftch@npm:0.3.1" + checksum: a7ab07d25e28ec4ae492ce4542ea9b06eee85538742b3b1263b247366ee8872f2c5ce9c8651138b2f1d22c8212f691a7b8b5384fe86ead5aff1852e211f1c035 + languageName: node + linkType: hard + "micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": version: 4.0.5 resolution: "micromatch@npm:4.0.5" @@ -12813,6 +16732,15 @@ __metadata: languageName: node linkType: hard +"mime@npm:^3.0.0": + version: 3.0.0 + resolution: "mime@npm:3.0.0" + bin: + mime: cli.js + checksum: b2d31580deb58be89adaa1877cbbf152b7604b980fd7ef8f08b9e96bfedf7d605d9c23a8ba62aa12c8580b910cd7c1d27b7331d0f40f7a14e17d5a0bbec3b49f + languageName: node + linkType: hard + "mimic-fn@npm:^2.1.0": version: 2.1.0 resolution: "mimic-fn@npm:2.1.0" @@ -12820,6 +16748,13 @@ __metadata: languageName: node linkType: hard +"mimic-fn@npm:^4.0.0": + version: 4.0.0 + resolution: "mimic-fn@npm:4.0.0" + checksum: 995dcece15ee29aa16e188de6633d43a3db4611bcf93620e7e62109ec41c79c0f34277165b8ce5e361205049766e371851264c21ac64ca35499acb5421c2ba56 + languageName: node + linkType: hard + "mimic-response@npm:^1.0.0": version: 1.0.1 resolution: "mimic-response@npm:1.0.1" @@ -13075,6 +17010,18 @@ __metadata: languageName: node linkType: hard +"mlly@npm:^1.2.0, mlly@npm:^1.5.0": + version: 1.6.0 + resolution: "mlly@npm:1.6.0" + dependencies: + acorn: "npm:^8.11.3" + pathe: "npm:^1.1.2" + pkg-types: "npm:^1.0.3" + ufo: "npm:^1.3.2" + checksum: 49549b115cb18b5cdc8a0974016d4097f8be272ad7b7a78ab2962f4fdd307bfab85f89e6a797fb905a85bb0adebd1bcc72e7ba557d0117b95bb5837929aee385 + languageName: node + linkType: hard + "mnemonist@npm:^0.38.0": version: 0.38.5 resolution: "mnemonist@npm:0.38.5" @@ -13200,6 +17147,27 @@ __metadata: languageName: node linkType: hard +"motion@npm:10.16.2": + version: 10.16.2 + resolution: "motion@npm:10.16.2" + dependencies: + "@motionone/animation": "npm:^10.15.1" + "@motionone/dom": "npm:^10.16.2" + "@motionone/svelte": "npm:^10.16.2" + "@motionone/types": "npm:^10.15.1" + "@motionone/utils": "npm:^10.15.1" + "@motionone/vue": "npm:^10.16.2" + checksum: 2470f12b97371eb876337b355ad158c545622b2cc7c83b0ba540d2c02afedb49990e78898e520b8f74cccc9ecf11d366ae005a35c60e92178fadd7434860a966 + languageName: node + linkType: hard + +"mri@npm:^1.2.0": + version: 1.2.0 + resolution: "mri@npm:1.2.0" + checksum: 6775a1d2228bb9d191ead4efc220bd6be64f943ad3afd4dcb3b3ac8fc7b87034443f666e38805df38e8d047b29f910c3cc7810da0109af83e42c82c73bd3f6bc + languageName: node + linkType: hard + "ms@npm:2.0.0": version: 2.0.0 resolution: "ms@npm:2.0.0" @@ -13267,6 +17235,13 @@ __metadata: languageName: node linkType: hard +"multiformats@npm:^9.4.2": + version: 9.9.0 + resolution: "multiformats@npm:9.9.0" + checksum: ad55c7d480d22f4258a68fd88aa2aab744fe0cb1e68d732fc886f67d858b37e3aa6c2cec12b2960ead7730d43be690931485238569952d8a3d7f90fdc726c652 + languageName: node + linkType: hard + "multihashes@npm:^0.4.15, multihashes@npm:~0.4.15": version: 0.4.21 resolution: "multihashes@npm:0.4.21" @@ -13310,6 +17285,15 @@ __metadata: languageName: node linkType: hard +"nanoid@npm:^3.3.6": + version: 3.3.7 + resolution: "nanoid@npm:3.3.7" + bin: + nanoid: bin/nanoid.cjs + checksum: ac1eb60f615b272bccb0e2b9cd933720dad30bf9708424f691b8113826bb91aca7e9d14ef5d9415a6ba15c266b37817256f58d8ce980c82b0ba3185352565679 + languageName: node + linkType: hard + "napi-build-utils@npm:^1.0.1": version: 1.0.2 resolution: "napi-build-utils@npm:1.0.2" @@ -13324,6 +17308,13 @@ __metadata: languageName: node linkType: hard +"napi-wasm@npm:^1.1.0": + version: 1.1.0 + resolution: "napi-wasm@npm:1.1.0" + checksum: 767781f07ccaca846a6036a2df7686c9decc1b4fd6ad30ba782c94829476ec5610acc41e4caf7df94ebf0bed4abd4d34539979d0d85b025127c8a41be6259375 + languageName: node + linkType: hard + "natural-compare-lite@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare-lite@npm:1.4.0" @@ -13359,6 +17350,72 @@ __metadata: languageName: node linkType: hard +"next@npm:^13.4.19": + version: 13.5.6 + resolution: "next@npm:13.5.6" + dependencies: + "@next/env": "npm:13.5.6" + "@next/swc-darwin-arm64": "npm:13.5.6" + "@next/swc-darwin-x64": "npm:13.5.6" + "@next/swc-linux-arm64-gnu": "npm:13.5.6" + "@next/swc-linux-arm64-musl": "npm:13.5.6" + "@next/swc-linux-x64-gnu": "npm:13.5.6" + "@next/swc-linux-x64-musl": "npm:13.5.6" + "@next/swc-win32-arm64-msvc": "npm:13.5.6" + "@next/swc-win32-ia32-msvc": "npm:13.5.6" + "@next/swc-win32-x64-msvc": "npm:13.5.6" + "@swc/helpers": "npm:0.5.2" + busboy: "npm:1.6.0" + caniuse-lite: "npm:^1.0.30001406" + postcss: "npm:8.4.31" + styled-jsx: "npm:5.1.1" + watchpack: "npm:2.4.0" + peerDependencies: + "@opentelemetry/api": ^1.1.0 + react: ^18.2.0 + react-dom: ^18.2.0 + sass: ^1.3.0 + dependenciesMeta: + "@next/swc-darwin-arm64": + optional: true + "@next/swc-darwin-x64": + optional: true + "@next/swc-linux-arm64-gnu": + optional: true + "@next/swc-linux-arm64-musl": + optional: true + "@next/swc-linux-x64-gnu": + optional: true + "@next/swc-linux-x64-musl": + optional: true + "@next/swc-win32-arm64-msvc": + optional: true + "@next/swc-win32-ia32-msvc": + optional: true + "@next/swc-win32-x64-msvc": + optional: true + peerDependenciesMeta: + "@opentelemetry/api": + optional: true + sass: + optional: true + bin: + next: dist/bin/next + checksum: ec6defc7958b575d93306a2dcb05b7b14e27474e226ec350f412d03832407a5ae7139c21f7c7437b93cca2c8a79d7197c468308d82a903b2a86d579f84ccac9f + languageName: node + linkType: hard + +"nextjs-cors@npm:^2.1.2": + version: 2.2.0 + resolution: "nextjs-cors@npm:2.2.0" + dependencies: + cors: "npm:^2.8.5" + peerDependencies: + next: ^8.1.1-canary.54 || ^9.0.0 || ^10.0.0-0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0 + checksum: 9e5f1cd5d737634600259028d5ad6ee58b7d621b656f6b064bf574acb347133fcf8503bb94c5cb3e9d05fb81dd88ba6b07511cca3eadf5cd7cbe4661a207c1b4 + languageName: node + linkType: hard + "nise@npm:^5.1.1": version: 5.1.1 resolution: "nise@npm:5.1.1" @@ -13408,6 +17465,15 @@ __metadata: languageName: node linkType: hard +"node-addon-api@npm:^7.0.0": + version: 7.1.0 + resolution: "node-addon-api@npm:7.1.0" + dependencies: + node-gyp: "npm:latest" + checksum: e20487e98c76660f4957e81e85c45dfb667140d9be0bf872a3b3dfd86b4ea19c0275939116c90efebc0da7fc6af2c7b7b060512ceebe6417b1ed145a26910453 + languageName: node + linkType: hard + "node-emoji@npm:^1.10.0": version: 1.11.0 resolution: "node-emoji@npm:1.11.0" @@ -13427,6 +17493,13 @@ __metadata: languageName: node linkType: hard +"node-fetch-native@npm:^1.4.0, node-fetch-native@npm:^1.4.1, node-fetch-native@npm:^1.6.1": + version: 1.6.2 + resolution: "node-fetch-native@npm:1.6.2" + checksum: 85a3c8fb853d2abbd7e4235742ee0ff5d8ac15f982209989f7150407203dc65ad45e0c11a0f7416c3685e3cdd3d3f9ee2922e7558f201dd6a7e9c9dde3b612fd + languageName: node + linkType: hard + "node-fetch@npm:2.6.7, node-fetch@npm:^2.6.6, node-fetch@npm:^2.6.7": version: 2.6.7 resolution: "node-fetch@npm:2.6.7" @@ -13469,6 +17542,13 @@ __metadata: languageName: node linkType: hard +"node-forge@npm:^1.3.1": + version: 1.3.1 + resolution: "node-forge@npm:1.3.1" + checksum: 05bab6868633bf9ad4c3b1dd50ec501c22ffd69f556cdf169a00998ca1d03e8107a6032ba013852f202035372021b845603aeccd7dfcb58cdb7430013b3daa8d + languageName: node + linkType: hard + "node-gyp-build@npm:4.3.0": version: 4.3.0 resolution: "node-gyp-build@npm:4.3.0" @@ -13526,17 +17606,51 @@ __metadata: languageName: node linkType: hard -"node-hid@npm:2.1.1": - version: 2.1.1 - resolution: "node-hid@npm:2.1.1" +"node-hid@npm:2.1.1": + version: 2.1.1 + resolution: "node-hid@npm:2.1.1" + dependencies: + bindings: "npm:^1.5.0" + node-addon-api: "npm:^3.0.2" + node-gyp: "npm:latest" + prebuild-install: "npm:^6.0.0" + bin: + hid-showdevices: src/show-devices.js + checksum: 97a9b623eb185f34c63816b4540cd1b30793e4929cf342b794a19a9abcda1635ef6a07d341736a0025e3b7b0bb17a82a9430ee1d7499bef37fd5ead93ed5c743 + languageName: node + linkType: hard + +"node-int64@npm:^0.4.0": + version: 0.4.0 + resolution: "node-int64@npm:0.4.0" + checksum: b7afc2b65e56f7035b1a2eec57ae0fbdee7d742b1cdcd0f4387562b6527a011ab1cbe9f64cc8b3cca61e3297c9637c8bf61cec2e6b8d3a711d4b5267dfafbe02 + languageName: node + linkType: hard + +"node-releases@npm:^2.0.14": + version: 2.0.14 + resolution: "node-releases@npm:2.0.14" + checksum: 0f7607ec7db5ef1dc616899a5f24ae90c869b6a54c2d4f36ff6d84a282ab9343c7ff3ca3670fe4669171bb1e8a9b3e286e1ef1c131f09a83d70554f855d54f24 + languageName: node + linkType: hard + +"nodemon@npm:^3.0.3": + version: 3.0.3 + resolution: "nodemon@npm:3.0.3" dependencies: - bindings: "npm:^1.5.0" - node-addon-api: "npm:^3.0.2" - node-gyp: "npm:latest" - prebuild-install: "npm:^6.0.0" + chokidar: "npm:^3.5.2" + debug: "npm:^4" + ignore-by-default: "npm:^1.0.1" + minimatch: "npm:^3.1.2" + pstree.remy: "npm:^1.1.8" + semver: "npm:^7.5.3" + simple-update-notifier: "npm:^2.0.0" + supports-color: "npm:^5.5.0" + touch: "npm:^3.1.0" + undefsafe: "npm:^2.0.5" bin: - hid-showdevices: src/show-devices.js - checksum: 97a9b623eb185f34c63816b4540cd1b30793e4929cf342b794a19a9abcda1635ef6a07d341736a0025e3b7b0bb17a82a9430ee1d7499bef37fd5ead93ed5c743 + nodemon: bin/nodemon.js + checksum: 689f260e1c63b7dfdc1f8acb491c01fe1a03dbd93505b9e5dc94c6c683f9b8e0cf7d136a1274fb8f038f82b25ea59042db740e61014b8fed2f13ff441ba4b36c languageName: node linkType: hard @@ -13576,6 +17690,17 @@ __metadata: languageName: node linkType: hard +"nopt@npm:~1.0.10": + version: 1.0.10 + resolution: "nopt@npm:1.0.10" + dependencies: + abbrev: "npm:1" + bin: + nopt: ./bin/nopt.js + checksum: 4f01ad1e144883a190d70bd6003f26e2f3a899230fe1b0f3310e43779c61cab5ae0063a9209912cd52fc4c552b266b38173853aa9abe27ecb04acbdfdca2e9fc + languageName: node + linkType: hard + "normalize-package-data@npm:^2.5.0": version: 2.5.0 resolution: "normalize-package-data@npm:2.5.0" @@ -13618,6 +17743,15 @@ __metadata: languageName: node linkType: hard +"npm-run-path@npm:^5.1.0": + version: 5.2.0 + resolution: "npm-run-path@npm:5.2.0" + dependencies: + path-key: "npm:^4.0.0" + checksum: c5325e016014e715689c4014f7e0be16cc4cbf529f32a1723e511bc4689b5f823b704d2bca61ac152ce2bda65e0205dc8b3ba0ec0f5e4c3e162d302f6f5b9efb + languageName: node + linkType: hard + "npmlog@npm:^4.0.1": version: 4.1.2 resolution: "npmlog@npm:4.1.2" @@ -13758,6 +17892,31 @@ __metadata: languageName: node linkType: hard +"ofetch@npm:^1.3.3": + version: 1.3.3 + resolution: "ofetch@npm:1.3.3" + dependencies: + destr: "npm:^2.0.1" + node-fetch-native: "npm:^1.4.0" + ufo: "npm:^1.3.0" + checksum: d4ba1f374f3b9f3b4bd47fdca3cda47a16367e6f727545aa3ba93e9be89e615c6731dfd21158b2ef78c1788def15d2d045c233a446354099d6a17fee66e60c98 + languageName: node + linkType: hard + +"ohash@npm:^1.1.3": + version: 1.1.3 + resolution: "ohash@npm:1.1.3" + checksum: 80a3528285f61588600c8c4f091a67f55fbc141f4eec4b3c30182468053042eef5a9684780e963f98a71ec068f3de56d42920c6417bf8f79ab14aeb75ac0bb39 + languageName: node + linkType: hard + +"on-exit-leak-free@npm:^0.2.0": + version: 0.2.0 + resolution: "on-exit-leak-free@npm:0.2.0" + checksum: 36a3a1baea964dc01088884e9d87824cc1a3304ae702e7c688bdb5deec61fbb79325977dd6cba5988f60ad40fedc6ef31ec705adf65b4b042bc0d2686186c0dd + languageName: node + linkType: hard + "on-finished@npm:2.4.1": version: 2.4.1 resolution: "on-finished@npm:2.4.1" @@ -13785,6 +17944,15 @@ __metadata: languageName: node linkType: hard +"onetime@npm:^6.0.0": + version: 6.0.0 + resolution: "onetime@npm:6.0.0" + dependencies: + mimic-fn: "npm:^4.0.0" + checksum: 0846ce78e440841335d4e9182ef69d5762e9f38aa7499b19f42ea1c4cd40f0b4446094c455c713f9adac3f4ae86f613bb5e30c99e52652764d06a89f709b3788 + languageName: node + linkType: hard + "optionator@npm:^0.8.1": version: 0.8.3 resolution: "optionator@npm:0.8.3" @@ -13827,6 +17995,13 @@ __metadata: languageName: node linkType: hard +"outdent@npm:^0.8.0": + version: 0.8.0 + resolution: "outdent@npm:0.8.0" + checksum: a556c5c308705ad4e3441be435f2b2cf014cb5f9753a24cbd080eadc473b988c77d0d529a6a9a57c3931fb4178e5a81d668cc4bc49892b668191a5d0ba3df76e + languageName: node + linkType: hard + "p-cancelable@npm:^0.3.0": version: 0.3.0 resolution: "p-cancelable@npm:0.3.0" @@ -13875,7 +18050,7 @@ __metadata: languageName: node linkType: hard -"p-limit@npm:^3.0.2": +"p-limit@npm:^3.0.2, p-limit@npm:^3.1.0": version: 3.1.0 resolution: "p-limit@npm:3.1.0" dependencies: @@ -14067,6 +18242,13 @@ __metadata: languageName: node linkType: hard +"path-key@npm:^4.0.0": + version: 4.0.0 + resolution: "path-key@npm:4.0.0" + checksum: 8e6c314ae6d16b83e93032c61020129f6f4484590a777eed709c4a01b50e498822b00f76ceaf94bc64dbd90b327df56ceadce27da3d83393790f1219e07721d7 + languageName: node + linkType: hard + "path-parse@npm:^1.0.6, path-parse@npm:^1.0.7": version: 1.0.7 resolution: "path-parse@npm:1.0.7" @@ -14097,6 +18279,13 @@ __metadata: languageName: node linkType: hard +"pathe@npm:^1.1.0, pathe@npm:^1.1.1, pathe@npm:^1.1.2": + version: 1.1.2 + resolution: "pathe@npm:1.1.2" + checksum: f201d796351bf7433d147b92c20eb154a4e0ea83512017bf4ec4e492a5d6e738fb45798be4259a61aa81270179fce11026f6ff0d3fa04173041de044defe9d80 + languageName: node + linkType: hard + "pathval@npm:^1.1.1": version: 1.1.1 resolution: "pathval@npm:1.1.1" @@ -14124,7 +18313,14 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.3.1": +"picocolors@npm:^1.0.0": + version: 1.0.0 + resolution: "picocolors@npm:1.0.0" + checksum: a2e8092dd86c8396bdba9f2b5481032848525b3dc295ce9b57896f931e63fc16f79805144321f72976383fc249584672a75cc18d6777c6b757603f372f745981 + languageName: node + linkType: hard + +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" checksum: 60c2595003b05e4535394d1da94850f5372c9427ca4413b71210f437f7b2ca091dbd611c45e8b37d10036fa8eade25c1b8951654f9d3973bfa66a2ff4d3b08bc @@ -14140,6 +18336,13 @@ __metadata: languageName: node linkType: hard +"pify@npm:^3.0.0": + version: 3.0.0 + resolution: "pify@npm:3.0.0" + checksum: 668c1dc8d9fc1b34b9ce3b16ba59deb39d4dc743527bf2ed908d2b914cb8ba40aa5ba6960b27c417c241531c5aafd0598feeac2d50cb15278cf9863fa6b02a77 + languageName: node + linkType: hard + "pify@npm:^4.0.1": version: 4.0.1 resolution: "pify@npm:4.0.1" @@ -14147,6 +18350,58 @@ __metadata: languageName: node linkType: hard +"pify@npm:^5.0.0": + version: 5.0.0 + resolution: "pify@npm:5.0.0" + checksum: 443e3e198ad6bfa8c0c533764cf75c9d5bc976387a163792fb553ffe6ce923887cf14eebf5aea9b7caa8eab930da8c33612990ae85bd8c2bc18bedb9eae94ecb + languageName: node + linkType: hard + +"pino-abstract-transport@npm:v0.5.0": + version: 0.5.0 + resolution: "pino-abstract-transport@npm:0.5.0" + dependencies: + duplexify: "npm:^4.1.2" + split2: "npm:^4.0.0" + checksum: d304a104e5cb0c3fef62ea544a4a39bf2472a602cdd7ddb136b0671b9c324ad93fa7888825c4cf33e624802436e897081ba92440f40518b9f2dbdbc0c889e409 + languageName: node + linkType: hard + +"pino-std-serializers@npm:^4.0.0": + version: 4.0.0 + resolution: "pino-std-serializers@npm:4.0.0" + checksum: cec586f9634ef0e6582f62bc8fc5ca5b6e5e11ab88fe3950c66fb0fd5d6690f66bc39cd3f27216b925d2963ad5c3bba415718819ac20ebe0390c7d056cbfea1b + languageName: node + linkType: hard + +"pino@npm:7.11.0": + version: 7.11.0 + resolution: "pino@npm:7.11.0" + dependencies: + atomic-sleep: "npm:^1.0.0" + fast-redact: "npm:^3.0.0" + on-exit-leak-free: "npm:^0.2.0" + pino-abstract-transport: "npm:v0.5.0" + pino-std-serializers: "npm:^4.0.0" + process-warning: "npm:^1.0.0" + quick-format-unescaped: "npm:^4.0.3" + real-require: "npm:^0.1.0" + safe-stable-stringify: "npm:^2.1.0" + sonic-boom: "npm:^2.2.1" + thread-stream: "npm:^0.15.1" + bin: + pino: bin.js + checksum: 1c7b4b52fea76e0bc5d8b1190a0fee24279cb16d76fdb5833b32b64256fd8a94d641574b850faba5be72514f04045206b6d902a9a3f5ceae2a4296687088e073 + languageName: node + linkType: hard + +"pirates@npm:^4.0.4": + version: 4.0.6 + resolution: "pirates@npm:4.0.6" + checksum: d02dda76f4fec1cbdf395c36c11cf26f76a644f9f9a1bfa84d3167d0d3154d5289aacc72677aa20d599bb4a6937a471de1b65c995e2aea2d8687cbcd7e43ea5f + languageName: node + linkType: hard + "pkg-dir@npm:^4.2.0": version: 4.2.0 resolution: "pkg-dir@npm:4.2.0" @@ -14156,6 +18411,17 @@ __metadata: languageName: node linkType: hard +"pkg-types@npm:^1.0.3": + version: 1.0.3 + resolution: "pkg-types@npm:1.0.3" + dependencies: + jsonc-parser: "npm:^3.2.0" + mlly: "npm:^1.2.0" + pathe: "npm:^1.1.0" + checksum: e17e1819ce579c9ea390e4c41a9ed9701d8cff14b463f9577cc4f94688da8917c66dabc40feacd47a21eb3de9b532756a78becd882b76add97053af307c1240a + languageName: node + linkType: hard + "pluralize@npm:^8.0.0": version: 8.0.0 resolution: "pluralize@npm:8.0.0" @@ -14163,6 +18429,38 @@ __metadata: languageName: node linkType: hard +"pngjs@npm:^5.0.0": + version: 5.0.0 + resolution: "pngjs@npm:5.0.0" + checksum: 345781644740779752505af2fea3e9043f6c7cc349b18e1fb8842796360d1624791f0c24d33c0f27b05658373f90ffaa177a849e932e5fea1f540cef3975f3c9 + languageName: node + linkType: hard + +"pony-cause@npm:^2.1.10": + version: 2.1.10 + resolution: "pony-cause@npm:2.1.10" + checksum: 906563565030996d0c40ba79a584e2f298391931acc59c98510f9fd583d72cd9e9c58b0fb5a25bbae19daf16840f94cb9c1ee72c7ed5ef249ecba147cee40495 + languageName: node + linkType: hard + +"postcss@npm:8.4.31": + version: 8.4.31 + resolution: "postcss@npm:8.4.31" + dependencies: + nanoid: "npm:^3.3.6" + picocolors: "npm:^1.0.0" + source-map-js: "npm:^1.0.2" + checksum: 1a6653e72105907377f9d4f2cd341d8d90e3fde823a5ddea1e2237aaa56933ea07853f0f2758c28892a1d70c53bbaca200eb8b80f8ed55f13093003dbec5afa0 + languageName: node + linkType: hard + +"preact@npm:^10.12.0, preact@npm:^10.16.0": + version: 10.19.6 + resolution: "preact@npm:10.19.6" + checksum: 851c7d91e6899a40fdeae0ef9a792bf3217ed8365ce96f4c5630048c82b44c637fd4c0d8a4b0c3e1c8e74e243600dd9c5787520da07552d33a06c957779b4167 + languageName: node + linkType: hard + "prebuild-install@npm:^5.3.4": version: 5.3.6 resolution: "prebuild-install@npm:5.3.6" @@ -14284,6 +18582,17 @@ __metadata: languageName: node linkType: hard +"pretty-format@npm:^29.7.0": + version: 29.7.0 + resolution: "pretty-format@npm:29.7.0" + dependencies: + "@jest/schemas": "npm:^29.6.3" + ansi-styles: "npm:^5.0.0" + react-is: "npm:^18.0.0" + checksum: dea96bc83c83cd91b2bfc55757b6b2747edcaac45b568e46de29deee80742f17bc76fe8898135a70d904f4928eafd8bb693cd1da4896e8bdd3c5e82cadf1d2bb + languageName: node + linkType: hard + "process-nextick-args@npm:~2.0.0": version: 2.0.1 resolution: "process-nextick-args@npm:2.0.1" @@ -14291,6 +18600,13 @@ __metadata: languageName: node linkType: hard +"process-warning@npm:^1.0.0": + version: 1.0.0 + resolution: "process-warning@npm:1.0.0" + checksum: 8736d11d8d71c349d176e210305e84d74b13af06efb3c779377b056bfd608257d1e4e32b8fbbf90637c900f0313e40f7c9f583140884f667a21fc10a869b840c + languageName: node + linkType: hard + "process@npm:^0.11.10": version: 0.11.10 resolution: "process@npm:0.11.10" @@ -14333,7 +18649,7 @@ __metadata: languageName: node linkType: hard -"prompts@npm:^2.4.2": +"prompts@npm:^2.0.1, prompts@npm:^2.4.2": version: 2.4.2 resolution: "prompts@npm:2.4.2" dependencies: @@ -14384,6 +18700,13 @@ __metadata: languageName: node linkType: hard +"proxy-compare@npm:2.5.1": + version: 2.5.1 + resolution: "proxy-compare@npm:2.5.1" + checksum: 64b6277d08d89f0b2c468a84decf43f82a4e88da7075651e6adebc69d1b87fadc17cfeb43c024c00b65faa3f0908f7ac1e61f5f6849a404a547a742e6aa527a6 + languageName: node + linkType: hard + "prr@npm:~1.0.1": version: 1.0.1 resolution: "prr@npm:1.0.1" @@ -14405,6 +18728,13 @@ __metadata: languageName: node linkType: hard +"pstree.remy@npm:^1.1.8": + version: 1.1.8 + resolution: "pstree.remy@npm:1.1.8" + checksum: ef13b1b5896b35f67dbd4fb7ba54bb2a5da1a5c317276cbad4bcad4159bf8f7b5e1748dc244bf36865f3d560d2fc952521581280a91468c9c2df166cc760c8c1 + languageName: node + linkType: hard + "pump@npm:^3.0.0": version: 3.0.0 resolution: "pump@npm:3.0.0" @@ -14436,6 +18766,13 @@ __metadata: languageName: node linkType: hard +"pure-rand@npm:^6.0.0": + version: 6.0.4 + resolution: "pure-rand@npm:6.0.4" + checksum: 34fed0abe99d3db7ddc459c12e1eda6bff05db6a17f2017a1ae12202271ccf276fb223b442653518c719671c1b339bbf97f27ba9276dba0997c89e45c4e6a3bf + languageName: node + linkType: hard + "pvtsutils@npm:^1.3.2": version: 1.3.2 resolution: "pvtsutils@npm:1.3.2" @@ -14452,6 +18789,34 @@ __metadata: languageName: node linkType: hard +"qrcode@npm:1.5.0": + version: 1.5.0 + resolution: "qrcode@npm:1.5.0" + dependencies: + dijkstrajs: "npm:^1.0.1" + encode-utf8: "npm:^1.0.3" + pngjs: "npm:^5.0.0" + yargs: "npm:^15.3.1" + bin: + qrcode: bin/qrcode + checksum: b8d942a5fbd45c3517c095095e84566c43a5ef8654eee34957ff96957adf63467a65a3d90177013a2cc2de83932da105aa8beb62a5bc7886fe7e9920ccf02c4d + languageName: node + linkType: hard + +"qrcode@npm:1.5.3, qrcode@npm:^1.5.1": + version: 1.5.3 + resolution: "qrcode@npm:1.5.3" + dependencies: + dijkstrajs: "npm:^1.0.1" + encode-utf8: "npm:^1.0.3" + pngjs: "npm:^5.0.0" + yargs: "npm:^15.3.1" + bin: + qrcode: bin/qrcode + checksum: 823642d59a81ba5f406a1e78415fee37fd53856038f49a85c4ca7aa32ba6b8505ab059a832718ac16612bed75aa2a18584faae38cf3c25e2c90fb19b8c55fe46 + languageName: node + linkType: hard + "qs@npm:6.10.3": version: 6.10.3 resolution: "qs@npm:6.10.3" @@ -14461,6 +18826,15 @@ __metadata: languageName: node linkType: hard +"qs@npm:6.11.0": + version: 6.11.0 + resolution: "qs@npm:6.11.0" + dependencies: + side-channel: "npm:^1.0.4" + checksum: 5a3bfea3e2f359ede1bfa5d2f0dbe54001aa55e40e27dc3e60fab814362d83a9b30758db057c2011b6f53a2d4e4e5150194b5bac45372652aecb3e3c0d4b256e + languageName: node + linkType: hard + "qs@npm:^6.4.0": version: 6.10.5 resolution: "qs@npm:6.10.5" @@ -14477,6 +18851,18 @@ __metadata: languageName: node linkType: hard +"query-string@npm:7.1.3": + version: 7.1.3 + resolution: "query-string@npm:7.1.3" + dependencies: + decode-uri-component: "npm:^0.2.2" + filter-obj: "npm:^1.1.0" + split-on-first: "npm:^1.0.0" + strict-uri-encode: "npm:^2.0.0" + checksum: 3b6f2c167e76ca4094c5f1a9eb276efcbb9ebfd8b1a28c413f3c4e4e7d6428c8187bf46c8cbc9f92a229369dd0015de10a7fd712c8cee98d5d84c2ac6140357e + languageName: node + linkType: hard + "query-string@npm:^5.0.1": version: 5.1.1 resolution: "query-string@npm:5.1.1" @@ -14488,6 +18874,18 @@ __metadata: languageName: node linkType: hard +"query-string@npm:^6.13.5": + version: 6.14.1 + resolution: "query-string@npm:6.14.1" + dependencies: + decode-uri-component: "npm:^0.2.0" + filter-obj: "npm:^1.1.0" + split-on-first: "npm:^1.0.0" + strict-uri-encode: "npm:^2.0.0" + checksum: 95f5a372f777b4fb5bdae5a2d85961cf3894d466cfc3a0cc799320d5ed633af935c0d96ee5d2b1652c02888e749831409ca5dd5eb388ce1014a9074024a22840 + languageName: node + linkType: hard + "querystring@npm:0.2.0": version: 0.2.0 resolution: "querystring@npm:0.2.0" @@ -14502,6 +18900,13 @@ __metadata: languageName: node linkType: hard +"quick-format-unescaped@npm:^4.0.3": + version: 4.0.4 + resolution: "quick-format-unescaped@npm:4.0.4" + checksum: 591eca457509a99368b623db05248c1193aa3cedafc9a077d7acab09495db1231017ba3ad1b5386e5633271edd0a03b312d8640a59ee585b8516a42e15438aa7 + languageName: node + linkType: hard + "quick-lru@npm:^4.0.1": version: 4.0.1 resolution: "quick-lru@npm:4.0.1" @@ -14516,6 +18921,13 @@ __metadata: languageName: node linkType: hard +"radix3@npm:^1.1.0": + version: 1.1.0 + resolution: "radix3@npm:1.1.0" + checksum: 311258ec9e8cc17613fd31aaf3138bfb2ab1ea015738e91591920961f74a1914491338554e8530f7902f1629b6c2ea2dfd66a5c068f14b76cf6535b68b5292c4 + languageName: node + linkType: hard + "randombytes@npm:^2.0.1, randombytes@npm:^2.1.0": version: 2.1.0 resolution: "randombytes@npm:2.1.0" @@ -14558,6 +18970,112 @@ __metadata: languageName: node linkType: hard +"react-dom@npm:^18.2.0": + version: 18.2.0 + resolution: "react-dom@npm:18.2.0" + dependencies: + loose-envify: "npm:^1.1.0" + scheduler: "npm:^0.23.0" + peerDependencies: + react: ^18.2.0 + checksum: ca5e7762ec8c17a472a3605b6f111895c9f87ac7d43a610ab7024f68cd833d08eda0625ce02ec7178cc1f3c957cf0b9273cdc17aa2cd02da87544331c43b1d21 + languageName: node + linkType: hard + +"react-fast-compare@npm:^2.0.1": + version: 2.0.4 + resolution: "react-fast-compare@npm:2.0.4" + checksum: e4e3218c0f5c29b88e9f184a12adb77b0a93a803dbd45cb98bbb754c8310dc74e6266c53dd70b90ba4d0939e0e1b8a182cb05d081bcab22507a0390fbcd768ac + languageName: node + linkType: hard + +"react-is@npm:^16.7.0": + version: 16.13.1 + resolution: "react-is@npm:16.13.1" + checksum: 5aa564a1cde7d391ac980bedee21202fc90bdea3b399952117f54fb71a932af1e5902020144fb354b4690b2414a0c7aafe798eb617b76a3d441d956db7726fdf + languageName: node + linkType: hard + +"react-is@npm:^18.0.0": + version: 18.2.0 + resolution: "react-is@npm:18.2.0" + checksum: 200cd65bf2e0be7ba6055f647091b725a45dd2a6abef03bf2380ce701fd5edccee40b49b9d15edab7ac08a762bf83cb4081e31ec2673a5bfb549a36ba21570df + languageName: node + linkType: hard + +"react-remove-scroll-bar@npm:^2.3.3": + version: 2.3.5 + resolution: "react-remove-scroll-bar@npm:2.3.5" + dependencies: + react-style-singleton: "npm:^2.2.1" + tslib: "npm:^2.0.0" + peerDependencies: + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 6d05e74ee8049b322ba0aeb398e092ae284a5b04013bc07f0c1f283824b088fd5c1b1f1514a0e0e501c063a9c3b5899373039329d0266a21121222c814052053 + languageName: node + linkType: hard + +"react-remove-scroll@npm:2.5.4": + version: 2.5.4 + resolution: "react-remove-scroll@npm:2.5.4" + dependencies: + react-remove-scroll-bar: "npm:^2.3.3" + react-style-singleton: "npm:^2.2.1" + tslib: "npm:^2.1.0" + use-callback-ref: "npm:^1.3.0" + use-sidecar: "npm:^1.1.2" + peerDependencies: + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 330e3b816c1479f74701ff04a90ffff3e2ae8a996ce9d6978eb899a771eed6b9150dc4889d283053f2e4d84f66ad5550e2522d9df35f3394d211ab79d1c54fde + languageName: node + linkType: hard + +"react-style-singleton@npm:^2.2.1": + version: 2.2.1 + resolution: "react-style-singleton@npm:2.2.1" + dependencies: + get-nonce: "npm:^1.0.0" + invariant: "npm:^2.2.4" + tslib: "npm:^2.0.0" + peerDependencies: + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 80c58fd6aac3594e351e2e7b048d8a5b09508adb21031a38b3c40911fe58295572eddc640d4b20a7be364842c8ed1120fe30097e22ea055316b375b88d4ff02a + languageName: node + linkType: hard + +"react-toastify@npm:^9.1.1": + version: 9.1.3 + resolution: "react-toastify@npm:9.1.3" + dependencies: + clsx: "npm:^1.1.1" + peerDependencies: + react: ">=16" + react-dom: ">=16" + checksum: 12667aa10e6cf3f74be2e3c704c2d5570dd7de66fff89ae38fbfab1122e9a9f632de1cb712fe44a9a60b8ecca7590578157cb4ca6c4e8105a8cf80936a94e181 + languageName: node + linkType: hard + +"react@npm:^18.2.0": + version: 18.2.0 + resolution: "react@npm:18.2.0" + dependencies: + loose-envify: "npm:^1.1.0" + checksum: b9214a9bd79e99d08de55f8bef2b7fc8c39630be97c4e29d7be173d14a9a10670b5325e94485f74cd8bff4966ef3c78ee53c79a7b0b9b70cba20aa8973acc694 + languageName: node + linkType: hard + "read-pkg-up@npm:^7.0.1": version: 7.0.1 resolution: "read-pkg-up@npm:7.0.1" @@ -14655,6 +19173,13 @@ __metadata: languageName: node linkType: hard +"real-require@npm:^0.1.0": + version: 0.1.0 + resolution: "real-require@npm:0.1.0" + checksum: 0ba1c440dc9b7777d35a97f755312bf236be0847249f76cc9789c5c08d141f5d80b8564888e6a94ed0253fabf597b6892f8502c4e5658fb98f88642633a39723 + languageName: node + linkType: hard + "rechoir@npm:^0.6.2": version: 0.6.2 resolution: "rechoir@npm:0.6.2" @@ -14683,6 +19208,22 @@ __metadata: languageName: node linkType: hard +"redis-errors@npm:^1.0.0, redis-errors@npm:^1.2.0": + version: 1.2.0 + resolution: "redis-errors@npm:1.2.0" + checksum: 001c11f63ddd52d7c80eb4f4ede3a9433d29a458a7eea06b9154cb37c9802a218d93b7988247aa8c958d4b5d274b18354e8853c148f1096fda87c6e675cfd3ee + languageName: node + linkType: hard + +"redis-parser@npm:^3.0.0": + version: 3.0.0 + resolution: "redis-parser@npm:3.0.0" + dependencies: + redis-errors: "npm:^1.0.0" + checksum: b10846844b4267f19ce1a6529465819c3d78c3e89db7eb0c3bb4eb19f83784797ec411274d15a77dbe08038b48f95f76014b83ca366dc955a016a3a0a0234650 + languageName: node + linkType: hard + "reduce-flatten@npm:^2.0.0": version: 2.0.0 resolution: "reduce-flatten@npm:2.0.0" @@ -14842,6 +19383,15 @@ __metadata: languageName: node linkType: hard +"resolve-cwd@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-cwd@npm:3.0.0" + dependencies: + resolve-from: "npm:^5.0.0" + checksum: 546e0816012d65778e580ad62b29e975a642989108d9a3c5beabfb2304192fa3c9f9146fbdfe213563c6ff51975ae41bac1d3c6e047dd9572c94863a057b4d81 + languageName: node + linkType: hard + "resolve-from@npm:^3.0.0": version: 3.0.0 resolution: "resolve-from@npm:3.0.0" @@ -14863,6 +19413,13 @@ __metadata: languageName: node linkType: hard +"resolve.exports@npm:^2.0.0": + version: 2.0.2 + resolution: "resolve.exports@npm:2.0.2" + checksum: f1cc0b6680f9a7e0345d783e0547f2a5110d8336b3c2a4227231dd007271ffd331fd722df934f017af90bae0373920ca0d4005da6f76cb3176c8ae426370f893 + languageName: node + linkType: hard + "resolve@npm:1.1.x": version: 1.1.7 resolution: "resolve@npm:1.1.7" @@ -14892,7 +19449,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.10.0": +"resolve@npm:^1.10.0, resolve@npm:^1.20.0": version: 1.22.8 resolution: "resolve@npm:1.22.8" dependencies: @@ -14934,7 +19491,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin": +"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" dependencies: @@ -15156,6 +19713,13 @@ __metadata: languageName: node linkType: hard +"safe-stable-stringify@npm:^2.1.0": + version: 2.4.3 + resolution: "safe-stable-stringify@npm:2.4.3" + checksum: a6c192bbefe47770a11072b51b500ed29be7b1c15095371c1ee1dc13e45ce48ee3c80330214c56764d006c485b88bd0b24940d868948170dddc16eed312582d8 + languageName: node + linkType: hard + "safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:~2.1.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" @@ -15187,6 +19751,15 @@ __metadata: languageName: node linkType: hard +"scheduler@npm:^0.23.0": + version: 0.23.0 + resolution: "scheduler@npm:0.23.0" + dependencies: + loose-envify: "npm:^1.1.0" + checksum: 0c4557aa37bafca44ff21dc0ea7c92e2dbcb298bc62eae92b29a39b029134f02fb23917d6ebc8b1fa536b4184934314c20d8864d156a9f6357f3398aaf7bfda8 + languageName: node + linkType: hard + "scrypt-js@npm:2.0.4": version: 2.0.4 resolution: "scrypt-js@npm:2.0.4" @@ -15254,6 +19827,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:^6.3.1": + version: 6.3.1 + resolution: "semver@npm:6.3.1" + bin: + semver: bin/semver.js + checksum: 1ef3a85bd02a760c6ef76a45b8c1ce18226de40831e02a00bad78485390b98b6ccaa31046245fc63bba4a47a6a592b6c7eedc65cc47126e60489f9cc1ce3ed7e + languageName: node + linkType: hard + "semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7": version: 7.3.7 resolution: "semver@npm:7.3.7" @@ -15265,6 +19847,17 @@ __metadata: languageName: node linkType: hard +"semver@npm:^7.3.8": + version: 7.6.0 + resolution: "semver@npm:7.6.0" + dependencies: + lru-cache: "npm:^6.0.0" + bin: + semver: bin/semver.js + checksum: 1b41018df2d8aca5a1db4729985e8e20428c650daea60fcd16e926e9383217d00f574fab92d79612771884a98d2ee2a1973f49d630829a8d54d6570defe62535 + languageName: node + linkType: hard + "semver@npm:^7.5.2, semver@npm:^7.5.3, semver@npm:^7.5.4": version: 7.5.4 resolution: "semver@npm:7.5.4" @@ -15382,7 +19975,7 @@ __metadata: languageName: node linkType: hard -"sha.js@npm:^2.4.0, sha.js@npm:^2.4.8": +"sha.js@npm:^2.4.0, sha.js@npm:^2.4.11, sha.js@npm:^2.4.8": version: 2.4.11 resolution: "sha.js@npm:2.4.11" dependencies: @@ -15467,6 +20060,13 @@ __metadata: languageName: node linkType: hard +"signal-exit@npm:^4.1.0": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: c9fa63bbbd7431066174a48ba2dd9986dfd930c3a8b59de9c29d7b6854ec1c12a80d15310869ea5166d413b99f041bfa3dd80a7947bcd44ea8e6eb3ffeabfa1f + languageName: node + linkType: hard + "simple-concat@npm:^1.0.0": version: 1.0.1 resolution: "simple-concat@npm:1.0.1" @@ -15496,6 +20096,15 @@ __metadata: languageName: node linkType: hard +"simple-update-notifier@npm:^2.0.0": + version: 2.0.0 + resolution: "simple-update-notifier@npm:2.0.0" + dependencies: + semver: "npm:^7.5.3" + checksum: 40bd4f96aa89aedbf717ae9f4ab8fca70e8f7511e8b766feb15471cca3f6fe4fe673743309b08b4ba8abfe0965c9cd927e1de46550a757b819b70fc7430cc85d + languageName: node + linkType: hard + "sinon@npm:^13.0.2": version: 13.0.2 resolution: "sinon@npm:13.0.2" @@ -15719,6 +20328,32 @@ __metadata: languageName: node linkType: hard +"sonic-boom@npm:^2.2.1": + version: 2.8.0 + resolution: "sonic-boom@npm:2.8.0" + dependencies: + atomic-sleep: "npm:^1.0.0" + checksum: 05351d9f44bac59b2a4ab42ee22bf81b8c3bbd22db20183d78d5f2067557eb623e0eaf93b2bc0f8417bee92ca372bc26e0d83e3bdb0ffebcc33738ac1c191876 + languageName: node + linkType: hard + +"source-map-js@npm:^1.0.2": + version: 1.0.2 + resolution: "source-map-js@npm:1.0.2" + checksum: 38e2d2dd18d2e331522001fc51b54127ef4a5d473f53b1349c5cca2123562400e0986648b52e9407e348eaaed53bce49248b6e2641e6d793ca57cb2c360d6d51 + languageName: node + linkType: hard + +"source-map-support@npm:0.5.13": + version: 0.5.13 + resolution: "source-map-support@npm:0.5.13" + dependencies: + buffer-from: "npm:^1.0.0" + source-map: "npm:^0.6.0" + checksum: d1514a922ac9c7e4786037eeff6c3322f461cd25da34bb9fefb15387b3490531774e6e31d95ab6d5b84a3e139af9c3a570ccaee6b47bd7ea262691ed3a8bc34e + languageName: node + linkType: hard + "source-map-support@npm:^0.5.13, source-map-support@npm:^0.5.16": version: 0.5.21 resolution: "source-map-support@npm:0.5.21" @@ -15796,6 +20431,20 @@ __metadata: languageName: node linkType: hard +"split-on-first@npm:^1.0.0": + version: 1.1.0 + resolution: "split-on-first@npm:1.1.0" + checksum: 16ff85b54ddcf17f9147210a4022529b343edbcbea4ce977c8f30e38408b8d6e0f25f92cd35b86a524d4797f455e29ab89eb8db787f3c10708e0b47ebf528d30 + languageName: node + linkType: hard + +"split2@npm:^4.0.0": + version: 4.2.0 + resolution: "split2@npm:4.2.0" + checksum: 09bbefc11bcf03f044584c9764cd31a252d8e52cea29130950b26161287c11f519807c5e54bd9e5804c713b79c02cefe6a98f4688630993386be353e03f534ab + languageName: node + linkType: hard + "sprintf-js@npm:~1.0.2": version: 1.0.3 resolution: "sprintf-js@npm:1.0.3" @@ -15833,6 +20482,15 @@ __metadata: languageName: node linkType: hard +"stack-utils@npm:^2.0.3": + version: 2.0.6 + resolution: "stack-utils@npm:2.0.6" + dependencies: + escape-string-regexp: "npm:^2.0.0" + checksum: cdc988acbc99075b4b036ac6014e5f1e9afa7e564482b687da6384eee6a1909d7eaffde85b0a17ffbe186c5247faf6c2b7544e802109f63b72c7be69b13151bb + languageName: node + linkType: hard + "stacktrace-parser@npm:^0.1.10": version: 0.1.10 resolution: "stacktrace-parser@npm:0.1.10" @@ -15842,6 +20500,13 @@ __metadata: languageName: node linkType: hard +"standard-as-callback@npm:^2.1.0": + version: 2.1.0 + resolution: "standard-as-callback@npm:2.1.0" + checksum: 88bec83ee220687c72d94fd86a98d5272c91d37ec64b66d830dbc0d79b62bfa6e47f53b71646011835fc9ce7fae62739545d13124262b53be4fbb3e2ebad551c + languageName: node + linkType: hard + "statuses@npm:2.0.1": version: 2.0.1 resolution: "statuses@npm:2.0.1" @@ -15849,6 +20514,13 @@ __metadata: languageName: node linkType: hard +"std-env@npm:^3.7.0": + version: 3.7.0 + resolution: "std-env@npm:3.7.0" + checksum: 6ee0cca1add3fd84656b0002cfbc5bfa20340389d9ba4720569840f1caa34bce74322aef4c93f046391583e50649d0cf81a5f8fe1d411e50b659571690a45f12 + languageName: node + linkType: hard + "stealthy-require@npm:^1.1.1": version: 1.1.1 resolution: "stealthy-require@npm:1.1.1" @@ -15856,6 +20528,13 @@ __metadata: languageName: node linkType: hard +"stream-shift@npm:^1.0.0": + version: 1.0.3 + resolution: "stream-shift@npm:1.0.3" + checksum: a24c0a3f66a8f9024bd1d579a533a53be283b4475d4e6b4b3211b964031447bdf6532dd1f3c2b0ad66752554391b7c62bd7ca4559193381f766534e723d50242 + languageName: node + linkType: hard + "stream-transform@npm:^2.1.3": version: 2.1.3 resolution: "stream-transform@npm:2.1.3" @@ -15879,6 +20558,13 @@ __metadata: languageName: node linkType: hard +"strict-uri-encode@npm:^2.0.0": + version: 2.0.0 + resolution: "strict-uri-encode@npm:2.0.0" + checksum: eaac4cf978b6fbd480f1092cab8b233c9b949bcabfc9b598dd79a758f7243c28765ef7639c876fa72940dac687181b35486ea01ff7df3e65ce3848c64822c581 + languageName: node + linkType: hard + "string-argv@npm:^0.3.1": version: 0.3.1 resolution: "string-argv@npm:0.3.1" @@ -15893,6 +20579,16 @@ __metadata: languageName: node linkType: hard +"string-length@npm:^4.0.1": + version: 4.0.2 + resolution: "string-length@npm:4.0.2" + dependencies: + char-regex: "npm:^1.0.2" + strip-ansi: "npm:^6.0.0" + checksum: ce85533ef5113fcb7e522bcf9e62cb33871aa99b3729cec5595f4447f660b0cefd542ca6df4150c97a677d58b0cb727a3fe09ac1de94071d05526c73579bf505 + languageName: node + linkType: hard + "string-width@npm:^1.0.1": version: 1.0.2 resolution: "string-width@npm:1.0.2" @@ -16072,6 +20768,13 @@ __metadata: languageName: node linkType: hard +"strip-bom@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-bom@npm:4.0.0" + checksum: 9dbcfbaf503c57c06af15fe2c8176fb1bf3af5ff65003851a102749f875a6dbe0ab3b30115eccf6e805e9d756830d3e40ec508b62b3f1ddf3761a20ebe29d3f3 + languageName: node + linkType: hard + "strip-final-newline@npm:^2.0.0": version: 2.0.0 resolution: "strip-final-newline@npm:2.0.0" @@ -16079,6 +20782,13 @@ __metadata: languageName: node linkType: hard +"strip-final-newline@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-final-newline@npm:3.0.0" + checksum: 23ee263adfa2070cd0f23d1ac14e2ed2f000c9b44229aec9c799f1367ec001478469560abefd00c5c99ee6f0b31c137d53ec6029c53e9f32a93804e18c201050 + languageName: node + linkType: hard + "strip-hex-prefix@npm:1.0.0": version: 1.0.0 resolution: "strip-hex-prefix@npm:1.0.0" @@ -16111,6 +20821,22 @@ __metadata: languageName: node linkType: hard +"styled-jsx@npm:5.1.1": + version: 5.1.1 + resolution: "styled-jsx@npm:5.1.1" + dependencies: + client-only: "npm:0.0.1" + peerDependencies: + react: ">= 16.8.0 || 17.x.x || ^18.0.0-0" + peerDependenciesMeta: + "@babel/core": + optional: true + babel-plugin-macros: + optional: true + checksum: 4f6a5d0010770fdeea1183d919d528fd46c484e23c0535ef3e1dd49488116f639c594f3bd4440e3bc8a8686c9f8d53c5761599870ff039ede11a5c3bfe08a4be + languageName: node + linkType: hard + "superstruct@npm:^0.14.2": version: 0.14.2 resolution: "superstruct@npm:0.14.2" @@ -16118,6 +20844,13 @@ __metadata: languageName: node linkType: hard +"superstruct@npm:^1.0.3": + version: 1.0.3 + resolution: "superstruct@npm:1.0.3" + checksum: 632b6171ac136b6750e62a55f806cc949b3dbf2b4a7dc70cc85f54adcdf19d21eab9711f04e8a643b7dd622bbd8658366ead924f467adaccb2c8005c133b7976 + languageName: node + linkType: hard + "supports-color@npm:6.0.0": version: 6.0.0 resolution: "supports-color@npm:6.0.0" @@ -16127,7 +20860,7 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:8.1.1": +"supports-color@npm:8.1.1, supports-color@npm:^8.0.0": version: 8.1.1 resolution: "supports-color@npm:8.1.1" dependencies: @@ -16145,7 +20878,7 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^5.3.0": +"supports-color@npm:^5.3.0, supports-color@npm:^5.5.0": version: 5.5.0 resolution: "supports-color@npm:5.5.0" dependencies: @@ -16233,6 +20966,13 @@ __metadata: languageName: node linkType: hard +"system-architecture@npm:^0.1.0": + version: 0.1.0 + resolution: "system-architecture@npm:0.1.0" + checksum: ca0dd793c45c354ab57dd7fc8ce7dc9923a6e07382bd3b22eb5b08f55ddb0217c390d00767549c5155fd4ce7ef23ffdd8cfb33dd4344cbbd37837d085a50f6f0 + languageName: node + linkType: hard + "table-layout@npm:^1.0.2": version: 1.0.2 resolution: "table-layout@npm:1.0.2" @@ -16351,6 +21091,17 @@ __metadata: languageName: node linkType: hard +"test-exclude@npm:^6.0.0": + version: 6.0.0 + resolution: "test-exclude@npm:6.0.0" + dependencies: + "@istanbuljs/schema": "npm:^0.1.2" + glob: "npm:^7.1.4" + minimatch: "npm:^3.0.4" + checksum: 8fccb2cb6c8fcb6bb4115394feb833f8b6cf4b9503ec2485c2c90febf435cac62abe882a0c5c51a37b9bbe70640cdd05acf5f45e486ac4583389f4b0855f69e5 + languageName: node + linkType: hard + "text-encoding-utf-8@npm:^1.0.2": version: 1.0.2 resolution: "text-encoding-utf-8@npm:1.0.2" @@ -16384,6 +21135,15 @@ __metadata: languageName: node linkType: hard +"thread-stream@npm:^0.15.1": + version: 0.15.2 + resolution: "thread-stream@npm:0.15.2" + dependencies: + real-require: "npm:^0.1.0" + checksum: ca0a4f5bf45db88b48b41af0299455eaa8f01dd3ef8279e7ba6909c295b3ab79ddf576b595cbbceb4dbdf4012b17c6449805092926163fcbf30ac1604cb595b1 + languageName: node + linkType: hard + "through@npm:>=2.2.7 <3, through@npm:^2.3.8": version: 2.3.8 resolution: "through@npm:2.3.8" @@ -16398,6 +21158,13 @@ __metadata: languageName: node linkType: hard +"tiny-warning@npm:^1.0.2": + version: 1.0.3 + resolution: "tiny-warning@npm:1.0.3" + checksum: da62c4acac565902f0624b123eed6dd3509bc9a8d30c06e017104bedcf5d35810da8ff72864400ad19c5c7806fc0a8323c68baf3e326af7cb7d969f846100d71 + languageName: node + linkType: hard + "tmp@npm:0.0.33, tmp@npm:^0.0.33": version: 0.0.33 resolution: "tmp@npm:0.0.33" @@ -16407,6 +21174,13 @@ __metadata: languageName: node linkType: hard +"tmpl@npm:1.0.5": + version: 1.0.5 + resolution: "tmpl@npm:1.0.5" + checksum: cd922d9b853c00fe414c5a774817be65b058d54a2d01ebb415840960406c669a0fc632f66df885e24cb022ec812739199ccbdb8d1164c3e513f85bfca5ab2873 + languageName: node + linkType: hard + "to-fast-properties@npm:^2.0.0": version: 2.0.0 resolution: "to-fast-properties@npm:2.0.0" @@ -16423,6 +21197,13 @@ __metadata: languageName: node linkType: hard +"toggle-selection@npm:^1.0.6": + version: 1.0.6 + resolution: "toggle-selection@npm:1.0.6" + checksum: 9a0ed0ecbaac72b4944888dacd79fe0a55eeea76120a4c7e46b3bb3d85b24f086e90560bb22f5a965654a25ab43d79ec47dfdb3f1850ba740b14c5a50abc7040 + languageName: node + linkType: hard + "toidentifier@npm:1.0.1": version: 1.0.1 resolution: "toidentifier@npm:1.0.1" @@ -16430,6 +21211,17 @@ __metadata: languageName: node linkType: hard +"touch@npm:^3.1.0": + version: 3.1.0 + resolution: "touch@npm:3.1.0" + dependencies: + nopt: "npm:~1.0.10" + bin: + nodetouch: ./bin/nodetouch.js + checksum: ece1d9693fbc9b73d8a6d902537b787b5685ac1aeab7562857c50e6671415a73c985055393442b518f4ac37b85c3e7a3e6c36af71142fed13b8bb04fb6664936 + languageName: node + linkType: hard + "tough-cookie@npm:^2.3.3, tough-cookie@npm:~2.5.0": version: 2.5.0 resolution: "tough-cookie@npm:2.5.0" @@ -16510,6 +21302,39 @@ __metadata: languageName: node linkType: hard +"ts-jest@npm:^29.1.2": + version: 29.1.2 + resolution: "ts-jest@npm:29.1.2" + dependencies: + bs-logger: "npm:0.x" + fast-json-stable-stringify: "npm:2.x" + jest-util: "npm:^29.0.0" + json5: "npm:^2.2.3" + lodash.memoize: "npm:4.x" + make-error: "npm:1.x" + semver: "npm:^7.5.3" + yargs-parser: "npm:^21.0.1" + peerDependencies: + "@babel/core": ">=7.0.0-beta.0 <8" + "@jest/types": ^29.0.0 + babel-jest: ^29.0.0 + jest: ^29.0.0 + typescript: ">=4.3 <6" + peerDependenciesMeta: + "@babel/core": + optional: true + "@jest/types": + optional: true + babel-jest: + optional: true + esbuild: + optional: true + bin: + ts-jest: cli.js + checksum: 5e40e7b933a1f3aa0d304d3c53913d1a7125fc79cd44e22b332f6e25dfe13008ddc7ac647066bb4f914d76083f7e8949f0bc156d793c30f3419f4ffd8180968b + languageName: node + linkType: hard + "ts-node@npm:^10.8.0": version: 10.9.1 resolution: "ts-node@npm:10.9.1" @@ -16548,13 +21373,20 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^1.11.1, tslib@npm:^1.8.1, tslib@npm:^1.9.0, tslib@npm:^1.9.3": +"tslib@npm:1.14.1, tslib@npm:^1.11.1, tslib@npm:^1.8.1, tslib@npm:^1.9.0, tslib@npm:^1.9.3": version: 1.14.1 resolution: "tslib@npm:1.14.1" checksum: 7dbf34e6f55c6492637adb81b555af5e3b4f9cc6b998fb440dac82d3b42bdc91560a35a5fb75e20e24a076c651438234da6743d139e4feabf0783f3cdfe1dddb languageName: node linkType: hard +"tslib@npm:^2.0.0": + version: 2.6.2 + resolution: "tslib@npm:2.6.2" + checksum: bd26c22d36736513980091a1e356378e8b662ded04204453d353a7f34a4c21ed0afc59b5f90719d4ba756e581a162ecbf93118dc9c6be5acf70aa309188166ca + languageName: node + linkType: hard + "tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0": version: 2.4.0 resolution: "tslib@npm:2.4.0" @@ -16794,7 +21626,7 @@ __metadata: languageName: node linkType: hard -"typedarray-to-buffer@npm:^3.1.5": +"typedarray-to-buffer@npm:3.1.5, typedarray-to-buffer@npm:^3.1.5": version: 3.1.5 resolution: "typedarray-to-buffer@npm:3.1.5" dependencies: @@ -16871,6 +21703,13 @@ __metadata: languageName: node linkType: hard +"ufo@npm:^1.3.0, ufo@npm:^1.3.1, ufo@npm:^1.3.2": + version: 1.4.0 + resolution: "ufo@npm:1.4.0" + checksum: b7aea8503878dc5ad797d8fc6fe39fec64d9cc7e89fb147ef86ec676e37bb462d99d67c6aad20b15f7d3e6d275d66666b29214422e268f1d98f6eaf707a207a6 + languageName: node + linkType: hard + "uglify-js@npm:^3.1.4": version: 3.16.0 resolution: "uglify-js@npm:3.16.0" @@ -16880,6 +21719,15 @@ __metadata: languageName: node linkType: hard +"uint8arrays@npm:^3.0.0, uint8arrays@npm:^3.1.0": + version: 3.1.1 + resolution: "uint8arrays@npm:3.1.1" + dependencies: + multiformats: "npm:^9.4.2" + checksum: 536e70273c040484aa7d522031a9dbca1fe8c06eb58a3ace1064ba68825b4e2764d4a0b604a1c451e7b8be0986dc94f23a419cfe9334bd116716074a2d29b33d + languageName: node + linkType: hard + "ultron@npm:~1.1.0": version: 1.1.1 resolution: "ultron@npm:1.1.1" @@ -16899,6 +21747,20 @@ __metadata: languageName: node linkType: hard +"uncrypto@npm:^0.1.3": + version: 0.1.3 + resolution: "uncrypto@npm:0.1.3" + checksum: 0020f74b0ce34723196d8982a73bb7f40cff455a41b8f88ae146b86885f4e66e41a1241fe80a887505c3bd2c7f07ed362b6ed041968370073c40a98496e6a737 + languageName: node + linkType: hard + +"undefsafe@npm:^2.0.5": + version: 2.0.5 + resolution: "undefsafe@npm:2.0.5" + checksum: f42ab3b5770fedd4ada175fc1b2eb775b78f609156f7c389106aafd231bfc210813ee49f54483d7191d7b76e483bc7f537b5d92d19ded27156baf57592eb02cc + languageName: node + linkType: hard + "undici-types@npm:~5.26.4": version: 5.26.5 resolution: "undici-types@npm:5.26.5" @@ -16915,6 +21777,19 @@ __metadata: languageName: node linkType: hard +"unenv@npm:^1.9.0": + version: 1.9.0 + resolution: "unenv@npm:1.9.0" + dependencies: + consola: "npm:^3.2.3" + defu: "npm:^6.1.3" + mime: "npm:^3.0.0" + node-fetch-native: "npm:^1.6.1" + pathe: "npm:^1.1.1" + checksum: 7b5e0f139f69ebb9d2822abc84903eccb5655bacc00a26cc3be260f25b3d84b5e19418503e038c7bf4bcc67c4f8ebcab7d55736f7eddf7a3948a311176b1d000 + languageName: node + linkType: hard + "unique-filename@npm:^1.1.1": version: 1.1.1 resolution: "unique-filename@npm:1.1.1" @@ -16954,6 +21829,97 @@ __metadata: languageName: node linkType: hard +"unstorage@npm:^1.9.0": + version: 1.10.1 + resolution: "unstorage@npm:1.10.1" + dependencies: + anymatch: "npm:^3.1.3" + chokidar: "npm:^3.5.3" + destr: "npm:^2.0.2" + h3: "npm:^1.8.2" + ioredis: "npm:^5.3.2" + listhen: "npm:^1.5.5" + lru-cache: "npm:^10.0.2" + mri: "npm:^1.2.0" + node-fetch-native: "npm:^1.4.1" + ofetch: "npm:^1.3.3" + ufo: "npm:^1.3.1" + peerDependencies: + "@azure/app-configuration": ^1.4.1 + "@azure/cosmos": ^4.0.0 + "@azure/data-tables": ^13.2.2 + "@azure/identity": ^3.3.2 + "@azure/keyvault-secrets": ^4.7.0 + "@azure/storage-blob": ^12.16.0 + "@capacitor/preferences": ^5.0.6 + "@netlify/blobs": ^6.2.0 + "@planetscale/database": ^1.11.0 + "@upstash/redis": ^1.23.4 + "@vercel/kv": ^0.2.3 + idb-keyval: ^6.2.1 + peerDependenciesMeta: + "@azure/app-configuration": + optional: true + "@azure/cosmos": + optional: true + "@azure/data-tables": + optional: true + "@azure/identity": + optional: true + "@azure/keyvault-secrets": + optional: true + "@azure/storage-blob": + optional: true + "@capacitor/preferences": + optional: true + "@netlify/blobs": + optional: true + "@planetscale/database": + optional: true + "@upstash/redis": + optional: true + "@vercel/kv": + optional: true + idb-keyval: + optional: true + checksum: 1b99782efd7f22826731da0b9fe4af18227e006c6b3f057d7cd0da5590d93a1ff3eb192d8b037bcc883a9c76de96560a2e975a0f574eb4b8f5e7207bae3de149 + languageName: node + linkType: hard + +"untun@npm:^0.1.3": + version: 0.1.3 + resolution: "untun@npm:0.1.3" + dependencies: + citty: "npm:^0.1.5" + consola: "npm:^3.2.3" + pathe: "npm:^1.1.1" + bin: + untun: bin/untun.mjs + checksum: 6a096002ca13b8442ad1d40840088888cfaa28626eefdd132cd0fd3d3b956af121a9733b7bda32647608e278fb13332d2b72e2c319a27dc55dbc8e709a2f61d4 + languageName: node + linkType: hard + +"update-browserslist-db@npm:^1.0.13": + version: 1.0.13 + resolution: "update-browserslist-db@npm:1.0.13" + dependencies: + escalade: "npm:^3.1.1" + picocolors: "npm:^1.0.0" + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 9074b4ef34d2ed931f27d390aafdd391ee7c45ad83c508e8fed6aaae1eb68f81999a768ed8525c6f88d4001a4fbf1b8c0268f099d0e8e72088ec5945ac796acf + languageName: node + linkType: hard + +"uqr@npm:^0.1.2": + version: 0.1.2 + resolution: "uqr@npm:0.1.2" + checksum: 31f1fe7d7a8121a2670712234524763160985b053e7eb8af7925a131bcde0df11641e15129d988358032da603185456d08dd72b26b507897272eb9640273bfa6 + languageName: node + linkType: hard + "uri-js@npm:^4.2.2": version: 4.4.1 resolution: "uri-js@npm:4.4.1" @@ -16996,6 +21962,19 @@ __metadata: languageName: node linkType: hard +"urql@npm:^3.0.3": + version: 3.0.4 + resolution: "urql@npm:3.0.4" + dependencies: + "@urql/core": "npm:^3.2.0" + wonka: "npm:^6.0.0" + peerDependencies: + graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + react: ">= 16.8.0" + checksum: b157585cfa21d3d1fd60ff4612ffdfb1af0803e71b9a90381e20fea355671c944a478eb92d0ecb1b20967b4b42bdb099cb141f233a97684b09dd24ac619a26a5 + languageName: node + linkType: hard + "usb@npm:^1.6.3": version: 1.9.2 resolution: "usb@npm:1.9.2" @@ -17007,6 +21986,46 @@ __metadata: languageName: node linkType: hard +"use-callback-ref@npm:^1.3.0": + version: 1.3.1 + resolution: "use-callback-ref@npm:1.3.1" + dependencies: + tslib: "npm:^2.0.0" + peerDependencies: + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 7cc68dbd8bb9890e21366f153938988967f0a17168a215bf31e24519f826a2de7de596e981f016603a363362f736f2cffad05091c3857fcafbc9c3b20a3eef1e + languageName: node + linkType: hard + +"use-sidecar@npm:^1.1.2": + version: 1.1.2 + resolution: "use-sidecar@npm:1.1.2" + dependencies: + detect-node-es: "npm:^1.1.0" + tslib: "npm:^2.0.0" + peerDependencies: + "@types/react": ^16.9.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: ec99e31aefeb880f6dc4d02cb19a01d123364954f857811470ece32872f70d6c3eadbe4d073770706a9b7db6136f2a9fbf1bb803e07fbb21e936a47479281690 + languageName: node + linkType: hard + +"use-sync-external-store@npm:1.2.0, use-sync-external-store@npm:^1.2.0": + version: 1.2.0 + resolution: "use-sync-external-store@npm:1.2.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: a676216affc203876bd47981103f201f28c2731361bb186367e12d287a7566763213a8816910c6eb88265eccd4c230426eb783d64c373c4a180905be8820ed8e + languageName: node + linkType: hard + "utf-8-validate@npm:5.0.7": version: 5.0.7 resolution: "utf-8-validate@npm:5.0.7" @@ -17116,6 +22135,17 @@ __metadata: languageName: node linkType: hard +"v8-to-istanbul@npm:^9.0.1": + version: 9.2.0 + resolution: "v8-to-istanbul@npm:9.2.0" + dependencies: + "@jridgewell/trace-mapping": "npm:^0.3.12" + "@types/istanbul-lib-coverage": "npm:^2.0.1" + convert-source-map: "npm:^2.0.0" + checksum: 18dd8cebfb6790f27f4e41e7cff77c7ab1c8904085f354dd7875e2eb65f4261c4cf40939132502875779d92304bfea46b8336346ecb40b6f33c3a3979e6f5729 + languageName: node + linkType: hard + "validate-npm-package-license@npm:^3.0.1": version: 3.0.4 resolution: "validate-npm-package-license@npm:3.0.4" @@ -17126,6 +22156,24 @@ __metadata: languageName: node linkType: hard +"valtio@npm:1.11.2": + version: 1.11.2 + resolution: "valtio@npm:1.11.2" + dependencies: + proxy-compare: "npm:2.5.1" + use-sync-external-store: "npm:1.2.0" + peerDependencies: + "@types/react": ">=16.8" + react: ">=16.8" + peerDependenciesMeta: + "@types/react": + optional: true + react: + optional: true + checksum: a259f5af204b801668e019855813a8f702c9558961395bb5847f583119428b997efb9b0e6feb5d6e48a76a9b541173a10fdfdb1527a7bd14477a0e0c5beba914 + languageName: node + linkType: hard + "varint@npm:^5.0.0": version: 5.0.2 resolution: "varint@npm:5.0.2" @@ -17172,6 +22220,46 @@ __metadata: languageName: node linkType: hard +"wagmi@npm:0.12.18": + version: 0.12.18 + resolution: "wagmi@npm:0.12.18" + dependencies: + "@tanstack/query-sync-storage-persister": "npm:^4.27.1" + "@tanstack/react-query": "npm:^4.28.0" + "@tanstack/react-query-persist-client": "npm:^4.28.0" + "@wagmi/core": "npm:0.10.16" + abitype: "npm:^0.3.0" + use-sync-external-store: "npm:^1.2.0" + peerDependencies: + ethers: ">=5.5.1 <6" + react: ">=17.0.0" + typescript: ">=4.9.4" + peerDependenciesMeta: + typescript: + optional: true + checksum: 1f32350b77b8614f878e8f3594dfa0dedde7d6d951898b2d066d527e0c91e7f2d210afe576d2d88a4245e4182050d377964ba11e3dbeecfeecefef37abc2af1d + languageName: node + linkType: hard + +"walker@npm:^1.0.8": + version: 1.0.8 + resolution: "walker@npm:1.0.8" + dependencies: + makeerror: "npm:1.0.12" + checksum: ad7a257ea1e662e57ef2e018f97b3c02a7240ad5093c392186ce0bcf1f1a60bbadd520d073b9beb921ed99f64f065efb63dfc8eec689a80e569f93c1c5d5e16c + languageName: node + linkType: hard + +"watchpack@npm:2.4.0": + version: 2.4.0 + resolution: "watchpack@npm:2.4.0" + dependencies: + glob-to-regexp: "npm:^0.4.1" + graceful-fs: "npm:^4.1.2" + checksum: 4280b45bc4b5d45d5579113f2a4af93b67ae1b9607cc3d86ae41cdd53ead10db5d9dc3237f24256d05ef88b28c69a02712f78e434cb7ecc8edaca134a56e8cab + languageName: node + linkType: hard + "wcwidth@npm:^1.0.1": version: 1.0.1 resolution: "wcwidth@npm:1.0.1" @@ -17715,6 +22803,13 @@ __metadata: languageName: node linkType: hard +"wonka@npm:^6.0.0, wonka@npm:^6.1.2": + version: 6.3.4 + resolution: "wonka@npm:6.3.4" + checksum: 0f102630182828268b57b54102003449b97abbc2483392239baf856a2fca7b72ae9be67c208415124a3d26a320674ed64387e9bf07a8d0badedb5f607d2ccfdc + languageName: node + linkType: hard + "word-wrap@npm:^1.2.3, word-wrap@npm:~1.2.3": version: 1.2.3 resolution: "word-wrap@npm:1.2.3" @@ -17786,6 +22881,16 @@ __metadata: languageName: node linkType: hard +"write-file-atomic@npm:^4.0.2": + version: 4.0.2 + resolution: "write-file-atomic@npm:4.0.2" + dependencies: + imurmurhash: "npm:^0.1.4" + signal-exit: "npm:^3.0.7" + checksum: 3be1f5508a46c190619d5386b1ac8f3af3dbe951ed0f7b0b4a0961eed6fc626bd84b50cf4be768dabc0a05b672f5d0c5ee7f42daa557b14415d18c3a13c7d246 + languageName: node + linkType: hard + "ws@npm:7.4.6": version: 7.4.6 resolution: "ws@npm:7.4.6" @@ -17827,7 +22932,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:^7, ws@npm:^7.4.5": +"ws@npm:^7, ws@npm:^7.4.5, ws@npm:^7.5.1": version: 7.5.9 resolution: "ws@npm:7.5.9" peerDependencies: @@ -18007,7 +23112,7 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:^21.1.1": +"yargs-parser@npm:^21.0.1, yargs-parser@npm:^21.1.1": version: 21.1.1 resolution: "yargs-parser@npm:21.1.1" checksum: 9dc2c217ea3bf8d858041252d43e074f7166b53f3d010a8c711275e09cd3d62a002969a39858b92bbda2a6a63a585c7127014534a560b9c69ed2d923d113406e @@ -18070,7 +23175,7 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^15.1.0": +"yargs@npm:^15.1.0, yargs@npm:^15.3.1": version: 15.4.1 resolution: "yargs@npm:15.4.1" dependencies: @@ -18089,7 +23194,7 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^17.7.1, yargs@npm:^17.7.2": +"yargs@npm:^17.3.1, yargs@npm:^17.7.1, yargs@npm:^17.7.2": version: 17.7.2 resolution: "yargs@npm:17.7.2" dependencies: @@ -18124,3 +23229,40 @@ __metadata: checksum: 1c67216871808c3beaeaf2439adfc589055502665e8fc4267abf36dc4f673018cd15575e8f38a3eb9b8edb43356d91a809fc6ded3fab4b7f5d6a3982d0b97c77 languageName: node linkType: hard + +"zustand@npm:4.3.8": + version: 4.3.8 + resolution: "zustand@npm:4.3.8" + dependencies: + use-sync-external-store: "npm:1.2.0" + peerDependencies: + immer: ">=9.0" + react: ">=16.8" + peerDependenciesMeta: + immer: + optional: true + react: + optional: true + checksum: 95a5335716414c8bef3a48165226ef099ca232931ab6cd1497515ee4241e8d5a8100edf5c3cc7d7131b72a07eb0484501405aa2c3222b4b93ba690cfa2b5593d + languageName: node + linkType: hard + +"zustand@npm:^4.3.1": + version: 4.5.1 + resolution: "zustand@npm:4.5.1" + dependencies: + use-sync-external-store: "npm:1.2.0" + peerDependencies: + "@types/react": ">=16.8" + immer: ">=9.0.6" + react: ">=16.8" + peerDependenciesMeta: + "@types/react": + optional: true + immer: + optional: true + react: + optional: true + checksum: c5dcd734ddcc393bc1febcf1811d606222c6d40cb4cf0e4d605be6cfa1855c8b09b6725ab6b73a395f1e020f8f617b605c800c1f19301b240c45d5042e1b2a10 + languageName: node + linkType: hard