From 3ec7f615ef5cf70e2207c0176126136c1c911856 Mon Sep 17 00:00:00 2001 From: sevenzing Date: Fri, 25 Oct 2024 16:59:18 +0200 Subject: [PATCH 01/10] initial d3 --- blockscout-ens/bens-logic/src/bin/test.rs | 4 ++ .../bens-logic/src/protocols/mod.rs | 4 +- .../bens-logic/src/protocols/protocoler.rs | 21 +++++- blockscout-ens/bens-logic/src/subgraph/mod.rs | 2 +- .../src/subgraph/offchain/d3/mod.rs | 9 +++ .../subgraph/{ => offchain}/ens/ccip_read.rs | 0 .../src/subgraph/{ => offchain}/ens/mod.rs | 0 .../subgraph/{ => offchain}/ens/wildcard.rs | 19 ++---- .../bens-logic/src/subgraph/offchain/mod.rs | 68 +++++++++++++++++++ .../bens-logic/src/subgraph/patcher.rs | 41 ++--------- blockscout-ens/bens-server/config/dev.json | 2 +- blockscout-ens/bens-server/config/prod.json | 2 +- .../bens-server/config/staging.json | 2 +- blockscout-ens/bens-server/src/server.rs | 2 +- blockscout-ens/bens-server/src/settings.rs | 4 +- 15 files changed, 118 insertions(+), 62 deletions(-) create mode 100644 blockscout-ens/bens-logic/src/bin/test.rs create mode 100644 blockscout-ens/bens-logic/src/subgraph/offchain/d3/mod.rs rename blockscout-ens/bens-logic/src/subgraph/{ => offchain}/ens/ccip_read.rs (100%) rename blockscout-ens/bens-logic/src/subgraph/{ => offchain}/ens/mod.rs (100%) rename blockscout-ens/bens-logic/src/subgraph/{ => offchain}/ens/wildcard.rs (92%) create mode 100644 blockscout-ens/bens-logic/src/subgraph/offchain/mod.rs diff --git a/blockscout-ens/bens-logic/src/bin/test.rs b/blockscout-ens/bens-logic/src/bin/test.rs new file mode 100644 index 000000000..2c566dcd1 --- /dev/null +++ b/blockscout-ens/bens-logic/src/bin/test.rs @@ -0,0 +1,4 @@ +#[tokio::main] +async fn main() -> Result<(), anyhow::Error> { + Ok(()) +} diff --git a/blockscout-ens/bens-logic/src/protocols/mod.rs b/blockscout-ens/bens-logic/src/protocols/mod.rs index 8df5e808d..981a14ae3 100644 --- a/blockscout-ens/bens-logic/src/protocols/mod.rs +++ b/blockscout-ens/bens-logic/src/protocols/mod.rs @@ -5,8 +5,8 @@ mod protocoler; pub use domain_name::{DomainName, DomainNameOnProtocol}; pub use hash_name::domain_id; pub use protocoler::{ - AddressResolveTechnique, DeployedProtocol, Network, Protocol, ProtocolInfo, ProtocolMeta, - Protocoler, Tld, + AddressResolveTechnique, DeployedProtocol, Network, OffchainStrategy, Protocol, ProtocolInfo, + ProtocolMeta, Protocoler, Tld, }; #[derive(thiserror::Error, Debug)] diff --git a/blockscout-ens/bens-logic/src/protocols/protocoler.rs b/blockscout-ens/bens-logic/src/protocols/protocoler.rs index b399344ee..4ee5b5d8f 100644 --- a/blockscout-ens/bens-logic/src/protocols/protocoler.rs +++ b/blockscout-ens/bens-logic/src/protocols/protocoler.rs @@ -58,7 +58,26 @@ pub struct ProtocolInfo { pub native_token_contract: Option
, pub registry_contract: Option
, pub meta: ProtocolMeta, - pub try_offchain_resolve: bool, + pub offchain_strategy: OffchainStrategy, +} + +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)] +#[serde(rename_all = "snake_case")] +pub enum OffchainStrategy { + #[default] + None, + EnsWildcard, + D3Connect, +} + +impl OffchainStrategy { + pub fn is_none(&self) -> bool { + matches!(self, Self::None) + } + + pub fn is_some(&self) -> bool { + !self.is_none() + } } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)] diff --git a/blockscout-ens/bens-logic/src/subgraph/mod.rs b/blockscout-ens/bens-logic/src/subgraph/mod.rs index 5377a9669..29b900ed7 100644 --- a/blockscout-ens/bens-logic/src/subgraph/mod.rs +++ b/blockscout-ens/bens-logic/src/subgraph/mod.rs @@ -1,5 +1,5 @@ mod domain_tokens; -mod ens; +mod offchain; mod pagination; mod patcher; mod reader; diff --git a/blockscout-ens/bens-logic/src/subgraph/offchain/d3/mod.rs b/blockscout-ens/bens-logic/src/subgraph/offchain/d3/mod.rs new file mode 100644 index 000000000..52da3c1e5 --- /dev/null +++ b/blockscout-ens/bens-logic/src/subgraph/offchain/d3/mod.rs @@ -0,0 +1,9 @@ +use crate::{entity::subgraph::domain::CreationDomain, protocols::DomainNameOnProtocol}; +use sqlx::PgPool; + +pub async fn maybe_offchain_resolution( + _db: &PgPool, + _from_user: &DomainNameOnProtocol<'_>, +) -> Option { + None +} diff --git a/blockscout-ens/bens-logic/src/subgraph/ens/ccip_read.rs b/blockscout-ens/bens-logic/src/subgraph/offchain/ens/ccip_read.rs similarity index 100% rename from blockscout-ens/bens-logic/src/subgraph/ens/ccip_read.rs rename to blockscout-ens/bens-logic/src/subgraph/offchain/ens/ccip_read.rs diff --git a/blockscout-ens/bens-logic/src/subgraph/ens/mod.rs b/blockscout-ens/bens-logic/src/subgraph/offchain/ens/mod.rs similarity index 100% rename from blockscout-ens/bens-logic/src/subgraph/ens/mod.rs rename to blockscout-ens/bens-logic/src/subgraph/offchain/ens/mod.rs diff --git a/blockscout-ens/bens-logic/src/subgraph/ens/wildcard.rs b/blockscout-ens/bens-logic/src/subgraph/offchain/ens/wildcard.rs similarity index 92% rename from blockscout-ens/bens-logic/src/subgraph/ens/wildcard.rs rename to blockscout-ens/bens-logic/src/subgraph/offchain/ens/wildcard.rs index 78f062dee..0fbf79ba0 100644 --- a/blockscout-ens/bens-logic/src/subgraph/ens/wildcard.rs +++ b/blockscout-ens/bens-logic/src/subgraph/offchain/ens/wildcard.rs @@ -7,7 +7,6 @@ use crate::{ }; use alloy::primitives::Address; use anyhow::Context; -use cached::proc_macro::cached; use crate::metrics; use sqlx::PgPool; @@ -16,27 +15,17 @@ use std::str::FromStr; /// Check if `name` can be resolved using https://docs.ens.domains/ensip/10 /// Iterates over suffixed names and tries to find a resolver /// Then resolve the name using CCIP-read -#[cached( - key = "String", - convert = r#"{ - from_user.inner.id.to_string() - }"#, - time = 14400, // 4 * 60 * 60 seconds = 4 hours - size = 500, - sync_writes = true, - with_cached_flag = true, -)] -pub async fn maybe_wildcard_resolution_with_cache( +pub async fn maybe_wildcard_resolution( db: &PgPool, from_user: &DomainNameOnProtocol<'_>, -) -> cached::Return> { +) -> Option { metrics::WILDCARD_RESOLVE_ATTEMPTS.inc(); match try_wildcard_resolution(db, from_user).await { Ok(result) => { if result.is_some() { metrics::WILDCARD_RESOLVE_SUCCESS.inc(); } - cached::Return::new(result) + result } Err(err) => { tracing::error!( @@ -44,7 +33,7 @@ pub async fn maybe_wildcard_resolution_with_cache( error = ?err, "error while trying wildcard resolution" ); - cached::Return::new(None) + None } } } diff --git a/blockscout-ens/bens-logic/src/subgraph/offchain/mod.rs b/blockscout-ens/bens-logic/src/subgraph/offchain/mod.rs new file mode 100644 index 000000000..e302a6666 --- /dev/null +++ b/blockscout-ens/bens-logic/src/subgraph/offchain/mod.rs @@ -0,0 +1,68 @@ +mod d3; +mod ens; + +use super::sql; +use crate::{ + entity::subgraph::domain::CreationDomain, + protocols::{DomainNameOnProtocol, OffchainStrategy}, +}; +use cached::proc_macro::cached; +use sqlx::PgPool; + +pub async fn offchain_resolve( + db: &PgPool, + from_user: &DomainNameOnProtocol<'_>, +) -> Result<(), anyhow::Error> { + let protocol = from_user.deployed_protocol.protocol; + let maybe_domain_cached = check_if_need_to_save_domain_cached(db, from_user).await; + match maybe_domain_cached { + cached::Return { + value: Some(domain), + was_cached: false, + .. + } => { + tracing::info!( + id = domain.id, + name = domain.name, + vid =? domain.vid, + "found domain with offchain resolution, save it" + ); + sql::create_or_update_domain(db, domain, protocol).await?; + } + cached::Return { + was_cached: true, .. + } => { + tracing::debug!( + name = from_user.inner.name, + "domain was cached by ram cache, skip it" + ); + } + cached::Return { value: None, .. } => { + tracing::debug!("domain not found with wildcard resolution"); + } + }; + Ok(()) +} + +#[cached( + key = "String", + convert = r#"{ + format!("{}-{}", from_user.deployed_protocol.protocol.info.slug, from_user.inner.id) + }"#, + time = 14400, // 4 * 60 * 60 seconds = 4 hours + size = 500, + sync_writes = true, + with_cached_flag = true, +)] +async fn check_if_need_to_save_domain_cached( + db: &PgPool, + from_user: &DomainNameOnProtocol<'_>, +) -> cached::Return> { + let result = match from_user.deployed_protocol.protocol.info.offchain_strategy { + OffchainStrategy::EnsWildcard => ens::maybe_wildcard_resolution(db, from_user).await, + OffchainStrategy::D3Connect => d3::maybe_offchain_resolution(db, from_user).await, + _ => None, + }; + + cached::Return::new(result) +} diff --git a/blockscout-ens/bens-logic/src/subgraph/patcher.rs b/blockscout-ens/bens-logic/src/subgraph/patcher.rs index c1437f548..201db4b6b 100644 --- a/blockscout-ens/bens-logic/src/subgraph/patcher.rs +++ b/blockscout-ens/bens-logic/src/subgraph/patcher.rs @@ -2,12 +2,14 @@ use crate::{ coin_type::Coin, entity::subgraph::domain::{DetailedDomain, Domain}, protocols::DomainNameOnProtocol, - subgraph::{ens::maybe_wildcard_resolution_with_cache, sql}, + subgraph::sql, }; use sqlx::PgPool; use std::sync::Arc; use tracing::instrument; +use super::offchain::offchain_resolve; + const MAX_LEVEL: usize = 5; #[derive(Debug, Default)] @@ -30,7 +32,7 @@ impl SubgraphPatcher { let level = from_user.inner.level(); let range = 2..=MAX_LEVEL; let level_is_fine = range.contains(&level); - if protocol.info.try_offchain_resolve && level_is_fine { + if protocol.info.offchain_strategy.is_some() && level_is_fine { let _lock = self.offchain_mutex.lock().await; offchain_resolve(db, from_user).await? }; @@ -96,41 +98,6 @@ impl SubgraphPatcher { } } -async fn offchain_resolve( - db: &PgPool, - from_user: &DomainNameOnProtocol<'_>, -) -> Result<(), anyhow::Error> { - let protocol = from_user.deployed_protocol.protocol; - let maybe_domain_cached = maybe_wildcard_resolution_with_cache(db, from_user).await; - match maybe_domain_cached { - cached::Return { - value: Some(domain), - was_cached: false, - .. - } => { - tracing::info!( - id = domain.id, - name = domain.name, - vid =? domain.vid, - "found domain with wildcard resolution, save it" - ); - sql::create_or_update_domain(db, domain, protocol).await?; - } - cached::Return { - was_cached: true, .. - } => { - tracing::debug!( - name = from_user.inner.name, - "domain was cached by ram cache, skip it" - ); - } - cached::Return { value: None, .. } => { - tracing::debug!("domain not found with wildcard resolution"); - } - }; - Ok(()) -} - fn update_domain_name_in_background(pool: Arc, domain_name: DomainNameOnProtocol) { let schema = domain_name .deployed_protocol diff --git a/blockscout-ens/bens-server/config/dev.json b/blockscout-ens/bens-server/config/dev.json index 0b395301a..1819d71f7 100644 --- a/blockscout-ens/bens-server/config/dev.json +++ b/blockscout-ens/bens-server/config/dev.json @@ -35,7 +35,7 @@ "icon_url": "https://i.imgur.com/GOfUwCb.jpeg", "docs_url": "https://docs.ens.domains/" }, - "try_offchain_resolve": true, + "offchain_strategy": "ens", "registry_contract": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e" }, "ens-sepolia": { diff --git a/blockscout-ens/bens-server/config/prod.json b/blockscout-ens/bens-server/config/prod.json index 2d329c8eb..e51550d8a 100644 --- a/blockscout-ens/bens-server/config/prod.json +++ b/blockscout-ens/bens-server/config/prod.json @@ -155,7 +155,7 @@ "icon_url": "https://i.imgur.com/GOfUwCb.jpeg", "docs_url": "https://docs.ens.domains/" }, - "try_offchain_resolve": true, + "offchain_strategy": "ens", "registry_contract": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e" }, "ens-sepolia": { diff --git a/blockscout-ens/bens-server/config/staging.json b/blockscout-ens/bens-server/config/staging.json index 65c2cfe55..ae06a413c 100644 --- a/blockscout-ens/bens-server/config/staging.json +++ b/blockscout-ens/bens-server/config/staging.json @@ -43,7 +43,7 @@ "icon_url": "https://i.imgur.com/GOfUwCb.jpeg", "docs_url": "https://docs.ens.domains/" }, - "try_offchain_resolve": true, + "offchain_strategy": "ens", "registry_contract": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e" }, "genome": { diff --git a/blockscout-ens/bens-server/src/server.rs b/blockscout-ens/bens-server/src/server.rs index 2ff03e2da..d98e1aa01 100644 --- a/blockscout-ens/bens-server/src/server.rs +++ b/blockscout-ens/bens-server/src/server.rs @@ -109,7 +109,7 @@ pub async fn run(settings: Settings) -> Result<(), anyhow::Error> { empty_label_hash: p.empty_label_hash, native_token_contract: p.native_token_contract, meta: p.meta.0, - try_offchain_resolve: p.try_offchain_resolve, + offchain_strategy: p.offchain_strategy, registry_contract: p.registry_contract, }, ) diff --git a/blockscout-ens/bens-server/src/settings.rs b/blockscout-ens/bens-server/src/settings.rs index 39ab3b7f1..773d364cc 100644 --- a/blockscout-ens/bens-server/src/settings.rs +++ b/blockscout-ens/bens-server/src/settings.rs @@ -1,5 +1,5 @@ use alloy::primitives::{Address, B256}; -use bens_logic::protocols::{AddressResolveTechnique, ProtocolMeta, Tld}; +use bens_logic::protocols::{AddressResolveTechnique, OffchainStrategy, ProtocolMeta, Tld}; use blockscout_service_launcher::{ database::{DatabaseConnectSettings, DatabaseSettings}, launcher::{ConfigSettings, MetricsSettings, ServerSettings}, @@ -71,7 +71,7 @@ pub struct ProtocolSettings { pub registry_contract: Option
, pub meta: ProtocolSettingsMeta, #[serde(default)] - pub try_offchain_resolve: bool, + pub offchain_strategy: OffchainStrategy, } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)] From 224ecc323147291817c4cbfb97550f2e8f33f396 Mon Sep 17 00:00:00 2001 From: sevenzing Date: Fri, 25 Oct 2024 17:15:21 +0200 Subject: [PATCH 02/10] bump alloy-rs --- blockscout-ens/Cargo.lock | 1406 ++++++++++------- blockscout-ens/bens-logic/Cargo.toml | 4 +- .../src/subgraph/offchain/ens/ccip_read.rs | 25 +- blockscout-ens/bens-server/Cargo.toml | 2 +- 4 files changed, 832 insertions(+), 605 deletions(-) diff --git a/blockscout-ens/Cargo.lock b/blockscout-ens/Cargo.lock index 6f2282bae..358332701 100644 --- a/blockscout-ens/Cargo.lock +++ b/blockscout-ens/Cargo.lock @@ -27,7 +27,7 @@ checksum = "0346d8c1f762b41b458ed3145eea914966bb9ad20b9be0d6d463b20d45586370" dependencies = [ "actix-utils", "actix-web", - "derive_more", + "derive_more 0.99.18", "futures-util", "log", "once_cell", @@ -36,9 +36,9 @@ dependencies = [ [[package]] name = "actix-http" -version = "3.8.0" +version = "3.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae682f693a9cd7b058f2b0b5d9a6d7728a8555779bedbbc35dd88528611d020" +checksum = "d48f96fc3003717aeb9856ca3d02a8c7de502667ad76eeacd830b48d2e91fac4" dependencies = [ "actix-codec", "actix-rt", @@ -50,7 +50,7 @@ dependencies = [ "brotli", "bytes", "bytestring", - "derive_more", + "derive_more 0.99.18", "encoding_rs", "flate2", "futures-core", @@ -80,13 +80,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" dependencies = [ "quote", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] name = "actix-prost" version = "0.1.0" -source = "git+https://github.com/blockscout/actix-prost#9cc47aa1cb7b63ce1cb814912b71188579647241" +source = "git+https://github.com/blockscout/actix-prost#4cbba2a32b40c7da251c805cae07f7ddaa84c6d5" dependencies = [ "actix-http", "actix-web", @@ -101,23 +101,23 @@ dependencies = [ [[package]] name = "actix-prost-build" version = "0.1.0" -source = "git+https://github.com/blockscout/actix-prost#9cc47aa1cb7b63ce1cb814912b71188579647241" +source = "git+https://github.com/blockscout/actix-prost#4cbba2a32b40c7da251c805cae07f7ddaa84c6d5" dependencies = [ - "prettyplease 0.2.20", + "prettyplease 0.2.25", "proc-macro2", "prost-build", "prost-reflect", "quote", "serde", "serde_yaml", - "syn 2.0.71", + "syn 2.0.85", "thiserror", ] [[package]] name = "actix-prost-macros" -version = "0.1.0" -source = "git+https://github.com/blockscout/actix-prost#9cc47aa1cb7b63ce1cb814912b71188579647241" +version = "0.1.1" +source = "git+https://github.com/blockscout/actix-prost#4cbba2a32b40c7da251c805cae07f7ddaa84c6d5" dependencies = [ "proc-macro2", "quote", @@ -151,9 +151,9 @@ dependencies = [ [[package]] name = "actix-server" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b02303ce8d4e8be5b855af6cf3c3a08f3eff26880faad82bab679c22d3650cb5" +checksum = "7ca2549781d8dd6d75c40cf6b6051260a2cc2f3c62343d761a969a0640646894" dependencies = [ "actix-rt", "actix-service", @@ -189,9 +189,9 @@ dependencies = [ [[package]] name = "actix-web" -version = "4.8.0" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1988c02af8d2b718c05bc4aeb6a66395b7cdf32858c2c71131e5637a8c05a9ff" +checksum = "9180d76e5cc7ccbc4d60a506f2c727730b154010262df5b910eb17dbe4b8cb38" dependencies = [ "actix-codec", "actix-http", @@ -207,10 +207,11 @@ dependencies = [ "bytestring", "cfg-if", "cookie", - "derive_more", + "derive_more 0.99.18", "encoding_rs", "futures-core", "futures-util", + "impl-more", "itoa", "language-tags", "log", @@ -237,7 +238,7 @@ dependencies = [ "actix-router", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] @@ -254,18 +255,18 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.22.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "ahash" @@ -329,9 +330,9 @@ checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" [[package]] name = "alloy" -version = "0.1.4" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ba1c79677c9ce51c8d45e20845b05e6fb070ea2c863fba03ad6af2c778474bd" +checksum = "ea8ebf106e84a1c37f86244df7da0c7587e697b71a0d565cce079449b85ac6f8" dependencies = [ "alloy-consensus", "alloy-contract", @@ -355,9 +356,9 @@ dependencies = [ [[package]] name = "alloy-ccip-read" -version = "0.1.2" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84215aa610e088a90981a1e443ea38f469b7244a06dce2677b32adc330de3dfa" +checksum = "4c8a6ee642e76c373dfe642c16804faadc30767021118331f1ab20ce3cde189b" dependencies = [ "alloy", "anyhow", @@ -365,7 +366,7 @@ dependencies = [ "async-trait", "futures-util", "getrandom 0.2.15", - "reqwest 0.12.5", + "reqwest 0.12.8", "serde", "serde_json", "thiserror", @@ -375,37 +376,41 @@ dependencies = [ [[package]] name = "alloy-chains" -version = "0.1.23" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1752d7d62e2665da650a36d84abbf239f812534475d51f072a49a533513b7cdd" +checksum = "60888eb8eb66f26aecf96d8a3aeb1a3a05ebc179025a7f98ed1d8051988969ac" dependencies = [ + "alloy-primitives", "num_enum", "strum 0.26.3", ] [[package]] name = "alloy-consensus" -version = "0.1.4" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da374e868f54c7f4ad2ad56829827badca388efd645f8cf5fccc61c2b5343504" +checksum = "41ed961a48297c732a5d97ee321aa8bb5009ecadbcb077d8bec90cb54e651629" dependencies = [ "alloy-eips", "alloy-primitives", "alloy-rlp", "alloy-serde", + "auto_impl", "c-kzg", + "derive_more 1.0.0", "serde", ] [[package]] name = "alloy-contract" -version = "0.1.4" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dc6957ff706f9e5f6fd42f52a93e4bce476b726c92d077b348de28c4a76730c" +checksum = "460ab80ce4bda1c80bcf96fe7460520476f2c7b734581c6567fac2708e2a60ef" dependencies = [ "alloy-dyn-abi", "alloy-json-abi", "alloy-network", + "alloy-network-primitives", "alloy-primitives", "alloy-provider", "alloy-pubsub", @@ -419,21 +424,22 @@ dependencies = [ [[package]] name = "alloy-core" -version = "0.7.7" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "529fc6310dc1126c8de51c376cbc59c79c7f662bd742be7dc67055d5421a81b4" +checksum = "5cce174ca699ddee3bfb2ec1fbd99ad7efd05eca20c5c888d8320db41f7e8f04" dependencies = [ "alloy-dyn-abi", "alloy-json-abi", "alloy-primitives", + "alloy-rlp", "alloy-sol-types", ] [[package]] name = "alloy-dyn-abi" -version = "0.7.7" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413902aa18a97569e60f679c23f46a18db1656d87ab4d4e49d0e1e52042f66df" +checksum = "5647fce5a168f9630f935bf7821c4207b1755184edaeba783cb4e11d35058484" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -443,20 +449,46 @@ dependencies = [ "itoa", "serde", "serde_json", - "winnow 0.6.13", + "winnow", +] + +[[package]] +name = "alloy-eip2930" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0069cf0642457f87a01a014f6dc29d5d893cd4fd8fddf0c3cdfad1bb3ebafc41" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "serde", +] + +[[package]] +name = "alloy-eip7702" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ffc577390ce50234e02d841214b3dc0bea6aaaae8e04bbf3cb82e9a45da9eb" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "derive_more 1.0.0", + "k256", + "serde", ] [[package]] name = "alloy-eips" -version = "0.1.4" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f76ecab54890cdea1e4808fc0891c7e6cfcf71fe1a9fe26810c7280ef768f4ed" +checksum = "b69e06cf9c37be824b9d26d6d101114fdde6af0c87de2828b414c05c4b3daa71" dependencies = [ + "alloy-eip2930", + "alloy-eip7702", "alloy-primitives", "alloy-rlp", "alloy-serde", "c-kzg", - "derive_more", + "derive_more 1.0.0", "once_cell", "serde", "sha2", @@ -464,9 +496,9 @@ dependencies = [ [[package]] name = "alloy-genesis" -version = "0.1.4" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bca15afde1b6d15e3fc1c97421262b1bbb37aee45752e3c8b6d6f13f776554ff" +checksum = "dde15e14944a88bd6a57d325e9a49b75558746fe16aaccc79713ae50a6a9574c" dependencies = [ "alloy-primitives", "alloy-serde", @@ -475,9 +507,9 @@ dependencies = [ [[package]] name = "alloy-json-abi" -version = "0.7.7" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc05b04ac331a9f07e3a4036ef7926e49a8bf84a99a1ccfc7e2ab55a5fcbb372" +checksum = "4b5671117c38b1c2306891f97ad3828d85487087f54ebe2c7591a055ea5bcea7" dependencies = [ "alloy-primitives", "alloy-sol-type-parser", @@ -487,11 +519,12 @@ dependencies = [ [[package]] name = "alloy-json-rpc" -version = "0.1.4" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d6f34930b7e3e2744bcc79056c217f00cb2abb33bc5d4ff88da7623c5bb078b" +checksum = "af5979e0d5a7bf9c7eb79749121e8256e59021af611322aee56e77e20776b4b3" dependencies = [ "alloy-primitives", + "alloy-sol-types", "serde", "serde_json", "thiserror", @@ -500,13 +533,14 @@ dependencies = [ [[package]] name = "alloy-network" -version = "0.1.4" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25f6895fc31b48fa12306ef9b4f78b7764f8bd6d7d91cdb0a40e233704a0f23f" +checksum = "204237129086ce5dc17a58025e93739b01b45313841f98fa339eb1d780511e57" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-json-rpc", + "alloy-network-primitives", "alloy-primitives", "alloy-rpc-types-eth", "alloy-serde", @@ -518,39 +552,59 @@ dependencies = [ "thiserror", ] +[[package]] +name = "alloy-network-primitives" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "514f70ee2a953db21631cd817b13a1571474ec77ddc03d47616d5e8203489fde" +dependencies = [ + "alloy-consensus", + "alloy-eips", + "alloy-primitives", + "alloy-serde", + "serde", +] + [[package]] name = "alloy-primitives" -version = "0.7.7" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccb3ead547f4532bc8af961649942f0b9c16ee9226e26caa3f38420651cc0bf4" +checksum = "c71738eb20c42c5fb149571e76536a0f309d142f3957c28791662b96baf77a3d" dependencies = [ "alloy-rlp", "bytes", "cfg-if", "const-hex", - "derive_more", + "derive_more 1.0.0", + "foldhash", + "hashbrown 0.15.0", "hex-literal", + "indexmap 2.6.0", "itoa", "k256", "keccak-asm", + "paste", "proptest", "rand 0.8.5", "ruint", + "rustc-hash", "serde", + "sha3", "tiny-keccak", ] [[package]] name = "alloy-provider" -version = "0.1.4" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c538bfa893d07e27cb4f3c1ab5f451592b7c526d511d62b576a2ce59e146e4a" +checksum = "4814d141ede360bb6cd1b4b064f1aab9de391e7c4d0d4d50ac89ea4bc1e25fbd" dependencies = [ "alloy-chains", "alloy-consensus", "alloy-eips", "alloy-json-rpc", "alloy-network", + "alloy-network-primitives", "alloy-primitives", "alloy-pubsub", "alloy-rpc-client", @@ -562,24 +616,28 @@ dependencies = [ "async-stream", "async-trait", "auto_impl", - "dashmap", + "dashmap 6.1.0", "futures", "futures-utils-wasm", "lru", + "parking_lot 0.12.3", "pin-project", - "reqwest 0.12.5", + "reqwest 0.12.8", + "schnellru", "serde", "serde_json", + "thiserror", "tokio", "tracing", "url", + "wasmtimer", ] [[package]] name = "alloy-pubsub" -version = "0.1.4" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a7341322d9bc0e49f6e9fd9f2eb8e30f73806f2dd12cbb3d6bab2694c921f87" +checksum = "96ba46eb69ddf7a9925b81f15229cb74658e6eebe5dd30a5b74e2cd040380573" dependencies = [ "alloy-json-rpc", "alloy-primitives", @@ -590,15 +648,15 @@ dependencies = [ "serde_json", "tokio", "tokio-stream", - "tower", + "tower 0.5.1", "tracing", ] [[package]] name = "alloy-rlp" -version = "0.3.7" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a43b18702501396fa9bcdeecd533bc85fac75150d308fc0f6800a01e6234a003" +checksum = "da0822426598f95e45dd1ea32a738dac057529a709ee645fcc516ffa4cbde08f" dependencies = [ "alloy-rlp-derive", "arrayvec", @@ -607,20 +665,20 @@ dependencies = [ [[package]] name = "alloy-rlp-derive" -version = "0.3.7" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d83524c1f6162fcb5b0decf775498a125066c86dda6066ed609531b0e912f85a" +checksum = "2b09cae092c27b6f1bde952653a22708691802e57bfef4a2973b80bea21efd3f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] name = "alloy-rpc-client" -version = "0.1.4" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ba31bae67773fd5a60020bea900231f8396202b7feca4d0c70c6b59308ab4a8" +checksum = "7fc2bd1e7403463a5f2c61e955bcc9d3072b63aa177442b0f9aa6a6d22a941e3" dependencies = [ "alloy-json-rpc", "alloy-primitives", @@ -631,68 +689,70 @@ dependencies = [ "alloy-transport-ws", "futures", "pin-project", - "reqwest 0.12.5", + "reqwest 0.12.8", "serde", "serde_json", "tokio", "tokio-stream", - "tower", + "tower 0.5.1", "tracing", "url", + "wasmtimer", ] [[package]] name = "alloy-rpc-types" -version = "0.1.4" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "184a7a42c7ba9141cc9e76368356168c282c3bc3d9e5d78f3556bdfe39343447" +checksum = "eea9bf1abdd506f985a53533f5ac01296bcd6102c5e139bbc5d40bc468d2c916" dependencies = [ + "alloy-primitives", "alloy-rpc-types-engine", "alloy-rpc-types-eth", "alloy-serde", + "serde", ] [[package]] name = "alloy-rpc-types-engine" -version = "0.1.4" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e765962e3b82fd6f276a0873b5bd897e5d75a25f78fa9a6a21bd350d8e98a4e" +checksum = "886d22d41992287a235af2f3af4299b5ced2bcafb81eb835572ad35747476946" dependencies = [ "alloy-consensus", "alloy-eips", "alloy-primitives", "alloy-rlp", - "alloy-rpc-types-eth", "alloy-serde", - "jsonwebtoken", - "rand 0.8.5", + "derive_more 1.0.0", "serde", - "thiserror", + "strum 0.26.3", ] [[package]] name = "alloy-rpc-types-eth" -version = "0.1.4" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab4123ee21f99ba4bd31bfa36ba89112a18a500f8b452f02b35708b1b951e2b9" +checksum = "00b034779a4850b4b03f5be5ea674a1cf7d746b2da762b34d1860ab45e48ca27" dependencies = [ "alloy-consensus", "alloy-eips", + "alloy-network-primitives", "alloy-primitives", "alloy-rlp", "alloy-serde", "alloy-sol-types", + "derive_more 1.0.0", "itertools 0.13.0", "serde", "serde_json", - "thiserror", ] [[package]] name = "alloy-serde" -version = "0.1.4" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9416c52959e66ead795a11f4a86c248410e9e368a0765710e57055b8a1774dd6" +checksum = "028e72eaa9703e4882344983cfe7636ce06d8cce104a78ea62fd19b46659efc4" dependencies = [ "alloy-primitives", "serde", @@ -701,9 +761,9 @@ dependencies = [ [[package]] name = "alloy-signer" -version = "0.1.4" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b33753c09fa1ad85e5b092b8dc2372f1e337a42e84b9b4cff9fede75ba4adb32" +checksum = "592c185d7100258c041afac51877660c7bf6213447999787197db4842f0e938e" dependencies = [ "alloy-primitives", "async-trait", @@ -715,9 +775,9 @@ dependencies = [ [[package]] name = "alloy-signer-local" -version = "0.1.4" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dfc9c26fe6c6f1bad818c9a976de9044dd12e1f75f1f156a801ee3e8148c1b6" +checksum = "6614f02fc1d5b079b2a4a5320018317b506fd0a6d67c1fd5542a71201724986c" dependencies = [ "alloy-consensus", "alloy-network", @@ -731,42 +791,42 @@ dependencies = [ [[package]] name = "alloy-sol-macro" -version = "0.7.7" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b40397ddcdcc266f59f959770f601ce1280e699a91fc1862f29cef91707cd09" +checksum = "b0900b83f4ee1f45c640ceee596afbc118051921b9438fdb5a3175c1a7e05f8b" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", - "proc-macro-error", + "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] name = "alloy-sol-macro-expander" -version = "0.7.7" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "867a5469d61480fea08c7333ffeca52d5b621f5ca2e44f271b117ec1fc9a0525" +checksum = "a41b1e78dde06b5e12e6702fa8c1d30621bf07728ba75b801fb801c9c6a0ba10" dependencies = [ "alloy-json-abi", "alloy-sol-macro-input", "const-hex", "heck 0.5.0", - "indexmap 2.2.6", - "proc-macro-error", + "indexmap 2.6.0", + "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", "syn-solidity", "tiny-keccak", ] [[package]] name = "alloy-sol-macro-input" -version = "0.7.7" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e482dc33a32b6fadbc0f599adea520bd3aaa585c141a80b404d0a3e3fa72528" +checksum = "91dc311a561a306664393407b88d3e53ae58581624128afd8a15faa5de3627dc" dependencies = [ "alloy-json-abi", "const-hex", @@ -775,25 +835,25 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.71", + "syn 2.0.85", "syn-solidity", ] [[package]] name = "alloy-sol-type-parser" -version = "0.7.7" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbcba3ca07cf7975f15d871b721fb18031eec8bce51103907f6dcce00b255d98" +checksum = "45d1fbee9e698f3ba176b6e7a145f4aefe6d2b746b611e8bb246fe11a0e9f6c4" dependencies = [ "serde", - "winnow 0.6.13", + "winnow", ] [[package]] name = "alloy-sol-types" -version = "0.7.7" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a91ca40fa20793ae9c3841b83e74569d1cc9af29a2f5237314fd3452d51e38c7" +checksum = "086f41bc6ebcd8cb15f38ba20e47be38dd03692149681ce8061c35d960dbf850" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -804,9 +864,9 @@ dependencies = [ [[package]] name = "alloy-transport" -version = "0.1.4" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01b51a291f949f755e6165c3ed562883175c97423703703355f4faa4b7d0a57c" +checksum = "be77579633ebbc1266ae6fd7694f75c408beb1aeb6865d0b18f22893c265a061" dependencies = [ "alloy-json-rpc", "base64 0.22.1", @@ -816,31 +876,32 @@ dependencies = [ "serde_json", "thiserror", "tokio", - "tower", + "tower 0.5.1", "tracing", "url", + "wasmtimer", ] [[package]] name = "alloy-transport-http" -version = "0.1.4" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86d65871f9f1cafe1ed25cde2f1303be83e6473e995a2d56c275ae4fcce6119c" +checksum = "91fd1a5d0827939847983b46f2f79510361f901dc82f8e3c38ac7397af142c6e" dependencies = [ "alloy-json-rpc", "alloy-transport", - "reqwest 0.12.5", + "reqwest 0.12.8", "serde_json", - "tower", + "tower 0.5.1", "tracing", "url", ] [[package]] name = "alloy-transport-ipc" -version = "0.1.4" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd7fbc8b6282ce41b01cbddef7bffb133fe6e1bf65dcd39770d45a905c051179" +checksum = "8073d1186bfeeb8fbdd1292b6f1a0731f3aed8e21e1463905abfae0b96a887a6" dependencies = [ "alloy-json-rpc", "alloy-pubsub", @@ -857,15 +918,15 @@ dependencies = [ [[package]] name = "alloy-transport-ws" -version = "0.1.4" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aec83fd052684556c78c54df111433493267234d82321c2236560c752f595f20" +checksum = "61f27837bb4a1d6c83a28231c94493e814882f0e9058648a97e908a5f3fc9fcf" dependencies = [ "alloy-pubsub", "alloy-transport", "futures", "http 1.1.0", - "rustls 0.23.11", + "rustls 0.23.15", "serde_json", "tokio", "tokio-tungstenite", @@ -890,9 +951,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.14" +version = "0.6.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" +checksum = "23a1e53f0f5d86382dafe1cf314783b2044280f406e7e1506368220ad11b1338" dependencies = [ "anstyle", "anstyle-parse", @@ -905,43 +966,43 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.7" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" +checksum = "8365de52b16c035ff4fcafe0092ba9390540e3e352870ac09933bebcaa2c8c56" [[package]] name = "anstyle-parse" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.0" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.3" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" +checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" dependencies = [ "anstyle", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anyhow" -version = "1.0.86" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" +checksum = "c042108f3ed77fd83760a5fd79b53be043192bb3b9dba91d8c574c0ada7850c8" [[package]] name = "ark-ff" @@ -977,7 +1038,7 @@ dependencies = [ "num-bigint", "num-traits", "paste", - "rustc_version 0.4.0", + "rustc_version 0.4.1", "zeroize", ] @@ -1069,9 +1130,9 @@ dependencies = [ [[package]] name = "arrayvec" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "assert-json-diff" @@ -1102,14 +1163,14 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] name = "async-stream" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" dependencies = [ "async-stream-impl", "futures-core", @@ -1118,24 +1179,24 @@ dependencies = [ [[package]] name = "async-stream-impl" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] name = "async-trait" -version = "0.1.81" +version = "0.1.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" +checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] @@ -1146,7 +1207,7 @@ checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" dependencies = [ "futures", "pharos", - "rustc_version 0.4.0", + "rustc_version 0.4.1", ] [[package]] @@ -1172,14 +1233,14 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "axum" @@ -1194,7 +1255,7 @@ dependencies = [ "futures-util", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.30", + "hyper 0.14.31", "itoa", "matchit", "memchr", @@ -1204,7 +1265,7 @@ dependencies = [ "rustversion", "serde", "sync_wrapper 0.1.2", - "tower", + "tower 0.4.13", "tower-layer", "tower-service", ] @@ -1228,17 +1289,17 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.73" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] @@ -1339,7 +1400,7 @@ dependencies = [ "hex", "nonempty", "pretty_assertions", - "reqwest 0.12.5", + "reqwest 0.12.8", "serde", "serde_json", "sqlx", @@ -1444,7 +1505,7 @@ dependencies = [ "hex", "serde", "serde_json", - "serde_with 3.9.0", + "serde_with 3.11.0", "thiserror", ] @@ -1495,9 +1556,9 @@ dependencies = [ [[package]] name = "blst" -version = "0.3.12" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62dc83a094a71d43eeadd254b1ec2d24cb6a0bb6cadce00df51f0db594711a32" +checksum = "4378725facc195f1a538864863f6de233b500a8862747e7f165078a419d5e874" dependencies = [ "cc", "glob", @@ -1525,7 +1586,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", "syn_derive", ] @@ -1552,9 +1613,9 @@ dependencies = [ [[package]] name = "bstr" -version = "1.9.1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" +checksum = "40723b8fb387abc38f4f4a37c09073622e41dd12327033091ef8950659e6dc0c" dependencies = [ "memchr", "serde", @@ -1602,9 +1663,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.6.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12916984aab3fa6e39d655a33e09c0071eb36d6ab3aea5c2d78551f1df6d952" +checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" dependencies = [ "serde", ] @@ -1620,15 +1681,16 @@ dependencies = [ [[package]] name = "c-kzg" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdf100c4cea8f207e883ff91ca886d621d8a166cb04971dfaa9bb8fd99ed95df" +checksum = "f0307f72feab3300336fb803a57134159f6e20139af1357f36c54cb90d8e8928" dependencies = [ "blst", "cc", "glob", "hex", "libc", + "once_cell", "serde", ] @@ -1670,12 +1732,13 @@ checksum = "ade8366b8bd5ba243f0a58f036cc0ca8a2f069cff1a2351ef1cac6b083e16fc0" [[package]] name = "cc" -version = "1.1.6" +version = "1.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aba8f4e9906c7ce3c73463f62a7f0c65183ada1a2d47e397cc8810827f9694f" +checksum = "c2e7962b54006dcfcc61cb72735f4d89bb97061dd6a7ed882ec6b8ee53714c6f" dependencies = [ "jobserver", "libc", + "shlex", ] [[package]] @@ -1729,9 +1792,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.9" +version = "4.5.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64acc1846d54c1fe936a78dc189c34e28d3f5afc348403f28ecf53660b9b8462" +checksum = "b97f376d85a664d5837dbae44bf546e6477a679ff6610010f17276f686d867e8" dependencies = [ "clap_builder", "clap_derive", @@ -1739,9 +1802,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.9" +version = "4.5.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fb8393d67ba2e7bfaf28a23458e4e2b543cc73a99595511eb207fdb8aede942" +checksum = "19bc80abd44e4bed93ca373a0704ccbd1b710dc5749406201bb018272808dc54" dependencies = [ "anstream", "anstyle", @@ -1751,27 +1814,27 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.8" +version = "4.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bac35c6dafb060fd4d275d9a4ffae97917c13a6327903a8be2153cd964f7085" +checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] name = "clap_lex" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b82cf0babdbd58558212896d1a4272303a57bdb245c2bf1147185fb45640e70" +checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" [[package]] name = "colorchoice" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "concurrent-queue" @@ -1803,9 +1866,9 @@ dependencies = [ [[package]] name = "const-hex" -version = "1.12.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94fb8a24a26d37e1ffd45343323dc9fe6654ceea44c12f2fcb3d7ac29e610bc6" +checksum = "0121754e84117e65f9d90648ee6aa4882a6e63110307ab73967a4c5e7e69e586" dependencies = [ "cfg-if", "cpufeatures", @@ -1849,15 +1912,15 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" dependencies = [ "libc", ] @@ -2013,7 +2076,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] @@ -2035,7 +2098,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core 0.20.10", "quote", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] @@ -2051,6 +2114,20 @@ dependencies = [ "parking_lot_core 0.9.10", ] +[[package]] +name = "dashmap" +version = "6.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +dependencies = [ + "cfg-if", + "crossbeam-utils", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core 0.9.10", +] + [[package]] name = "data-encoding" version = "2.6.0" @@ -2117,8 +2194,29 @@ dependencies = [ "convert_case", "proc-macro2", "quote", - "rustc_version 0.4.0", - "syn 2.0.71", + "rustc_version 0.4.1", + "syn 2.0.85", +] + +[[package]] +name = "derive_more" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.85", + "unicode-xid", ] [[package]] @@ -2162,7 +2260,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] @@ -2185,9 +2283,9 @@ checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" [[package]] name = "dunce" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "ecdsa" @@ -2233,9 +2331,9 @@ dependencies = [ [[package]] name = "encoding_rs" -version = "0.8.34" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if", ] @@ -2284,9 +2382,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" [[package]] name = "fastrlp" @@ -2329,9 +2427,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.30" +version = "1.0.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" dependencies = [ "crc32fast", "miniz_oxide", @@ -2339,9 +2437,9 @@ dependencies = [ [[package]] name = "flume" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" +checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" dependencies = [ "futures-core", "futures-sink", @@ -2354,6 +2452,12 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2" + [[package]] name = "foreign-types" version = "0.3.2" @@ -2386,9 +2490,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -2401,9 +2505,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -2411,15 +2515,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -2439,9 +2543,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" @@ -2460,26 +2564,26 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-timer" @@ -2489,9 +2593,9 @@ checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -2548,9 +2652,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.29.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "glob" @@ -2560,15 +2664,15 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "globset" -version = "0.4.14" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" +checksum = "15f1ce686646e7f1e19bf7d5533fe443a45dbfb990e00629110797578b42fb19" dependencies = [ "aho-corasick", "bstr", "log", - "regex-automata 0.4.7", - "regex-syntax 0.8.4", + "regex-automata 0.4.8", + "regex-syntax 0.8.5", ] [[package]] @@ -2605,7 +2709,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.2.6", + "indexmap 2.6.0", "slab", "tokio", "tokio-util", @@ -2614,9 +2718,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" +checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" dependencies = [ "atomic-waker", "bytes", @@ -2624,7 +2728,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.1.0", - "indexmap 2.2.6", + "indexmap 2.6.0", "slab", "tokio", "tokio-util", @@ -2640,6 +2744,12 @@ dependencies = [ "ahash 0.7.8", ] +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" + [[package]] name = "hashbrown" version = "0.14.5" @@ -2650,6 +2760,18 @@ dependencies = [ "allocator-api2", ] +[[package]] +name = "hashbrown" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", + "serde", +] + [[package]] name = "hashlink" version = "0.8.4" @@ -2801,9 +2923,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.9.4" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" [[package]] name = "httpdate" @@ -2822,9 +2944,9 @@ dependencies = [ [[package]] name = "hyper" -version = "0.14.30" +version = "0.14.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a152ddd61dfaec7273fe8419ab357f33aee0d914c5f4efbf0d96fa749eea5ec9" +checksum = "8c08302e8fa335b151b788c775ff56e7a03ae64ff85c548ee820fecb70356e85" dependencies = [ "bytes", "futures-channel", @@ -2846,14 +2968,14 @@ dependencies = [ [[package]] name = "hyper" -version = "1.4.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" +checksum = "bbbff0a806a4728c99295b254c8838933b5b082d75e3cb70c8dab21fdfbcfa9a" dependencies = [ "bytes", "futures-channel", "futures-util", - "h2 0.4.5", + "h2 0.4.6", "http 1.1.0", "http-body 1.0.1", "httparse", @@ -2866,15 +2988,15 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.2" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" +checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" dependencies = [ "futures-util", "http 1.1.0", - "hyper 1.4.1", + "hyper 1.5.0", "hyper-util", - "rustls 0.23.11", + "rustls 0.23.15", "rustls-pki-types", "tokio", "tokio-rustls", @@ -2887,7 +3009,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" dependencies = [ - "hyper 0.14.30", + "hyper 0.14.31", "pin-project-lite", "tokio", "tokio-io-timeout", @@ -2900,7 +3022,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ "bytes", - "hyper 0.14.30", + "hyper 0.14.31", "native-tls", "tokio", "tokio-native-tls", @@ -2914,7 +3036,7 @@ checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", "http-body-util", - "hyper 1.4.1", + "hyper 1.5.0", "hyper-util", "native-tls", "tokio", @@ -2924,29 +3046,28 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.6" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ab92f4f49ee4fb4f997c784b7a2e0fa70050211e0b6a287f898c3c9785ca956" +checksum = "41296eb09f183ac68eec06e03cdbea2e759633d4067b2f6552fc2e009bcad08b" dependencies = [ "bytes", "futures-channel", "futures-util", "http 1.1.0", "http-body 1.0.1", - "hyper 1.4.1", + "hyper 1.5.0", "pin-project-lite", "socket2", "tokio", - "tower", "tower-service", "tracing", ] [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -3080,7 +3201,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] @@ -3113,15 +3234,15 @@ dependencies = [ [[package]] name = "ignore" -version = "0.4.22" +version = "0.4.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b46810df39e66e925525d6e38ce1e7f6e1d208f72dc39757880fcb66e2c58af1" +checksum = "6d89fd380afde86567dfba715db065673989d6253f42b88179abd3eae47bda4b" dependencies = [ "crossbeam-deque", "globset", "log", "memchr", - "regex-automata 0.4.7", + "regex-automata 0.4.8", "same-file", "walkdir", "winapi-util", @@ -3136,6 +3257,12 @@ dependencies = [ "parity-scale-codec", ] +[[package]] +name = "impl-more" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aae21c3177a27788957044151cc2800043d127acaa460a47ebb9b84dfa2c6aa0" + [[package]] name = "impl-trait-for-tuples" version = "0.2.2" @@ -3160,12 +3287,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.6" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" dependencies = [ "equivalent", - "hashbrown 0.14.5", + "hashbrown 0.15.0", "serde", ] @@ -3183,7 +3310,7 @@ checksum = "0122b7114117e64a63ac49f752a5ca4624d534c7b1c7de796ac196381cd2d947" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] @@ -3206,9 +3333,9 @@ checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" [[package]] name = "interprocess" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67bafc2f5dbdad79a6d925649758d5472647b416028099f0b829d1b67fdd47d3" +checksum = "d2f4e4a06d42fab3e85ab1b419ad32b09eab58b901d40c57935ff92db3287a13" dependencies = [ "doctest-file", "futures-core", @@ -3221,15 +3348,15 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.9.0" +version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" [[package]] name = "is_terminal_polyfill" -version = "1.70.0" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] name = "itertools" @@ -3275,18 +3402,18 @@ checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "jobserver" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" dependencies = [ "wasm-bindgen", ] @@ -3302,26 +3429,11 @@ dependencies = [ "serde", ] -[[package]] -name = "jsonwebtoken" -version = "9.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ae10193d25051e74945f1ea2d0b42e03cc3b890f7e4cc5faa44997d808193f" -dependencies = [ - "base64 0.21.7", - "js-sys", - "pem", - "ring", - "serde", - "serde_json", - "simple_asn1", -] - [[package]] name = "k256" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" dependencies = [ "cfg-if", "ecdsa", @@ -3330,11 +3442,20 @@ dependencies = [ "sha2", ] +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + [[package]] name = "keccak-asm" -version = "0.1.1" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47a3633291834c4fbebf8673acbc1b04ec9d151418ff9b8e26dcd79129928758" +checksum = "505d1856a39b200489082f90d897c3f07c455563880bc5952e38eabf731c83b6" dependencies = [ "digest 0.10.7", "sha3-asm", @@ -3357,9 +3478,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.155" +version = "0.2.161" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" [[package]] name = "libm" @@ -3431,11 +3552,11 @@ checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "lru" -version = "0.12.3" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3262e75e648fce39813cb56ac41f3c3e3f65217ebf3844d818d1f9398cfb0dc" +checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ - "hashbrown 0.14.5", + "hashbrown 0.15.0", ] [[package]] @@ -3493,23 +3614,24 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.4" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" dependencies = [ - "adler", + "adler2", ] [[package]] name = "mio" -version = "0.8.11" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" dependencies = [ + "hermit-abi", "libc", "log", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -3656,44 +3778,44 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" dependencies = [ "num_enum_derive", ] [[package]] name = "num_enum_derive" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] name = "object" -version = "0.36.1" +version = "0.36.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "081b846d1d56ddfc18fdf1a922e4f6e07a11768ea1b92dec44e42b72712ccfce" +checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "openssl" -version = "0.10.64" +version = "0.10.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" +checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" dependencies = [ "bitflags 2.6.0", "cfg-if", @@ -3712,7 +3834,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] @@ -3723,9 +3845,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.102" +version = "0.9.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" +checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" dependencies = [ "cc", "libc", @@ -3793,7 +3915,7 @@ checksum = "8b3a2a91fdbfdd4d212c0dcc2ab540de2c2bcbbd90be17de7a7daf8822d010c1" dependencies = [ "async-trait", "crossbeam-channel", - "dashmap", + "dashmap 5.5.3", "fnv", "futures-channel", "futures-executor", @@ -3856,7 +3978,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] @@ -3893,9 +4015,9 @@ dependencies = [ [[package]] name = "parking" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" @@ -3940,7 +4062,7 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.3", + "redox_syscall 0.5.7", "smallvec", "windows-targets 0.52.6", ] @@ -3962,19 +4084,9 @@ checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "pathdiff" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" - -[[package]] -name = "pem" -version = "3.0.4" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae" -dependencies = [ - "base64 0.22.1", - "serde", -] +checksum = "d61c5ce1153ab5b689d0c074c4e7fc613e942dfb7dd9eea5ab202d2ad91fe361" [[package]] name = "pem-rfc7468" @@ -3993,9 +4105,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.11" +version = "2.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd53dff83f26735fdc1ca837098ccf133605d794cdae66acfc2bfac3ec809d95" +checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442" dependencies = [ "memchr", "thiserror", @@ -4004,9 +4116,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.7.11" +version = "2.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a548d2beca6773b1c244554d36fcf8548a8a58e74156968211567250e48e49a" +checksum = "d214365f632b123a47fd913301e14c946c61d1c183ee245fa76eb752e59a02dd" dependencies = [ "pest", "pest_generator", @@ -4014,22 +4126,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.7.11" +version = "2.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c93a82e8d145725dcbaf44e5ea887c8a869efdcc28706df2d08c69e17077183" +checksum = "eb55586734301717aea2ac313f50b2eb8f60d2fc3dc01d190eefa2e625f60c4e" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] name = "pest_meta" -version = "2.7.11" +version = "2.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a941429fea7e08bedec25e4f6785b6ffaacc6b755da98df5ef3e7dcf4a124c4f" +checksum = "b75da2a70cf4d9cb76833c990ac9cd3923c9a8905a8929789ce347c84564d03d" dependencies = [ "once_cell", "pest", @@ -4043,7 +4155,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.2.6", + "indexmap 2.6.0", ] [[package]] @@ -4053,7 +4165,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9567389417feee6ce15dd6527a8a1ecac205ef62c2932bcf3d9f6fc5b78b414" dependencies = [ "futures", - "rustc_version 0.4.0", + "rustc_version 0.4.1", ] [[package]] @@ -4096,29 +4208,29 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.5" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.5" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" [[package]] name = "pin-utils" @@ -4149,9 +4261,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "powerfmt" @@ -4161,15 +4273,18 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "pretty_assertions" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66" +checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d" dependencies = [ "diff", "yansi", @@ -4187,12 +4302,12 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.20" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" +checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" dependencies = [ "proc-macro2", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] @@ -4208,9 +4323,9 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.1.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" dependencies = [ "toml_edit", ] @@ -4239,11 +4354,33 @@ dependencies = [ "version_check", ] +[[package]] +name = "proc-macro-error-attr2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "proc-macro-error2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" +dependencies = [ + "proc-macro-error-attr2", + "proc-macro2", + "quote", + "syn 2.0.85", +] + [[package]] name = "proc-macro2" -version = "1.0.86" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" dependencies = [ "unicode-ident", ] @@ -4277,7 +4414,7 @@ dependencies = [ "rand 0.8.5", "rand_chacha 0.3.1", "rand_xorshift", - "regex-syntax 0.8.4", + "regex-syntax 0.8.5", "rusty-fork", "tempfile", "unarray", @@ -4348,7 +4485,7 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] @@ -4414,9 +4551,9 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quote" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] @@ -4449,6 +4586,7 @@ dependencies = [ "libc", "rand_chacha 0.3.1", "rand_core 0.6.4", + "serde", ] [[package]] @@ -4524,32 +4662,23 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_syscall" -version = "0.5.3" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" dependencies = [ "bitflags 2.6.0", ] [[package]] name = "regex" -version = "1.10.5" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.7", - "regex-syntax 0.8.4", + "regex-automata 0.4.8", + "regex-syntax 0.8.5", ] [[package]] @@ -4563,13 +4692,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.4", + "regex-syntax 0.8.5", ] [[package]] @@ -4586,9 +4715,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "rend" @@ -4613,7 +4742,7 @@ dependencies = [ "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.30", + "hyper 0.14.31", "hyper-tls 0.5.0", "ipnet", "js-sys", @@ -4629,7 +4758,7 @@ dependencies = [ "serde_json", "serde_urlencoded", "sync_wrapper 0.1.2", - "system-configuration", + "system-configuration 0.5.1", "tokio", "tokio-native-tls", "tower-service", @@ -4637,25 +4766,25 @@ dependencies = [ "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "winreg 0.50.0", + "winreg", ] [[package]] name = "reqwest" -version = "0.12.5" +version = "0.12.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37" +checksum = "f713147fbe92361e52392c73b8c9e48c04c6625bce969ef54dc901e58e042a7b" dependencies = [ "base64 0.22.1", "bytes", "encoding_rs", "futures-core", "futures-util", - "h2 0.4.5", + "h2 0.4.6", "http 1.1.0", "http-body 1.0.1", "http-body-util", - "hyper 1.4.1", + "hyper 1.5.0", "hyper-rustls", "hyper-tls 0.6.0", "hyper-util", @@ -4667,12 +4796,12 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls-pemfile 2.1.2", + "rustls-pemfile 2.2.0", "serde", "serde_json", "serde_urlencoded", "sync_wrapper 1.0.1", - "system-configuration", + "system-configuration 0.6.1", "tokio", "tokio-native-tls", "tower-service", @@ -4680,7 +4809,7 @@ dependencies = [ "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "winreg 0.52.0", + "windows-registry", ] [[package]] @@ -4710,7 +4839,7 @@ dependencies = [ "futures", "getrandom 0.2.15", "http 0.2.12", - "hyper 0.14.30", + "hyper 0.14.31", "parking_lot 0.11.2", "reqwest 0.11.27", "reqwest-middleware", @@ -4765,9 +4894,9 @@ dependencies = [ [[package]] name = "rkyv" -version = "0.7.44" +version = "0.7.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cba464629b3394fc4dbc6f940ff8f5b4ff5c7aef40f29166fd4ad12acbc99c0" +checksum = "9008cd6385b9e161d8229e1f6549dd23c3d022f132a2ea37ac3a10ac4935779b" dependencies = [ "bitvec", "bytecheck", @@ -4783,9 +4912,9 @@ dependencies = [ [[package]] name = "rkyv_derive" -version = "0.7.44" +version = "0.7.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7dddfff8de25e6f62b9d64e6e432bf1c6736c57d20323e15ee10435fbda7c65" +checksum = "503d1d27590a2b0a3a4ca4c94755aa2875657196ecbf401a42eff41d7de532c0" dependencies = [ "proc-macro2", "quote", @@ -4875,9 +5004,9 @@ dependencies = [ [[package]] name = "rust_decimal" -version = "1.35.0" +version = "1.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1790d1c4c0ca81211399e0e0af16333276f375209e71a37b67698a373db5b47a" +checksum = "b082d80e3e3cc52b2ed634388d436fe1f4de6af5786cc2de9ba9737527bdf555" dependencies = [ "arrayvec", "borsh", @@ -4895,6 +5024,12 @@ version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +[[package]] +name = "rustc-hash" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" + [[package]] name = "rustc-hex" version = "2.1.0" @@ -4912,18 +5047,18 @@ dependencies = [ [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver 1.0.23", ] [[package]] name = "rustix" -version = "0.38.34" +version = "0.38.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" dependencies = [ "bitflags 2.6.0", "errno", @@ -4945,14 +5080,14 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.11" +version = "0.23.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4828ea528154ae444e5a642dbb7d5623354030dc9822b83fd9bb79683c7399d0" +checksum = "5fbb44d7acc4e873d613422379f69f237a1b141928c02f6bc6ccfddddc2d7993" dependencies = [ "once_cell", "ring", "rustls-pki-types", - "rustls-webpki 0.102.5", + "rustls-webpki 0.102.8", "subtle", "zeroize", ] @@ -4968,19 +5103,18 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "2.1.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "base64 0.22.1", "rustls-pki-types", ] [[package]] name = "rustls-pki-types" -version = "1.7.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" +checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" [[package]] name = "rustls-webpki" @@ -4994,9 +5128,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.102.5" +version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9a6fccd794a42c2c105b513a2f62bc3fd8f3ba57a4593677ceb0bd035164d78" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ "ring", "rustls-pki-types", @@ -5005,9 +5139,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" +checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" [[package]] name = "rusty-fork" @@ -5038,11 +5172,22 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.23" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +checksum = "01227be5826fa0690321a2ba6c5cd57a19cf3f6a09e76973b58e61de6ab9d1c1" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", +] + +[[package]] +name = "schnellru" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9a8ef13a93c54d20580de1e5c413e624e53121d42fc7e2c11d10ef7f8b02367" +dependencies = [ + "ahash 0.8.11", + "cfg-if", + "hashbrown 0.13.2", ] [[package]] @@ -5063,15 +5208,15 @@ dependencies = [ [[package]] name = "sea-bae" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bd3534a9978d0aa7edd2808dc1f8f31c4d0ecd31ddf71d997b3c98e9f3c9114" +checksum = "f694a6ab48f14bc063cfadff30ab551d3c7e46d8f81836c51989d548f44a2a25" dependencies = [ "heck 0.4.1", - "proc-macro-error", + "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] @@ -5129,7 +5274,7 @@ dependencies = [ "proc-macro2", "quote", "sea-bae", - "syn 2.0.71", + "syn 2.0.85", "unicode-ident", ] @@ -5186,14 +5331,15 @@ dependencies = [ [[package]] name = "sea-query-derive" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25a82fcb49253abcb45cdcb2adf92956060ec0928635eb21b4f7a6d8f25ab0bc" +checksum = "9834af2c4bd8c5162f00c89f1701fb6886119a88062cf76fe842ea9e232b9839" dependencies = [ + "darling 0.20.10", "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", "thiserror", ] @@ -5255,9 +5401,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.11.1" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" +checksum = "ea4a292869320c0272d7bc55a5a6aafaff59b4f63404a003887b679a2e05b4b6" dependencies = [ "core-foundation-sys", "libc", @@ -5295,31 +5441,32 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.204" +version = "1.0.213" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12" +checksum = "3ea7893ff5e2466df8d720bb615088341b295f849602c6956047f8f80f0e9bc1" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.204" +version = "1.0.213" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" +checksum = "7e85ad2009c50b58e87caa8cd6dac16bdf511bbfb7af6c33df902396aa480fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] name = "serde_json" -version = "1.0.120" +version = "1.0.132" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5" +checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] @@ -5365,19 +5512,19 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.9.0" +version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cecfa94848272156ea67b2b1a53f20fc7bc638c4a46d2f8abde08f05f4b857" +checksum = "8e28bdad6db2b8340e449f7108f020b3b092e8583a9e3fb82713e1d4e71fe817" dependencies = [ "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.2.6", + "indexmap 2.6.0", "serde", "serde_derive", "serde_json", - "serde_with_macros 3.9.0", + "serde_with_macros 3.11.0", "time", ] @@ -5390,19 +5537,19 @@ dependencies = [ "darling 0.20.10", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] name = "serde_with_macros" -version = "3.9.0" +version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8fee4991ef4f274617a51ad4af30519438dacb2f56ac773b08a1922ff743350" +checksum = "9d846214a9854ef724f3da161b426242d8de7c1fc7de2f89bb1efcb154dca79d" dependencies = [ "darling 0.20.10", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] @@ -5411,7 +5558,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.6.0", "itoa", "ryu", "serde", @@ -5440,11 +5587,21 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest 0.10.7", + "keccak", +] + [[package]] name = "sha3-asm" -version = "0.1.1" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9b57fd861253bff08bb1919e995f90ba8f4889de2726091c8876f3a4e823b40" +checksum = "c28efc5e327c837aa837c59eae585fc250715ef939ac32881bcc11677cd02d46" dependencies = [ "cc", "cfg-if", @@ -5459,6 +5616,12 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signal-hook-registry" version = "1.4.2" @@ -5480,21 +5643,9 @@ dependencies = [ [[package]] name = "simdutf8" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" - -[[package]] -name = "simple_asn1" -version = "0.6.2" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" -dependencies = [ - "num-bigint", - "num-traits", - "thiserror", - "time", -] +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" [[package]] name = "siphasher" @@ -5513,9 +5664,9 @@ dependencies = [ [[package]] name = "slug" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bd94acec9c8da640005f8e135a39fc0372e74535e6b368b7a04b875f784c8c4" +checksum = "882a80f72ee45de3cc9a5afeb2da0331d58df69e4e7d8eeb5d3c7784ae67e724" dependencies = [ "deunicode", "wasm-bindgen", @@ -5558,9 +5709,9 @@ dependencies = [ [[package]] name = "sqlformat" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f895e3734318cc55f1fe66258926c9b910c124d47520339efecbb6c59cec7c1f" +checksum = "7bba3a93db0cc4f7bdece8bb09e77e2e785c20bfebf79eb8340ed80708048790" dependencies = [ "nom", "unicode_categories", @@ -5602,7 +5753,7 @@ dependencies = [ "futures-util", "hashlink", "hex", - "indexmap 2.2.6", + "indexmap 2.6.0", "log", "memchr", "once_cell", @@ -5842,7 +5993,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] @@ -5864,9 +6015,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.71" +version = "2.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b146dcf730474b4bcd16c311627b31ede9ab149045db4d6088b3becaea046462" +checksum = "5023162dfcd14ef8f32034d8bcd4cc5ddc61ef7a247c024a33e24e1f24d21b56" dependencies = [ "proc-macro2", "quote", @@ -5875,14 +6026,14 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "0.7.7" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c837dc8852cb7074e46b444afb81783140dab12c58867b49fb3898fbafedf7ea" +checksum = "9d5e0c2ea8db64b2898b62ea2fbd60204ca95e0b2c6bdf53ff768bbe916fbe4d" dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] @@ -5894,7 +6045,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] @@ -5908,6 +6059,9 @@ name = "sync_wrapper" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +dependencies = [ + "futures-core", +] [[package]] name = "synstructure" @@ -5917,7 +6071,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] @@ -5928,7 +6082,18 @@ checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" dependencies = [ "bitflags 1.3.2", "core-foundation", - "system-configuration-sys", + "system-configuration-sys 0.5.0", +] + +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags 2.6.0", + "core-foundation", + "system-configuration-sys 0.6.0", ] [[package]] @@ -5941,6 +6106,16 @@ dependencies = [ "libc", ] +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "tap" version = "1.0.1" @@ -5958,14 +6133,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.10.1" +version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" dependencies = [ "cfg-if", - "fastrand 2.1.0", + "fastrand 2.1.1", + "once_cell", "rustix", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -5992,22 +6168,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.63" +version = "1.0.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +checksum = "5d11abd9594d9b38965ef50805c5e469ca9cc6f197f883f717e0269a3057b3d5" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.63" +version = "1.0.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +checksum = "ae71770322cbd277e69d762a16c444af02aa0575ac0d174f0b9562d3b37f8602" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] @@ -6109,21 +6285,20 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.38.1" +version = "1.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb2caba9f80616f438e09748d5acda951967e1ea58508ef53d9c6402485a46df" +checksum = "145f3413504347a2be84393cc8a7d2fb4d863b375909ea59f2158261aa258bbb" dependencies = [ "backtrace", "bytes", "libc", "mio", - "num_cpus", "parking_lot 0.12.3", "pin-project-lite", "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -6153,13 +6328,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] @@ -6178,16 +6353,16 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ - "rustls 0.23.11", + "rustls 0.23.15", "rustls-pki-types", "tokio", ] [[package]] name = "tokio-stream" -version = "0.1.15" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" +checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" dependencies = [ "futures-core", "pin-project-lite", @@ -6197,25 +6372,25 @@ dependencies = [ [[package]] name = "tokio-tungstenite" -version = "0.23.1" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6989540ced10490aaf14e6bad2e3d33728a2813310a0c71d1574304c49631cd" +checksum = "edc5f74e248dc973e0dbb7b74c7e0d6fcc301c694ff50049504004ef4d0cdcd9" dependencies = [ "futures-util", "log", - "rustls 0.23.11", + "rustls 0.23.15", "rustls-pki-types", "tokio", "tokio-rustls", "tungstenite", - "webpki-roots 0.26.3", + "webpki-roots 0.26.6", ] [[package]] name = "tokio-util" -version = "0.7.11" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" dependencies = [ "bytes", "futures-core", @@ -6235,19 +6410,19 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.6" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" [[package]] name = "toml_edit" -version = "0.21.1" +version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.6.0", "toml_datetime", - "winnow 0.5.40", + "winnow", ] [[package]] @@ -6266,7 +6441,7 @@ dependencies = [ "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.30", + "hyper 0.14.31", "hyper-timeout", "percent-encoding", "pin-project", @@ -6275,7 +6450,7 @@ dependencies = [ "tokio", "tokio-stream", "tokio-util", - "tower", + "tower 0.4.13", "tower-layer", "tower-service", "tracing", @@ -6315,17 +6490,31 @@ dependencies = [ "tracing", ] +[[package]] +name = "tower" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2873938d487c3cfb9aed7546dc9f2711d867c9f90c46b889989a2cb84eba6b4f" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper 0.1.2", + "tower-layer", + "tower-service", +] + [[package]] name = "tower-layer" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" @@ -6347,7 +6536,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] @@ -6445,9 +6634,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "tungstenite" -version = "0.23.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e2e2ce1e47ed2994fd43b04c8f618008d4cabdd5ee34027cf14f9d918edd9c8" +checksum = "18e5b8366ee7a95b16d32197d0b2604b43a0be89dc5fac9f8e96ccafbaedda8a" dependencies = [ "byteorder", "bytes", @@ -6456,7 +6645,7 @@ dependencies = [ "httparse", "log", "rand 0.8.5", - "rustls 0.23.11", + "rustls 0.23.15", "rustls-pki-types", "sha1", "thiserror", @@ -6471,9 +6660,9 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "ucd-trie" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" [[package]] name = "uint" @@ -6545,45 +6734,48 @@ dependencies = [ [[package]] name = "unicase" -version = "2.7.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" -dependencies = [ - "version_check", -] +checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df" [[package]] name = "unicode-bidi" -version = "0.3.15" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" +checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] name = "unicode-normalization" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" dependencies = [ "tinyvec", ] [[package]] name = "unicode-properties" -version = "0.1.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4259d9d4425d9f0661581b804cb85fe66a4c631cadd8f490d1c13a35d5d9291" +checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" [[package]] name = "unicode-segmentation" -version = "1.11.0" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "unicode-xid" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "unicode_categories" @@ -6647,9 +6839,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" +checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" dependencies = [ "getrandom 0.2.15", "serde", @@ -6669,9 +6861,9 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "wait-timeout" @@ -6727,34 +6919,35 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" dependencies = [ "cfg-if", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.42" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" dependencies = [ "cfg-if", "js-sys", @@ -6764,9 +6957,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -6774,22 +6967,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" [[package]] name = "wasm-timer" @@ -6806,11 +6999,25 @@ dependencies = [ "web-sys", ] +[[package]] +name = "wasmtimer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7ed9d8b15c7fb594d72bfb4b5a276f3d2029333cd93a932f376f5937f6f80ee" +dependencies = [ + "futures", + "js-sys", + "parking_lot 0.12.3", + "pin-utils", + "slab", + "wasm-bindgen", +] + [[package]] name = "web-sys" -version = "0.3.69" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" dependencies = [ "js-sys", "wasm-bindgen", @@ -6824,9 +7031,9 @@ checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" [[package]] name = "webpki-roots" -version = "0.26.3" +version = "0.26.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd7c23921eeb1713a4e851530e9b9756e4fb0e89978582942612524cf09f01cd" +checksum = "841c67bff177718f1d4dfefde8d8f0e78f9b6589319ba88312f567fc5841a958" dependencies = [ "rustls-pki-types", ] @@ -6845,11 +7052,11 @@ dependencies = [ [[package]] name = "whoami" -version = "1.5.1" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44ab49fad634e88f55bf8f9bb3abd2f27d7204172a112c7c9987e01c1c94ea9" +checksum = "372d5b87f58ec45c384ba03563b03544dc5fadc3983e434b286913f5b4a9bb6d" dependencies = [ - "redox_syscall 0.4.1", + "redox_syscall 0.5.7", "wasite", ] @@ -6877,11 +7084,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -6899,6 +7106,36 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result", + "windows-targets 0.52.6", +] + [[package]] name = "windows-sys" version = "0.48.0" @@ -6917,6 +7154,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-targets" version = "0.48.5" @@ -7040,18 +7286,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.5.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" -dependencies = [ - "memchr", -] - -[[package]] -name = "winnow" -version = "0.6.13" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59b5e5f6c299a3c7890b876a2a587f3115162487e704907d9b6cd29473052ba1" +checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" dependencies = [ "memchr", ] @@ -7066,16 +7303,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "winreg" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - [[package]] name = "wiremock" version = "0.5.22" @@ -7089,7 +7316,7 @@ dependencies = [ "futures", "futures-timer", "http-types", - "hyper 0.14.30", + "hyper 0.14.31", "log", "once_cell", "regex", @@ -7121,7 +7348,7 @@ dependencies = [ "js-sys", "log", "pharos", - "rustc_version 0.4.0", + "rustc_version 0.4.1", "send_wrapper", "thiserror", "wasm-bindgen", @@ -7149,9 +7376,9 @@ dependencies = [ [[package]] name = "yansi" -version = "0.5.1" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" +checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" [[package]] name = "yoke" @@ -7173,7 +7400,7 @@ checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", "synstructure", ] @@ -7183,6 +7410,7 @@ version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ + "byteorder", "zerocopy-derive", ] @@ -7194,7 +7422,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] @@ -7214,7 +7442,7 @@ checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", "synstructure", ] @@ -7235,7 +7463,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] @@ -7257,7 +7485,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.71", + "syn 2.0.85", ] [[package]] @@ -7271,18 +7499,18 @@ dependencies = [ [[package]] name = "zstd-safe" -version = "7.2.0" +version = "7.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa556e971e7b568dc775c136fc9de8c779b1c2fc3a63defaafadffdbd3181afa" +checksum = "54a3ab4db68cea366acc5c897c7b4d4d1b8994a9cd6e6f841f8964566a419059" dependencies = [ "zstd-sys", ] [[package]] name = "zstd-sys" -version = "2.0.12+zstd.1.5.6" +version = "2.0.13+zstd.1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a4e40c320c3cb459d9a9ff6de98cff88f4751ee9275d140e2be94a2b74e4c13" +checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" dependencies = [ "cc", "pkg-config", diff --git a/blockscout-ens/bens-logic/Cargo.toml b/blockscout-ens/bens-logic/Cargo.toml index 78504c1d7..7cc9c6306 100644 --- a/blockscout-ens/bens-logic/Cargo.toml +++ b/blockscout-ens/bens-logic/Cargo.toml @@ -7,7 +7,7 @@ edition = "2021" [dependencies] tokio = { version = "1.23", features = [ "rt-multi-thread", "macros" ] } -alloy-ccip-read = "0.1.2" +alloy-ccip-read = "0.2.0" anyhow = "1" hex = "0.4" chrono = "0.4" @@ -30,7 +30,7 @@ async-trait = "0.1" nonempty = { version = "0.10.0", features = ["serde", "serialize"] } itertools = "0.11.0" idna = "1.0.2" -alloy = { version = "0.1.4", features = ["full"] } +alloy = { version = "0.5.4", features = ["full"] } prometheus = "0.13.4" [dependencies.sqlx] diff --git a/blockscout-ens/bens-logic/src/subgraph/offchain/ens/ccip_read.rs b/blockscout-ens/bens-logic/src/subgraph/offchain/ens/ccip_read.rs index 86b27c1b9..88d1608e3 100644 --- a/blockscout-ens/bens-logic/src/subgraph/offchain/ens/ccip_read.rs +++ b/blockscout-ens/bens-logic/src/subgraph/offchain/ens/ccip_read.rs @@ -32,10 +32,10 @@ pub async fn call_to_resolver( ) -> Result { let name_str = &name.inner.name; let reader = reader_from_protocol(&name.deployed_protocol); - let result = reader - .resolve_name_with_resolver(name_str, resolver_address) - .await - .context("perform ccip call to with resolver")?; + let result = + alloy_ccip_read::ens::resolve_name_with_resolver(&reader, name_str, resolver_address) + .await + .context("perform ccip call to with resolver")?; Ok(DomainInfoFromCcipRead { id: name.inner.id.clone(), @@ -55,10 +55,13 @@ pub async fn call_to_resolver( )] pub async fn get_resolver(name: &DomainNameOnProtocol<'_>) -> Result { let reader = reader_from_protocol(&name.deployed_protocol); - reader - .get_resolver(&name.inner.name) - .await - .context("get resolver") + alloy_ccip_read::ens::get_resolver_wildcarded( + &reader, + name.deployed_protocol.protocol.info.registry_contract, + &name.inner.name, + ) + .await + .context("get resolver") } type Reader = CCIPReader, CustomDomainIdGenerator>; @@ -69,13 +72,9 @@ fn reader_from_protocol(d: &DeployedProtocol) -> Reader { let provider = ProviderBuilder::new() .on_http(d.deployment_network.rpc_url()) .boxed(); - let mut builder = alloy_ccip_read::CCIPReader::builder() + let builder = alloy_ccip_read::CCIPReader::builder() .with_provider(provider) .with_domain_id_provider(domain_id_provider); - if let Some(registry) = d.protocol.info.registry_contract { - builder = builder.with_ens_address(registry); - } - builder.build().expect("provider passed") } diff --git a/blockscout-ens/bens-server/Cargo.toml b/blockscout-ens/bens-server/Cargo.toml index 8b9ce7224..86f002e48 100644 --- a/blockscout-ens/bens-server/Cargo.toml +++ b/blockscout-ens/bens-server/Cargo.toml @@ -14,7 +14,7 @@ anyhow = "1.0" blockscout-display-bytes = "1.0" blockscout-service-launcher = { workspace = true, features = ["database-0_12"] } config = "0.13" -alloy = "0.1.4" +alloy = { version = "0.5.4", features = ["full"] } serde = "1.0" serde_json = "1.0.96" tokio = { version = "1.23", features = [ "rt-multi-thread", "macros" ] } From 00f3acc71c4f8cf0a6704d41b3d5d95557dd9dae Mon Sep 17 00:00:00 2001 From: sevenzing Date: Fri, 1 Nov 2024 18:30:50 +0100 Subject: [PATCH 03/10] feat: d3 protocol --- blockscout-ens/Cargo.lock | 16 +- blockscout-ens/bens-logic/Cargo.toml | 2 +- .../bens-logic/src/entity/subgraph/domain.rs | 24 + .../bens-logic/src/protocols/domain_name.rs | 29 +- .../bens-logic/src/protocols/mod.rs | 5 +- .../bens-logic/src/protocols/protocoler.rs | 69 +- .../bens-logic/src/subgraph/domain_tokens.rs | 34 +- .../src/subgraph/offchain/ccip_read.rs | 22 + .../src/subgraph/offchain/d3/metadata.rs | 130 + .../src/subgraph/offchain/d3/mod.rs | 12 +- .../src/subgraph/offchain/d3/offchain.rs | 77 + .../src/subgraph/offchain/ens/ccip_read.rs | 57 +- .../src/subgraph/offchain/ens/mod.rs | 1 - .../src/subgraph/offchain/ens/wildcard.rs | 77 +- .../bens-logic/src/subgraph/offchain/mod.rs | 77 +- .../src/subgraph/offchain/resolve.rs | 67 + .../bens-logic/src/subgraph/offchain/types.rs | 54 + .../bens-logic/src/subgraph/patcher.rs | 2 +- .../bens-logic/src/subgraph/reader.rs | 16 +- .../bens-logic/src/subgraph/sql/create.rs | 6 +- .../bens-logic/src/subgraph/sql/domain.rs | 10 +- blockscout-ens/bens-server/config/dev.json | 47 +- blockscout-ens/bens-server/config/prod.json | 104 +- .../bens-server/config/staging.json | 31 +- blockscout-ens/bens-server/src/server.rs | 5 +- blockscout-ens/bens-server/src/settings.rs | 15 +- blockscout-ens/graph-node/config.toml | 6 + .../graph-node/deployer/config.json | 5 + .../subgraph-writer/protocols/d3-connect.yaml | 17 + .../subgraphs/d3-connect-subgraph/.gitignore | 79 + .../subgraphs/d3-connect-subgraph/README.md | 1 + .../d3-connect-subgraph/abis/Registry.json | 1357 +++++++ .../d3-connect-subgraph/networks.json | 16 + .../d3-connect-subgraph/package.json | 21 + .../d3-connect-subgraph/schema.graphql | 451 ++ .../d3-connect-subgraph/src/Registry.ts | 183 + .../d3-connect-subgraph/src/utils.ts | 142 + .../d3-connect-subgraph/subgraph.yaml | 32 + .../d3-connect-subgraph/tests/.latest.json | 4 + .../d3-connect-subgraph/tests/utils.test.ts | 27 + .../d3-connect-subgraph/tsconfig.json | 4 + .../subgraphs/d3-connect-subgraph/yarn.lock | 3612 +++++++++++++++++ 42 files changed, 6647 insertions(+), 299 deletions(-) create mode 100644 blockscout-ens/bens-logic/src/subgraph/offchain/ccip_read.rs create mode 100644 blockscout-ens/bens-logic/src/subgraph/offchain/d3/metadata.rs create mode 100644 blockscout-ens/bens-logic/src/subgraph/offchain/d3/offchain.rs create mode 100644 blockscout-ens/bens-logic/src/subgraph/offchain/resolve.rs create mode 100644 blockscout-ens/bens-logic/src/subgraph/offchain/types.rs create mode 100644 blockscout-ens/graph-node/subgraph-writer/protocols/d3-connect.yaml create mode 100644 blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/.gitignore create mode 100644 blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/README.md create mode 100644 blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/abis/Registry.json create mode 100644 blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/networks.json create mode 100644 blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/package.json create mode 100644 blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/schema.graphql create mode 100644 blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/src/Registry.ts create mode 100644 blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/src/utils.ts create mode 100644 blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/subgraph.yaml create mode 100644 blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/tests/.latest.json create mode 100644 blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/tests/utils.test.ts create mode 100644 blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/tsconfig.json create mode 100644 blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/yarn.lock diff --git a/blockscout-ens/Cargo.lock b/blockscout-ens/Cargo.lock index 358332701..1d8ae86ea 100644 --- a/blockscout-ens/Cargo.lock +++ b/blockscout-ens/Cargo.lock @@ -356,14 +356,15 @@ dependencies = [ [[package]] name = "alloy-ccip-read" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8a6ee642e76c373dfe642c16804faadc30767021118331f1ab20ce3cde189b" +checksum = "c8a1538eca71a796e7e4c2a52cb7fd60287c8b99212de5eca89865f37a9b6761" dependencies = [ "alloy", "anyhow", "async-recursion", "async-trait", + "derive-new", "futures-util", "getrandom 0.2.15", "reqwest 0.12.8", @@ -2185,6 +2186,17 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "derive-new" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cdc8d50f426189eef89dac62fabfa0abb27d5cc008f25bf4156a0203325becc" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.85", +] + [[package]] name = "derive_more" version = "0.99.18" diff --git a/blockscout-ens/bens-logic/Cargo.toml b/blockscout-ens/bens-logic/Cargo.toml index 7cc9c6306..8afd78277 100644 --- a/blockscout-ens/bens-logic/Cargo.toml +++ b/blockscout-ens/bens-logic/Cargo.toml @@ -7,7 +7,7 @@ edition = "2021" [dependencies] tokio = { version = "1.23", features = [ "rt-multi-thread", "macros" ] } -alloy-ccip-read = "0.2.0" +alloy-ccip-read = "0.3.0" anyhow = "1" hex = "0.4" chrono = "0.4" diff --git a/blockscout-ens/bens-logic/src/entity/subgraph/domain.rs b/blockscout-ens/bens-logic/src/entity/subgraph/domain.rs index 23bd7723d..37ecd4999 100644 --- a/blockscout-ens/bens-logic/src/entity/subgraph/domain.rs +++ b/blockscout-ens/bens-logic/src/entity/subgraph/domain.rs @@ -4,6 +4,7 @@ use std::collections::HashMap; #[derive(Debug, Clone, Default, PartialEq, Eq, sqlx::FromRow)] pub struct DetailedDomain { + pub vid: i64, pub id: String, pub name: Option, pub label_name: Option, @@ -18,10 +19,12 @@ pub struct DetailedDomain { pub owner: String, pub registrant: Option, pub wrapped_owner: Option, + pub created_at: BigDecimal, pub expiry_date: Option>, pub is_expired: bool, pub stored_offchain: bool, pub resolved_with_wildcard: bool, + pub protocol_slug: String, #[sqlx(default)] pub other_addresses: sqlx::types::Json>, } @@ -86,3 +89,24 @@ pub struct AddrReverseDomainWithActualName { pub resolved_address: String, pub name: String, } + +impl From for Domain { + fn from(domain: DetailedDomain) -> Self { + Self { + vid: domain.vid, + id: domain.id, + name: domain.name, + resolved_address: domain.resolved_address, + resolver: domain.resolver, + registration_date: domain.registration_date, + owner: domain.owner, + wrapped_owner: domain.wrapped_owner, + created_at: domain.created_at, + expiry_date: domain.expiry_date, + is_expired: domain.is_expired, + protocol_slug: domain.protocol_slug, + stored_offchain: domain.stored_offchain, + resolved_with_wildcard: domain.resolved_with_wildcard, + } + } +} diff --git a/blockscout-ens/bens-logic/src/protocols/domain_name.rs b/blockscout-ens/bens-logic/src/protocols/domain_name.rs index c35e79427..1d3482c95 100644 --- a/blockscout-ens/bens-logic/src/protocols/domain_name.rs +++ b/blockscout-ens/bens-logic/src/protocols/domain_name.rs @@ -1,10 +1,11 @@ -use super::{domain_id, ProtocolError, Tld}; -use crate::protocols::protocoler::DeployedProtocol; +use super::{hash_name::hash_ens_domain_name, ProtocolError, Tld}; +use crate::{hex, protocols::protocoler::DeployedProtocol}; use alloy::primitives::{keccak256, Address, B256}; #[derive(Debug, Clone, PartialEq, Eq)] pub struct DomainName { pub id: String, + pub id_bytes: B256, pub label_name: String, pub name: String, pub empty_label_hash: Option, @@ -17,13 +18,15 @@ impl DomainName { pub fn new(name: &str, empty_label_hash: Option) -> Result { let name = ens_normalize(name)?; let (label_name, _) = name.split_once(SEPARATOR).unwrap_or((&name, "")); - let id = domain_id(&name, empty_label_hash); + let id_bytes = hash_ens_domain_name(&name, empty_label_hash); + let id = hex(id_bytes); let tld = Tld::from_domain_name(&name).ok_or_else(|| ProtocolError::InvalidName { name: name.clone(), reason: "tld not found".to_string(), })?; Ok(Self { id, + id_bytes, label_name: label_name.to_string(), name: name.to_string(), empty_label_hash, @@ -32,18 +35,9 @@ impl DomainName { } pub fn addr_reverse(addr: &Address) -> Self { - // label name is hexed address without 0x prefix let label_name = format!("{:x}", addr); let name = format!("{}.addr.reverse", label_name); - // note that addr.reverse doesn't need empty_label_hash - let id = domain_id(&name, None); - Self { - id, - label_name, - name, - empty_label_hash: None, - tld: Tld::reverse(), - } + Self::new(&name, None).expect("addr.reverse is always valid") } /// Returns true if level of domain is greater than 1 @@ -99,7 +93,14 @@ impl<'a> DomainNameOnProtocol<'a> { name: &str, protocol_network: DeployedProtocol<'a>, ) -> Result { - let name = DomainName::new(name, protocol_network.protocol.info.empty_label_hash)?; + let name = DomainName::new( + name, + protocol_network + .protocol + .info + .protocol_specific + .empty_label_hash(), + )?; Ok(Self::new(name, protocol_network)) } diff --git a/blockscout-ens/bens-logic/src/protocols/mod.rs b/blockscout-ens/bens-logic/src/protocols/mod.rs index 981a14ae3..aac46b698 100644 --- a/blockscout-ens/bens-logic/src/protocols/mod.rs +++ b/blockscout-ens/bens-logic/src/protocols/mod.rs @@ -4,10 +4,7 @@ mod protocoler; pub use domain_name::{DomainName, DomainNameOnProtocol}; pub use hash_name::domain_id; -pub use protocoler::{ - AddressResolveTechnique, DeployedProtocol, Network, OffchainStrategy, Protocol, ProtocolInfo, - ProtocolMeta, Protocoler, Tld, -}; +pub use protocoler::*; #[derive(thiserror::Error, Debug)] pub enum ProtocolError { diff --git a/blockscout-ens/bens-logic/src/protocols/protocoler.rs b/blockscout-ens/bens-logic/src/protocols/protocoler.rs index 4ee5b5d8f..76593ebb6 100644 --- a/blockscout-ens/bens-logic/src/protocols/protocoler.rs +++ b/blockscout-ens/bens-logic/src/protocols/protocoler.rs @@ -54,30 +54,69 @@ pub struct ProtocolInfo { pub tld_list: NonEmpty, pub subgraph_name: String, pub address_resolve_technique: AddressResolveTechnique, - pub empty_label_hash: Option, - pub native_token_contract: Option
, - pub registry_contract: Option
, pub meta: ProtocolMeta, - pub offchain_strategy: OffchainStrategy, + pub protocol_specific: ProtocolSpecific, } -#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)] +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "snake_case")] -pub enum OffchainStrategy { - #[default] - None, - EnsWildcard, - D3Connect, +#[serde(tag = "type")] +pub enum ProtocolSpecific { + EnsLike(EnsLikeProtocol), + D3Connect(D3ConnectProtocol), +} + +impl Default for ProtocolSpecific { + fn default() -> Self { + Self::EnsLike(Default::default()) + } } -impl OffchainStrategy { - pub fn is_none(&self) -> bool { - matches!(self, Self::None) +impl ProtocolSpecific { + pub fn try_offchain_resolve(&self) -> bool { + match self { + ProtocolSpecific::EnsLike(ens) => ens.try_offchain_resolve, + ProtocolSpecific::D3Connect(d3) => !d3.disable_offchain_resolve, + } } - pub fn is_some(&self) -> bool { - !self.is_none() + pub fn empty_label_hash(&self) -> Option { + match self { + ProtocolSpecific::EnsLike(ens) => ens.empty_label_hash, + ProtocolSpecific::D3Connect(_) => None, + } } + + pub fn native_token_contract(&self) -> Option
{ + match self { + ProtocolSpecific::EnsLike(ens) => ens.native_token_contract, + ProtocolSpecific::D3Connect(d3) => Some(d3.native_token_contract), + } + } + + pub fn registry_contract(&self) -> Option
{ + match self { + ProtocolSpecific::EnsLike(ens) => ens.registry_contract, + ProtocolSpecific::D3Connect(_) => None, + } + } +} + +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)] +pub struct EnsLikeProtocol { + pub registry_contract: Option
, + pub empty_label_hash: Option, + pub native_token_contract: Option
, + #[serde(default)] + pub try_offchain_resolve: bool, +} + +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)] +pub struct D3ConnectProtocol { + pub resolver_contract: Address, + pub native_token_contract: Address, + #[serde(default)] + pub disable_offchain_resolve: bool, } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)] diff --git a/blockscout-ens/bens-logic/src/subgraph/domain_tokens.rs b/blockscout-ens/bens-logic/src/subgraph/domain_tokens.rs index a0e92360b..375802f10 100644 --- a/blockscout-ens/bens-logic/src/subgraph/domain_tokens.rs +++ b/blockscout-ens/bens-logic/src/subgraph/domain_tokens.rs @@ -1,5 +1,8 @@ use super::{DomainToken, DomainTokenType}; -use crate::{entity::subgraph::domain::DetailedDomain, protocols::DomainNameOnProtocol}; +use crate::{ + entity::subgraph::domain::DetailedDomain, + protocols::{DomainNameOnProtocol, EnsLikeProtocol, ProtocolSpecific}, +}; use alloy::primitives::Address; use anyhow::Context; use bigdecimal::{num_bigint::BigInt, Num}; @@ -10,7 +13,7 @@ use std::str::FromStr; skip_all, fields( domain_name = domain.name, - native_token_contract = ?name.deployed_protocol.protocol.info.native_token_contract, + protocol_type = ?name.deployed_protocol.protocol.info.protocol_specific, ), err, )] @@ -19,7 +22,26 @@ pub fn extract_tokens_from_domain( name: &DomainNameOnProtocol<'_>, ) -> Result, anyhow::Error> { let mut tokens = vec![]; - if let Some(contract) = name.deployed_protocol.protocol.info.native_token_contract { + + match &name.deployed_protocol.protocol.info.protocol_specific { + ProtocolSpecific::EnsLike(ens_like) => { + extract_tokens_for_ens_like(domain, name, ens_like, &mut tokens)?; + } + ProtocolSpecific::D3Connect(_) => { + // TODO: implement D3Connect tokens extraction + } + } + + Ok(tokens) +} + +fn extract_tokens_for_ens_like( + domain: &DetailedDomain, + name: &DomainNameOnProtocol<'_>, + ens_like: &EnsLikeProtocol, + tokens: &mut Vec, +) -> Result<(), anyhow::Error> { + if let Some(contract) = ens_like.native_token_contract { let is_second_level_domain = name.inner.level() == 2; let is_native_domain = name.tld_is_native(); @@ -50,7 +72,7 @@ pub fn extract_tokens_from_domain( }); }; - Ok(tokens) + Ok(()) } fn token_id(hexed_id: &str) -> Result { @@ -64,7 +86,7 @@ mod tests { use super::*; use crate::{ blockscout::BlockscoutClient, - protocols::{DeployedProtocol, Network, Protocol, Tld}, + protocols::{DeployedProtocol, EnsLikeProtocol, Network, Protocol, Tld}, }; use nonempty::nonempty; use pretty_assertions::assert_eq; @@ -182,7 +204,7 @@ mod tests { ] { let mut protocol = Protocol::default(); protocol.info.tld_list = nonempty![Tld::new("eth")]; - protocol.info.native_token_contract = native_token_contract; + protocol.info.protocol_specific = ProtocolSpecific::EnsLike(EnsLikeProtocol { native_token_contract, ..Default::default() }); let deployed_protocol = DeployedProtocol { protocol: &protocol, deployment_network: &Network { diff --git a/blockscout-ens/bens-logic/src/subgraph/offchain/ccip_read.rs b/blockscout-ens/bens-logic/src/subgraph/offchain/ccip_read.rs new file mode 100644 index 000000000..03733e2de --- /dev/null +++ b/blockscout-ens/bens-logic/src/subgraph/offchain/ccip_read.rs @@ -0,0 +1,22 @@ +use crate::protocols::{hash_name::CustomDomainIdGenerator, DeployedProtocol}; +use alloy::{ + providers::{ProviderBuilder, RootProvider}, + transports::BoxTransport, +}; +use alloy_ccip_read::CCIPReader; + +pub type Reader = CCIPReader, CustomDomainIdGenerator>; + +pub fn reader_from_protocol(d: &DeployedProtocol) -> Reader { + let domain_id_provider = + CustomDomainIdGenerator::new(d.protocol.info.protocol_specific.empty_label_hash()); + + let provider = ProviderBuilder::new() + .on_http(d.deployment_network.rpc_url()) + .boxed(); + let builder = alloy_ccip_read::CCIPReader::builder() + .with_provider(provider) + .with_domain_id_provider(domain_id_provider); + + builder.build().expect("provider passed") +} diff --git a/blockscout-ens/bens-logic/src/subgraph/offchain/d3/metadata.rs b/blockscout-ens/bens-logic/src/subgraph/offchain/d3/metadata.rs new file mode 100644 index 000000000..dd0582b9f --- /dev/null +++ b/blockscout-ens/bens-logic/src/subgraph/offchain/d3/metadata.rs @@ -0,0 +1,130 @@ +use crate::{ + protocols::{D3ConnectProtocol, DomainNameOnProtocol}, + subgraph::offchain::Reader, +}; +use alloy::sol; +use chrono::{DateTime, Utc}; +use serde::Deserialize; + +sol! { + // SPDX-License-Identifier: MIT + // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/IERC721Metadata.sol) + + pragma solidity ^0.8.20; + + import {IERC721} from "../IERC721.sol"; + + /** + * @title ERC-721 Non-Fungible Token Standard, optional metadata extension + * @dev See https://eips.ethereum.org/EIPS/eip-721 + */ + interface IERC721Metadata is IERC721 { + /** + * @dev Returns the token collection name. + */ + function name() external view returns (string memory); + + /** + * @dev Returns the token collection symbol. + */ + function symbol() external view returns (string memory); + + /** + * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. + */ + function tokenURI(uint256 tokenId) external view returns (string memory); + } +} + +#[derive(Debug, Deserialize)] +pub struct D3NameMetadata { + #[allow(dead_code)] + pub name: String, + #[serde(default)] + pub attributes: Vec, +} + +#[derive(Debug, Deserialize)] +pub struct D3NameAttribute { + pub trait_type: String, + pub value: serde_json::Value, + #[serde(default)] + #[allow(dead_code)] + pub display_type: Option, +} + +pub async fn get_metadata( + reader: &Reader, + name: &DomainNameOnProtocol<'_>, + d3: &D3ConnectProtocol, +) -> Result { + let call = IERC721Metadata::tokenURICall { + tokenId: name.inner.id_bytes.into(), + }; + let uri = reader + .call_ccip_solidity_method(d3.native_token_contract, call) + .await? + .into_value() + ._0; + let metadata = reqwest::get(uri).await?.json::().await?; + Ok(metadata) +} + +impl D3NameMetadata { + pub fn get_attribute(&self, trait_type: &str) -> Option<&D3NameAttribute> { + self.attributes + .iter() + .find(|attr| attr.trait_type == trait_type) + } + + pub fn get_value(&self, trait_type: &str) -> Option<&serde_json::Value> { + self.get_attribute(trait_type).map(|attr| &attr.value) + } + + // Parse expiration date from "Expiration Date" attribute as timestamp + pub fn get_expiration_date(&self) -> Option> { + self.get_value("Expiration Date").and_then(parse_timestamp) + } +} + +fn parse_timestamp(value: &serde_json::Value) -> Option> { + match value { + serde_json::Value::Number(num) => num + .as_i64() + .and_then(|timestamp| DateTime::from_timestamp(timestamp, 0)), + serde_json::Value::String(s) => s + .parse::() + .ok() + .and_then(|timestamp| DateTime::from_timestamp(timestamp, 0)), + _ => None, + } +} + +#[cfg(test)] +mod tests { + use super::*; + use pretty_assertions::assert_eq; + + #[test] + fn it_works() { + let content = r#" + { + "attributes": [ + { + "display_type": "date", + "trait_type": "Expiration Date", + "value": 1761696000 + } + ], + "description": "Futureproof, Interoperable Digital Identities with D3.", + "image": "https://cdn.d3.app/tokens/24894092657704973579132373869140463995882457799934966181909516953102602684545.png?hash=IMAQuhDJ9xXBtwG8AtDViyZQehj7BbGcaC6xk2V9sy4%3D", + "name": "d3testbscout1*shib" + } + "#; + let metadata: D3NameMetadata = serde_json::from_str(content).unwrap(); + let expected = DateTime::parse_from_rfc3339("2025-10-29T00:00:00Z") + .unwrap() + .to_utc(); + assert_eq!(metadata.get_expiration_date(), Some(expected)); + } +} diff --git a/blockscout-ens/bens-logic/src/subgraph/offchain/d3/mod.rs b/blockscout-ens/bens-logic/src/subgraph/offchain/d3/mod.rs index 52da3c1e5..91fdcc3f8 100644 --- a/blockscout-ens/bens-logic/src/subgraph/offchain/d3/mod.rs +++ b/blockscout-ens/bens-logic/src/subgraph/offchain/d3/mod.rs @@ -1,9 +1,5 @@ -use crate::{entity::subgraph::domain::CreationDomain, protocols::DomainNameOnProtocol}; -use sqlx::PgPool; +mod metadata; +mod offchain; -pub async fn maybe_offchain_resolution( - _db: &PgPool, - _from_user: &DomainNameOnProtocol<'_>, -) -> Option { - None -} +pub use metadata::get_metadata; +pub use offchain::maybe_offchain_resolution; diff --git a/blockscout-ens/bens-logic/src/subgraph/offchain/d3/offchain.rs b/blockscout-ens/bens-logic/src/subgraph/offchain/d3/offchain.rs new file mode 100644 index 000000000..afa78b455 --- /dev/null +++ b/blockscout-ens/bens-logic/src/subgraph/offchain/d3/offchain.rs @@ -0,0 +1,77 @@ +use super::get_metadata; +use crate::{ + entity::subgraph::domain::{CreationDomain, Domain}, + protocols::{D3ConnectProtocol, DomainNameOnProtocol}, + subgraph::{ + self, + offchain::{ + creation_domain_from_offchain_resolution, reader_from_protocol, + DomainInfoFromOffchainResolution, Reader, + }, + ResolverInSubgraph, + }, +}; +use alloy::primitives::Address; +use sqlx::PgPool; +use std::str::FromStr; + +pub async fn maybe_offchain_resolution( + db: &PgPool, + name: &DomainNameOnProtocol<'_>, + d3: &D3ConnectProtocol, +) -> Option { + resolve_d3_name(db, name, d3).await.ok() +} + +async fn resolve_d3_name( + db: &PgPool, + name: &DomainNameOnProtocol<'_>, + d3: &D3ConnectProtocol, +) -> Result { + let reader = reader_from_protocol(&name.deployed_protocol); + + let default_resolver = d3.resolver_contract; + + let (resolver_address, maybe_existing_domain) = + match subgraph::sql::get_domain(db, name, true).await? { + Some(detailed_domain) => { + let domain = Domain::from(detailed_domain); + let resolver = domain + .resolver + .as_ref() + .and_then(|r| ResolverInSubgraph::from_str(r).ok()) + .map(|r| r.resolver_address) + .unwrap_or(default_resolver); + (resolver, Some(domain)) + } + None => (default_resolver, None), + }; + + let offchain_resolution = get_offchain_resolution(&reader, resolver_address, name, d3).await?; + tracing::debug!(data =? offchain_resolution, "fetched offchain resolution"); + let creation_domain = + creation_domain_from_offchain_resolution(name, offchain_resolution, maybe_existing_domain); + Ok(creation_domain) +} + +async fn get_offchain_resolution( + reader: &Reader, + resolver_address: Address, + name: &DomainNameOnProtocol<'_>, + d3: &D3ConnectProtocol, +) -> Result { + let resolve_result = + alloy_ccip_read::d3::resolve_d3_name(reader, resolver_address, &name.inner.name, "") + .await?; + let metadata = get_metadata(reader, name, d3).await?; + let expiry_date = metadata.get_expiration_date(); + Ok(DomainInfoFromOffchainResolution { + id: name.inner.id.clone(), + name: name.inner.name.clone(), + addr: resolve_result.addr.into_value(), + resolver_address, + expiry_date, + stored_offchain: true, + resolved_with_wildcard: false, + }) +} diff --git a/blockscout-ens/bens-logic/src/subgraph/offchain/ens/ccip_read.rs b/blockscout-ens/bens-logic/src/subgraph/offchain/ens/ccip_read.rs index 88d1608e3..247ec5881 100644 --- a/blockscout-ens/bens-logic/src/subgraph/offchain/ens/ccip_read.rs +++ b/blockscout-ens/bens-logic/src/subgraph/offchain/ens/ccip_read.rs @@ -1,25 +1,11 @@ -use crate::protocols::{ - hash_name::CustomDomainIdGenerator, DeployedProtocol, DomainNameOnProtocol, +use crate::{ + protocols::{DomainNameOnProtocol, EnsLikeProtocol}, + subgraph::offchain::{ccip_read::reader_from_protocol, DomainInfoFromOffchainResolution}, }; -use alloy::{ - primitives::Address, - providers::{ProviderBuilder, RootProvider}, - transports::BoxTransport, -}; -use alloy_ccip_read::CCIPReader; +use alloy::primitives::Address; use anyhow::Context; use tracing::instrument; -#[derive(Debug, Clone)] -pub struct DomainInfoFromCcipRead { - pub id: String, - pub name: String, - pub addr: Address, - pub resolver_address: Address, - pub stored_offchain: bool, - pub resolved_with_wildcard: bool, -} - #[instrument( skip_all, fields(name = %name.inner.name, resolver = %resolver_address), @@ -29,7 +15,7 @@ pub struct DomainInfoFromCcipRead { pub async fn call_to_resolver( name: &DomainNameOnProtocol<'_>, resolver_address: Address, -) -> Result { +) -> Result { let name_str = &name.inner.name; let reader = reader_from_protocol(&name.deployed_protocol); let result = @@ -37,13 +23,14 @@ pub async fn call_to_resolver( .await .context("perform ccip call to with resolver")?; - Ok(DomainInfoFromCcipRead { + Ok(DomainInfoFromOffchainResolution { id: name.inner.id.clone(), addr: result.addr.value, resolver_address, name: name.inner.name.clone(), stored_offchain: result.ccip_read_used, resolved_with_wildcard: result.wildcard_used, + expiry_date: None, }) } @@ -53,28 +40,12 @@ pub async fn call_to_resolver( ret(level = "DEBUG"), level = "INFO", )] -pub async fn get_resolver(name: &DomainNameOnProtocol<'_>) -> Result { +pub async fn get_resolver( + name: &DomainNameOnProtocol<'_>, + ens: &EnsLikeProtocol, +) -> Result { let reader = reader_from_protocol(&name.deployed_protocol); - alloy_ccip_read::ens::get_resolver_wildcarded( - &reader, - name.deployed_protocol.protocol.info.registry_contract, - &name.inner.name, - ) - .await - .context("get resolver") -} - -type Reader = CCIPReader, CustomDomainIdGenerator>; - -fn reader_from_protocol(d: &DeployedProtocol) -> Reader { - let domain_id_provider = CustomDomainIdGenerator::new(d.protocol.info.empty_label_hash); - - let provider = ProviderBuilder::new() - .on_http(d.deployment_network.rpc_url()) - .boxed(); - let builder = alloy_ccip_read::CCIPReader::builder() - .with_provider(provider) - .with_domain_id_provider(domain_id_provider); - - builder.build().expect("provider passed") + alloy_ccip_read::ens::get_resolver_wildcarded(&reader, ens.registry_contract, &name.inner.name) + .await + .context("get resolver") } diff --git a/blockscout-ens/bens-logic/src/subgraph/offchain/ens/mod.rs b/blockscout-ens/bens-logic/src/subgraph/offchain/ens/mod.rs index 1b338e56c..4e029d9f2 100644 --- a/blockscout-ens/bens-logic/src/subgraph/offchain/ens/mod.rs +++ b/blockscout-ens/bens-logic/src/subgraph/offchain/ens/mod.rs @@ -1,5 +1,4 @@ mod ccip_read; mod wildcard; -pub use ccip_read::*; pub use wildcard::*; diff --git a/blockscout-ens/bens-logic/src/subgraph/offchain/ens/wildcard.rs b/blockscout-ens/bens-logic/src/subgraph/offchain/ens/wildcard.rs index 0fbf79ba0..45d70f55d 100644 --- a/blockscout-ens/bens-logic/src/subgraph/offchain/ens/wildcard.rs +++ b/blockscout-ens/bens-logic/src/subgraph/offchain/ens/wildcard.rs @@ -1,14 +1,12 @@ -use super::{ccip_read, DomainInfoFromCcipRead}; +use super::ccip_read; use crate::{ entity::subgraph::domain::{CreationDomain, Domain}, - protocols::DomainNameOnProtocol, - subgraph, - subgraph::ResolverInSubgraph, + metrics, + protocols::{DomainNameOnProtocol, EnsLikeProtocol}, + subgraph::{self, offchain::creation_domain_from_offchain_resolution, ResolverInSubgraph}, }; use alloy::primitives::Address; use anyhow::Context; - -use crate::metrics; use sqlx::PgPool; use std::str::FromStr; @@ -18,9 +16,10 @@ use std::str::FromStr; pub async fn maybe_wildcard_resolution( db: &PgPool, from_user: &DomainNameOnProtocol<'_>, + ens: &EnsLikeProtocol, ) -> Option { metrics::WILDCARD_RESOLVE_ATTEMPTS.inc(); - match try_wildcard_resolution(db, from_user).await { + match try_wildcard_resolution(db, from_user, ens).await { Ok(result) => { if result.is_some() { metrics::WILDCARD_RESOLVE_SUCCESS.inc(); @@ -41,8 +40,10 @@ pub async fn maybe_wildcard_resolution( async fn try_wildcard_resolution( db: &PgPool, from_user: &DomainNameOnProtocol<'_>, + ens: &EnsLikeProtocol, ) -> Result, anyhow::Error> { - let Some((resolver_address, maybe_existing_domain)) = any_resolver(db, from_user).await? else { + let Some((resolver_address, maybe_existing_domain)) = any_resolver(db, from_user, ens).await? + else { return Ok(None); }; let result = ccip_read::call_to_resolver(from_user, resolver_address) @@ -56,7 +57,7 @@ async fn try_wildcard_resolution( None } }); - Ok(Some(creation_domain_from_rpc_resolution( + Ok(Some(creation_domain_from_offchain_resolution( from_user, result, maybe_domain_to_update, @@ -69,8 +70,8 @@ async fn try_wildcard_resolution( async fn any_resolver( db: &PgPool, from_user: &DomainNameOnProtocol<'_>, + ens: &EnsLikeProtocol, ) -> Result)>, anyhow::Error> { - let protocol = from_user.deployed_protocol.protocol; let name_options = from_user .inner .iter_parents_with_self() @@ -80,10 +81,10 @@ async fn any_resolver( let maybe_domain_with_resolver = any_resolver_in_db(db, name_options.clone()).await?; if let Some((resolver, found_domain)) = maybe_domain_with_resolver { return Ok(Some((resolver.resolver_address, Some(found_domain)))); - } else if protocol.info.registry_contract.is_some() { + } else if ens.registry_contract.is_some() { // try to find resolver on chain. // if custom registry is set, we can try to find resolver in registry - if let Some(resolver_address) = any_resolver_rpc(name_options).await { + if let Some(resolver_address) = any_resolver_rpc(name_options, ens).await { return Ok(Some((resolver_address, None))); } }; @@ -91,6 +92,19 @@ async fn any_resolver( Ok(None) } +async fn any_resolver_rpc( + names: Vec>, + ens: &EnsLikeProtocol, +) -> Option
{ + for name in names { + let resolver = ccip_read::get_resolver(&name, ens).await.ok()?; + if !resolver.is_zero() { + return Some(resolver); + } + } + None +} + async fn any_resolver_in_db( db: &PgPool, names: Vec>, @@ -120,42 +134,3 @@ async fn any_resolver_in_db( } Ok(None) } - -async fn any_resolver_rpc(names: Vec>) -> Option
{ - for name in names { - let resolver = ccip_read::get_resolver(&name).await.ok()?; - if !resolver.is_zero() { - return Some(resolver); - } - } - None -} -fn creation_domain_from_rpc_resolution( - from_user: &DomainNameOnProtocol<'_>, - ccip_read_info: DomainInfoFromCcipRead, - maybe_existing_domain: Option, -) -> CreationDomain { - let parent = from_user.inner.iter_parents_with_self().nth(1); - let resolver = - ResolverInSubgraph::new(ccip_read_info.resolver_address, ccip_read_info.id.clone()); - let now = chrono::Utc::now(); - CreationDomain { - vid: maybe_existing_domain.map(|d| d.vid), - id: ccip_read_info.id, - name: Some(ccip_read_info.name), - label_name: Some(from_user.inner.label_name.clone()), - labelhash: Some(from_user.inner.labelhash().to_vec()), - parent: parent.map(|p| p.id), - subdomain_count: 0, - resolved_address: Some(ccip_read_info.addr.to_string().to_lowercase()), - resolver: Some(resolver.to_string()), - is_migrated: true, - stored_offchain: ccip_read_info.stored_offchain, - resolved_with_wildcard: ccip_read_info.resolved_with_wildcard, - created_at: now.timestamp().into(), - owner: Address::ZERO.to_string(), - wrapped_owner: None, - expiry_date: None, - is_expired: false, - } -} diff --git a/blockscout-ens/bens-logic/src/subgraph/offchain/mod.rs b/blockscout-ens/bens-logic/src/subgraph/offchain/mod.rs index e302a6666..4317e40dd 100644 --- a/blockscout-ens/bens-logic/src/subgraph/offchain/mod.rs +++ b/blockscout-ens/bens-logic/src/subgraph/offchain/mod.rs @@ -1,68 +1,9 @@ -mod d3; -mod ens; - -use super::sql; -use crate::{ - entity::subgraph::domain::CreationDomain, - protocols::{DomainNameOnProtocol, OffchainStrategy}, -}; -use cached::proc_macro::cached; -use sqlx::PgPool; - -pub async fn offchain_resolve( - db: &PgPool, - from_user: &DomainNameOnProtocol<'_>, -) -> Result<(), anyhow::Error> { - let protocol = from_user.deployed_protocol.protocol; - let maybe_domain_cached = check_if_need_to_save_domain_cached(db, from_user).await; - match maybe_domain_cached { - cached::Return { - value: Some(domain), - was_cached: false, - .. - } => { - tracing::info!( - id = domain.id, - name = domain.name, - vid =? domain.vid, - "found domain with offchain resolution, save it" - ); - sql::create_or_update_domain(db, domain, protocol).await?; - } - cached::Return { - was_cached: true, .. - } => { - tracing::debug!( - name = from_user.inner.name, - "domain was cached by ram cache, skip it" - ); - } - cached::Return { value: None, .. } => { - tracing::debug!("domain not found with wildcard resolution"); - } - }; - Ok(()) -} - -#[cached( - key = "String", - convert = r#"{ - format!("{}-{}", from_user.deployed_protocol.protocol.info.slug, from_user.inner.id) - }"#, - time = 14400, // 4 * 60 * 60 seconds = 4 hours - size = 500, - sync_writes = true, - with_cached_flag = true, -)] -async fn check_if_need_to_save_domain_cached( - db: &PgPool, - from_user: &DomainNameOnProtocol<'_>, -) -> cached::Return> { - let result = match from_user.deployed_protocol.protocol.info.offchain_strategy { - OffchainStrategy::EnsWildcard => ens::maybe_wildcard_resolution(db, from_user).await, - OffchainStrategy::D3Connect => d3::maybe_offchain_resolution(db, from_user).await, - _ => None, - }; - - cached::Return::new(result) -} +mod ccip_read; +pub(crate) mod d3; +pub(crate) mod ens; +mod resolve; +mod types; + +pub(crate) use ccip_read::{reader_from_protocol, Reader}; +pub use resolve::offchain_resolve; +pub use types::*; diff --git a/blockscout-ens/bens-logic/src/subgraph/offchain/resolve.rs b/blockscout-ens/bens-logic/src/subgraph/offchain/resolve.rs new file mode 100644 index 000000000..f4a5e093c --- /dev/null +++ b/blockscout-ens/bens-logic/src/subgraph/offchain/resolve.rs @@ -0,0 +1,67 @@ +use crate::{ + entity::subgraph::domain::CreationDomain, + protocols::{DomainNameOnProtocol, ProtocolSpecific}, + subgraph::{ + offchain::{d3, ens}, + sql, + }, +}; +use cached::proc_macro::cached; +use sqlx::PgPool; + +pub async fn offchain_resolve( + db: &PgPool, + from_user: &DomainNameOnProtocol<'_>, +) -> Result<(), anyhow::Error> { + let protocol = from_user.deployed_protocol.protocol; + let maybe_domain_cached = check_if_need_to_save_domain_cached(db, from_user).await; + match maybe_domain_cached { + cached::Return { + value: Some(domain), + was_cached: false, + .. + } => { + tracing::info!( + id = domain.id, + name = domain.name, + vid =? domain.vid, + "found domain with offchain resolution, save it" + ); + sql::create_or_update_domain(db, domain, protocol).await?; + } + cached::Return { + was_cached: true, .. + } => { + tracing::debug!( + name = from_user.inner.name, + "domain was cached by ram cache, skip it" + ); + } + cached::Return { value: None, .. } => { + tracing::debug!("domain not found with wildcard resolution"); + } + }; + Ok(()) +} + +#[cached( + key = "String", + convert = r#"{ + format!("{}-{}", from_user.deployed_protocol.protocol.info.slug, from_user.inner.id) + }"#, + time = 14400, // 4 * 60 * 60 seconds = 4 hours + size = 500, + sync_writes = true, + with_cached_flag = true, +)] +async fn check_if_need_to_save_domain_cached( + db: &PgPool, + from_user: &DomainNameOnProtocol<'_>, +) -> cached::Return> { + let result = match &from_user.deployed_protocol.protocol.info.protocol_specific { + ProtocolSpecific::EnsLike(ens) => ens::maybe_wildcard_resolution(db, from_user, ens).await, + ProtocolSpecific::D3Connect(d3) => d3::maybe_offchain_resolution(db, from_user, d3).await, + }; + + cached::Return::new(result) +} diff --git a/blockscout-ens/bens-logic/src/subgraph/offchain/types.rs b/blockscout-ens/bens-logic/src/subgraph/offchain/types.rs new file mode 100644 index 000000000..ef4be8b83 --- /dev/null +++ b/blockscout-ens/bens-logic/src/subgraph/offchain/types.rs @@ -0,0 +1,54 @@ +use alloy::primitives::Address; +use chrono::{DateTime, Utc}; + +use crate::{ + entity::subgraph::domain::{CreationDomain, Domain}, + protocols::DomainNameOnProtocol, + subgraph::ResolverInSubgraph, +}; + +#[derive(Debug, Clone)] +pub struct DomainInfoFromOffchainResolution { + pub id: String, + pub name: String, + pub addr: Address, + pub resolver_address: Address, + pub stored_offchain: bool, + pub resolved_with_wildcard: bool, + pub expiry_date: Option>, +} + +pub fn creation_domain_from_offchain_resolution( + from_user: &DomainNameOnProtocol<'_>, + ccip_read_info: DomainInfoFromOffchainResolution, + maybe_existing_domain: Option, +) -> CreationDomain { + let parent = from_user.inner.iter_parents_with_self().nth(1); + let resolver = + ResolverInSubgraph::new(ccip_read_info.resolver_address, ccip_read_info.id.clone()); + let now = chrono::Utc::now(); + + let resolved_address = match ccip_read_info.addr { + Address::ZERO => None, + addr => Some(addr.to_string().to_lowercase()), + }; + CreationDomain { + vid: maybe_existing_domain.map(|d| d.vid), + id: ccip_read_info.id, + name: Some(ccip_read_info.name), + label_name: Some(from_user.inner.label_name.clone()), + labelhash: Some(from_user.inner.labelhash().to_vec()), + parent: parent.map(|p| p.id), + subdomain_count: 0, + resolved_address, + resolver: Some(resolver.to_string()), + is_migrated: true, + stored_offchain: ccip_read_info.stored_offchain, + resolved_with_wildcard: ccip_read_info.resolved_with_wildcard, + created_at: now.timestamp().into(), + owner: Address::ZERO.to_string(), + wrapped_owner: None, + expiry_date: ccip_read_info.expiry_date.map(|d| d.timestamp().into()), + is_expired: false, + } +} diff --git a/blockscout-ens/bens-logic/src/subgraph/patcher.rs b/blockscout-ens/bens-logic/src/subgraph/patcher.rs index 201db4b6b..75ea28580 100644 --- a/blockscout-ens/bens-logic/src/subgraph/patcher.rs +++ b/blockscout-ens/bens-logic/src/subgraph/patcher.rs @@ -32,7 +32,7 @@ impl SubgraphPatcher { let level = from_user.inner.level(); let range = 2..=MAX_LEVEL; let level_is_fine = range.contains(&level); - if protocol.info.offchain_strategy.is_some() && level_is_fine { + if protocol.info.protocol_specific.try_offchain_resolve() && level_is_fine { let _lock = self.offchain_mutex.lock().await; offchain_resolve(db, from_user).await? }; diff --git a/blockscout-ens/bens-logic/src/subgraph/reader.rs b/blockscout-ens/bens-logic/src/subgraph/reader.rs index ebdf95e9a..fb4262494 100644 --- a/blockscout-ens/bens-logic/src/subgraph/reader.rs +++ b/blockscout-ens/bens-logic/src/subgraph/reader.rs @@ -208,7 +208,7 @@ impl SubgraphReader { .handle_user_domain_names(self.pool.as_ref(), &name) .await?; let maybe_domain: Option = - sql::get_domain(self.pool.as_ref(), &name, &input).await?; + sql::get_domain(self.pool.as_ref(), &name, input.only_active).await?; if let Some(domain) = maybe_domain { let domain = self .patcher @@ -848,12 +848,7 @@ mod tests { reader.pool.as_ref(), &DomainNameOnProtocol::from_str(unresolved, protocol) .expect("unresolved name is valid"), - &GetDomainInput { - network_id: DEFAULT_CHAIN_ID, - name: unresolved.to_string(), - only_active: false, - protocol_id: None, - }, + false, ) .await .expect("failed to get domain") @@ -885,12 +880,7 @@ mod tests { reader.pool.as_ref(), &DomainNameOnProtocol::from_str(unresolved, protocol) .expect("unresolved name is valid"), - &GetDomainInput { - network_id: DEFAULT_CHAIN_ID, - name: unresolved.to_string(), - only_active: false, - protocol_id: None, - }, + false, ) .await .expect("failed to get domain") diff --git a/blockscout-ens/bens-logic/src/subgraph/sql/create.rs b/blockscout-ens/bens-logic/src/subgraph/sql/create.rs index d5ab45527..1e82ece79 100644 --- a/blockscout-ens/bens-logic/src/subgraph/sql/create.rs +++ b/blockscout-ens/bens-logic/src/subgraph/sql/create.rs @@ -71,13 +71,15 @@ async fn update_domain( SET resolved_address = $1, stored_offchain = $2, - resolved_with_wildcard = $3 - WHERE vid = $4 + resolved_with_wildcard = $3, + expiry_date = $4 + WHERE vid = $5 "# )) .bind(&domain.resolved_address) .bind(domain.stored_offchain) .bind(domain.resolved_with_wildcard) + .bind(&domain.expiry_date) .bind(vid) .execute(pool) .await?; diff --git a/blockscout-ens/bens-logic/src/subgraph/sql/domain.rs b/blockscout-ens/bens-logic/src/subgraph/sql/domain.rs index 9e925a20f..be14016f0 100644 --- a/blockscout-ens/bens-logic/src/subgraph/sql/domain.rs +++ b/blockscout-ens/bens-logic/src/subgraph/sql/domain.rs @@ -3,7 +3,7 @@ use crate::{ protocols::{hash_name::hex, DomainNameOnProtocol, Protocol}, subgraph::{ sql::{utils, DbErr}, - DomainPaginationInput, GetDomainInput, LookupAddressInput, + DomainPaginationInput, LookupAddressInput, }, }; use alloy::primitives::Address; @@ -81,6 +81,7 @@ to_timestamp(ttl) as ttl, is_migrated, stored_offchain, resolved_with_wildcard, +created_at, to_timestamp(created_at) as registration_date, owner, registrant, @@ -132,18 +133,19 @@ pub const DOMAIN_NOT_EXPIRED_WHERE_CLAUSE: &str = r#" pub async fn get_domain( pool: &PgPool, domain_name: &DomainNameOnProtocol<'_>, - input: &GetDomainInput, + only_active: bool, ) -> Result, DbErr> { - let only_active_clause = input - .only_active + let only_active_clause = only_active .then(|| format!("AND {DOMAIN_NOT_EXPIRED_WHERE_CLAUSE}")) .unwrap_or_default(); let schema = &domain_name.deployed_protocol.protocol.subgraph_schema; + let protocol_slug = &domain_name.deployed_protocol.protocol.info.slug; let maybe_domain = sqlx::query_as(&format!( r#" SELECT {DETAILED_DOMAIN_DEFAULT_SELECT_CLAUSE}, '{schema}' as schema_name, + '{protocol_slug}' as protocol_slug, COALESCE( multi_coin_addresses.coin_to_addr, '{{}}'::json diff --git a/blockscout-ens/bens-server/config/dev.json b/blockscout-ens/bens-server/config/dev.json index 1819d71f7..a7a489713 100644 --- a/blockscout-ens/bens-server/config/dev.json +++ b/blockscout-ens/bens-server/config/dev.json @@ -17,6 +17,15 @@ "use_protocols": [ "ens-sepolia" ] + }, + "109": { + "blockscout": { + "url": "https://shibariumscan.io" + }, + "use_protocols": [ + "d3_connect" + ], + "rpc_url": "https://www.shibrpc.com" } }, "protocols": { @@ -26,8 +35,6 @@ ], "network_id": 1, "subgraph_name": "ens-subgraph", - "address_resolve_technique": "reverse_registry", - "native_token_contract": "0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85", "meta": { "short_name": "ENS", "title": "Ethereum Name Service", @@ -35,15 +42,25 @@ "icon_url": "https://i.imgur.com/GOfUwCb.jpeg", "docs_url": "https://docs.ens.domains/" }, - "offchain_strategy": "ens", - "registry_contract": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e" + "specific": { + "type": "ens_like", + "address_resolve_technique": "reverse_registry", + "native_token_contract": "0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85", + "registry_contract": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e", + "try_offchain_resolve": true + } }, "ens-sepolia": { "tld_list": ["eth"], "network_id": 11155111, "subgraph_name": "ens-sepolia-subgraph", - "address_resolve_technique": "reverse_registry", - "native_token_contract": "0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85", + "specific": { + "type": "ens_like", + "address_resolve_technique": "reverse_registry", + "native_token_contract": "0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85", + "registry_contract": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e", + "try_offchain_resolve": true + }, "meta": { "short_name": "ENS (Testnet)", "title": "Ethereum Name Service (Testnet)", @@ -51,6 +68,24 @@ "icon_url": "https://i.imgur.com/GOfUwCb.jpeg", "docs_url": "https://docs.ens.domains/" } + }, + "d3_connect": { + "tld_list": ["shib"], + "network_id": 109, + "subgraph_name": "d3-connect-shib-subgraph", + "specific": { + "type": "d3_connect", + "address_resolve_technique": "reverse_registry", + "native_token_contract": "0xDe74799371Ceac11A0F52BA2694392A391D0dA18", + "resolver_contract": "0xD60D40674E678F0089736D6381071973a75B4B6f" + }, + "meta": { + "short_name": "D3 Connect", + "title": "D3 Connect", + "description": "D3 Connect is a platform for connecting to the Shibarium network.", + "icon_url": "https://i.imgur.com/cD6VIXk.png", + "docs_url": "https://docs.d3.app/" + } } } } diff --git a/blockscout-ens/bens-server/config/prod.json b/blockscout-ens/bens-server/config/prod.json index e51550d8a..a2c6a712a 100644 --- a/blockscout-ens/bens-server/config/prod.json +++ b/blockscout-ens/bens-server/config/prod.json @@ -6,17 +6,13 @@ "blockscout": { "url": "https://eth.blockscout.com" }, - "use_protocols": [ - "ens" - ] + "use_protocols": ["ens"] }, "10": { "blockscout": { "url": "https://optimism.blockscout.com/" }, - "use_protocols": [ - "ens" - ] + "use_protocols": ["ens"] }, "30": { "blockscout": { @@ -146,24 +142,30 @@ ], "network_id": 1, "subgraph_name": "ens-subgraph", - "address_resolve_technique": "reverse_registry", - "native_token_contract": "0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85", + "specific": { + "type": "ens_like", + "registry_contract": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e", + "native_token_contract": "0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85", + "address_resolve_technique": "reverse_registry", + "try_offchain_resolve": true + }, "meta": { "short_name": "ENS", "title": "Ethereum Name Service", "description": "The Ethereum Name Service (ENS) is a distributed, open, and extensible naming system based on the Ethereum blockchain.", "icon_url": "https://i.imgur.com/GOfUwCb.jpeg", "docs_url": "https://docs.ens.domains/" - }, - "offchain_strategy": "ens", - "registry_contract": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e" + } }, "ens-sepolia": { "tld_list": ["eth"], "network_id": 11155111, "subgraph_name": "ens-sepolia-subgraph", - "address_resolve_technique": "reverse_registry", - "native_token_contract": "0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85", + "specific": { + "type": "ens_like", + "native_token_contract": "0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85", + "address_resolve_technique": "reverse_registry" + }, "meta": { "short_name": "ENS (Testnet)", "title": "Ethereum Name Service (Testnet)", @@ -178,9 +180,12 @@ ], "network_id": 100, "subgraph_name": "genome-subgraph", - "address_resolve_technique": "reverse_registry", - "empty_label_hash": "0xc4a8c56f9b0096f720f38bd557d30306dbd78f7751d277e05f062d1b85912a63", - "native_token_contract": "0x942fcaf68a0c264d5447b03a2011b395a899f2d3", + "specific": { + "type": "ens_like", + "address_resolve_technique": "reverse_registry", + "empty_label_hash": "0xc4a8c56f9b0096f720f38bd557d30306dbd78f7751d277e05f062d1b85912a63", + "native_token_contract": "0x942fcaf68a0c264d5447b03a2011b395a899f2d3" + }, "meta": { "short_name": "Genome", "title": "Genome Domains", @@ -193,9 +198,12 @@ "tld_list": ["gno"], "network_id": 10200, "subgraph_name": "genome-chiado-subgraph", - "address_resolve_technique": "reverse_registry", - "empty_label_hash": "0x1a13b687a5ff1d8ab1a9e189e1507a6abe834a9296cc8cff937905e3dee0c4f6", - "native_token_contract": "0xfd3d666dB2557983F3F04d61f90E35cc696f6D60", + "specific": { + "type": "ens_like", + "address_resolve_technique": "reverse_registry", + "empty_label_hash": "0x1a13b687a5ff1d8ab1a9e189e1507a6abe834a9296cc8cff937905e3dee0c4f6", + "native_token_contract": "0xfd3d666dB2557983F3F04d61f90E35cc696f6D60" + }, "meta": { "short_name": "Genome (Testnet)", "title": "Genome Domains (Testnet)", @@ -210,8 +218,11 @@ ], "network_id": 30, "subgraph_name": "rns-subgraph", - "address_resolve_technique": "all_domains", - "native_token_contract": "0x45d3E4fB311982a06ba52359d44cB4f5980e0ef1", + "specific": { + "type": "ens_like", + "address_resolve_technique": "all_domains", + "native_token_contract": "0x45d3E4fB311982a06ba52359d44cB4f5980e0ef1" + }, "meta": { "short_name": "RNS", "title": "Rootstock Name Service", @@ -224,8 +235,11 @@ "tld_list": ["rsk"], "network_id": 31, "subgraph_name": "rns-testnet-subgraph", - "address_resolve_technique": "all_domains", - "native_token_contract": "0xca0a477e19bac7e0e172ccfd2e3c28a7200bdb71", + "specific": { + "type": "ens_like", + "address_resolve_technique": "all_domains", + "native_token_contract": "0xca0a477e19bac7e0e172ccfd2e3c28a7200bdb71" + }, "meta": { "short_name": "RNS (Testnet)", "title": "Rootstock Name Service (Testnet)", @@ -240,8 +254,11 @@ ], "network_id": 8453, "subgraph_name": "base-name-service-subgraph", - "address_resolve_technique": "reverse_registry", - "native_token_contract": "0xaCe5602d169Edeb874bfE584a651801B8ac67093", + "specific": { + "type": "ens_like", + "address_resolve_technique": "reverse_registry", + "native_token_contract": "0xaCe5602d169Edeb874bfE584a651801B8ac67093" + }, "meta": { "short_name": "BNS", "title": "Base Name Service", @@ -256,9 +273,12 @@ ], "network_id": 34443, "subgraph_name": "mode-subgraph", - "address_resolve_technique": "reverse_registry", - "native_token_contract": "0x2ad86eeec513ac16804bb05310214c3fd496835b", - "empty_label_hash": "0x2fd69f9e5bec9de9ebf3468dafc549eca0bc7d17dfbc09869c2cfc3997d5d038", + "specific": { + "type": "ens_like", + "address_resolve_technique": "reverse_registry", + "native_token_contract": "0x2ad86eeec513ac16804bb05310214c3fd496835b", + "empty_label_hash": "0x2fd69f9e5bec9de9ebf3468dafc549eca0bc7d17dfbc09869c2cfc3997d5d038" + }, "meta": { "short_name": "MNS", "title": "Mode Name Service", @@ -271,9 +291,12 @@ "tld_list": ["mode"], "network_id": 919, "subgraph_name": "mode-sepolia-subgraph", - "address_resolve_technique": "reverse_registry", - "native_token_contract": "0xCa3a57e014937C29526De98e4A8A334a7D04792b", - "empty_label_hash": "0xea1eb1136f380e6643b69866632ce3b493100790c9c84416f2769d996a1c38b1", + "specific": { + "type": "ens_like", + "address_resolve_technique": "reverse_registry", + "native_token_contract": "0xCa3a57e014937C29526De98e4A8A334a7D04792b", + "empty_label_hash": "0xea1eb1136f380e6643b69866632ce3b493100790c9c84416f2769d996a1c38b1" + }, "meta": { "short_name": "MNS (Testnet)", "title": "Mode Name Service (Testnet)", @@ -288,9 +311,12 @@ ], "network_id": 1890, "subgraph_name": "lightlink-subgraph", - "address_resolve_technique": "reverse_registry", - "native_token_contract": "0x5183ba1dee9770760360533cf00b9d8e26495927", - "empty_label_hash": "0xd00bb4a08bb99b28b4c1d80951b62b654e4d2688242da2d2c7f98ed6c9caaaad", + "specific": { + "type": "ens_like", + "address_resolve_technique": "reverse_registry", + "native_token_contract": "0x5183ba1dee9770760360533cf00b9d8e26495927", + "empty_label_hash": "0xd00bb4a08bb99b28b4c1d80951b62b654e4d2688242da2d2c7f98ed6c9caaaad" + }, "meta": { "short_name": "LNS", "title": "LightLink Name Service", @@ -305,7 +331,10 @@ ], "network_id": 137, "subgraph_name": "zns-subgraph", - "address_resolve_technique": "all_domains", + "specific": { + "type": "ens_like", + "address_resolve_technique": "all_domains" + }, "meta": { "short_name": "ZNS", "title": "ZNS Connect Domains", @@ -320,7 +349,10 @@ ], "network_id": 81457, "subgraph_name": "zns-blast-subgraph", - "address_resolve_technique": "all_domains", + "specific": { + "type": "ens_like", + "address_resolve_technique": "all_domains" + }, "meta": { "short_name": "ZNS", "title": "ZNS Connect Domains", diff --git a/blockscout-ens/bens-server/config/staging.json b/blockscout-ens/bens-server/config/staging.json index ae06a413c..10b9bcf47 100644 --- a/blockscout-ens/bens-server/config/staging.json +++ b/blockscout-ens/bens-server/config/staging.json @@ -34,25 +34,31 @@ "tld_list": ["eth"], "network_id": 11155111, "subgraph_name": "ens-subgraph", - "address_resolve_technique": "reverse_registry", - "native_token_contract": "0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85", + "specific": { + "type": "ens_like", + "address_resolve_technique": "reverse_registry", + "native_token_contract": "0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85", + "registry_contract": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e", + "try_offchain_resolve": true + }, "meta": { "short_name": "ENS", "title": "Ethereum Name Service", "description": "The Ethereum Name Service (ENS) is a distributed, open, and extensible naming system based on the Ethereum blockchain.", "icon_url": "https://i.imgur.com/GOfUwCb.jpeg", "docs_url": "https://docs.ens.domains/" - }, - "offchain_strategy": "ens", - "registry_contract": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e" + } }, "genome": { "tld_list": ["gno"], "network_id": 10200, "subgraph_name": "genome-subgraph", - "address_resolve_technique": "reverse_registry", - "empty_label_hash": "0x1a13b687a5ff1d8ab1a9e189e1507a6abe834a9296cc8cff937905e3dee0c4f6", - "native_token_contract": "0xfd3d666dB2557983F3F04d61f90E35cc696f6D60", + "specific": { + "type": "ens_like", + "address_resolve_technique": "reverse_registry", + "native_token_contract": "0xfd3d666dB2557983F3F04d61f90E35cc696f6D60", + "empty_label_hash": "0x1a13b687a5ff1d8ab1a9e189e1507a6abe834a9296cc8cff937905e3dee0c4f6" + }, "meta": { "short_name": "Genome", "title": "Genome Domains", @@ -65,9 +71,12 @@ "tld_list": ["mode"], "network_id": 919, "subgraph_name": "mode-subgraph", - "address_resolve_technique": "reverse_registry", - "native_token_contract": "0xCa3a57e014937C29526De98e4A8A334a7D04792b", - "empty_label_hash": "0xea1eb1136f380e6643b69866632ce3b493100790c9c84416f2769d996a1c38b1", + "specific": { + "type": "ens_like", + "address_resolve_technique": "reverse_registry", + "native_token_contract": "0xCa3a57e014937C29526De98e4A8A334a7D04792b", + "empty_label_hash": "0xea1eb1136f380e6643b69866632ce3b493100790c9c84416f2769d996a1c38b1" + }, "meta": { "short_name": "MNS", "title": "Mode Name Service", diff --git a/blockscout-ens/bens-server/src/server.rs b/blockscout-ens/bens-server/src/server.rs index d98e1aa01..4e2c781fa 100644 --- a/blockscout-ens/bens-server/src/server.rs +++ b/blockscout-ens/bens-server/src/server.rs @@ -106,11 +106,8 @@ pub async fn run(settings: Settings) -> Result<(), anyhow::Error> { tld_list: p.tld_list, subgraph_name: p.subgraph_name, address_resolve_technique: p.address_resolve_technique, - empty_label_hash: p.empty_label_hash, - native_token_contract: p.native_token_contract, meta: p.meta.0, - offchain_strategy: p.offchain_strategy, - registry_contract: p.registry_contract, + protocol_specific: p.protocol_specific.0, }, ) }) diff --git a/blockscout-ens/bens-server/src/settings.rs b/blockscout-ens/bens-server/src/settings.rs index 773d364cc..9746dc912 100644 --- a/blockscout-ens/bens-server/src/settings.rs +++ b/blockscout-ens/bens-server/src/settings.rs @@ -1,5 +1,4 @@ -use alloy::primitives::{Address, B256}; -use bens_logic::protocols::{AddressResolveTechnique, OffchainStrategy, ProtocolMeta, Tld}; +use bens_logic::protocols::{AddressResolveTechnique, ProtocolMeta, ProtocolSpecific, Tld}; use blockscout_service_launcher::{ database::{DatabaseConnectSettings, DatabaseSettings}, launcher::{ConfigSettings, MetricsSettings, ServerSettings}, @@ -64,19 +63,17 @@ pub struct ProtocolSettings { #[serde(default)] pub address_resolve_technique: AddressResolveTechnique, #[serde(default)] - pub empty_label_hash: Option, - #[serde(default)] - pub native_token_contract: Option
, - #[serde(default)] - pub registry_contract: Option
, pub meta: ProtocolSettingsMeta, - #[serde(default)] - pub offchain_strategy: OffchainStrategy, + #[serde(default, rename = "specific")] + pub protocol_specific: ProtocolSettingsSpecific, } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)] pub struct ProtocolSettingsMeta(pub ProtocolMeta); +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)] +pub struct ProtocolSettingsSpecific(pub ProtocolSpecific); + #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)] #[serde(deny_unknown_fields)] pub struct NetworkSettings { diff --git a/blockscout-ens/graph-node/config.toml b/blockscout-ens/graph-node/config.toml index 8fa11b858..bac9acd65 100644 --- a/blockscout-ens/graph-node/config.toml +++ b/blockscout-ens/graph-node/config.toml @@ -37,3 +37,9 @@ provider = [ { label = "mode-sepolia", url = "https://sepolia.mode.network", features = [] } ] shard = "primary" + +[chains.shibarium] +provider = [ + { label = "shibarium", url = "https://www.shibrpc.com", features = [] } +] +shard = "primary" diff --git a/blockscout-ens/graph-node/deployer/config.json b/blockscout-ens/graph-node/deployer/config.json index 25387bf73..a83e8b07c 100644 --- a/blockscout-ens/graph-node/deployer/config.json +++ b/blockscout-ens/graph-node/deployer/config.json @@ -59,6 +59,11 @@ "subgraph_path": "../subgraphs/zns-subgraph", "subgraph_name": "zns-blast-subgraph", "network": "blast-mainnet" + }, + "d3-connect": { + "subgraph_path": "../subgraphs/d3-connect-subgraph", + "subgraph_name": "d3-connect-shib-subgraph", + "network": "shibarium" } } } diff --git a/blockscout-ens/graph-node/subgraph-writer/protocols/d3-connect.yaml b/blockscout-ens/graph-node/subgraph-writer/protocols/d3-connect.yaml new file mode 100644 index 000000000..7636a49bf --- /dev/null +++ b/blockscout-ens/graph-node/subgraph-writer/protocols/d3-connect.yaml @@ -0,0 +1,17 @@ +default_context: + project_name: "D3 Connect Subgraph" + short_name: "d3-connect" + network: "shibarium" + network_test: "shibarium-testnet" + + registry: true + registry_name: 'Registry' + registry_address: '0xDe74799371Ceac11A0F52BA2694392A391D0dA18' + registry_start_block: 3473390 + registry_address_test: '0x91c2d22ca1028B2E55e3097096494Eb34b7fc81c' + registry_start_block_test: 4555130 + registry_abi: '[{"inputs": [], "stateMutability": "nonpayable", "type": "constructor"}, {"inputs": [], "name": "EmptyLabel", "type": "error"}, {"inputs": [], "name": "EmptyTLD", "type": "error"}, {"inputs": [{"internalType": "uint256", "name": "tokenId", "type": "uint256"}], "name": "InvalidTokenOwner", "type": "error"}, {"inputs": [], "name": "PastExpirationDate", "type": "error"}, {"inputs": [{"internalType": "uint256", "name": "tokenId", "type": "uint256"}], "name": "SLDAlreadyExists", "type": "error"}, {"inputs": [{"internalType": "uint256", "name": "tokenId", "type": "uint256"}], "name": "SLDDoesNotExist", "type": "error"}, {"inputs": [{"internalType": "uint256", "name": "tokenId", "type": "uint256"}], "name": "SLDNotBurnable", "type": "error"}, {"inputs": [{"internalType": "uint256", "name": "tokenId", "type": "uint256"}], "name": "SLDNotRenewable", "type": "error"}, {"inputs": [], "name": "TLDNotSupported", "type": "error"}, {"inputs": [], "name": "TooBigExpirationDate", "type": "error"}, {"inputs": [{"internalType": "uint256", "name": "tokenId", "type": "uint256"}], "name": "TransferLocked", "type": "error"}, {"anonymous": false, "inputs": [{"indexed": false, "internalType": "address", "name": "previousAdmin", "type": "address"}, {"indexed": false, "internalType": "address", "name": "newAdmin", "type": "address"}], "name": "AdminChanged", "type": "event"}, {"anonymous": false, "inputs": [{"indexed": true, "internalType": "address", "name": "owner", "type": "address"}, {"indexed": true, "internalType": "address", "name": "approved", "type": "address"}, {"indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256"}], "name": "Approval", "type": "event"}, {"anonymous": false, "inputs": [{"indexed": true, "internalType": "address", "name": "owner", "type": "address"}, {"indexed": true, "internalType": "address", "name": "operator", "type": "address"}, {"indexed": false, "internalType": "bool", "name": "approved", "type": "bool"}], "name": "ApprovalForAll", "type": "event"}, {"anonymous": false, "inputs": [{"indexed": true, "internalType": "address", "name": "beacon", "type": "address"}], "name": "BeaconUpgraded", "type": "event"}, {"anonymous": false, "inputs": [{"indexed": false, "internalType": "uint8", "name": "version", "type": "uint8"}], "name": "Initialized", "type": "event"}, {"anonymous": false, "inputs": [{"indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256"}, {"indexed": false, "internalType": "bool", "name": "isTransferLocked", "type": "bool"}], "name": "LockStatusChanged", "type": "event"}, {"anonymous": false, "inputs": [{"indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256"}], "name": "MetadataUpdate", "type": "event"}, {"anonymous": false, "inputs": [{"indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32"}, {"indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32"}, {"indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32"}], "name": "RoleAdminChanged", "type": "event"}, {"anonymous": false, "inputs": [{"indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32"}, {"indexed": true, "internalType": "address", "name": "account", "type": "address"}, {"indexed": true, "internalType": "address", "name": "sender", "type": "address"}], "name": "RoleGranted", "type": "event"}, {"anonymous": false, "inputs": [{"indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32"}, {"indexed": true, "internalType": "address", "name": "account", "type": "address"}, {"indexed": true, "internalType": "address", "name": "sender", "type": "address"}], "name": "RoleRevoked", "type": "event"}, {"anonymous": false, "inputs": [{"indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256"}, {"indexed": false, "internalType": "address", "name": "to", "type": "address"}, {"indexed": false, "internalType": "string", "name": "label", "type": "string"}, {"indexed": false, "internalType": "string", "name": "tld", "type": "string"}, {"indexed": false, "internalType": "uint256", "name": "expiration", "type": "uint256"}], "name": "SLDMinted", "type": "event"}, {"anonymous": false, "inputs": [{"indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256"}, {"indexed": false, "internalType": "address", "name": "to", "type": "address"}, {"indexed": false, "internalType": "string", "name": "label", "type": "string"}, {"indexed": false, "internalType": "string", "name": "tld", "type": "string"}, {"indexed": false, "internalType": "uint256", "name": "expiration", "type": "uint256"}, {"indexed": false, "internalType": "string", "name": "orderId", "type": "string"}], "name": "SLDMintedForOrder", "type": "event"}, {"anonymous": false, "inputs": [{"indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256"}, {"indexed": false, "internalType": "uint256", "name": "expiration", "type": "uint256"}, {"indexed": false, "internalType": "string", "name": "orderId", "type": "string"}], "name": "SLDRenewed", "type": "event"}, {"anonymous": false, "inputs": [{"indexed": true, "internalType": "string", "name": "tld", "type": "string"}], "name": "TLDAdded", "type": "event"}, {"anonymous": false, "inputs": [{"indexed": true, "internalType": "string", "name": "tld", "type": "string"}], "name": "TLDRemoved", "type": "event"}, {"anonymous": false, "inputs": [{"indexed": true, "internalType": "address", "name": "from", "type": "address"}, {"indexed": true, "internalType": "address", "name": "to", "type": "address"}, {"indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256"}], "name": "Transfer", "type": "event"}, {"anonymous": false, "inputs": [{"indexed": true, "internalType": "address", "name": "implementation", "type": "address"}], "name": "Upgraded", "type": "event"}, {"inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [{"internalType": "bytes32", "name": "", "type": "bytes32"}], "stateMutability": "view", "type": "function"}, {"inputs": [], "name": "MINTER_ROLE", "outputs": [{"internalType": "bytes32", "name": "", "type": "bytes32"}], "stateMutability": "view", "type": "function"}, {"inputs": [], "name": "OPERATOR_ROLE", "outputs": [{"internalType": "bytes32", "name": "", "type": "bytes32"}], "stateMutability": "view", "type": "function"}, {"inputs": [], "name": "PENDING_DELETE_PERIOD", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "string", "name": "tld", "type": "string"}], "name": "addTLD", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "uint256", "name": "id", "type": "uint256"}], "name": "adminBurn", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "address", "name": "to", "type": "address"}, {"internalType": "uint256", "name": "id", "type": "uint256"}], "name": "adminSafeTransfer", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "uint256", "name": "id", "type": "uint256"}, {"internalType": "bool", "name": "isTransferLocked", "type": "bool"}], "name": "adminSetLockStatus", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "address", "name": "to", "type": "address"}, {"internalType": "uint256", "name": "tokenId", "type": "uint256"}], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "address", "name": "owner", "type": "address"}], "name": "balanceOf", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [], "name": "blockAllTransfers", "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]"}], "name": "bulkBurn", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"components": [{"internalType": "string", "name": "label", "type": "string"}, {"internalType": "string", "name": "tld", "type": "string"}, {"internalType": "uint256", "name": "expirationTime", "type": "uint256"}, {"internalType": "address", "name": "owner", "type": "address"}], "internalType": "struct Registry.NameMintInfo[]", "name": "names", "type": "tuple[]"}], "name": "bulkMint", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"components": [{"internalType": "string", "name": "label", "type": "string"}, {"internalType": "string", "name": "tld", "type": "string"}, {"internalType": "uint256", "name": "expirationTime", "type": "uint256"}, {"internalType": "address", "name": "owner", "type": "address"}], "internalType": "struct Registry.NameMintInfo[]", "name": "names", "type": "tuple[]"}, {"internalType": "string", "name": "orderId", "type": "string"}], "name": "bulkOrderMint", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "uint256", "name": "tokenId", "type": "uint256"}], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "uint256", "name": "id", "type": "uint256"}], "name": "expirationOf", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "uint256", "name": "tokenId", "type": "uint256"}], "name": "getApproved", "outputs": [{"internalType": "address", "name": "", "type": "address"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "bytes32", "name": "role", "type": "bytes32"}], "name": "getRoleAdmin", "outputs": [{"internalType": "bytes32", "name": "", "type": "bytes32"}], "stateMutability": "view", "type": "function"}, {"inputs": [], "name": "gracePeriod", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "bytes32", "name": "role", "type": "bytes32"}, {"internalType": "address", "name": "account", "type": "address"}], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "bytes32", "name": "role", "type": "bytes32"}, {"internalType": "address", "name": "account", "type": "address"}], "name": "hasRole", "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "string", "name": "name", "type": "string"}, {"internalType": "string", "name": "symbol", "type": "string"}, {"internalType": "string[]", "name": "tlds", "type": "string[]"}, {"internalType": "string", "name": "uri", "type": "string"}], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "address", "name": "owner", "type": "address"}, {"internalType": "address", "name": "operator", "type": "address"}], "name": "isApprovedForAll", "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "uint256", "name": "id", "type": "uint256"}], "name": "lockStatusOf", "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "uint256", "name": "tokenId", "type": "uint256"}], "name": "metadataUpdated", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "address", "name": "to", "type": "address"}, {"internalType": "string", "name": "label", "type": "string"}, {"internalType": "string", "name": "tld", "type": "string"}, {"internalType": "uint256", "name": "expiration", "type": "uint256"}], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [], "name": "name", "outputs": [{"internalType": "string", "name": "", "type": "string"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "address", "name": "to", "type": "address"}, {"internalType": "string", "name": "label", "type": "string"}, {"internalType": "string", "name": "tld", "type": "string"}, {"internalType": "uint256", "name": "expiration", "type": "uint256"}, {"internalType": "string", "name": "orderId", "type": "string"}], "name": "orderMint", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "uint256", "name": "tokenId", "type": "uint256"}], "name": "ownerOf", "outputs": [{"internalType": "address", "name": "", "type": "address"}], "stateMutability": "view", "type": "function"}, {"inputs": [], "name": "proxiableUUID", "outputs": [{"internalType": "bytes32", "name": "", "type": "bytes32"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "string", "name": "tld", "type": "string"}], "name": "removeTLD", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "address", "name": "ownerId", "type": "address"}, {"internalType": "string", "name": "label", "type": "string"}, {"internalType": "string", "name": "tld", "type": "string"}, {"internalType": "uint256", "name": "expiration", "type": "uint256"}, {"internalType": "string", "name": "orderId", "type": "string"}], "name": "renew", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "bytes32", "name": "role", "type": "bytes32"}, {"internalType": "address", "name": "account", "type": "address"}], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "bytes32", "name": "role", "type": "bytes32"}, {"internalType": "address", "name": "account", "type": "address"}], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]"}], "name": "safeBulkBurn", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "address", "name": "from", "type": "address"}, {"internalType": "address", "name": "to", "type": "address"}, {"internalType": "uint256", "name": "tokenId", "type": "uint256"}], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "address", "name": "from", "type": "address"}, {"internalType": "address", "name": "to", "type": "address"}, {"internalType": "uint256", "name": "tokenId", "type": "uint256"}, {"internalType": "bytes", "name": "data", "type": "bytes"}], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "address", "name": "operator", "type": "address"}, {"internalType": "bool", "name": "approved", "type": "bool"}], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "bool", "name": "newBlockAllTransfers", "type": "bool"}], "name": "setBlockAllTransfers", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "uint256", "name": "newGracePeriod", "type": "uint256"}], "name": "setGracePeriod", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "string", "name": "newuri", "type": "string"}], "name": "setURI", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "bytes4", "name": "interfaceId", "type": "bytes4"}], "name": "supportsInterface", "outputs": [{"internalType": "bool", "name": "", "type": "bool"}], "stateMutability": "view", "type": "function"}, {"inputs": [], "name": "symbol", "outputs": [{"internalType": "string", "name": "", "type": "string"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "uint256", "name": "tokenId", "type": "uint256"}], "name": "tokenURI", "outputs": [{"internalType": "string", "name": "", "type": "string"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "address", "name": "from", "type": "address"}, {"internalType": "address", "name": "to", "type": "address"}, {"internalType": "uint256", "name": "tokenId", "type": "uint256"}], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "address", "name": "newImplementation", "type": "address"}], "name": "upgradeTo", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "address", "name": "newImplementation", "type": "address"}, {"internalType": "bytes", "name": "data", "type": "bytes"}], "name": "upgradeToAndCall", "outputs": [], "stateMutability": "payable", "type": "function"}, {"inputs": [], "name": "version", "outputs": [{"internalType": "string", "name": "", "type": "string"}], "stateMutability": "pure", "type": "function"}]' + + resolver: false + controller: false + base: false diff --git a/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/.gitignore b/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/.gitignore new file mode 100644 index 000000000..25d5792db --- /dev/null +++ b/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/.gitignore @@ -0,0 +1,79 @@ +# Graph cli generated +.docker +generated +build/ +.DS_STORE +data +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Built output +dist + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +jspm_packages/ +dist/ + + +# TypeScript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + +# next.js build output +.next + +# intellij +.idea + +/tests/.bin + +*.xlsx +*.csv diff --git a/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/README.md b/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/README.md new file mode 100644 index 000000000..73173c25b --- /dev/null +++ b/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/README.md @@ -0,0 +1 @@ +# D3 Connect Subgraph diff --git a/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/abis/Registry.json b/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/abis/Registry.json new file mode 100644 index 000000000..e4b909374 --- /dev/null +++ b/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/abis/Registry.json @@ -0,0 +1,1357 @@ +[ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "EmptyLabel", + "type": "error" + }, + { + "inputs": [], + "name": "EmptyTLD", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "InvalidTokenOwner", + "type": "error" + }, + { + "inputs": [], + "name": "PastExpirationDate", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "SLDAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "SLDDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "SLDNotBurnable", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "SLDNotRenewable", + "type": "error" + }, + { + "inputs": [], + "name": "TLDNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "TooBigExpirationDate", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "TransferLocked", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bool", + "name": "isTransferLocked", + "type": "bool" + } + ], + "name": "LockStatusChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "MetadataUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "label", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "tld", + "type": "string" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "expiration", + "type": "uint256" + } + ], + "name": "SLDMinted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "label", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "tld", + "type": "string" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "expiration", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "orderId", + "type": "string" + } + ], + "name": "SLDMintedForOrder", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "expiration", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "orderId", + "type": "string" + } + ], + "name": "SLDRenewed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "string", + "name": "tld", + "type": "string" + } + ], + "name": "TLDAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "string", + "name": "tld", + "type": "string" + } + ], + "name": "TLDRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MINTER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "OPERATOR_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PENDING_DELETE_PERIOD", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "tld", + "type": "string" + } + ], + "name": "addTLD", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "adminBurn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "adminSafeTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isTransferLocked", + "type": "bool" + } + ], + "name": "adminSetLockStatus", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "blockAllTransfers", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "tokenIds", + "type": "uint256[]" + } + ], + "name": "bulkBurn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "string", + "name": "label", + "type": "string" + }, + { + "internalType": "string", + "name": "tld", + "type": "string" + }, + { + "internalType": "uint256", + "name": "expirationTime", + "type": "uint256" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "internalType": "struct Registry.NameMintInfo[]", + "name": "names", + "type": "tuple[]" + } + ], + "name": "bulkMint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "string", + "name": "label", + "type": "string" + }, + { + "internalType": "string", + "name": "tld", + "type": "string" + }, + { + "internalType": "uint256", + "name": "expirationTime", + "type": "uint256" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "internalType": "struct Registry.NameMintInfo[]", + "name": "names", + "type": "tuple[]" + }, + { + "internalType": "string", + "name": "orderId", + "type": "string" + } + ], + "name": "bulkOrderMint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "expirationOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "gracePeriod", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "string[]", + "name": "tlds", + "type": "string[]" + }, + { + "internalType": "string", + "name": "uri", + "type": "string" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "lockStatusOf", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "metadataUpdated", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "string", + "name": "label", + "type": "string" + }, + { + "internalType": "string", + "name": "tld", + "type": "string" + }, + { + "internalType": "uint256", + "name": "expiration", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "string", + "name": "label", + "type": "string" + }, + { + "internalType": "string", + "name": "tld", + "type": "string" + }, + { + "internalType": "uint256", + "name": "expiration", + "type": "uint256" + }, + { + "internalType": "string", + "name": "orderId", + "type": "string" + } + ], + "name": "orderMint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proxiableUUID", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "tld", + "type": "string" + } + ], + "name": "removeTLD", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "ownerId", + "type": "address" + }, + { + "internalType": "string", + "name": "label", + "type": "string" + }, + { + "internalType": "string", + "name": "tld", + "type": "string" + }, + { + "internalType": "uint256", + "name": "expiration", + "type": "uint256" + }, + { + "internalType": "string", + "name": "orderId", + "type": "string" + } + ], + "name": "renew", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "tokenIds", + "type": "uint256[]" + } + ], + "name": "safeBulkBurn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "newBlockAllTransfers", + "type": "bool" + } + ], + "name": "setBlockAllTransfers", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newGracePeriod", + "type": "uint256" + } + ], + "name": "setGracePeriod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "newuri", + "type": "string" + } + ], + "name": "setURI", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + } +] \ No newline at end of file diff --git a/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/networks.json b/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/networks.json new file mode 100644 index 000000000..ec1aeafd5 --- /dev/null +++ b/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/networks.json @@ -0,0 +1,16 @@ +{ + "shibarium": { + "Registry": { + "address": "0xDe74799371Ceac11A0F52BA2694392A391D0dA18", + "startBlock": 3473390 + }, + "": "" + }, + "shibarium-testnet": { + "Registry": { + "address": "0x91c2d22ca1028B2E55e3097096494Eb34b7fc81c", + "startBlock": 4555130 + }, + "": "" + } +} \ No newline at end of file diff --git a/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/package.json b/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/package.json new file mode 100644 index 000000000..163bb8df3 --- /dev/null +++ b/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/package.json @@ -0,0 +1,21 @@ +{ + "name": "d3-connect-subgraph", + "license": "UNLICENSED", + "scripts": { + "codegen": "graph codegen", + "build": "graph build", + "deploy": "graph deploy --node https://api.studio.thegraph.com/deploy/ d3-connect-subgraph", + "create-local": "graph create --node http://localhost:8020/ d3-connect-subgraph", + "remove-local": "graph remove --node http://localhost:8020/ d3-connect-subgraph", + "deploy-local": "graph deploy --node http://localhost:8020/ --ipfs http://localhost:5001 d3-connect-subgraph", + "test": "graph test" + }, + "devDependencies": { + "@ensdomains/content-hash": "^2.5.3", + "@graphprotocol/graph-cli": "^0.67.2", + "@graphprotocol/graph-ts": "^0.31.0", + "assemblyscript": "^0.19.0", + "matchstick-as": "^0.6.0", + "typescript": "^4.9.4" + } +} diff --git a/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/schema.graphql b/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/schema.graphql new file mode 100644 index 000000000..90268cfc1 --- /dev/null +++ b/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/schema.graphql @@ -0,0 +1,451 @@ +type Domain @entity { + "The namehash of the name" + id: ID! + "The human readable name, if known. Unknown portions replaced with hash in square brackets (eg, foo.[1234].eth)" + name: String + "The human readable label name (imported from CSV), if known" + labelName: String + "keccak256(labelName)" + labelhash: Bytes + "The namehash (id) of the parent name" + parent: Domain + "Can count domains from length of array" + subdomains: [Domain!]! @derivedFrom(field: "parent") + "The number of subdomains" + subdomainCount: Int! + "Address logged from current resolver, if any" + resolvedAddress: Account + + "The resolver that controls the domain's settings" + resolver: Resolver + "The time-to-live (TTL) value of the domain's records" + ttl: BigInt + + "Indicates whether the domain has been migrated to a new registrar" + isMigrated: Boolean! + "The time when the domain was created" + createdAt: BigInt! + + "The account that owns the domain" + owner: Account! + "The account that owns the ERC721 NFT for the domain" + registrant: Account + "The account that owns the wrapped domain" + wrappedOwner: Account + + "The expiry date for the domain, from either the registration, or the wrapped domain if PCC is burned" + expiryDate: BigInt + + "The registration associated with the domain" + registration: Registration @derivedFrom(field: "domain") + "The wrapped domain associated with the domain" + wrappedDomain: WrappedDomain @derivedFrom(field: "domain") + + "The events associated with the domain" + events: [DomainEvent!]! @derivedFrom(field: "domain") +} + +interface DomainEvent { + "The unique identifier of the event" + id: ID! + "The domain name associated with the event" + domain: Domain! + "The block number at which the event occurred" + blockNumber: Int! + "The transaction hash of the transaction that triggered the event" + transactionID: Bytes! +} + +type Transfer implements DomainEvent @entity { + "The unique identifier of the event" + id: ID! + "The domain name associated with the event" + domain: Domain! + "The block number at which the event occurred" + blockNumber: Int! + "The transaction hash of the transaction that triggered the event" + transactionID: Bytes! + "The account that owns the domain after the transfer" + owner: Account! +} + +type NewOwner implements DomainEvent @entity { + "The unique identifier of the event" + id: ID! + "The parent domain of the domain name associated with the event" + parentDomain: Domain! + "The domain name associated with the event" + domain: Domain! + "The block number at which the event occurred" + blockNumber: Int! + "The transaction hash of the transaction that triggered the event" + transactionID: Bytes! + "The new account that owns the domain" + owner: Account! +} + +type NewResolver implements DomainEvent @entity { + "The unique identifier of the event" + id: ID! + "The domain name associated with the event" + domain: Domain! + "The block number at which the event occurred" + blockNumber: Int! + "The transaction hash of the transaction that triggered the event" + transactionID: Bytes! + "The new resolver contract address associated with the domain" + resolver: Resolver! +} + +type NewTTL implements DomainEvent @entity { + "The unique identifier of the event" + id: ID! + "The domain name associated with the event" + domain: Domain! + "The block number at which the event occurred" + blockNumber: Int! + "The transaction hash of the transaction that triggered the event" + transactionID: Bytes! + "The new TTL value (in seconds) associated with the domain" + ttl: BigInt! +} + +type WrappedTransfer implements DomainEvent @entity { + "The unique identifier of the event" + id: ID! + "The domain name associated with the event" + domain: Domain! + "The block number at which the event occurred" + blockNumber: Int! + "The transaction hash of the transaction that triggered the event" + transactionID: Bytes! + "The account that owns the wrapped domain after the transfer" + owner: Account! +} + +type NameWrapped implements DomainEvent @entity { + "The unique identifier of the wrapped domain" + id: ID! + "The domain name associated with the wrapped domain" + domain: Domain! + "The block number at which the wrapped domain was wrapped" + blockNumber: Int! + "The transaction hash of the transaction that wrapped the domain" + transactionID: Bytes! + "The human-readable name of the wrapped domain" + name: String + "The number of fuses associated with the wrapped domain" + fuses: Int! + "The account that owns the wrapped domain" + owner: Account! + "The expiry date of the wrapped domain registration" + expiryDate: BigInt! +} + +type NameUnwrapped implements DomainEvent @entity { + "The unique identifier of the event" + id: ID! + "The domain name associated with the event" + domain: Domain! + "The block number at which the event occurred" + blockNumber: Int! + "The transaction hash of the transaction that triggered the event" + transactionID: Bytes! + "The account that owns the domain after it was unwrapped" + owner: Account! +} + +type FusesSet implements DomainEvent @entity { + "The unique identifier of the event" + id: ID! + "The domain name associated with the event" + domain: Domain! + "The block number at which the event occurred" + blockNumber: Int! + "The transaction hash of the transaction that triggered the event" + transactionID: Bytes! + "The number of fuses associated with the domain after the set event" + fuses: Int! +} + +type ExpiryExtended implements DomainEvent @entity { + "The unique identifier of the event" + id: ID! + "The domain name associated with the event" + domain: Domain! + "The block number at which the event occurred" + blockNumber: Int! + "The transaction hash of the transaction that triggered the event" + transactionID: Bytes! + "The new expiry date associated with the domain after the extension event" + expiryDate: BigInt! +} + +type Registration @entity { + "The unique identifier of the registration" + id: ID! + "The domain name associated with the registration" + domain: Domain! + "The registration date of the domain" + registrationDate: BigInt! + "The expiry date of the domain" + expiryDate: BigInt! + "The cost associated with the domain registration" + cost: BigInt + "The account that registered the domain" + registrant: Account! + "The human-readable label name associated with the domain registration" + labelName: String + "The events associated with the domain registration" + events: [RegistrationEvent!]! @derivedFrom(field: "registration") +} + +interface RegistrationEvent { + "The unique identifier of the registration event" + id: ID! + "The registration associated with the event" + registration: Registration! + "The block number of the event" + blockNumber: Int! + "The transaction ID associated with the event" + transactionID: Bytes! +} + +type NameRegistered implements RegistrationEvent @entity { + "The unique identifier of the NameRegistered event" + id: ID! + "The registration associated with the event" + registration: Registration! + "The block number of the event" + blockNumber: Int! + "The transaction ID associated with the event" + transactionID: Bytes! + "The account that registered the name" + registrant: Account! + "The expiry date of the registration" + expiryDate: BigInt! +} + +type NameRenewed implements RegistrationEvent @entity { + "The unique identifier of the NameRenewed event" + id: ID! + "The registration associated with the event" + registration: Registration! + "The block number of the event" + blockNumber: Int! + "The transaction ID associated with the event" + transactionID: Bytes! + "The new expiry date of the registration" + expiryDate: BigInt! +} + +type NameTransferred implements RegistrationEvent @entity { + "The ID of the event" + id: ID! + "The registration associated with the event" + registration: Registration! + "The block number of the event" + blockNumber: Int! + "The transaction ID of the event" + transactionID: Bytes! + "The new owner of the domain" + newOwner: Account! +} + +type WrappedDomain @entity { + "unique identifier for each instance of the WrappedDomain entity" + id: ID! + "The domain that is wrapped by this WrappedDomain" + domain: Domain! + "The expiry date of the wrapped domain" + expiryDate: BigInt! + "The number of fuses remaining on the wrapped domain" + fuses: Int! + "The account that owns this WrappedDomain" + owner: Account! + "The name of the wrapped domain" + name: String +} + +type Account @entity { + "The unique identifier for the account" + id: ID! + "The domains owned by the account" + domains: [Domain!]! @derivedFrom(field: "owner") + "The WrappedDomains owned by the account" + wrappedDomains: [WrappedDomain!] @derivedFrom(field: "owner") + "The Registrations made by the account" + registrations: [Registration!] @derivedFrom(field: "registrant") +} + +type Resolver @entity { + "The unique identifier for this resolver, which is a concatenation of the resolver address and the domain namehash" + id: ID! + "The domain that this resolver is associated with" + domain: Domain + "The address of the resolver contract" + address: Bytes! + "The current value of the 'addr' record for this resolver, as determined by the associated events" + addr: Account + "The content hash for this resolver, in binary format" + contentHash: Bytes + "The set of observed text record keys for this resolver" + texts: [String!] + "The set of observed SLIP-44 coin types for this resolver" + coinTypes: [BigInt!] + "The events associated with this resolver" + events: [ResolverEvent!]! @derivedFrom(field: "resolver") +} + +interface ResolverEvent { + "Concatenation of block number and log ID" + id: ID! + "Used to derive relationships to Resolvers" + resolver: Resolver! + "The block number that the event occurred on" + blockNumber: Int! + "The transaction hash of the event" + transactionID: Bytes! +} + +type AddrChanged implements ResolverEvent @entity { + "Unique identifier for this event" + id: ID! + "The resolver associated with this event" + resolver: Resolver! + "The block number at which this event occurred" + blockNumber: Int! + "The transaction ID for the transaction in which this event occurred" + transactionID: Bytes! + "The new address associated with the resolver" + addr: Account! +} + +type MulticoinAddrChanged implements ResolverEvent @entity { + "Unique identifier for the event" + id: ID! + "Resolver associated with this event" + resolver: Resolver! + "Block number in which this event was emitted" + blockNumber: Int! + "Transaction ID in which this event was emitted" + transactionID: Bytes! + "The coin type of the changed address" + coinType: BigInt! + "The new address value for the given coin type" + addr: Bytes! +} + +type NameChanged implements ResolverEvent @entity { + "Concatenation of block number and log ID" + id: ID! + "Used to derive relationships to Resolvers" + resolver: Resolver! + "Block number where event occurred" + blockNumber: Int! + "Unique transaction ID where event occurred" + transactionID: Bytes! + "New ENS name value" + name: String! +} + +type AbiChanged implements ResolverEvent @entity { + "Concatenation of block number and log ID" + id: ID! + "Used to derive relationships to Resolvers" + resolver: Resolver! + "The block number at which the event was emitted" + blockNumber: Int! + "The transaction hash of the transaction in which the event was emitted" + transactionID: Bytes! + "The content type of the ABI change" + contentType: BigInt! +} + +type PubkeyChanged implements ResolverEvent @entity { + "Concatenation of block number and log ID" + id: ID! + "Used to derive relationships to Resolvers" + resolver: Resolver! + "Block number of the Ethereum block where the event occurred" + blockNumber: Int! + "Transaction hash of the Ethereum transaction where the event occurred" + transactionID: Bytes! + "The x-coordinate of the new public key" + x: Bytes! + "The y-coordinate of the new public key" + y: Bytes! +} + +type TextChanged implements ResolverEvent @entity { + "Concatenation of block number and log ID" + id: ID! + "Used to derive relationships to Resolvers" + resolver: Resolver! + "Block number of the Ethereum block in which the event occurred" + blockNumber: Int! + "Hash of the Ethereum transaction in which the event occurred" + transactionID: Bytes! + "The key of the text record that was changed" + key: String! + "The new value of the text record that was changed" + value: String +} + +type ContenthashChanged implements ResolverEvent @entity { + "Concatenation of block number and log ID" + id: ID! + "Used to derive relationships to Resolvers" + resolver: Resolver! + "The block number where the event occurred" + blockNumber: Int! + "The ID of the transaction where the event occurred" + transactionID: Bytes! + "The new content hash for the domain" + hash: Bytes! +} + +type InterfaceChanged implements ResolverEvent @entity { + "Concatenation of block number and log ID" + id: ID! + "Used to derive relationships to Resolvers" + resolver: Resolver! + "The block number in which the event occurred" + blockNumber: Int! + "The transaction ID for the transaction in which the event occurred" + transactionID: Bytes! + "The ID of the EIP-1820 interface that was changed" + interfaceID: Bytes! + "The address of the contract that implements the interface" + implementer: Bytes! +} + +type AuthorisationChanged implements ResolverEvent @entity { + "Unique identifier for this event" + id: ID! + "The resolver associated with this event" + resolver: Resolver! + "The block number at which the event occurred" + blockNumber: Int! + "The transaction hash associated with the event" + transactionID: Bytes! + "The owner of the authorisation" + owner: Bytes! + "The target of the authorisation" + target: Bytes! + "Whether the authorisation was added or removed" + isAuthorized: Boolean! +} + +type VersionChanged implements ResolverEvent @entity { + "Unique identifier for this event" + id: ID! + "The resolver associated with this event" + resolver: Resolver! + "The block number at which the event occurred" + blockNumber: Int! + "The transaction hash associated with the event" + transactionID: Bytes! + "The new version number of the resolver" + version: BigInt! +} diff --git a/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/src/Registry.ts b/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/src/Registry.ts new file mode 100644 index 000000000..3f0d67a42 --- /dev/null +++ b/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/src/Registry.ts @@ -0,0 +1,183 @@ +import { Address, BigInt, Bytes, ethereum } from "@graphprotocol/graph-ts"; + +import { + SLDMintedForOrder as SLDMintedForOrderEvent, + SLDRenewed as SLDRenewedEvent, + SLDMinted as SLDMintedEvent +} from "../generated/Registry/Registry" +import { Domain, Account } from "../generated/schema" +import { EMPTY_ADDRESS, ROOT_NODE, hashByName, keccakFromStr } from "./utils"; + +const BIG_INT_ZERO = BigInt.fromI32(0); + +function createDomain(node: string, timestamp: BigInt): Domain { + let domain = new Domain(node); + if (node == ROOT_NODE) { + domain = new Domain(node); + domain.owner = EMPTY_ADDRESS; + domain.isMigrated = true; + domain.createdAt = timestamp; + domain.subdomainCount = 0; + } + return domain; +} + +function getDomain( + node: string, + timestamp: BigInt = BIG_INT_ZERO +): Domain | null { + let domain = Domain.load(node); + if (domain === null && node == ROOT_NODE) { + return createDomain(node, timestamp); + } else { + return domain; + } +} + + +export function handleSLDMinted(event: SLDMintedEvent): void { + _handleNewDomain(event.params.tokenId, event.params.to, event.params.label, event.params.tld, event.params.expiration, event.block); +} + +export function handleSLDMintedForOrder(event: SLDMintedForOrderEvent): void { + _handleNewDomain(event.params.tokenId, event.params.to, event.params.label, event.params.tld, event.params.expiration, event.block); +} + +export function handleSLDRenewed(event: SLDRenewedEvent): void { + _handleRenewed(event.params.tokenId, event.params.expiration); +} + + +function _handleNewDomain(tokenId: BigInt, to: Address, label: string, tld: string, expiration: BigInt, block: ethereum.Block): void { + let account = new Account(to.toHexString()); + account.save(); + + let node = hashByName(tld); + let subnode = hashByName(label + "." + tld); + + let domain = getDomain(subnode.toHexString()); + let parent = getDomain(node.toHexString()); + + if (domain === null) { + domain = new Domain(subnode.toHexString()); + domain.createdAt = block.timestamp; + domain.subdomainCount = 0; + } + + if (domain.parent === null && parent !== null) { + parent.subdomainCount = parent.subdomainCount + 1; + parent.save(); + } + + if (domain.name == null) { + domain.labelName = label; + domain.name = label + "." + tld; + } + + if (domain.resolvedAddress == null) { + domain.resolvedAddress = to.toHexString(); + } + + domain.owner = to.toHexString(); + domain.parent = node.toHexString(); + domain.labelhash = Bytes.fromByteArray(keccakFromStr(label)); + domain.isMigrated = true; + domain.save(); +} + +function _handleRenewed(tokenId: BigInt, expiration: BigInt): void { + let domain = getDomain(tokenId.toHexString()); + + if (domain) { + domain.expiryDate = expiration; + domain.save(); + } +} + +// // Handler for Transfer events +// export function handleTransfer(event: TransferEvent): void { +// let node = event.params.node.toHexString(); + +// let account = new Account(event.params.owner.toHexString()); +// account.save(); + +// // Update the domain owner +// let domain = getDomain(node)!; + +// domain.owner = event.params.owner.toHexString(); +// saveDomain(domain); + +// let domainEvent = new Transfer(createEventID(event)); +// domainEvent.blockNumber = event.block.number.toI32(); +// domainEvent.transactionID = event.transaction.hash; +// domainEvent.domain = node; +// domainEvent.owner = event.params.owner.toHexString(); +// domainEvent.save(); +// } + +// // Handler for NewResolver events +// export function handleNewResolver(event: NewResolverEvent): void { +// let id: string | null; + +// // if resolver is set to 0x0, set id to null +// // we don't want to create a resolver entity for 0x0 +// if (event.params.resolver.equals(EMPTY_ADDRESS_BYTEARRAY)) { +// id = null; +// } else { +// id = event.params.resolver +// .toHexString() +// .concat("-") +// .concat(event.params.node.toHexString()); +// } + +// let node = event.params.node.toHexString(); +// let domain = getDomain(node)!; +// domain.resolver = id; + +// if (id) { +// let resolver = Resolver.load(id); +// if (resolver == null) { +// resolver = new Resolver(id); +// resolver.domain = event.params.node.toHexString(); +// resolver.address = event.params.resolver; +// resolver.save(); +// // since this is a new resolver entity, there can't be a resolved address yet so set to null +// domain.resolvedAddress = null; +// } else { +// domain.resolvedAddress = resolver.addr; +// } +// } else { +// domain.resolvedAddress = null; +// } +// saveDomain(domain); + +// let domainEvent = new NewResolver(createEventID(event)); +// domainEvent.blockNumber = event.block.number.toI32(); +// domainEvent.transactionID = event.transaction.hash; +// domainEvent.domain = node; +// domainEvent.resolver = id ? id : EMPTY_ADDRESS; +// domainEvent.save(); +// } + +// // Handler for NewTTL events +// export function handleNewTTL(event: NewTTLEvent): void { +// let node = event.params.node.toHexString(); +// let domain = getDomain(node); +// // For the edge case that a domain's owner and resolver are set to empty +// // in the same transaction as setting TTL +// if (domain) { +// domain.ttl = event.params.ttl; +// domain.save(); +// } + +// let domainEvent = new NewTTL(createEventID(event)); +// domainEvent.blockNumber = event.block.number.toI32(); +// domainEvent.transactionID = event.transaction.hash; +// domainEvent.domain = node; +// domainEvent.ttl = event.params.ttl; +// domainEvent.save(); +// } + +// export function handleNewOwner(event: NewOwnerEvent): void { +// _handleNewOwner(event, true); +// } diff --git a/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/src/utils.ts b/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/src/utils.ts new file mode 100644 index 000000000..79dc55e67 --- /dev/null +++ b/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/src/utils.ts @@ -0,0 +1,142 @@ +import { BigInt, ByteArray, Bytes, crypto, ethereum, log } from "@graphprotocol/graph-ts"; +import { Account, Domain } from "../generated/schema"; + +export const BASE_NODE_HASH = "None" +export const BASE_NODE = + "None"; + +export const ROOT_NODE = + "0x0000000000000000000000000000000000000000000000000000000000000000"; +export const EMPTY_ADDRESS = "0x0000000000000000000000000000000000000000"; +export const EMPTY_ADDRESS_BYTEARRAY = new ByteArray(20); + + +export function createEventID(event: ethereum.Event): string { + return event.block.number + .toString() + .concat("-") + .concat(event.transaction.index.toString()) + .concat("-") + .concat(event.transactionLogIndex.toString()); +} + +// Helper for concatenating two byte arrays +export function concat(a: ByteArray, b: ByteArray): ByteArray { + let out = new Uint8Array(a.length + b.length); + for (let i = 0; i < a.length; i++) { + out[i] = a[i]; + } + for (let j = 0; j < b.length; j++) { + out[a.length + j] = b[j]; + } + // return out as ByteArray + return changetype(out); + } + + export function byteArrayFromHex(s: string): ByteArray { + if (s.length % 2 !== 0) { + throw new TypeError("Hex string must have an even number of characters"); + } + let out = new Uint8Array(s.length / 2); + for (var i = 0; i < s.length; i += 2) { + out[i / 2] = parseInt(s.substring(i, i + 2), 16) as u32; + } + return changetype(out); + } + + export function uint256ToByteArray(i: BigInt): ByteArray { + let hex = i + .toHex() + .slice(2) + .padStart(64, "0"); + return byteArrayFromHex(hex); + } + + export function createOrLoadAccount(address: string): Account { + let account = Account.load(address); + if (account == null) { + account = new Account(address); + account.save(); + } + + return account; + } + + export function createOrLoadDomain(node: string): Domain { + let domain = Domain.load(node); + if (domain == null) { + domain = new Domain(node); + domain.save(); + } + + return domain; + } + + export function checkValidLabel(name: string): boolean { + for (let i = 0; i < name.length; i++) { + let c = name.charCodeAt(i); + if (c === 0) { + log.warning("Invalid label '{}' contained null byte. Skipping.", [name]); + return false; + } else if (c === 46) { + log.warning( + "Invalid label '{}' contained separator char '.'. Skipping.", + [name] + ); + return false; + } + } + + return true; + } + + +export function maybeSaveDomainName(name: string): void { + const nodehash = hashByName(name); + const domain = Domain.load(nodehash.toHex()); + if (domain != null) { + const label = labelFromName(name); + domain.labelName = label; + domain.labelhash = Bytes.fromByteArray(keccakFromStr(label)); + domain.name = name; + domain.save() + } +} + +export function hashByName(name: string): ByteArray { + if (name === BASE_NODE.slice(1)) { + return byteArrayFromHex(BASE_NODE_HASH) + } else if (!name) { + return byteArrayFromHex(ROOT_NODE.slice(2)) + } else { + const partition = splitStringOnce(name, '.'); + const label = partition[0]; + const remainder = partition[1]; + + return crypto.keccak256( + concat( + hashByName(remainder), + keccakFromStr(label) + ) + ) + } + } + + function splitStringOnce(input: string, separator: string): string[] { + const splitArray = input.split(separator, 2); + + if (splitArray.length === 2) { + return [splitArray[0], splitArray[1]]; + } else { + return [input, '']; + } + } + +function labelFromName(name: string): string { + const labels = splitStringOnce(name, '.'); + return labels[0] +} + +export function keccakFromStr(s: string): ByteArray { + return crypto.keccak256(Bytes.fromUTF8(s)) +} \ No newline at end of file diff --git a/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/subgraph.yaml b/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/subgraph.yaml new file mode 100644 index 000000000..392b8e5fd --- /dev/null +++ b/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/subgraph.yaml @@ -0,0 +1,32 @@ +specVersion: 0.0.4 +description: Subgraph to index D3 Connect Subgraph +repository: https://github.com/blockscout/blockscout-rs +schema: + file: ./schema.graphql +dataSources: + - kind: ethereum/contract + name: Registry + network: shibarium + source: + abi: Registry + address: "0xDe74799371Ceac11A0F52BA2694392A391D0dA18" + startBlock: 3473390 + mapping: + kind: ethereum/events + apiVersion: 0.0.6 + language: wasm/assemblyscript + file: ./src/Registry.ts + entities: + - Domain + - Account + - Resolver + abis: + - name: Registry + file: ./abis/Registry.json + eventHandlers: + - event: SLDMinted(indexed uint256,address,string,string,uint256) + handler: handleSLDMinted + - event: SLDMintedForOrder(indexed uint256,address,string,string,uint256,string) + handler: handleSLDMintedForOrder + - event: SLDRenewed(indexed uint256,uint256,string) + handler: handleSLDRenewed diff --git a/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/tests/.latest.json b/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/tests/.latest.json new file mode 100644 index 000000000..3bbb3a88b --- /dev/null +++ b/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/tests/.latest.json @@ -0,0 +1,4 @@ +{ + "version": "0.5.4", + "timestamp": 1696845107787 +} \ No newline at end of file diff --git a/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/tests/utils.test.ts b/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/tests/utils.test.ts new file mode 100644 index 000000000..e1fcc9e8e --- /dev/null +++ b/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/tests/utils.test.ts @@ -0,0 +1,27 @@ +import { + describe, + assert, + test, +} from "matchstick-as/assembly/index" +import { hashByName } from "../src/utils" +import { Bytes } from "@graphprotocol/graph-ts" + +describe("Utils", () => { + test("Name hashing works", () => { + assert.bytesEquals( + Bytes.fromHexString('0xd1b419b672a0a0f45d8b7d8e7c7b80d56f1ba5d703ea1d37424eb7e1d82bc620'), + Bytes.fromByteArray(hashByName('levvv')) + ) + + assert.bytesEquals( + Bytes.fromHexString('0x38a7804a53792b0cdefe3e7271b0b85422d620ea4a82df7b7bf750a6d4b297a4'), + Bytes.fromByteArray(hashByName('levvv.eth')) + ) + + // TODO: change zero hash to actual domain name hash + assert.bytesEquals( + Bytes.fromHexString('0x0000000000000000000000000000000000000000000000000000000000000000'), + Bytes.fromByteArray(hashByName('levvv.None')) + ) + }) +}); \ No newline at end of file diff --git a/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/tsconfig.json b/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/tsconfig.json new file mode 100644 index 000000000..4e866720d --- /dev/null +++ b/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "@graphprotocol/graph-ts/types/tsconfig.base.json", + "include": ["src", "tests"] +} diff --git a/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/yarn.lock b/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/yarn.lock new file mode 100644 index 000000000..e704ce98e --- /dev/null +++ b/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/yarn.lock @@ -0,0 +1,3612 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0": + version "7.22.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" + integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== + dependencies: + "@babel/highlight" "^7.22.13" + chalk "^2.4.2" + +"@babel/helper-validator-identifier@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== + +"@babel/highlight@^7.22.13": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" + integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@ensdomains/content-hash@^2.5.3": + version "2.5.7" + resolved "https://registry.yarnpkg.com/@ensdomains/content-hash/-/content-hash-2.5.7.tgz#180e4ceb6e585a05d69ba307619d4a0cf12948f1" + integrity sha512-WNdGKCeubMIAfyPYTMlKeX6cgXKIEo42OcWPOLBiclzJwMibkVqpaGgWKVH9dniJq7bLXLa2tQ0k/F1pt6gUxA== + dependencies: + cids "^1.1.5" + js-base64 "^3.6.0" + multicodec "^3.2.0" + multihashes "^2.0.0" + +"@ethersproject/abi@5.0.7": + version "5.0.7" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.7.tgz#79e52452bd3ca2956d0e1c964207a58ad1a0ee7b" + integrity sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw== + dependencies: + "@ethersproject/address" "^5.0.4" + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/constants" "^5.0.4" + "@ethersproject/hash" "^5.0.4" + "@ethersproject/keccak256" "^5.0.3" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/strings" "^5.0.4" + +"@ethersproject/abstract-provider@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" + integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + +"@ethersproject/abstract-signer@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" + integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/address@^5.0.4", "@ethersproject/address@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" + integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + +"@ethersproject/base64@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" + integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + +"@ethersproject/bignumber@^5.0.7", "@ethersproject/bignumber@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" + integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + bn.js "^5.2.1" + +"@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" + integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" + integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + +"@ethersproject/hash@^5.0.4": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" + integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/keccak256@^5.0.3", "@ethersproject/keccak256@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" + integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + js-sha3 "0.8.0" + +"@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" + integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== + +"@ethersproject/networks@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" + integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" + integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/rlp@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" + integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/signing-key@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" + integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + bn.js "^5.2.1" + elliptic "6.5.4" + hash.js "1.1.7" + +"@ethersproject/strings@^5.0.4", "@ethersproject/strings@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" + integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/transactions@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" + integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + +"@ethersproject/web@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" + integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== + dependencies: + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@float-capital/float-subgraph-uncrashable@^0.0.0-alpha.4": + version "0.0.0-internal-testing.5" + resolved "https://registry.yarnpkg.com/@float-capital/float-subgraph-uncrashable/-/float-subgraph-uncrashable-0.0.0-internal-testing.5.tgz#060f98440f6e410812766c5b040952d2d02e2b73" + integrity sha512-yZ0H5e3EpAYKokX/AbtplzlvSxEJY7ZfpvQyDzyODkks0hakAAlDG6fQu1SlDJMWorY7bbq1j7fCiFeTWci6TA== + dependencies: + "@rescript/std" "9.0.0" + graphql "^16.6.0" + graphql-import-node "^0.0.5" + js-yaml "^4.1.0" + +"@graphprotocol/graph-cli@^0.67.2": + version "0.67.4" + resolved "https://registry.yarnpkg.com/@graphprotocol/graph-cli/-/graph-cli-0.67.4.tgz#da8fd87c20c64bb3ab78664bd2af0ab965f9d12f" + integrity sha512-U2LDemWwmYUxf7PloAcDPXK1UeceRphGJJKrhNbDZB32hlp3LY+GI6HnRK4F9Oeri2azB3t3/humNxIDgbim0w== + dependencies: + "@float-capital/float-subgraph-uncrashable" "^0.0.0-alpha.4" + "@oclif/core" "2.8.6" + "@oclif/plugin-autocomplete" "^2.3.6" + "@oclif/plugin-not-found" "^2.4.0" + "@whatwg-node/fetch" "^0.8.4" + assemblyscript "0.19.23" + binary-install-raw "0.0.13" + chalk "3.0.0" + chokidar "3.5.3" + debug "4.3.4" + docker-compose "0.23.19" + dockerode "2.5.8" + fs-extra "9.1.0" + glob "9.3.5" + gluegun "5.1.6" + graphql "15.5.0" + immutable "4.2.1" + ipfs-http-client "55.0.0" + jayson "4.0.0" + js-yaml "3.14.1" + prettier "3.0.3" + semver "7.4.0" + sync-request "6.1.0" + tmp-promise "3.0.3" + web3-eth-abi "1.7.0" + which "2.0.2" + yaml "1.10.2" + +"@graphprotocol/graph-ts@^0.31.0": + version "0.31.0" + resolved "https://registry.yarnpkg.com/@graphprotocol/graph-ts/-/graph-ts-0.31.0.tgz#730668c0369828b31bef81e8d9bc66b9b48e3480" + integrity sha512-xreRVM6ho2BtolyOh2flDkNoGZximybnzUnF53zJVp0+Ed0KnAlO1/KOCUYw06euVI9tk0c9nA2Z/D5SIQV2Rg== + dependencies: + assemblyscript "0.19.10" + +"@ipld/dag-cbor@^7.0.0": + version "7.0.3" + resolved "https://registry.yarnpkg.com/@ipld/dag-cbor/-/dag-cbor-7.0.3.tgz#aa31b28afb11a807c3d627828a344e5521ac4a1e" + integrity sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA== + dependencies: + cborg "^1.6.0" + multiformats "^9.5.4" + +"@ipld/dag-json@^8.0.1": + version "8.0.11" + resolved "https://registry.yarnpkg.com/@ipld/dag-json/-/dag-json-8.0.11.tgz#8d30cc2dfacb0aef04d327465d3df91e79e8b6ce" + integrity sha512-Pea7JXeYHTWXRTIhBqBlhw7G53PJ7yta3G/sizGEZyzdeEwhZRr0od5IQ0r2ZxOt1Do+2czddjeEPp+YTxDwCA== + dependencies: + cborg "^1.5.4" + multiformats "^9.5.4" + +"@ipld/dag-pb@^2.1.3": + version "2.1.18" + resolved "https://registry.yarnpkg.com/@ipld/dag-pb/-/dag-pb-2.1.18.tgz#12d63e21580e87c75fd1a2c62e375a78e355c16f" + integrity sha512-ZBnf2fuX9y3KccADURG5vb9FaOeMjFkCrNysB0PtftME/4iCTjxfaLoNq/IAh5fTqUOMXvryN6Jyka4ZGuMLIg== + dependencies: + multiformats "^9.5.4" + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@multiformats/base-x@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@multiformats/base-x/-/base-x-4.0.1.tgz#95ff0fa58711789d53aefb2590a8b7a4e715d121" + integrity sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@oclif/core@2.8.6": + version "2.8.6" + resolved "https://registry.yarnpkg.com/@oclif/core/-/core-2.8.6.tgz#7eb6984108f471ad0d719d3c07cde14c47ab17c5" + integrity sha512-1QlPaHMhOORySCXkQyzjsIsy2GYTilOw3LkjeHkCgsPJQjAT4IclVytJusWktPbYNys9O+O4V23J44yomQvnBQ== + dependencies: + "@types/cli-progress" "^3.11.0" + ansi-escapes "^4.3.2" + ansi-styles "^4.3.0" + cardinal "^2.1.1" + chalk "^4.1.2" + clean-stack "^3.0.1" + cli-progress "^3.12.0" + debug "^4.3.4" + ejs "^3.1.8" + fs-extra "^9.1.0" + get-package-type "^0.1.0" + globby "^11.1.0" + hyperlinker "^1.0.0" + indent-string "^4.0.0" + is-wsl "^2.2.0" + js-yaml "^3.14.1" + natural-orderby "^2.0.3" + object-treeify "^1.1.33" + password-prompt "^1.1.2" + semver "^7.3.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + supports-color "^8.1.1" + supports-hyperlinks "^2.2.0" + ts-node "^10.9.1" + tslib "^2.5.0" + widest-line "^3.1.0" + wordwrap "^1.0.0" + wrap-ansi "^7.0.0" + +"@oclif/core@^2.15.0": + version "2.16.0" + resolved "https://registry.yarnpkg.com/@oclif/core/-/core-2.16.0.tgz#e6f3c6c359d4313a15403d8652bbdd0e99ce4b3a" + integrity sha512-dL6atBH0zCZl1A1IXCKJgLPrM/wR7K+Wi401E/IvqsK8m2iCHW+0TEOGrans/cuN3oTW+uxIyJFHJ8Im0k4qBw== + dependencies: + "@types/cli-progress" "^3.11.0" + ansi-escapes "^4.3.2" + ansi-styles "^4.3.0" + cardinal "^2.1.1" + chalk "^4.1.2" + clean-stack "^3.0.1" + cli-progress "^3.12.0" + debug "^4.3.4" + ejs "^3.1.8" + get-package-type "^0.1.0" + globby "^11.1.0" + hyperlinker "^1.0.0" + indent-string "^4.0.0" + is-wsl "^2.2.0" + js-yaml "^3.14.1" + natural-orderby "^2.0.3" + object-treeify "^1.1.33" + password-prompt "^1.1.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + supports-color "^8.1.1" + supports-hyperlinks "^2.2.0" + ts-node "^10.9.1" + tslib "^2.5.0" + widest-line "^3.1.0" + wordwrap "^1.0.0" + wrap-ansi "^7.0.0" + +"@oclif/plugin-autocomplete@^2.3.6": + version "2.3.10" + resolved "https://registry.yarnpkg.com/@oclif/plugin-autocomplete/-/plugin-autocomplete-2.3.10.tgz#787f6208cdfe10ffc68ad89e9e7f1a7ad0e8987f" + integrity sha512-Ow1AR8WtjzlyCtiWWPgzMyT8SbcDJFr47009riLioHa+MHX2BCDtVn2DVnN/E6b9JlPV5ptQpjefoRSNWBesmg== + dependencies: + "@oclif/core" "^2.15.0" + chalk "^4.1.0" + debug "^4.3.4" + +"@oclif/plugin-not-found@^2.4.0": + version "2.4.3" + resolved "https://registry.yarnpkg.com/@oclif/plugin-not-found/-/plugin-not-found-2.4.3.tgz#3d24095adb0f3876cb4bcfdfdcb775086cf6d4b5" + integrity sha512-nIyaR4y692frwh7wIHZ3fb+2L6XEecQwRDIb4zbEam0TvaVmBQWZoColQyWA84ljFBPZ8XWiQyTz+ixSwdRkqg== + dependencies: + "@oclif/core" "^2.15.0" + chalk "^4" + fast-levenshtein "^3.0.0" + +"@peculiar/asn1-schema@^2.3.6": + version "2.3.6" + resolved "https://registry.yarnpkg.com/@peculiar/asn1-schema/-/asn1-schema-2.3.6.tgz#3dd3c2ade7f702a9a94dfb395c192f5fa5d6b922" + integrity sha512-izNRxPoaeJeg/AyH8hER6s+H7p4itk+03QCa4sbxI3lNdseQYCuxzgsuNK8bTXChtLTjpJz6NmXKA73qLa3rCA== + dependencies: + asn1js "^3.0.5" + pvtsutils "^1.3.2" + tslib "^2.4.0" + +"@peculiar/json-schema@^1.1.12": + version "1.1.12" + resolved "https://registry.yarnpkg.com/@peculiar/json-schema/-/json-schema-1.1.12.tgz#fe61e85259e3b5ba5ad566cb62ca75b3d3cd5339" + integrity sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w== + dependencies: + tslib "^2.0.0" + +"@peculiar/webcrypto@^1.4.0": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@peculiar/webcrypto/-/webcrypto-1.4.3.tgz#078b3e8f598e847b78683dc3ba65feb5029b93a7" + integrity sha512-VtaY4spKTdN5LjJ04im/d/joXuvLbQdgy5Z4DXF4MFZhQ+MTrejbNMkfZBp1Bs3O5+bFqnJgyGdPuZQflvIa5A== + dependencies: + "@peculiar/asn1-schema" "^2.3.6" + "@peculiar/json-schema" "^1.1.12" + pvtsutils "^1.3.2" + tslib "^2.5.0" + webcrypto-core "^1.7.7" + +"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" + integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== + +"@protobufjs/base64@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" + integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== + +"@protobufjs/codegen@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" + integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== + +"@protobufjs/eventemitter@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" + integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== + +"@protobufjs/fetch@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" + integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== + dependencies: + "@protobufjs/aspromise" "^1.1.1" + "@protobufjs/inquire" "^1.1.0" + +"@protobufjs/float@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" + integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== + +"@protobufjs/inquire@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" + integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== + +"@protobufjs/path@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" + integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== + +"@protobufjs/pool@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" + integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== + +"@protobufjs/utf8@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" + integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== + +"@rescript/std@9.0.0": + version "9.0.0" + resolved "https://registry.yarnpkg.com/@rescript/std/-/std-9.0.0.tgz#df53f3fa5911cb4e85bd66b92e9e58ddf3e4a7e1" + integrity sha512-zGzFsgtZ44mgL4Xef2gOy1hrRVdrs9mcxCOOKZrIPsmbZW14yTkaF591GXxpQvjXiHtgZ/iA9qLyWH6oSReIxQ== + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + +"@types/bn.js@^5.1.0": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.2.tgz#162f5238c46f4bcbac07a98561724eca1fcf0c5e" + integrity sha512-dkpZu0szUtn9UXTmw+e0AJFd4D2XAxDnsCLdc05SfqpqzPEBft8eQr8uaFitfo/dUUOZERaLec2hHMG87A4Dxg== + dependencies: + "@types/node" "*" + +"@types/cli-progress@^3.11.0": + version "3.11.3" + resolved "https://registry.yarnpkg.com/@types/cli-progress/-/cli-progress-3.11.3.tgz#2a982d4c68fb288048daa0b3293c0ce81c1785ee" + integrity sha512-/+C9xAdVtc+g5yHHkGBThgAA8rYpi5B+2ve3wLtybYj0JHEBs57ivR4x/zGfSsplRnV+psE91Nfin1soNKqz5Q== + dependencies: + "@types/node" "*" + +"@types/concat-stream@^1.6.0": + version "1.6.1" + resolved "https://registry.yarnpkg.com/@types/concat-stream/-/concat-stream-1.6.1.tgz#24bcfc101ecf68e886aaedce60dfd74b632a1b74" + integrity sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA== + dependencies: + "@types/node" "*" + +"@types/connect@^3.4.33": + version "3.4.36" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.36.tgz#e511558c15a39cb29bd5357eebb57bd1459cd1ab" + integrity sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w== + dependencies: + "@types/node" "*" + +"@types/form-data@0.0.33": + version "0.0.33" + resolved "https://registry.yarnpkg.com/@types/form-data/-/form-data-0.0.33.tgz#c9ac85b2a5fd18435b8c85d9ecb50e6d6c893ff8" + integrity sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw== + dependencies: + "@types/node" "*" + +"@types/long@^4.0.1": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" + integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== + +"@types/minimatch@^3.0.4": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== + +"@types/node@*", "@types/node@>=13.7.0": + version "20.8.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.8.0.tgz#10ddf0119cf20028781c06d7115562934e53f745" + integrity sha512-LzcWltT83s1bthcvjBmiBvGJiiUe84NWRHkw+ZV6Fr41z2FbIzvc815dk2nQ3RAKMuN2fkenM/z3Xv2QzEpYxQ== + +"@types/node@^10.0.3": + version "10.17.60" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" + integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== + +"@types/node@^12.12.54": + version "12.20.55" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" + integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== + +"@types/node@^8.0.0": + version "8.10.66" + resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.66.tgz#dd035d409df322acc83dff62a602f12a5783bbb3" + integrity sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/pbkdf2@^3.0.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" + integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== + dependencies: + "@types/node" "*" + +"@types/qs@^6.2.31": + version "6.9.8" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.8.tgz#f2a7de3c107b89b441e071d5472e6b726b4adf45" + integrity sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg== + +"@types/secp256k1@^4.0.1": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.4.tgz#33c760de627fce1f449c2d4270da07e4da54c830" + integrity sha512-oN0PFsYxDZnX/qSJ5S5OwaEDTYfekhvaM5vqui2bu1AA39pKofmgL104Q29KiOXizXS2yLjSzc5YdTyMKdcy4A== + dependencies: + "@types/node" "*" + +"@types/ws@^7.4.4": + version "7.4.7" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" + integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== + dependencies: + "@types/node" "*" + +"@whatwg-node/events@^0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@whatwg-node/events/-/events-0.0.3.tgz#13a65dd4f5893f55280f766e29ae48074927acad" + integrity sha512-IqnKIDWfXBJkvy/k6tzskWTc2NK3LcqHlb+KHGCrjOCH4jfQckRX0NAiIcC/vIqQkzLYw2r2CTSwAxcrtcD6lA== + +"@whatwg-node/fetch@^0.8.4": + version "0.8.8" + resolved "https://registry.yarnpkg.com/@whatwg-node/fetch/-/fetch-0.8.8.tgz#48c6ad0c6b7951a73e812f09dd22d75e9fa18cae" + integrity sha512-CdcjGC2vdKhc13KKxgsc6/616BQ7ooDIgPeTuAiE8qfCnS0mGzcfCOoZXypQSz73nxI+GWc7ZReIAVhxoE1KCg== + dependencies: + "@peculiar/webcrypto" "^1.4.0" + "@whatwg-node/node-fetch" "^0.3.6" + busboy "^1.6.0" + urlpattern-polyfill "^8.0.0" + web-streams-polyfill "^3.2.1" + +"@whatwg-node/node-fetch@^0.3.6": + version "0.3.6" + resolved "https://registry.yarnpkg.com/@whatwg-node/node-fetch/-/node-fetch-0.3.6.tgz#e28816955f359916e2d830b68a64493124faa6d0" + integrity sha512-w9wKgDO4C95qnXZRwZTfCmLWqyRnooGjcIwG0wADWjw9/HN0p7dtvtgSvItZtUyNteEvgTrd8QojNEqV6DAGTA== + dependencies: + "@whatwg-node/events" "^0.0.3" + busboy "^1.6.0" + fast-querystring "^1.1.1" + fast-url-parser "^1.1.3" + tslib "^2.3.1" + +"@zxing/text-encoding@0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@zxing/text-encoding/-/text-encoding-0.9.0.tgz#fb50ffabc6c7c66a0c96b4c03e3d9be74864b70b" + integrity sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA== + +JSONStream@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.2.tgz#c102371b6ec3a7cf3b847ca00c20bb0fce4c6dea" + integrity sha512-mn0KSip7N4e0UDPZHnqDsHECo5uGQrixQKnAskOM1BIB8hd7QKbd6il8IPRPudPHOeHiECoCFqhyMaRO9+nWyA== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +JSONStream@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^8.4.1: + version "8.10.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" + integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== + +ansi-colors@^4.1.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-escapes@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" + integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0, ansi-styles@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansicolors@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" + integrity sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg== + +any-signal@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/any-signal/-/any-signal-2.1.2.tgz#8d48270de0605f8b218cf9abe8e9c6a0e7418102" + integrity sha512-B+rDnWasMi/eWcajPcCWSlYc7muXOrcYrqgyzcdKisl2H/WTlQ0gip1KyQfr0ZlxJdsuWCj/LWwQm7fhyhRfIQ== + dependencies: + abort-controller "^3.0.0" + native-abort-controller "^1.0.3" + +any-signal@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/any-signal/-/any-signal-3.0.1.tgz#49cae34368187a3472e31de28fb5cb1430caa9a6" + integrity sha512-xgZgJtKEa9YmDqXodIgl7Fl1C8yNXr8w6gXjqK3LW4GcEiYT+6AQfJSE/8SPsEpLLmcvbv8YU+qet94UewHxqg== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +apisauce@^2.1.5: + version "2.1.6" + resolved "https://registry.yarnpkg.com/apisauce/-/apisauce-2.1.6.tgz#94887f335bf3d735305fc895c8a191c9c2608a7f" + integrity sha512-MdxR391op/FucS2YQRfB/NMRyCnHEPDd4h17LRIuVYi0BpGmMhpxc0shbOpfs5ahABuBEffNCGal5EcsydbBWg== + dependencies: + axios "^0.21.4" + +app-module-path@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/app-module-path/-/app-module-path-2.2.0.tgz#641aa55dfb7d6a6f0a8141c4b9c0aa50b6c24dd5" + integrity sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ== + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +asap@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +asn1js@^3.0.1, asn1js@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/asn1js/-/asn1js-3.0.5.tgz#5ea36820443dbefb51cc7f88a2ebb5b462114f38" + integrity sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ== + dependencies: + pvtsutils "^1.3.2" + pvutils "^1.1.3" + tslib "^2.4.0" + +assemblyscript@0.19.10: + version "0.19.10" + resolved "https://registry.yarnpkg.com/assemblyscript/-/assemblyscript-0.19.10.tgz#7ede6d99c797a219beb4fa4614c3eab9e6343c8e" + integrity sha512-HavcUBXB3mBTRGJcpvaQjmnmaqKHBGREjSPNsIvnAk2f9dj78y4BkMaSSdvBQYWcDDzsHQjyUC8stICFkD1Odg== + dependencies: + binaryen "101.0.0-nightly.20210723" + long "^4.0.0" + +assemblyscript@0.19.23, assemblyscript@^0.19.0: + version "0.19.23" + resolved "https://registry.yarnpkg.com/assemblyscript/-/assemblyscript-0.19.23.tgz#16ece69f7f302161e2e736a0f6a474e6db72134c" + integrity sha512-fwOQNZVTMga5KRsfY80g7cpOl4PsFQczMwHzdtgoqLXaYhkhavufKb0sB0l3T1DUxpAufA0KNhlbpuuhZUwxMA== + dependencies: + binaryen "102.0.0-nightly.20211028" + long "^5.2.0" + source-map-support "^0.5.20" + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async@^3.2.3: + version "3.2.4" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" + integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +axios@^0.21.1, axios@^0.21.4: + version "0.21.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" + integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== + dependencies: + follow-redirects "^1.14.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base-x@^3.0.2, base-x@^3.0.8: + version "3.0.9" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" + integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== + dependencies: + safe-buffer "^5.0.1" + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +binary-install-raw@0.0.13: + version "0.0.13" + resolved "https://registry.yarnpkg.com/binary-install-raw/-/binary-install-raw-0.0.13.tgz#43a13c6980eb9844e2932eb7a91a56254f55b7dd" + integrity sha512-v7ms6N/H7iciuk6QInon3/n2mu7oRX+6knJ9xFPsJ3rQePgAqcR3CRTwUheFd8SLbiq4LL7Z4G/44L9zscdt9A== + dependencies: + axios "^0.21.1" + rimraf "^3.0.2" + tar "^6.1.0" + +binaryen@101.0.0-nightly.20210723: + version "101.0.0-nightly.20210723" + resolved "https://registry.yarnpkg.com/binaryen/-/binaryen-101.0.0-nightly.20210723.tgz#b6bb7f3501341727681a03866c0856500eec3740" + integrity sha512-eioJNqhHlkguVSbblHOtLqlhtC882SOEPKmNFZaDuz1hzQjolxZ+eu3/kaS10n3sGPONsIZsO7R9fR00UyhEUA== + +binaryen@102.0.0-nightly.20211028: + version "102.0.0-nightly.20211028" + resolved "https://registry.yarnpkg.com/binaryen/-/binaryen-102.0.0-nightly.20211028.tgz#8f1efb0920afd34509e342e37f84313ec936afb2" + integrity sha512-GCJBVB5exbxzzvyt8MGDv/MeUjs6gkXDvf4xOIItRBptYl0Tz5sm1o/uG95YK0L0VeG5ajDu3hRtkBP2kzqC5w== + +bl@^1.0.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.3.tgz#1e8dd80142eac80d7158c9dccc047fb620e035e7" + integrity sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww== + dependencies: + readable-stream "^2.3.5" + safe-buffer "^5.1.1" + +blakejs@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" + integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== + +blob-to-it@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/blob-to-it/-/blob-to-it-1.0.4.tgz#f6caf7a4e90b7bb9215fa6a318ed6bd8ad9898cb" + integrity sha512-iCmk0W4NdbrWgRRuxOriU8aM5ijeVLI61Zulsmg/lUHNr7pYjoj+U77opLefNagevtrrbMt3JQ5Qip7ar178kA== + dependencies: + browser-readablestream-to-it "^1.0.3" + +bn.js@4.11.6: + version "4.11.6" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== + +bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + +browser-readablestream-to-it@^1.0.0, browser-readablestream-to-it@^1.0.1, browser-readablestream-to-it@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/browser-readablestream-to-it/-/browser-readablestream-to-it-1.0.3.tgz#ac3e406c7ee6cdf0a502dd55db33bab97f7fba76" + integrity sha512-+12sHB+Br8HIh6VAMVEG5r3UXCyESIgDW7kzk3BjIXa43DVqVwL7GC5TW3jeh+72dtcH99pPVpw0X8i0jt+/kw== + +browserify-aes@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +bs58@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== + dependencies: + base-x "^3.0.2" + +bs58check@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" + integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== + dependencies: + bs58 "^4.0.0" + create-hash "^1.1.0" + safe-buffer "^5.1.2" + +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + integrity sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ== + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== + +buffer@^5.5.0, buffer@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +buffer@^6.0.1, buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +busboy@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" + integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== + dependencies: + streamsearch "^1.1.0" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +cardinal@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-2.1.1.tgz#7cc1055d822d212954d07b085dea251cc7bc5505" + integrity sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw== + dependencies: + ansicolors "~0.3.2" + redeyed "~2.1.0" + +caseless@^0.12.0, caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== + +cborg@^1.5.4, cborg@^1.6.0: + version "1.10.2" + resolved "https://registry.yarnpkg.com/cborg/-/cborg-1.10.2.tgz#83cd581b55b3574c816f82696307c7512db759a1" + integrity sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug== + +chalk@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chokidar@3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chownr@^1.0.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +cids@^1.1.5: + version "1.1.9" + resolved "https://registry.yarnpkg.com/cids/-/cids-1.1.9.tgz#402c26db5c07059377bcd6fb82f2a24e7f2f4a4f" + integrity sha512-l11hWRfugIcbGuTZwAM5PwpjPPjyb6UZOGwlHSnOBV5o07XhQ4gNpBN67FbODvpjyHtd+0Xs6KNvUcGBiDRsdg== + dependencies: + multibase "^4.0.1" + multicodec "^3.0.1" + multihashes "^4.0.1" + uint8arrays "^3.0.0" + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +clean-stack@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-3.0.1.tgz#155bf0b2221bf5f4fba89528d24c5953f17fe3a8" + integrity sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg== + dependencies: + escape-string-regexp "4.0.0" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-progress@^3.12.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/cli-progress/-/cli-progress-3.12.0.tgz#807ee14b66bcc086258e444ad0f19e7d42577942" + integrity sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A== + dependencies: + string-width "^4.2.3" + +cli-spinners@^2.2.0: + version "2.9.1" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.1.tgz#9c0b9dad69a6d47cbb4333c14319b060ed395a35" + integrity sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ== + +cli-table3@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee" + integrity sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ== + dependencies: + object-assign "^4.1.0" + string-width "^4.2.0" + optionalDependencies: + colors "^1.1.2" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colors@1.4.0, colors@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +combined-stream@^1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.20.3: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +concat-stream@^1.6.0, concat-stream@^1.6.2, concat-stream@~1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cosmiconfig@7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" + integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-spawn@7.0.3, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +debug@4.3.4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@^3.2.6: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +defaults@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== + dependencies: + clone "^1.0.2" + +delay@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" + integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dns-over-http-resolver@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/dns-over-http-resolver/-/dns-over-http-resolver-1.2.3.tgz#194d5e140a42153f55bb79ac5a64dd2768c36af9" + integrity sha512-miDiVSI6KSNbi4SVifzO/reD8rMnxgrlnkrlkugOLQpWQTe2qMdHsZp5DmfKjxNE+/T3VAAYLQUZMv9SMr6+AA== + dependencies: + debug "^4.3.1" + native-fetch "^3.0.0" + receptacle "^1.3.2" + +docker-compose@0.23.19: + version "0.23.19" + resolved "https://registry.yarnpkg.com/docker-compose/-/docker-compose-0.23.19.tgz#9947726e2fe67bdfa9e8efe1ff15aa0de2e10eb8" + integrity sha512-v5vNLIdUqwj4my80wxFDkNH+4S85zsRuH29SO7dCWVWPCMt/ohZBsGN6g6KXWifT0pzQ7uOxqEKCYCDPJ8Vz4g== + dependencies: + yaml "^1.10.2" + +docker-modem@^1.0.8: + version "1.0.9" + resolved "https://registry.yarnpkg.com/docker-modem/-/docker-modem-1.0.9.tgz#a1f13e50e6afb6cf3431b2d5e7aac589db6aaba8" + integrity sha512-lVjqCSCIAUDZPAZIeyM125HXfNvOmYYInciphNrLrylUtKyW66meAjSPXWchKVzoIYZx69TPnAepVSSkeawoIw== + dependencies: + JSONStream "1.3.2" + debug "^3.2.6" + readable-stream "~1.0.26-4" + split-ca "^1.0.0" + +dockerode@2.5.8: + version "2.5.8" + resolved "https://registry.yarnpkg.com/dockerode/-/dockerode-2.5.8.tgz#1b661e36e1e4f860e25f56e0deabe9f87f1d0acc" + integrity sha512-+7iOUYBeDTScmOmQqpUYQaE7F4vvIt6+gIZNHWhqAQEI887tiPFB9OvXI/HzQYqfUNvukMK+9myLW63oTJPZpw== + dependencies: + concat-stream "~1.6.2" + docker-modem "^1.0.8" + tar-fs "~1.16.3" + +ejs@3.1.8: + version "3.1.8" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.8.tgz#758d32910c78047585c7ef1f92f9ee041c1c190b" + integrity sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ== + dependencies: + jake "^10.8.5" + +ejs@^3.1.8: + version "3.1.9" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" + integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== + dependencies: + jake "^10.8.5" + +electron-fetch@^1.7.2: + version "1.9.1" + resolved "https://registry.yarnpkg.com/electron-fetch/-/electron-fetch-1.9.1.tgz#e28bfe78d467de3f2dec884b1d72b8b05322f30f" + integrity sha512-M9qw6oUILGVrcENMSRRefE1MbHPIz0h79EKIeJWK9v563aT9Qkh8aEHPO1H5vi970wPirNY+jO9OpFoLiMsMGA== + dependencies: + encoding "^0.1.13" + +elliptic@6.5.4, elliptic@^6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +encoding@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enquirer@2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +err-code@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-3.0.1.tgz#a444c7b992705f2b120ee320b09972eef331c920" + integrity sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es6-promise@^4.0.3: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ== + dependencies: + es6-promise "^4.0.3" + +escape-string-regexp@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +esprima@^4.0.0, esprima@~4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +ethereum-bloom-filters@^1.0.6: + version "1.0.10" + resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" + integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA== + dependencies: + js-sha3 "^0.8.0" + +ethereum-cryptography@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" + integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== + dependencies: + "@types/pbkdf2" "^3.0.0" + "@types/secp256k1" "^4.0.1" + blakejs "^1.1.0" + browserify-aes "^1.2.0" + bs58check "^2.1.2" + create-hash "^1.2.0" + create-hmac "^1.1.7" + hash.js "^1.1.7" + keccak "^3.0.0" + pbkdf2 "^3.0.17" + randombytes "^2.1.0" + safe-buffer "^5.1.2" + scrypt-js "^3.0.0" + secp256k1 "^4.0.1" + setimmediate "^1.0.5" + +ethereumjs-util@^7.1.0: + version "7.1.5" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" + integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== + dependencies: + "@types/bn.js" "^5.1.0" + bn.js "^5.1.2" + create-hash "^1.1.2" + ethereum-cryptography "^0.1.3" + rlp "^2.2.4" + +ethjs-unit@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" + integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== + dependencies: + bn.js "4.11.6" + number-to-bn "1.7.0" + +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + +evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +eyes@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" + integrity sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ== + +fast-decode-uri-component@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz#46f8b6c22b30ff7a81357d4f59abfae938202543" + integrity sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg== + +fast-fifo@^1.0.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" + integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== + +fast-glob@^3.2.9: + version "3.3.1" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" + integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-levenshtein@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz#37b899ae47e1090e40e3fd2318e4d5f0142ca912" + integrity sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ== + dependencies: + fastest-levenshtein "^1.0.7" + +fast-querystring@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/fast-querystring/-/fast-querystring-1.1.2.tgz#a6d24937b4fc6f791b4ee31dcb6f53aeafb89f53" + integrity sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg== + dependencies: + fast-decode-uri-component "^1.0.1" + +fast-url-parser@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/fast-url-parser/-/fast-url-parser-1.1.3.tgz#f4af3ea9f34d8a271cf58ad2b3759f431f0b318d" + integrity sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ== + dependencies: + punycode "^1.3.2" + +fastest-levenshtein@^1.0.7: + version "1.0.16" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== + +fastq@^1.6.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + dependencies: + reusify "^1.0.4" + +filelist@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +follow-redirects@^1.14.0: + version "1.15.3" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" + integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +form-data@^2.2.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" + integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-extra@9.1.0, fs-extra@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-jetpack@4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/fs-jetpack/-/fs-jetpack-4.3.1.tgz#cdfd4b64e6bfdec7c7dc55c76b39efaa7853bb20" + integrity sha512-dbeOK84F6BiQzk2yqqCVwCPWTxAvVGJ3fMQc6E2wuEohS28mR6yHngbrKuVCK1KHRx/ccByDylqu4H5PCP2urQ== + dependencies: + minimatch "^3.0.2" + rimraf "^2.6.3" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.3: + version "1.2.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" + integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-proto "^1.0.1" + has-symbols "^1.0.3" + +get-iterator@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-iterator/-/get-iterator-1.0.2.tgz#cd747c02b4c084461fac14f48f6b45a80ed25c82" + integrity sha512-v+dm9bNVfOYsY1OrhaCrmyOcYoSeVvbt+hHZ0Au+T+p1y+0Uyj9aMaGIeUTT6xdpRbWzDeYKvfOslPhggQMcsg== + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-port@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" + integrity sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg== + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@9.3.5: + version "9.3.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.5.tgz#ca2ed8ca452781a3009685607fdf025a899dfe21" + integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== + dependencies: + fs.realpath "^1.0.0" + minimatch "^8.0.2" + minipass "^4.2.4" + path-scurry "^1.6.1" + +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +gluegun@5.1.6: + version "5.1.6" + resolved "https://registry.yarnpkg.com/gluegun/-/gluegun-5.1.6.tgz#74ec13193913dc610f5c1a4039972c70c96a7bad" + integrity sha512-9zbi4EQWIVvSOftJWquWzr9gLX2kaDgPkNR5dYWbM53eVvCI3iKuxLlnKoHC0v4uPoq+Kr/+F569tjoFbA4DSA== + dependencies: + apisauce "^2.1.5" + app-module-path "^2.2.0" + cli-table3 "0.6.0" + colors "1.4.0" + cosmiconfig "7.0.1" + cross-spawn "7.0.3" + ejs "3.1.8" + enquirer "2.3.6" + execa "5.1.1" + fs-jetpack "4.3.1" + lodash.camelcase "^4.3.0" + lodash.kebabcase "^4.1.1" + lodash.lowercase "^4.3.0" + lodash.lowerfirst "^4.3.1" + lodash.pad "^4.5.1" + lodash.padend "^4.6.1" + lodash.padstart "^4.6.1" + lodash.repeat "^4.1.0" + lodash.snakecase "^4.1.1" + lodash.startcase "^4.4.0" + lodash.trim "^4.5.1" + lodash.trimend "^4.5.1" + lodash.trimstart "^4.5.1" + lodash.uppercase "^4.3.0" + lodash.upperfirst "^4.3.1" + ora "4.0.2" + pluralize "^8.0.0" + semver "7.3.5" + which "2.0.2" + yargs-parser "^21.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphql-import-node@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/graphql-import-node/-/graphql-import-node-0.0.5.tgz#caf76a6cece10858b14f27cce935655398fc1bf0" + integrity sha512-OXbou9fqh9/Lm7vwXT0XoRN9J5+WCYKnbiTalgFDvkQERITRmcfncZs6aVABedd5B85yQU5EULS4a5pnbpuI0Q== + +graphql@15.5.0: + version "15.5.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.5.0.tgz#39d19494dbe69d1ea719915b578bf920344a69d5" + integrity sha512-OmaM7y0kaK31NKG31q4YbD2beNYa6jBBKtMFT6gLYJljHLJr42IqJ8KX08u3Li/0ifzTU5HjmoOOrwa5BRLeDA== + +graphql@^16.6.0: + version "16.8.1" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07" + integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +http-basic@^8.1.1: + version "8.1.3" + resolved "https://registry.yarnpkg.com/http-basic/-/http-basic-8.1.3.tgz#a7cabee7526869b9b710136970805b1004261bbf" + integrity sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw== + dependencies: + caseless "^0.12.0" + concat-stream "^1.6.2" + http-response-object "^3.0.1" + parse-cache-control "^1.0.1" + +http-response-object@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/http-response-object/-/http-response-object-3.0.2.tgz#7f435bb210454e4360d074ef1f989d5ea8aa9810" + integrity sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA== + dependencies: + "@types/node" "^10.0.3" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +hyperlinker@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hyperlinker/-/hyperlinker-1.0.0.tgz#23dc9e38a206b208ee49bc2d6c8ef47027df0c0e" + integrity sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ== + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ieee754@^1.1.13, ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore@^5.2.0: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + +immutable@4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.2.1.tgz#8a4025691018c560a40c67e43d698f816edc44d4" + integrity sha512-7WYV7Q5BTs0nlQm7tl92rDYYoyELLKHoDMBKhrxEoiV4mrfVdRz8hzPiYOzH7yWjzoVEamxRuAqhxL2PLRwZYQ== + +import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +interface-datastore@^6.0.2: + version "6.1.1" + resolved "https://registry.yarnpkg.com/interface-datastore/-/interface-datastore-6.1.1.tgz#5150a00de2e7513eaadba58bcafd059cb50004c1" + integrity sha512-AmCS+9CT34pp2u0QQVXjKztkuq3y5T+BIciuiHDDtDZucZD8VudosnSdUyXJV6IsRkN5jc4RFDhCk1O6Q3Gxjg== + dependencies: + interface-store "^2.0.2" + nanoid "^3.0.2" + uint8arrays "^3.0.0" + +interface-store@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/interface-store/-/interface-store-2.0.2.tgz#83175fd2b0c501585ed96db54bb8ba9d55fce34c" + integrity sha512-rScRlhDcz6k199EkHqT8NpM87ebN89ICOzILoBHgaG36/WX50N32BnU/kpZgCGPLhARRAWUUX5/cyaIjt7Kipg== + +ip-regex@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" + integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== + +ipfs-core-types@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/ipfs-core-types/-/ipfs-core-types-0.9.0.tgz#cb201ff7a9470651ba14c4e7fae56661a55bf37e" + integrity sha512-VJ8vJSHvI1Zm7/SxsZo03T+zzpsg8pkgiIi5hfwSJlsrJ1E2v68QPlnLshGHUSYw89Oxq0IbETYl2pGTFHTWfg== + dependencies: + interface-datastore "^6.0.2" + multiaddr "^10.0.0" + multiformats "^9.4.13" + +ipfs-core-utils@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/ipfs-core-utils/-/ipfs-core-utils-0.13.0.tgz#8f0ec9aaa7c24f6f307e6e76e7bdc1cefd829894" + integrity sha512-HP5EafxU4/dLW3U13CFsgqVO5Ika8N4sRSIb/dTg16NjLOozMH31TXV0Grtu2ZWo1T10ahTzMvrfT5f4mhioXw== + dependencies: + any-signal "^2.1.2" + blob-to-it "^1.0.1" + browser-readablestream-to-it "^1.0.1" + debug "^4.1.1" + err-code "^3.0.1" + ipfs-core-types "^0.9.0" + ipfs-unixfs "^6.0.3" + ipfs-utils "^9.0.2" + it-all "^1.0.4" + it-map "^1.0.4" + it-peekable "^1.0.2" + it-to-stream "^1.0.0" + merge-options "^3.0.4" + multiaddr "^10.0.0" + multiaddr-to-uri "^8.0.0" + multiformats "^9.4.13" + nanoid "^3.1.23" + parse-duration "^1.0.0" + timeout-abort-controller "^2.0.0" + uint8arrays "^3.0.0" + +ipfs-http-client@55.0.0: + version "55.0.0" + resolved "https://registry.yarnpkg.com/ipfs-http-client/-/ipfs-http-client-55.0.0.tgz#8b713c5fa318e873b7d7ad099a4eb14320a5b0ce" + integrity sha512-GpvEs7C7WL9M6fN/kZbjeh4Y8YN7rY8b18tVWZnKxRsVwM25cIFrRI8CwNt3Ugin9yShieI3i9sPyzYGMrLNnQ== + dependencies: + "@ipld/dag-cbor" "^7.0.0" + "@ipld/dag-json" "^8.0.1" + "@ipld/dag-pb" "^2.1.3" + abort-controller "^3.0.0" + any-signal "^2.1.2" + debug "^4.1.1" + err-code "^3.0.1" + ipfs-core-types "^0.9.0" + ipfs-core-utils "^0.13.0" + ipfs-utils "^9.0.2" + it-first "^1.0.6" + it-last "^1.0.4" + merge-options "^3.0.4" + multiaddr "^10.0.0" + multiformats "^9.4.13" + native-abort-controller "^1.0.3" + parse-duration "^1.0.0" + stream-to-it "^0.2.2" + uint8arrays "^3.0.0" + +ipfs-unixfs@^6.0.3: + version "6.0.9" + resolved "https://registry.yarnpkg.com/ipfs-unixfs/-/ipfs-unixfs-6.0.9.tgz#f6613b8e081d83faa43ed96e016a694c615a9374" + integrity sha512-0DQ7p0/9dRB6XCb0mVCTli33GzIzSVx5udpJuVM47tGcD+W+Bl4LsnoLswd3ggNnNEakMv1FdoFITiEnchXDqQ== + dependencies: + err-code "^3.0.1" + protobufjs "^6.10.2" + +ipfs-utils@^9.0.2: + version "9.0.14" + resolved "https://registry.yarnpkg.com/ipfs-utils/-/ipfs-utils-9.0.14.tgz#24f5fda1f4567685eb32bca2543d518f95fd8704" + integrity sha512-zIaiEGX18QATxgaS0/EOQNoo33W0islREABAcxXE8n7y2MGAlB+hdsxXn4J0hGZge8IqVQhW8sWIb+oJz2yEvg== + dependencies: + any-signal "^3.0.0" + browser-readablestream-to-it "^1.0.0" + buffer "^6.0.1" + electron-fetch "^1.7.2" + err-code "^3.0.1" + is-electron "^2.2.0" + iso-url "^1.1.5" + it-all "^1.0.4" + it-glob "^1.0.1" + it-to-stream "^1.0.0" + merge-options "^3.0.4" + nanoid "^3.1.20" + native-fetch "^3.0.0" + node-fetch "^2.6.8" + react-native-fetch-api "^3.0.0" + stream-to-it "^0.2.2" + +is-arguments@^1.0.4: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-callable@^1.1.3: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-docker@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-electron@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/is-electron/-/is-electron-2.2.2.tgz#3778902a2044d76de98036f5dc58089ac4d80bb9" + integrity sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-function@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-hex-prefixed@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" + integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-ip@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-ip/-/is-ip-3.1.0.tgz#2ae5ddfafaf05cb8008a62093cf29734f657c5d8" + integrity sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q== + dependencies: + ip-regex "^4.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-typed-array@^1.1.3: + version "1.1.12" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" + integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== + dependencies: + which-typed-array "^1.1.11" + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +iso-url@^1.1.5: + version "1.2.1" + resolved "https://registry.yarnpkg.com/iso-url/-/iso-url-1.2.1.tgz#db96a49d8d9a64a1c889fc07cc525d093afb1811" + integrity sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng== + +isomorphic-ws@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" + integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== + +it-all@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/it-all/-/it-all-1.0.6.tgz#852557355367606295c4c3b7eff0136f07749335" + integrity sha512-3cmCc6Heqe3uWi3CVM/k51fa/XbMFpQVzFoDsV0IZNHSQDyAXl3c4MjHkFX5kF3922OGj7Myv1nSEUgRtcuM1A== + +it-first@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/it-first/-/it-first-1.0.7.tgz#a4bef40da8be21667f7d23e44dae652f5ccd7ab1" + integrity sha512-nvJKZoBpZD/6Rtde6FXqwDqDZGF1sCADmr2Zoc0hZsIvnE449gRFnGctxDf09Bzc/FWnHXAdaHVIetY6lrE0/g== + +it-glob@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/it-glob/-/it-glob-1.0.2.tgz#bab9b04d6aaac42884502f3a0bfee84c7a29e15e" + integrity sha512-Ch2Dzhw4URfB9L/0ZHyY+uqOnKvBNeS/SMcRiPmJfpHiM0TsUZn+GkpcZxAoF3dJVdPm/PuIk3A4wlV7SUo23Q== + dependencies: + "@types/minimatch" "^3.0.4" + minimatch "^3.0.4" + +it-last@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/it-last/-/it-last-1.0.6.tgz#4106232e5905ec11e16de15a0e9f7037eaecfc45" + integrity sha512-aFGeibeiX/lM4bX3JY0OkVCFkAw8+n9lkukkLNivbJRvNz8lI3YXv5xcqhFUV2lDJiraEK3OXRDbGuevnnR67Q== + +it-map@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/it-map/-/it-map-1.0.6.tgz#6aa547e363eedcf8d4f69d8484b450bc13c9882c" + integrity sha512-XT4/RM6UHIFG9IobGlQPFQUrlEKkU4eBUFG3qhWhfAdh1JfF2x11ShCrKCdmZ0OiZppPfoLuzcfA4cey6q3UAQ== + +it-peekable@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/it-peekable/-/it-peekable-1.0.3.tgz#8ebe933767d9c5aa0ae4ef8e9cb3a47389bced8c" + integrity sha512-5+8zemFS+wSfIkSZyf0Zh5kNN+iGyccN02914BY4w/Dj+uoFEoPSvj5vaWn8pNZJNSxzjW0zHRxC3LUb2KWJTQ== + +it-to-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/it-to-stream/-/it-to-stream-1.0.0.tgz#6c47f91d5b5df28bda9334c52782ef8e97fe3a4a" + integrity sha512-pLULMZMAB/+vbdvbZtebC0nWBTbG581lk6w8P7DfIIIKUfa8FbY7Oi0FxZcFPbxvISs7A9E+cMpLDBc1XhpAOA== + dependencies: + buffer "^6.0.3" + fast-fifo "^1.0.0" + get-iterator "^1.0.2" + p-defer "^3.0.0" + p-fifo "^1.0.0" + readable-stream "^3.6.0" + +jake@^10.8.5: + version "10.8.7" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" + integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.4" + minimatch "^3.1.2" + +jayson@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jayson/-/jayson-4.0.0.tgz#145a0ced46f900934c9b307e1332bcb0c7dbdb17" + integrity sha512-v2RNpDCMu45fnLzSk47vx7I+QUaOsox6f5X0CUlabAFwxoP+8MfAY0NQRFwOEYXIxm8Ih5y6OaEa5KYiQMkyAA== + dependencies: + "@types/connect" "^3.4.33" + "@types/node" "^12.12.54" + "@types/ws" "^7.4.4" + JSONStream "^1.3.5" + commander "^2.20.3" + delay "^5.0.0" + es6-promisify "^5.0.0" + eyes "^0.1.8" + isomorphic-ws "^4.0.1" + json-stringify-safe "^5.0.1" + uuid "^8.3.2" + ws "^7.4.5" + +js-base64@^3.6.0: + version "3.7.5" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.5.tgz#21e24cf6b886f76d6f5f165bfcd69cc55b9e3fca" + integrity sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA== + +js-sha3@0.8.0, js-sha3@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@3.14.1, js-yaml@^3.14.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-stringify-safe@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + +keccak@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.4.tgz#edc09b89e633c0549da444432ecf062ffadee86d" + integrity sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.0" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + +lodash.kebabcase@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" + integrity sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g== + +lodash.lowercase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.lowercase/-/lodash.lowercase-4.3.0.tgz#46515aced4acb0b7093133333af068e4c3b14e9d" + integrity sha512-UcvP1IZYyDKyEL64mmrwoA1AbFu5ahojhTtkOUr1K9dbuxzS9ev8i4TxMMGCqRC9TE8uDaSoufNAXxRPNTseVA== + +lodash.lowerfirst@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/lodash.lowerfirst/-/lodash.lowerfirst-4.3.1.tgz#de3c7b12e02c6524a0059c2f6cb7c5c52655a13d" + integrity sha512-UUKX7VhP1/JL54NXg2aq/E1Sfnjjes8fNYTNkPU8ZmsaVeBvPHKdbNaN79Re5XRL01u6wbq3j0cbYZj71Fcu5w== + +lodash.pad@^4.5.1: + version "4.5.1" + resolved "https://registry.yarnpkg.com/lodash.pad/-/lodash.pad-4.5.1.tgz#4330949a833a7c8da22cc20f6a26c4d59debba70" + integrity sha512-mvUHifnLqM+03YNzeTBS1/Gr6JRFjd3rRx88FHWUvamVaT9k2O/kXha3yBSOwB9/DTQrSTLJNHvLBBt2FdX7Mg== + +lodash.padend@^4.6.1: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.padend/-/lodash.padend-4.6.1.tgz#53ccba047d06e158d311f45da625f4e49e6f166e" + integrity sha512-sOQs2aqGpbl27tmCS1QNZA09Uqp01ZzWfDUoD+xzTii0E7dSQfRKcRetFwa+uXaxaqL+TKm7CgD2JdKP7aZBSw== + +lodash.padstart@^4.6.1: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.padstart/-/lodash.padstart-4.6.1.tgz#d2e3eebff0d9d39ad50f5cbd1b52a7bce6bb611b" + integrity sha512-sW73O6S8+Tg66eY56DBk85aQzzUJDtpoXFBgELMd5P/SotAguo+1kYO6RuYgXxA4HJH3LFTFPASX6ET6bjfriw== + +lodash.repeat@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/lodash.repeat/-/lodash.repeat-4.1.0.tgz#fc7de8131d8c8ac07e4b49f74ffe829d1f2bec44" + integrity sha512-eWsgQW89IewS95ZOcr15HHCX6FVDxq3f2PNUIng3fyzsPev9imFQxIYdFZ6crl8L56UR6ZlGDLcEb3RZsCSSqw== + +lodash.snakecase@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" + integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== + +lodash.startcase@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.startcase/-/lodash.startcase-4.4.0.tgz#9436e34ed26093ed7ffae1936144350915d9add8" + integrity sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg== + +lodash.trim@^4.5.1: + version "4.5.1" + resolved "https://registry.yarnpkg.com/lodash.trim/-/lodash.trim-4.5.1.tgz#36425e7ee90be4aa5e27bcebb85b7d11ea47aa57" + integrity sha512-nJAlRl/K+eiOehWKDzoBVrSMhK0K3A3YQsUNXHQa5yIrKBAhsZgSu3KoAFoFT+mEgiyBHddZ0pRk1ITpIp90Wg== + +lodash.trimend@^4.5.1: + version "4.5.1" + resolved "https://registry.yarnpkg.com/lodash.trimend/-/lodash.trimend-4.5.1.tgz#12804437286b98cad8996b79414e11300114082f" + integrity sha512-lsD+k73XztDsMBKPKvzHXRKFNMohTjoTKIIo4ADLn5dA65LZ1BqlAvSXhR2rPEC3BgAUQnzMnorqDtqn2z4IHA== + +lodash.trimstart@^4.5.1: + version "4.5.1" + resolved "https://registry.yarnpkg.com/lodash.trimstart/-/lodash.trimstart-4.5.1.tgz#8ff4dec532d82486af59573c39445914e944a7f1" + integrity sha512-b/+D6La8tU76L/61/aN0jULWHkT0EeJCmVstPBn/K9MtD2qBW83AsBNrr63dKuWYwVMO7ucv13QNO/Ek/2RKaQ== + +lodash.uppercase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.uppercase/-/lodash.uppercase-4.3.0.tgz#c404abfd1469f93931f9bb24cf6cc7d57059bc73" + integrity sha512-+Nbnxkj7s8K5U8z6KnEYPGUOGp3woZbB7Ecs7v3LkkjLQSm2kP9SKIILitN1ktn2mB/tmM9oSlku06I+/lH7QA== + +lodash.upperfirst@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce" + integrity sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg== + +log-symbols@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" + integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== + dependencies: + chalk "^2.4.2" + +long@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" + integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== + +long@^5.2.0: + version "5.2.3" + resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" + integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +"lru-cache@^9.1.1 || ^10.0.0": + version "10.0.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.1.tgz#0a3be479df549cca0e5d693ac402ff19537a6b7a" + integrity sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g== + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +matchstick-as@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/matchstick-as/-/matchstick-as-0.6.0.tgz#c65296b1f51b1014d605c52067d9b5321ea630e8" + integrity sha512-E36fWsC1AbCkBFt05VsDDRoFvGSdcZg6oZJrtIe/YDBbuFh8SKbR5FcoqDhNWqSN+F7bN/iS2u8Md0SM+4pUpw== + dependencies: + wabt "1.0.24" + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +merge-options@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/merge-options/-/merge-options-3.0.4.tgz#84709c2aa2a4b24c1981f66c179fe5565cc6dbb7" + integrity sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ== + dependencies: + is-plain-obj "^2.1.0" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== + +minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^8.0.2: + version "8.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-8.0.4.tgz#847c1b25c014d4e9a7f68aaf63dedd668a626229" + integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass@^3.0.0: + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^4.2.4: + version "4.2.8" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" + integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": + version "7.0.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" + integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== + +minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp@^0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mkdirp@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multiaddr-to-uri@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/multiaddr-to-uri/-/multiaddr-to-uri-8.0.0.tgz#65efe4b1f9de5f6b681aa42ff36a7c8db7625e58" + integrity sha512-dq4p/vsOOUdVEd1J1gl+R2GFrXJQH8yjLtz4hodqdVbieg39LvBOdMQRdQnfbg5LSM/q1BYNVf5CBbwZFFqBgA== + dependencies: + multiaddr "^10.0.0" + +multiaddr@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/multiaddr/-/multiaddr-10.0.1.tgz#0d15848871370860a4d266bb44d93b3dac5d90ef" + integrity sha512-G5upNcGzEGuTHkzxezPrrD6CaIHR9uo+7MwqhNVcXTs33IInon4y7nMiGxl2CY5hG7chvYQUQhz5V52/Qe3cbg== + dependencies: + dns-over-http-resolver "^1.2.3" + err-code "^3.0.1" + is-ip "^3.1.0" + multiformats "^9.4.5" + uint8arrays "^3.0.0" + varint "^6.0.0" + +multibase@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/multibase/-/multibase-2.0.0.tgz#e20a2a14813fa435dc69c702909209ac0741919e" + integrity sha512-xIrqUVsinSlFjqj+OtEgCJ6MRl5hXjHMBPWsUt1ZGSRMx8rzm+7hCLE4wDeSA3COomlUC9zHCoUlvWjvAMtfDg== + dependencies: + base-x "^3.0.8" + buffer "^5.5.0" + web-encoding "^1.0.2" + +multibase@^4.0.1: + version "4.0.6" + resolved "https://registry.yarnpkg.com/multibase/-/multibase-4.0.6.tgz#6e624341483d6123ca1ede956208cb821b440559" + integrity sha512-x23pDe5+svdLz/k5JPGCVdfn7Q5mZVMBETiC+ORfO+sor9Sgs0smJzAjfTbM5tckeCqnaUuMYoz+k3RXMmJClQ== + dependencies: + "@multiformats/base-x" "^4.0.1" + +multicodec@^3.0.1, multicodec@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-3.2.1.tgz#82de3254a0fb163a107c1aab324f2a91ef51efb2" + integrity sha512-+expTPftro8VAW8kfvcuNNNBgb9gPeNYV9dn+z1kJRWF2vih+/S79f2RVeIwmrJBUJ6NT9IUPWnZDQvegEh5pw== + dependencies: + uint8arrays "^3.0.0" + varint "^6.0.0" + +multiformats@^9.4.13, multiformats@^9.4.2, multiformats@^9.4.5, multiformats@^9.5.4: + version "9.9.0" + resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-9.9.0.tgz#c68354e7d21037a8f1f8833c8ccd68618e8f1d37" + integrity sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg== + +multihashes@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-2.0.0.tgz#4fa599d2d726ec6de33bf1e6f6d9f04b2351ace9" + integrity sha512-Mp94Y+7h3oWQx8JickVghlWR6VhRPDnlv/KZEUyNP0ISSkNEe3kQkWoyIGt1B45D6cTLoulg+MP6bugVewx32Q== + dependencies: + buffer "^5.6.0" + multibase "^2.0.0" + varint "^5.0.0" + web-encoding "^1.0.2" + +multihashes@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-4.0.3.tgz#426610539cd2551edbf533adeac4c06b3b90fb05" + integrity sha512-0AhMH7Iu95XjDLxIeuCOOE4t9+vQZsACyKZ9Fxw2pcsRmlX4iCn1mby0hS0bb+nQOVpdQYWPpnyusw4da5RPhA== + dependencies: + multibase "^4.0.1" + uint8arrays "^3.0.0" + varint "^5.0.2" + +nanoid@^3.0.2, nanoid@^3.1.20, nanoid@^3.1.23: + version "3.3.6" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" + integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== + +native-abort-controller@^1.0.3, native-abort-controller@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/native-abort-controller/-/native-abort-controller-1.0.4.tgz#39920155cc0c18209ff93af5bc90be856143f251" + integrity sha512-zp8yev7nxczDJMoP6pDxyD20IU0T22eX8VwN2ztDccKvSZhRaV33yP1BGwKSZfXuqWUzsXopVFjBdau9OOAwMQ== + +native-fetch@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/native-fetch/-/native-fetch-3.0.0.tgz#06ccdd70e79e171c365c75117959cf4fe14a09bb" + integrity sha512-G3Z7vx0IFb/FQ4JxvtqGABsOTIqRWvgQz6e+erkB+JJD6LrszQtMozEHI4EkmgZQvnGHrpLVzUWk7t4sJCIkVw== + +natural-orderby@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/natural-orderby/-/natural-orderby-2.0.3.tgz#8623bc518ba162f8ff1cdb8941d74deb0fdcc016" + integrity sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q== + +node-addon-api@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" + integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== + +node-fetch@^2.6.8: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +node-gyp-build@^4.2.0: + version "4.6.1" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.1.tgz#24b6d075e5e391b8d5539d98c7fc5c210cac8a3e" + integrity sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +number-to-bn@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" + integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== + dependencies: + bn.js "4.11.6" + strip-hex-prefix "1.0.0" + +object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.9.0: + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + +object-treeify@^1.1.33: + version "1.1.33" + resolved "https://registry.yarnpkg.com/object-treeify/-/object-treeify-1.1.33.tgz#f06fece986830a3cba78ddd32d4c11d1f76cdf40" + integrity sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.0, onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +ora@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/ora/-/ora-4.0.2.tgz#0e1e68fd45b135d28648b27cf08081fa6e8a297d" + integrity sha512-YUOZbamht5mfLxPmk4M35CD/5DuOkAacxlEUbStVXpBAt4fyhBf+vZHI/HRkI++QUp3sNoeA2Gw4C+hi4eGSig== + dependencies: + chalk "^2.4.2" + cli-cursor "^3.1.0" + cli-spinners "^2.2.0" + is-interactive "^1.0.0" + log-symbols "^3.0.0" + strip-ansi "^5.2.0" + wcwidth "^1.0.1" + +p-defer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-3.0.0.tgz#d1dceb4ee9b2b604b1d94ffec83760175d4e6f83" + integrity sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw== + +p-fifo@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-fifo/-/p-fifo-1.0.0.tgz#e29d5cf17c239ba87f51dde98c1d26a9cfe20a63" + integrity sha512-IjoCxXW48tqdtDFz6fqo5q1UfFVjjVZe8TC1QRflvNUJtNfCUhxOUw6MOVZhDPjqhSzc26xKdugsO17gmzd5+A== + dependencies: + fast-fifo "^1.0.0" + p-defer "^3.0.0" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-cache-control@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-cache-control/-/parse-cache-control-1.0.1.tgz#8eeab3e54fa56920fe16ba38f77fa21aacc2d74e" + integrity sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg== + +parse-duration@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/parse-duration/-/parse-duration-1.1.0.tgz#5192084c5d8f2a3fd676d04a451dbd2e05a1819c" + integrity sha512-z6t9dvSJYaPoQq7quMzdEagSFtpGu+utzHqqxmpVWNNZRIXnvqyCvn9XsTdh7c/w0Bqmdz3RB3YnRaKtpRtEXQ== + +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +password-prompt@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/password-prompt/-/password-prompt-1.1.3.tgz#05e539f4e7ca4d6c865d479313f10eb9db63ee5f" + integrity sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw== + dependencies: + ansi-escapes "^4.3.2" + cross-spawn "^7.0.3" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-scurry@^1.6.1: + version "1.10.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" + integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== + dependencies: + lru-cache "^9.1.1 || ^10.0.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pbkdf2@^3.0.17: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pluralize@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" + integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== + +prettier@3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.3.tgz#432a51f7ba422d1469096c0fdc28e235db8f9643" + integrity sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +promise@^8.0.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a" + integrity sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg== + dependencies: + asap "~2.0.6" + +protobufjs@^6.10.2: + version "6.11.4" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.4.tgz#29a412c38bf70d89e537b6d02d904a6f448173aa" + integrity sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/long" "^4.0.1" + "@types/node" ">=13.7.0" + long "^4.0.0" + +pump@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954" + integrity sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^1.3.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== + +pvtsutils@^1.3.2: + version "1.3.5" + resolved "https://registry.yarnpkg.com/pvtsutils/-/pvtsutils-1.3.5.tgz#b8705b437b7b134cd7fd858f025a23456f1ce910" + integrity sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA== + dependencies: + tslib "^2.6.1" + +pvutils@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/pvutils/-/pvutils-1.1.3.tgz#f35fc1d27e7cd3dfbd39c0826d173e806a03f5a3" + integrity sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ== + +qs@^6.4.0: + version "6.11.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" + integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== + dependencies: + side-channel "^1.0.4" + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +react-native-fetch-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/react-native-fetch-api/-/react-native-fetch-api-3.0.0.tgz#81e1bb6562c292521bc4eca52fe1097f4c1ebab5" + integrity sha512-g2rtqPjdroaboDKTsJCTlcmtw54E25OjyaunUP0anOZn4Fuo2IKs8BVfe02zVggA/UysbmfSnRJIqtNkAgggNA== + dependencies: + p-defer "^3.0.0" + +readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.5: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@~1.0.26-4: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +receptacle@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/receptacle/-/receptacle-1.3.2.tgz#a7994c7efafc7a01d0e2041839dab6c4951360d2" + integrity sha512-HrsFvqZZheusncQRiEE7GatOAETrARKV/lnfYicIm8lbvp/JQOdADOfhjBd2DajvoszEyxSM6RlAAIZgEoeu/A== + dependencies: + ms "^2.1.1" + +redeyed@~2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-2.1.1.tgz#8984b5815d99cb220469c99eeeffe38913e6cc0b" + integrity sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ== + dependencies: + esprima "~4.0.0" + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +retimer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/retimer/-/retimer-3.0.0.tgz#98b751b1feaf1af13eb0228f8ea68b8f9da530df" + integrity sha512-WKE0j11Pa0ZJI5YIk0nflGI7SQsfl2ljihVy7ogh7DeQSeYAUi0ubZ/yEueGtDfUPk6GH5LRw1hBdLq4IwUBWA== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rlp@^2.2.4: + version "2.2.7" + resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" + integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== + dependencies: + bn.js "^5.2.0" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +"safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +scrypt-js@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + +secp256k1@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" + integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== + dependencies: + elliptic "^6.5.4" + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + +semver@7.3.5: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + +semver@7.4.0: + version "7.4.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.4.0.tgz#8481c92feffc531ab1e012a8ffc15bdd3a0f4318" + integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== + dependencies: + lru-cache "^6.0.0" + +semver@^7.3.7: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.2, signal-exit@^3.0.3: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +source-map-support@^0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +split-ca@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/split-ca/-/split-ca-1.0.1.tgz#6c83aff3692fa61256e0cd197e05e9de157691a6" + integrity sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +stream-to-it@^0.2.2: + version "0.2.4" + resolved "https://registry.yarnpkg.com/stream-to-it/-/stream-to-it-0.2.4.tgz#d2fd7bfbd4a899b4c0d6a7e6a533723af5749bd0" + integrity sha512-4vEbkSs83OahpmBybNJXlJd7d6/RxzkkSdT3I0mnGt79Xd2Kk+e1JqbvAvsQfCeKj3aKb0QIWkyK3/n0j506vQ== + dependencies: + get-iterator "^1.0.2" + +streamsearch@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" + integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== + +string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-hex-prefix@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" + integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== + dependencies: + is-hex-prefixed "1.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" + integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +sync-request@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/sync-request/-/sync-request-6.1.0.tgz#e96217565b5e50bbffe179868ba75532fb597e68" + integrity sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw== + dependencies: + http-response-object "^3.0.1" + sync-rpc "^1.2.1" + then-request "^6.0.0" + +sync-rpc@^1.2.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/sync-rpc/-/sync-rpc-1.3.6.tgz#b2e8b2550a12ccbc71df8644810529deb68665a7" + integrity sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw== + dependencies: + get-port "^3.1.0" + +tar-fs@~1.16.3: + version "1.16.3" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.16.3.tgz#966a628841da2c4010406a82167cbd5e0c72d509" + integrity sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw== + dependencies: + chownr "^1.0.1" + mkdirp "^0.5.1" + pump "^1.0.0" + tar-stream "^1.1.2" + +tar-stream@^1.1.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" + integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== + dependencies: + bl "^1.0.0" + buffer-alloc "^1.2.0" + end-of-stream "^1.0.0" + fs-constants "^1.0.0" + readable-stream "^2.3.0" + to-buffer "^1.1.1" + xtend "^4.0.0" + +tar@^6.1.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" + integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^5.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +then-request@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/then-request/-/then-request-6.0.2.tgz#ec18dd8b5ca43aaee5cb92f7e4c1630e950d4f0c" + integrity sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA== + dependencies: + "@types/concat-stream" "^1.6.0" + "@types/form-data" "0.0.33" + "@types/node" "^8.0.0" + "@types/qs" "^6.2.31" + caseless "~0.12.0" + concat-stream "^1.6.0" + form-data "^2.2.0" + http-basic "^8.1.1" + http-response-object "^3.0.1" + promise "^8.0.0" + qs "^6.4.0" + +"through@>=2.2.7 <3": + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +timeout-abort-controller@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/timeout-abort-controller/-/timeout-abort-controller-2.0.0.tgz#d6a59209132e520413092dd4b4d71eaaf5887feb" + integrity sha512-2FAPXfzTPYEgw27bQGTHc0SzrbmnU2eso4qo172zMLZzaGqeu09PFa5B2FCUHM1tflgRqPgn5KQgp6+Vex4uNA== + dependencies: + abort-controller "^3.0.0" + native-abort-controller "^1.0.4" + retimer "^3.0.0" + +tmp-promise@3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-3.0.3.tgz#60a1a1cc98c988674fcbfd23b6e3367bdeac4ce7" + integrity sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ== + dependencies: + tmp "^0.2.0" + +tmp@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + +to-buffer@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" + integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +ts-node@^10.9.1: + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +tslib@^2.0.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + +typescript@^4.9.4: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + +uint8arrays@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-3.1.1.tgz#2d8762acce159ccd9936057572dade9459f65ae0" + integrity sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg== + dependencies: + multiformats "^9.4.2" + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +urlpattern-polyfill@^8.0.0: + version "8.0.2" + resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-8.0.2.tgz#99f096e35eff8bf4b5a2aa7d58a1523d6ebc7ce5" + integrity sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ== + +utf8@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" + integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +util@^0.12.3: + version "0.12.5" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" + integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + which-typed-array "^1.1.2" + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +varint@^5.0.0, varint@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" + integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== + +varint@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/varint/-/varint-6.0.0.tgz#9881eb0ce8feaea6512439d19ddf84bf551661d0" + integrity sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg== + +wabt@1.0.24: + version "1.0.24" + resolved "https://registry.yarnpkg.com/wabt/-/wabt-1.0.24.tgz#c02e0b5b4503b94feaf4a30a426ef01c1bea7c6c" + integrity sha512-8l7sIOd3i5GWfTWciPL0+ff/FK/deVK2Q6FN+MPz4vfUcD78i2M/49XJTwF6aml91uIiuXJEsLKWMB2cw/mtKg== + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + +web-encoding@^1.0.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/web-encoding/-/web-encoding-1.1.5.tgz#fc810cf7667364a6335c939913f5051d3e0c4864" + integrity sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA== + dependencies: + util "^0.12.3" + optionalDependencies: + "@zxing/text-encoding" "0.9.0" + +web-streams-polyfill@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" + integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== + +web3-eth-abi@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.7.0.tgz#4fac9c7d9e5a62b57f8884b37371f515c766f3f4" + integrity sha512-heqR0bWxgCJwjWIhq2sGyNj9bwun5+Xox/LdZKe+WMyTSy0cXDXEAgv3XKNkXC4JqdDt/ZlbTEx4TWak4TRMSg== + dependencies: + "@ethersproject/abi" "5.0.7" + web3-utils "1.7.0" + +web3-utils@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.7.0.tgz#c59f0fd43b2449357296eb54541810b99b1c771c" + integrity sha512-O8Tl4Ky40Sp6pe89Olk2FsaUkgHyb5QAXuaKo38ms3CxZZ4d3rPGfjP9DNKGm5+IUgAZBNpF1VmlSmNCqfDI1w== + dependencies: + bn.js "^4.11.9" + ethereum-bloom-filters "^1.0.6" + ethereumjs-util "^7.1.0" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + utf8 "3.0.0" + +webcrypto-core@^1.7.7: + version "1.7.7" + resolved "https://registry.yarnpkg.com/webcrypto-core/-/webcrypto-core-1.7.7.tgz#06f24b3498463e570fed64d7cab149e5437b162c" + integrity sha512-7FjigXNsBfopEj+5DV2nhNpfic2vumtjjgPmeDKk45z+MJwXKKfhPB7118Pfzrmh4jqOMST6Ch37iPAHoImg5g== + dependencies: + "@peculiar/asn1-schema" "^2.3.6" + "@peculiar/json-schema" "^1.1.12" + asn1js "^3.0.1" + pvtsutils "^1.3.2" + tslib "^2.4.0" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-typed-array@^1.1.11, which-typed-array@^1.1.2: + version "1.1.11" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" + integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + +which@2.0.2, which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +ws@^7.4.5: + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + +xtend@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@1.10.2, yaml@^1.10.0, yaml@^1.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yargs-parser@^21.0.0: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== From 8f2fe0dcb556e7c52ae8e8b13843f4e658ede7d0 Mon Sep 17 00:00:00 2001 From: sevenzing Date: Tue, 5 Nov 2024 14:05:07 +0100 Subject: [PATCH 04/10] feat: reverse resolving for d3 --- .../migrations/20241104160016_addr2name.sql | 20 ++++++ blockscout-ens/bens-logic/src/bin/test.rs | 4 -- .../bens-logic/src/entity/subgraph/domain.rs | 7 ++ blockscout-ens/bens-logic/src/metrics.rs | 10 +++ blockscout-ens/bens-logic/src/migrations.rs | 2 +- .../bens-logic/src/protocols/protocoler.rs | 5 ++ .../bens-logic/src/subgraph/domain_tokens.rs | 26 +++++-- .../src/subgraph/offchain/d3/metadata.rs | 14 +--- .../src/subgraph/offchain/d3/offchain.rs | 48 ++++++++++--- .../src/subgraph/offchain/ens/ccip_read.rs | 1 + .../src/subgraph/offchain/ens/wildcard.rs | 14 ++-- .../src/subgraph/offchain/resolve.rs | 22 +++--- .../bens-logic/src/subgraph/offchain/types.rs | 70 +++++++++++++++---- .../bens-logic/src/subgraph/reader.rs | 6 ++ .../src/subgraph/resolve_addresses.rs | 12 ++++ .../bens-logic/src/subgraph/sql/addr2name.rs | 39 +++++++++++ .../sql/cache_views/addr_reverse_names.rs | 2 +- .../subgraph/sql/cache_views/address_names.rs | 2 +- .../bens-logic/src/subgraph/sql/create.rs | 34 ++++++++- .../bens-logic/src/subgraph/sql/mod.rs | 3 +- blockscout-ens/bens-server/config/dev.json | 6 +- blockscout-ens/bens-server/config/prod.json | 57 +++++++++++---- .../bens-server/config/staging.json | 6 +- .../bens-server/tests/config.test.json | 17 +++-- .../graph-node/deployer/config.json | 2 +- .../d3-connect-subgraph/src/Registry.ts | 6 +- blockscout-ens/justfile | 26 ++++++- 27 files changed, 363 insertions(+), 98 deletions(-) create mode 100644 blockscout-ens/bens-logic/migrations/20241104160016_addr2name.sql delete mode 100644 blockscout-ens/bens-logic/src/bin/test.rs create mode 100644 blockscout-ens/bens-logic/src/subgraph/sql/addr2name.rs diff --git a/blockscout-ens/bens-logic/migrations/20241104160016_addr2name.sql b/blockscout-ens/bens-logic/migrations/20241104160016_addr2name.sql new file mode 100644 index 000000000..e58bbf767 --- /dev/null +++ b/blockscout-ens/bens-logic/migrations/20241104160016_addr2name.sql @@ -0,0 +1,20 @@ +DO $$ +DECLARE + schema_name text; +BEGIN + -- Loop through schemas that match the pattern 'sgd%' + FOR schema_name IN + SELECT schemata.schema_name + FROM information_schema.schemata AS schemata + WHERE schemata.schema_name LIKE 'sgd%' + LOOP + -- Dynamically construct and execute the SQL statement to add the columns + EXECUTE format(' + CREATE TABLE %I.addr2name ( + resolved_address TEXT PRIMARY KEY, + domain_id TEXT, + domain_name TEXT + ); + ', schema_name); + END LOOP; +END $$; diff --git a/blockscout-ens/bens-logic/src/bin/test.rs b/blockscout-ens/bens-logic/src/bin/test.rs deleted file mode 100644 index 2c566dcd1..000000000 --- a/blockscout-ens/bens-logic/src/bin/test.rs +++ /dev/null @@ -1,4 +0,0 @@ -#[tokio::main] -async fn main() -> Result<(), anyhow::Error> { - Ok(()) -} diff --git a/blockscout-ens/bens-logic/src/entity/subgraph/domain.rs b/blockscout-ens/bens-logic/src/entity/subgraph/domain.rs index 37ecd4999..97db03da5 100644 --- a/blockscout-ens/bens-logic/src/entity/subgraph/domain.rs +++ b/blockscout-ens/bens-logic/src/entity/subgraph/domain.rs @@ -68,6 +68,13 @@ pub struct CreationDomain { pub resolved_with_wildcard: bool, } +#[derive(Debug, Clone, PartialEq, Eq, sqlx::FromRow)] +pub struct CreationAddr2Name { + pub resolved_address: String, + pub domain_id: Option, + pub domain_name: Option, +} + #[derive(Debug, Clone, PartialEq, Eq, sqlx::FromRow)] pub struct DomainWithAddress { pub id: String, diff --git a/blockscout-ens/bens-logic/src/metrics.rs b/blockscout-ens/bens-logic/src/metrics.rs index 23e93b239..c56e1979a 100644 --- a/blockscout-ens/bens-logic/src/metrics.rs +++ b/blockscout-ens/bens-logic/src/metrics.rs @@ -12,4 +12,14 @@ lazy_static! { "total successful attempts to resolve domain with wildcard resolver", ) .unwrap(); + pub static ref D3_OFFCHAIN_RESOLVE_ATTEMPTS: IntCounter = register_int_counter!( + "bens_d3_offchain_resolve_attempts", + "total attempts to resolve domain with d3 offchain resolver", + ) + .unwrap(); + pub static ref D3_OFFCHAIN_RESOLVE_SUCCESS: IntCounter = register_int_counter!( + "bens_d3_offchain_resolve_success", + "total successful attempts to resolve domain with d3 offchain resolver", + ) + .unwrap(); } diff --git a/blockscout-ens/bens-logic/src/migrations.rs b/blockscout-ens/bens-logic/src/migrations.rs index 503a1baa1..f89fb17ef 100644 --- a/blockscout-ens/bens-logic/src/migrations.rs +++ b/blockscout-ens/bens-logic/src/migrations.rs @@ -1,5 +1,5 @@ #[tracing::instrument(skip_all, level = "INFO")] pub async fn run(db: &sqlx::PgPool) -> Result<(), anyhow::Error> { - sqlx::migrate!().run(db).await?; + sqlx::migrate!().set_ignore_missing(true).run(db).await?; Ok(()) } diff --git a/blockscout-ens/bens-logic/src/protocols/protocoler.rs b/blockscout-ens/bens-logic/src/protocols/protocoler.rs index 76593ebb6..e574db226 100644 --- a/blockscout-ens/bens-logic/src/protocols/protocoler.rs +++ b/blockscout-ens/bens-logic/src/protocols/protocoler.rs @@ -48,6 +48,7 @@ pub struct DeployedProtocol<'a> { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)] +#[serde(deny_unknown_fields)] pub struct ProtocolInfo { pub network_id: i64, pub slug: String, @@ -103,6 +104,7 @@ impl ProtocolSpecific { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)] +#[serde(deny_unknown_fields)] pub struct EnsLikeProtocol { pub registry_contract: Option
, pub empty_label_hash: Option, @@ -112,6 +114,7 @@ pub struct EnsLikeProtocol { } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)] +#[serde(deny_unknown_fields)] pub struct D3ConnectProtocol { pub resolver_contract: Address, pub native_token_contract: Address, @@ -139,6 +142,8 @@ pub enum AddressResolveTechnique { #[default] ReverseRegistry, AllDomains, + #[serde(rename = "addr2name")] + Addr2Name, } impl Tld { diff --git a/blockscout-ens/bens-logic/src/subgraph/domain_tokens.rs b/blockscout-ens/bens-logic/src/subgraph/domain_tokens.rs index 375802f10..3dbf5ec53 100644 --- a/blockscout-ens/bens-logic/src/subgraph/domain_tokens.rs +++ b/blockscout-ens/bens-logic/src/subgraph/domain_tokens.rs @@ -1,7 +1,7 @@ use super::{DomainToken, DomainTokenType}; use crate::{ entity::subgraph::domain::DetailedDomain, - protocols::{DomainNameOnProtocol, EnsLikeProtocol, ProtocolSpecific}, + protocols::{D3ConnectProtocol, DomainNameOnProtocol, EnsLikeProtocol, ProtocolSpecific}, }; use alloy::primitives::Address; use anyhow::Context; @@ -25,10 +25,10 @@ pub fn extract_tokens_from_domain( match &name.deployed_protocol.protocol.info.protocol_specific { ProtocolSpecific::EnsLike(ens_like) => { - extract_tokens_for_ens_like(domain, name, ens_like, &mut tokens)?; + extract_tokens_for_ens_like(&mut tokens, domain, name, ens_like)?; } - ProtocolSpecific::D3Connect(_) => { - // TODO: implement D3Connect tokens extraction + ProtocolSpecific::D3Connect(d3_connect) => { + extract_tokens_for_d3_connect(&mut tokens, domain, name, d3_connect)?; } } @@ -36,10 +36,10 @@ pub fn extract_tokens_from_domain( } fn extract_tokens_for_ens_like( + tokens: &mut Vec, domain: &DetailedDomain, name: &DomainNameOnProtocol<'_>, ens_like: &EnsLikeProtocol, - tokens: &mut Vec, ) -> Result<(), anyhow::Error> { if let Some(contract) = ens_like.native_token_contract { let is_second_level_domain = name.inner.level() == 2; @@ -75,6 +75,22 @@ fn extract_tokens_for_ens_like( Ok(()) } +fn extract_tokens_for_d3_connect( + tokens: &mut Vec, + domain: &DetailedDomain, + _name: &DomainNameOnProtocol<'_>, + d3_connect: &D3ConnectProtocol, +) -> Result<(), anyhow::Error> { + let id = token_id(&domain.id)?; + let contract = d3_connect.native_token_contract; + tokens.push(DomainToken { + id, + contract, + _type: DomainTokenType::Native, + }); + Ok(()) +} + fn token_id(hexed_id: &str) -> Result { let id = BigInt::from_str_radix(hexed_id.trim_start_matches("0x"), 16) .context("convert token_id to number")?; diff --git a/blockscout-ens/bens-logic/src/subgraph/offchain/d3/metadata.rs b/blockscout-ens/bens-logic/src/subgraph/offchain/d3/metadata.rs index dd0582b9f..1dd6bc4c8 100644 --- a/blockscout-ens/bens-logic/src/subgraph/offchain/d3/metadata.rs +++ b/blockscout-ens/bens-logic/src/subgraph/offchain/d3/metadata.rs @@ -14,24 +14,12 @@ sol! { import {IERC721} from "../IERC721.sol"; - /** - * @title ERC-721 Non-Fungible Token Standard, optional metadata extension - * @dev See https://eips.ethereum.org/EIPS/eip-721 - */ interface IERC721Metadata is IERC721 { - /** - * @dev Returns the token collection name. - */ + function name() external view returns (string memory); - /** - * @dev Returns the token collection symbol. - */ function symbol() external view returns (string memory); - /** - * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. - */ function tokenURI(uint256 tokenId) external view returns (string memory); } } diff --git a/blockscout-ens/bens-logic/src/subgraph/offchain/d3/offchain.rs b/blockscout-ens/bens-logic/src/subgraph/offchain/d3/offchain.rs index afa78b455..2dadb0f56 100644 --- a/blockscout-ens/bens-logic/src/subgraph/offchain/d3/offchain.rs +++ b/blockscout-ens/bens-logic/src/subgraph/offchain/d3/offchain.rs @@ -1,12 +1,13 @@ use super::get_metadata; use crate::{ - entity::subgraph::domain::{CreationDomain, Domain}, - protocols::{D3ConnectProtocol, DomainNameOnProtocol}, + entity::subgraph::domain::Domain, + metrics, + protocols::{D3ConnectProtocol, DomainName, DomainNameOnProtocol}, subgraph::{ self, offchain::{ - creation_domain_from_offchain_resolution, reader_from_protocol, - DomainInfoFromOffchainResolution, Reader, + offchain_resolution_to_resolve_result, reader_from_protocol, + DomainInfoFromOffchainResolution, Reader, ResolveResult, }, ResolverInSubgraph, }, @@ -19,15 +20,29 @@ pub async fn maybe_offchain_resolution( db: &PgPool, name: &DomainNameOnProtocol<'_>, d3: &D3ConnectProtocol, -) -> Option { - resolve_d3_name(db, name, d3).await.ok() +) -> Option { + metrics::D3_OFFCHAIN_RESOLVE_ATTEMPTS.inc(); + match resolve_d3_name(db, name, d3).await { + Ok(result) => { + metrics::D3_OFFCHAIN_RESOLVE_SUCCESS.inc(); + Some(result) + } + Err(err) => { + tracing::error!( + name = name.inner.name, + error = err.to_string(), + "failed to resolve d3 name" + ); + None + } + } } async fn resolve_d3_name( db: &PgPool, name: &DomainNameOnProtocol<'_>, d3: &D3ConnectProtocol, -) -> Result { +) -> Result { let reader = reader_from_protocol(&name.deployed_protocol); let default_resolver = d3.resolver_contract; @@ -50,7 +65,7 @@ async fn resolve_d3_name( let offchain_resolution = get_offchain_resolution(&reader, resolver_address, name, d3).await?; tracing::debug!(data =? offchain_resolution, "fetched offchain resolution"); let creation_domain = - creation_domain_from_offchain_resolution(name, offchain_resolution, maybe_existing_domain); + offchain_resolution_to_resolve_result(name, offchain_resolution, maybe_existing_domain); Ok(creation_domain) } @@ -63,15 +78,30 @@ async fn get_offchain_resolution( let resolve_result = alloy_ccip_read::d3::resolve_d3_name(reader, resolver_address, &name.inner.name, "") .await?; + let addr = resolve_result.addr.into_value(); + let reverse_resolve_result = + alloy_ccip_read::d3::reverse_resolve_d3_name(reader, addr, resolver_address, "").await?; + let addr2name = DomainName::new( + &reverse_resolve_result.name.value, + name.deployed_protocol + .protocol + .info + .protocol_specific + .empty_label_hash(), + ) + .map(|name| name.name) + .ok(); let metadata = get_metadata(reader, name, d3).await?; let expiry_date = metadata.get_expiration_date(); + Ok(DomainInfoFromOffchainResolution { id: name.inner.id.clone(), name: name.inner.name.clone(), - addr: resolve_result.addr.into_value(), + addr, resolver_address, expiry_date, stored_offchain: true, resolved_with_wildcard: false, + addr2name, }) } diff --git a/blockscout-ens/bens-logic/src/subgraph/offchain/ens/ccip_read.rs b/blockscout-ens/bens-logic/src/subgraph/offchain/ens/ccip_read.rs index 247ec5881..e5e3e7553 100644 --- a/blockscout-ens/bens-logic/src/subgraph/offchain/ens/ccip_read.rs +++ b/blockscout-ens/bens-logic/src/subgraph/offchain/ens/ccip_read.rs @@ -31,6 +31,7 @@ pub async fn call_to_resolver( stored_offchain: result.ccip_read_used, resolved_with_wildcard: result.wildcard_used, expiry_date: None, + addr2name: None, }) } diff --git a/blockscout-ens/bens-logic/src/subgraph/offchain/ens/wildcard.rs b/blockscout-ens/bens-logic/src/subgraph/offchain/ens/wildcard.rs index 45d70f55d..56aab3bae 100644 --- a/blockscout-ens/bens-logic/src/subgraph/offchain/ens/wildcard.rs +++ b/blockscout-ens/bens-logic/src/subgraph/offchain/ens/wildcard.rs @@ -1,9 +1,13 @@ use super::ccip_read; use crate::{ - entity::subgraph::domain::{CreationDomain, Domain}, + entity::subgraph::domain::Domain, metrics, protocols::{DomainNameOnProtocol, EnsLikeProtocol}, - subgraph::{self, offchain::creation_domain_from_offchain_resolution, ResolverInSubgraph}, + subgraph::{ + self, + offchain::{offchain_resolution_to_resolve_result, ResolveResult}, + ResolverInSubgraph, + }, }; use alloy::primitives::Address; use anyhow::Context; @@ -17,7 +21,7 @@ pub async fn maybe_wildcard_resolution( db: &PgPool, from_user: &DomainNameOnProtocol<'_>, ens: &EnsLikeProtocol, -) -> Option { +) -> Option { metrics::WILDCARD_RESOLVE_ATTEMPTS.inc(); match try_wildcard_resolution(db, from_user, ens).await { Ok(result) => { @@ -41,7 +45,7 @@ async fn try_wildcard_resolution( db: &PgPool, from_user: &DomainNameOnProtocol<'_>, ens: &EnsLikeProtocol, -) -> Result, anyhow::Error> { +) -> Result, anyhow::Error> { let Some((resolver_address, maybe_existing_domain)) = any_resolver(db, from_user, ens).await? else { return Ok(None); @@ -57,7 +61,7 @@ async fn try_wildcard_resolution( None } }); - Ok(Some(creation_domain_from_offchain_resolution( + Ok(Some(offchain_resolution_to_resolve_result( from_user, result, maybe_domain_to_update, diff --git a/blockscout-ens/bens-logic/src/subgraph/offchain/resolve.rs b/blockscout-ens/bens-logic/src/subgraph/offchain/resolve.rs index f4a5e093c..b210a2fb5 100644 --- a/blockscout-ens/bens-logic/src/subgraph/offchain/resolve.rs +++ b/blockscout-ens/bens-logic/src/subgraph/offchain/resolve.rs @@ -1,5 +1,5 @@ +use super::ResolveResult; use crate::{ - entity::subgraph::domain::CreationDomain, protocols::{DomainNameOnProtocol, ProtocolSpecific}, subgraph::{ offchain::{d3, ens}, @@ -14,20 +14,23 @@ pub async fn offchain_resolve( from_user: &DomainNameOnProtocol<'_>, ) -> Result<(), anyhow::Error> { let protocol = from_user.deployed_protocol.protocol; - let maybe_domain_cached = check_if_need_to_save_domain_cached(db, from_user).await; + let maybe_domain_cached = offchain_resolve_cached(db, from_user).await; match maybe_domain_cached { cached::Return { - value: Some(domain), + value: Some(result), was_cached: false, .. } => { tracing::info!( - id = domain.id, - name = domain.name, - vid =? domain.vid, + id = result.domain.id, + name = result.domain.name, + vid =? result.domain.vid, "found domain with offchain resolution, save it" ); - sql::create_or_update_domain(db, domain, protocol).await?; + sql::create_or_update_domain(db, result.domain, protocol).await?; + if let Some(reverse_record) = result.maybe_reverse_record { + sql::create_or_update_reverse_record(db, reverse_record, protocol).await?; + } } cached::Return { was_cached: true, .. @@ -54,14 +57,13 @@ pub async fn offchain_resolve( sync_writes = true, with_cached_flag = true, )] -async fn check_if_need_to_save_domain_cached( +async fn offchain_resolve_cached( db: &PgPool, from_user: &DomainNameOnProtocol<'_>, -) -> cached::Return> { +) -> cached::Return> { let result = match &from_user.deployed_protocol.protocol.info.protocol_specific { ProtocolSpecific::EnsLike(ens) => ens::maybe_wildcard_resolution(db, from_user, ens).await, ProtocolSpecific::D3Connect(d3) => d3::maybe_offchain_resolution(db, from_user, d3).await, }; - cached::Return::new(result) } diff --git a/blockscout-ens/bens-logic/src/subgraph/offchain/types.rs b/blockscout-ens/bens-logic/src/subgraph/offchain/types.rs index ef4be8b83..46cd4cc18 100644 --- a/blockscout-ens/bens-logic/src/subgraph/offchain/types.rs +++ b/blockscout-ens/bens-logic/src/subgraph/offchain/types.rs @@ -1,11 +1,10 @@ -use alloy::primitives::Address; -use chrono::{DateTime, Utc}; - use crate::{ - entity::subgraph::domain::{CreationDomain, Domain}, - protocols::DomainNameOnProtocol, + entity::subgraph::domain::{CreationAddr2Name, CreationDomain, Domain}, + protocols::{DomainName, DomainNameOnProtocol}, subgraph::ResolverInSubgraph, }; +use alloy::primitives::Address; +use chrono::{DateTime, Utc}; #[derive(Debug, Clone)] pub struct DomainInfoFromOffchainResolution { @@ -16,26 +15,31 @@ pub struct DomainInfoFromOffchainResolution { pub stored_offchain: bool, pub resolved_with_wildcard: bool, pub expiry_date: Option>, + pub addr2name: Option, } -pub fn creation_domain_from_offchain_resolution( +#[derive(Debug, Clone, Default)] +pub struct ResolveResult { + pub domain: CreationDomain, + pub maybe_reverse_record: Option, +} + +pub fn offchain_resolution_to_resolve_result( from_user: &DomainNameOnProtocol<'_>, ccip_read_info: DomainInfoFromOffchainResolution, maybe_existing_domain: Option, -) -> CreationDomain { +) -> ResolveResult { let parent = from_user.inner.iter_parents_with_self().nth(1); let resolver = ResolverInSubgraph::new(ccip_read_info.resolver_address, ccip_read_info.id.clone()); let now = chrono::Utc::now(); - let resolved_address = match ccip_read_info.addr { - Address::ZERO => None, - addr => Some(addr.to_string().to_lowercase()), - }; - CreationDomain { + let resolved_address = + non_zero_address(ccip_read_info.addr).map(|a| a.to_string().to_lowercase()); + let domain = CreationDomain { vid: maybe_existing_domain.map(|d| d.vid), - id: ccip_read_info.id, - name: Some(ccip_read_info.name), + id: ccip_read_info.id.clone(), + name: Some(ccip_read_info.name.clone()), label_name: Some(from_user.inner.label_name.clone()), labelhash: Some(from_user.inner.labelhash().to_vec()), parent: parent.map(|p| p.id), @@ -50,5 +54,43 @@ pub fn creation_domain_from_offchain_resolution( wrapped_owner: None, expiry_date: ccip_read_info.expiry_date.map(|d| d.timestamp().into()), is_expired: false, + }; + + let maybe_addr2name = ccip_read_info.addr2name.as_ref().and_then(|name| { + DomainName::new( + name, + from_user + .deployed_protocol + .protocol + .info + .protocol_specific + .empty_label_hash(), + ) + .ok() + }); + let maybe_reverse_record = match (&domain.resolved_address, maybe_addr2name) { + (Some(addr), Some(name)) => Some(CreationAddr2Name { + resolved_address: addr.clone(), + domain_id: Some(name.id), + domain_name: Some(name.name), + }), + (Some(addr), None) => Some(CreationAddr2Name { + resolved_address: addr.clone(), + domain_id: None, + domain_name: None, + }), + (None, _) => None, + }; + + ResolveResult { + domain, + maybe_reverse_record, + } +} + +fn non_zero_address(addr: Address) -> Option
{ + match addr { + Address::ZERO => None, + addr => Some(addr), } } diff --git a/blockscout-ens/bens-logic/src/subgraph/reader.rs b/blockscout-ens/bens-logic/src/subgraph/reader.rs index fb4262494..dc5849aa7 100644 --- a/blockscout-ens/bens-logic/src/subgraph/reader.rs +++ b/blockscout-ens/bens-logic/src/subgraph/reader.rs @@ -151,6 +151,9 @@ impl SubgraphReader { "failed to update AddressNamesView for schema {schema}" ))?; } + AddressResolveTechnique::Addr2Name => { + // addr2name doesnt have view + } } } Ok(()) @@ -177,6 +180,9 @@ impl SubgraphReader { "failed to create AddressNamesView for schema {schema}" ))?; } + AddressResolveTechnique::Addr2Name => { + // addr2name doesnt have view + } } } Ok(()) diff --git a/blockscout-ens/bens-logic/src/subgraph/resolve_addresses.rs b/blockscout-ens/bens-logic/src/subgraph/resolve_addresses.rs index ea501ec0c..4de5f31ee 100644 --- a/blockscout-ens/bens-logic/src/subgraph/resolve_addresses.rs +++ b/blockscout-ens/bens-logic/src/subgraph/resolve_addresses.rs @@ -27,6 +27,9 @@ pub async fn resolve_addresses( AddressResolveTechnique::ReverseRegistry => { resolve_addr_reverse_cached(pool, &protocols, &addresses).await? } + AddressResolveTechnique::Addr2Name => { + resolve_addr2name(pool, &protocols, &addresses).await? + } }; result.extend(found_domains); } @@ -94,6 +97,15 @@ async fn resolve_addr_reverse_cached( Ok(domains) } +async fn resolve_addr2name( + pool: &PgPool, + protocols: &NonEmpty<&Protocol>, + addresses: &[Address], +) -> Result, DbErr> { + let addresses_str: Vec = addresses.iter().map(hex).collect(); + sql::Addr2NameTable::batch_search_addreses(pool, protocols, &addresses_str).await +} + // async fn resolve_addr_reverse( // pool: &PgPool, // protocols: &NonEmpty<&Protocol>, diff --git a/blockscout-ens/bens-logic/src/subgraph/sql/addr2name.rs b/blockscout-ens/bens-logic/src/subgraph/sql/addr2name.rs new file mode 100644 index 000000000..713358259 --- /dev/null +++ b/blockscout-ens/bens-logic/src/subgraph/sql/addr2name.rs @@ -0,0 +1,39 @@ +use super::{utils, DbErr}; +use crate::{entity::subgraph::domain::DomainWithAddress, protocols::Protocol}; +use nonempty::NonEmpty; +use sea_query::{Alias, Expr, PostgresQueryBuilder}; +use sqlx::PgPool; + +pub struct Addr2NameTable; + +impl Addr2NameTable { + pub fn view_table_name() -> &'static str { + "addr2name" + } + + pub async fn batch_search_addreses( + pool: &PgPool, + protocols: &NonEmpty<&Protocol>, + address: &[impl AsRef], + ) -> Result, DbErr> { + let view_table_name = Self::view_table_name(); + let queries = NonEmpty::collect(protocols.into_iter().map(|p| { + sea_query::Query::select() + .expr(Expr::cust("domain_id as id")) + .expr(Expr::cust("domain_name")) + .expr(Expr::cust("resolved_address")) + .from((Alias::new(&p.subgraph_schema), Alias::new(view_table_name))) + .and_where(Expr::cust("resolved_address = ANY($1)")) + .and_where(Expr::cust("domain_id is not null")) + .and_where(Expr::cust("domain_name is not null")) + .to_owned() + })) + .expect("protocols is nonempty"); + let sql = utils::union_domain_queries(queries, None, None)?.to_string(PostgresQueryBuilder); + let domains = sqlx::query_as(&sql) + .bind(utils::bind_string_list(address)) + .fetch_all(pool) + .await?; + Ok(domains) + } +} diff --git a/blockscout-ens/bens-logic/src/subgraph/sql/cache_views/addr_reverse_names.rs b/blockscout-ens/bens-logic/src/subgraph/sql/cache_views/addr_reverse_names.rs index c79b5fa32..0c7c31332 100644 --- a/blockscout-ens/bens-logic/src/subgraph/sql/cache_views/addr_reverse_names.rs +++ b/blockscout-ens/bens-logic/src/subgraph/sql/cache_views/addr_reverse_names.rs @@ -64,7 +64,7 @@ impl AddrReverseNamesView { fields( job_size = address_hashes.len(), protocols_size = protocols.len(), - fist_protocol_schema = protocols.head.subgraph_schema, + first_protocol_schema = protocols.head.subgraph_schema, ), err(level = "error"), level = "info", diff --git a/blockscout-ens/bens-logic/src/subgraph/sql/cache_views/address_names.rs b/blockscout-ens/bens-logic/src/subgraph/sql/cache_views/address_names.rs index bcc08c9b1..a9d90bf30 100644 --- a/blockscout-ens/bens-logic/src/subgraph/sql/cache_views/address_names.rs +++ b/blockscout-ens/bens-logic/src/subgraph/sql/cache_views/address_names.rs @@ -55,7 +55,7 @@ impl AddressNamesView { fields( job_size = addresses.len(), protocols_size = protocols.len(), - fist_protocol_schema = protocols.head.subgraph_schema), + first_protocol_schema = protocols.head.subgraph_schema), err(level = "error"), level = "info", )] diff --git a/blockscout-ens/bens-logic/src/subgraph/sql/create.rs b/blockscout-ens/bens-logic/src/subgraph/sql/create.rs index 1e82ece79..9a758f4d6 100644 --- a/blockscout-ens/bens-logic/src/subgraph/sql/create.rs +++ b/blockscout-ens/bens-logic/src/subgraph/sql/create.rs @@ -1,4 +1,8 @@ -use crate::{entity::subgraph::domain::CreationDomain, protocols::Protocol, subgraph::sql::DbErr}; +use crate::{ + entity::subgraph::domain::{CreationAddr2Name, CreationDomain}, + protocols::Protocol, + subgraph::sql::DbErr, +}; use sqlx::PgPool; pub async fn create_or_update_domain( @@ -19,6 +23,34 @@ pub async fn create_or_update_domain( Ok(()) } +pub async fn create_or_update_reverse_record( + pool: &PgPool, + reverse_record: CreationAddr2Name, + protocol: &Protocol, +) -> Result<(), DbErr> { + let schema = &protocol.subgraph_schema; + sqlx::query(&format!( + r#" + INSERT INTO {schema}.addr2name ( + resolved_address, + domain_id, + domain_name + ) + VALUES ($1, $2, $3) + ON CONFLICT (resolved_address) + DO UPDATE SET + domain_id = EXCLUDED.domain_id, + domain_name = EXCLUDED.domain_name; + "# + )) + .bind(&reverse_record.resolved_address) + .bind(&reverse_record.domain_id) + .bind(&reverse_record.domain_name) + .execute(pool) + .await?; + Ok(()) +} + async fn create_domain(pool: &PgPool, schema: &str, domain: &CreationDomain) -> Result<(), DbErr> { sqlx::query(&format!( r#" diff --git a/blockscout-ens/bens-logic/src/subgraph/sql/mod.rs b/blockscout-ens/bens-logic/src/subgraph/sql/mod.rs index b5e41331b..bf75adaf1 100644 --- a/blockscout-ens/bens-logic/src/subgraph/sql/mod.rs +++ b/blockscout-ens/bens-logic/src/subgraph/sql/mod.rs @@ -1,3 +1,4 @@ +mod addr2name; mod cache_views; mod create; mod domain; @@ -6,13 +7,13 @@ mod transaction_history; mod update; mod utils; +pub use addr2name::*; pub use cache_views::*; pub use create::*; pub use domain::*; pub use schema_selector::*; pub use transaction_history::*; pub use update::*; - #[derive(thiserror::Error, Debug)] pub enum DbErr { #[error("db error: {0}")] diff --git a/blockscout-ens/bens-server/config/dev.json b/blockscout-ens/bens-server/config/dev.json index a7a489713..abd98d1d3 100644 --- a/blockscout-ens/bens-server/config/dev.json +++ b/blockscout-ens/bens-server/config/dev.json @@ -35,6 +35,7 @@ ], "network_id": 1, "subgraph_name": "ens-subgraph", + "address_resolve_technique": "reverse_registry", "meta": { "short_name": "ENS", "title": "Ethereum Name Service", @@ -44,7 +45,6 @@ }, "specific": { "type": "ens_like", - "address_resolve_technique": "reverse_registry", "native_token_contract": "0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85", "registry_contract": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e", "try_offchain_resolve": true @@ -54,9 +54,9 @@ "tld_list": ["eth"], "network_id": 11155111, "subgraph_name": "ens-sepolia-subgraph", + "address_resolve_technique": "reverse_registry", "specific": { "type": "ens_like", - "address_resolve_technique": "reverse_registry", "native_token_contract": "0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85", "registry_contract": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e", "try_offchain_resolve": true @@ -73,9 +73,9 @@ "tld_list": ["shib"], "network_id": 109, "subgraph_name": "d3-connect-shib-subgraph", + "address_resolve_technique": "addr2name", "specific": { "type": "d3_connect", - "address_resolve_technique": "reverse_registry", "native_token_contract": "0xDe74799371Ceac11A0F52BA2694392A391D0dA18", "resolver_contract": "0xD60D40674E678F0089736D6381071973a75B4B6f" }, diff --git a/blockscout-ens/bens-server/config/prod.json b/blockscout-ens/bens-server/config/prod.json index a2c6a712a..03b86115c 100644 --- a/blockscout-ens/bens-server/config/prod.json +++ b/blockscout-ens/bens-server/config/prod.json @@ -38,6 +38,15 @@ "genome" ] }, + "109": { + "blockscout": { + "url": "https://shibariumscan.io" + }, + "use_protocols": [ + "d3_connect" + ], + "rpc_url": "https://www.shibrpc.com" + }, "137": { "blockscout": { "url": "https://polygon.blockscout.com" @@ -142,11 +151,11 @@ ], "network_id": 1, "subgraph_name": "ens-subgraph", + "address_resolve_technique": "reverse_registry", "specific": { "type": "ens_like", "registry_contract": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e", "native_token_contract": "0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85", - "address_resolve_technique": "reverse_registry", "try_offchain_resolve": true }, "meta": { @@ -161,10 +170,10 @@ "tld_list": ["eth"], "network_id": 11155111, "subgraph_name": "ens-sepolia-subgraph", + "address_resolve_technique": "reverse_registry", "specific": { "type": "ens_like", - "native_token_contract": "0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85", - "address_resolve_technique": "reverse_registry" + "native_token_contract": "0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85" }, "meta": { "short_name": "ENS (Testnet)", @@ -180,9 +189,9 @@ ], "network_id": 100, "subgraph_name": "genome-subgraph", + "address_resolve_technique": "reverse_registry", "specific": { "type": "ens_like", - "address_resolve_technique": "reverse_registry", "empty_label_hash": "0xc4a8c56f9b0096f720f38bd557d30306dbd78f7751d277e05f062d1b85912a63", "native_token_contract": "0x942fcaf68a0c264d5447b03a2011b395a899f2d3" }, @@ -198,9 +207,9 @@ "tld_list": ["gno"], "network_id": 10200, "subgraph_name": "genome-chiado-subgraph", + "address_resolve_technique": "reverse_registry", "specific": { "type": "ens_like", - "address_resolve_technique": "reverse_registry", "empty_label_hash": "0x1a13b687a5ff1d8ab1a9e189e1507a6abe834a9296cc8cff937905e3dee0c4f6", "native_token_contract": "0xfd3d666dB2557983F3F04d61f90E35cc696f6D60" }, @@ -218,9 +227,9 @@ ], "network_id": 30, "subgraph_name": "rns-subgraph", + "address_resolve_technique": "all_domains", "specific": { "type": "ens_like", - "address_resolve_technique": "all_domains", "native_token_contract": "0x45d3E4fB311982a06ba52359d44cB4f5980e0ef1" }, "meta": { @@ -235,9 +244,9 @@ "tld_list": ["rsk"], "network_id": 31, "subgraph_name": "rns-testnet-subgraph", + "address_resolve_technique": "all_domains", "specific": { "type": "ens_like", - "address_resolve_technique": "all_domains", "native_token_contract": "0xca0a477e19bac7e0e172ccfd2e3c28a7200bdb71" }, "meta": { @@ -254,9 +263,9 @@ ], "network_id": 8453, "subgraph_name": "base-name-service-subgraph", + "address_resolve_technique": "reverse_registry", "specific": { "type": "ens_like", - "address_resolve_technique": "reverse_registry", "native_token_contract": "0xaCe5602d169Edeb874bfE584a651801B8ac67093" }, "meta": { @@ -273,9 +282,9 @@ ], "network_id": 34443, "subgraph_name": "mode-subgraph", + "address_resolve_technique": "reverse_registry", "specific": { "type": "ens_like", - "address_resolve_technique": "reverse_registry", "native_token_contract": "0x2ad86eeec513ac16804bb05310214c3fd496835b", "empty_label_hash": "0x2fd69f9e5bec9de9ebf3468dafc549eca0bc7d17dfbc09869c2cfc3997d5d038" }, @@ -291,9 +300,9 @@ "tld_list": ["mode"], "network_id": 919, "subgraph_name": "mode-sepolia-subgraph", + "address_resolve_technique": "reverse_registry", "specific": { "type": "ens_like", - "address_resolve_technique": "reverse_registry", "native_token_contract": "0xCa3a57e014937C29526De98e4A8A334a7D04792b", "empty_label_hash": "0xea1eb1136f380e6643b69866632ce3b493100790c9c84416f2769d996a1c38b1" }, @@ -311,9 +320,9 @@ ], "network_id": 1890, "subgraph_name": "lightlink-subgraph", + "address_resolve_technique": "reverse_registry", "specific": { "type": "ens_like", - "address_resolve_technique": "reverse_registry", "native_token_contract": "0x5183ba1dee9770760360533cf00b9d8e26495927", "empty_label_hash": "0xd00bb4a08bb99b28b4c1d80951b62b654e4d2688242da2d2c7f98ed6c9caaaad" }, @@ -331,9 +340,9 @@ ], "network_id": 137, "subgraph_name": "zns-subgraph", + "address_resolve_technique": "all_domains", "specific": { - "type": "ens_like", - "address_resolve_technique": "all_domains" + "type": "ens_like" }, "meta": { "short_name": "ZNS", @@ -349,9 +358,9 @@ ], "network_id": 81457, "subgraph_name": "zns-blast-subgraph", + "address_resolve_technique": "all_domains", "specific": { - "type": "ens_like", - "address_resolve_technique": "all_domains" + "type": "ens_like" }, "meta": { "short_name": "ZNS", @@ -360,6 +369,24 @@ "icon_url": "https://i.imgur.com/c7QnsBF.png", "docs_url": "https://docs.znsconnect.io/" } + }, + "d3_connect": { + "tld_list": ["shib"], + "network_id": 109, + "subgraph_name": "d3-connect-shib-subgraph", + "address_resolve_technique": "addr2name", + "specific": { + "type": "d3_connect", + "native_token_contract": "0xDe74799371Ceac11A0F52BA2694392A391D0dA18", + "resolver_contract": "0xD60D40674E678F0089736D6381071973a75B4B6f" + }, + "meta": { + "short_name": "D3", + "title": "D3 Connect", + "description": "D3 Connect is official identity service for top web3 communities.", + "icon_url": "https://i.imgur.com/cD6VIXk.png", + "docs_url": "https://docs.d3.app/" + } } } } diff --git a/blockscout-ens/bens-server/config/staging.json b/blockscout-ens/bens-server/config/staging.json index 10b9bcf47..373e411d5 100644 --- a/blockscout-ens/bens-server/config/staging.json +++ b/blockscout-ens/bens-server/config/staging.json @@ -34,9 +34,9 @@ "tld_list": ["eth"], "network_id": 11155111, "subgraph_name": "ens-subgraph", + "address_resolve_technique": "reverse_registry", "specific": { "type": "ens_like", - "address_resolve_technique": "reverse_registry", "native_token_contract": "0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85", "registry_contract": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e", "try_offchain_resolve": true @@ -53,9 +53,9 @@ "tld_list": ["gno"], "network_id": 10200, "subgraph_name": "genome-subgraph", + "address_resolve_technique": "reverse_registry", "specific": { "type": "ens_like", - "address_resolve_technique": "reverse_registry", "native_token_contract": "0xfd3d666dB2557983F3F04d61f90E35cc696f6D60", "empty_label_hash": "0x1a13b687a5ff1d8ab1a9e189e1507a6abe834a9296cc8cff937905e3dee0c4f6" }, @@ -71,9 +71,9 @@ "tld_list": ["mode"], "network_id": 919, "subgraph_name": "mode-subgraph", + "address_resolve_technique": "reverse_registry", "specific": { "type": "ens_like", - "address_resolve_technique": "reverse_registry", "native_token_contract": "0xCa3a57e014937C29526De98e4A8A334a7D04792b", "empty_label_hash": "0xea1eb1136f380e6643b69866632ce3b493100790c9c84416f2769d996a1c38b1" }, diff --git a/blockscout-ens/bens-server/tests/config.test.json b/blockscout-ens/bens-server/tests/config.test.json index 76c48d97f..88d7106ad 100644 --- a/blockscout-ens/bens-server/tests/config.test.json +++ b/blockscout-ens/bens-server/tests/config.test.json @@ -41,8 +41,12 @@ "tld_list": ["eth"], "network_id": 1, "subgraph_name": "ens-subgraph", - "address_resolve_technique": "reverse_registry", - "native_token_contract": "0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85", + "specific": { + "type": "ens_like", + "address_resolve_technique": "reverse_registry", + "native_token_contract": "0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85", + "registry_contract": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e" + }, "meta": { "short_name": "ens short", "title": "ens title", @@ -53,9 +57,12 @@ "tld_list": ["gno"], "network_id": 10200, "subgraph_name": "genome-subgraph", - "address_resolve_technique": "reverse_registry", - "empty_label_hash": "0x1a13b687a5ff1d8ab1a9e189e1507a6abe834a9296cc8cff937905e3dee0c4f6", - "native_token_contract": "0xfd3d666dB2557983F3F04d61f90E35cc696f6D60", + "specific": { + "type": "ens_like", + "address_resolve_technique": "reverse_registry", + "empty_label_hash": "0x1a13b687a5ff1d8ab1a9e189e1507a6abe834a9296cc8cff937905e3dee0c4f6", + "native_token_contract": "0xfd3d666dB2557983F3F04d61f90E35cc696f6D60" + }, "meta": { "short_name": "genome short", "title": "genome title", diff --git a/blockscout-ens/graph-node/deployer/config.json b/blockscout-ens/graph-node/deployer/config.json index a83e8b07c..e49820ea8 100644 --- a/blockscout-ens/graph-node/deployer/config.json +++ b/blockscout-ens/graph-node/deployer/config.json @@ -60,7 +60,7 @@ "subgraph_name": "zns-blast-subgraph", "network": "blast-mainnet" }, - "d3-connect": { + "d3-connect-shib": { "subgraph_path": "../subgraphs/d3-connect-subgraph", "subgraph_name": "d3-connect-shib-subgraph", "network": "shibarium" diff --git a/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/src/Registry.ts b/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/src/Registry.ts index 3f0d67a42..703e3c971 100644 --- a/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/src/Registry.ts +++ b/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/src/Registry.ts @@ -74,9 +74,9 @@ function _handleNewDomain(tokenId: BigInt, to: Address, label: string, tld: stri domain.name = label + "." + tld; } - if (domain.resolvedAddress == null) { - domain.resolvedAddress = to.toHexString(); - } + // if (domain.resolvedAddress == null) { + // domain.resolvedAddress = to.toHexString(); + // } domain.owner = to.toHexString(); domain.parent = node.toHexString(); diff --git a/blockscout-ens/justfile b/blockscout-ens/justfile index 6350c789a..f5874465f 100644 --- a/blockscout-ens/justfile +++ b/blockscout-ens/justfile @@ -4,8 +4,8 @@ default: db-host := env_var_or_default('DB_HOST', "localhost") db-port := env_var_or_default('DB_PORT', "5432") db-user := env_var_or_default('DB_USER', "graph-node") -db-password := env_var_or_default('DB_PASSWORD', "admin") -db-name := env_var_or_default('DB_NAME', "bens") +db-password := env_var_or_default('DB_PASSWORD', "let-me-in") +db-name := env_var_or_default('DB_NAME', "graph-node") export DATABASE_URL := "postgres://" + db-user + ":" + db-password + "@" + db-host + ":" + db-port + "/" + db-name docker-name := env_var_or_default('DOCKER_NAME', "bens-postgres") @@ -24,6 +24,20 @@ start-postgres: stop-postgres: docker rm -f {{docker-name}} +graph-node-start: + docker-compose --file graph-node/docker-compose.yml up -d + sleep 6 + ./graph-node/rainbow.small.sh + +graph-node-clean: + rm -rf graph-node/data + +graph-node-stop: + docker-compose --file graph-node/docker-compose.yml down + +deploy-subgraph name: + (cd graph-node/deployer && python3 deployer.py {{name}}) + stop-test-postgres: just docker-name="{{docker-name}}-test" stop-postgres @@ -38,4 +52,10 @@ add-test-migration name: sqlx migrate add {{name}} --source bens-logic/tests/migrations/ benchmark: - cargo run --example resolve_benchmark \ No newline at end of file + cargo run --example resolve_benchmark + +run config: + BENS__DATABASE__CONNECT__URL={{DATABASE_URL}} BENS__CONFIG=bens-server/config/{{config}}.json cargo run --bin bens-server + +run-dev: + dotenv -e bens-server/.env -e bens-server/.dev.env -- just run dev From 6ac0d5448690ec07a9d4d2604081028df74b66b2 Mon Sep 17 00:00:00 2001 From: sevenzing Date: Wed, 6 Nov 2024 17:13:21 +0100 Subject: [PATCH 05/10] fix test settings --- blockscout-ens/bens-server/tests/config.test.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/blockscout-ens/bens-server/tests/config.test.json b/blockscout-ens/bens-server/tests/config.test.json index 88d7106ad..1a1a8746f 100644 --- a/blockscout-ens/bens-server/tests/config.test.json +++ b/blockscout-ens/bens-server/tests/config.test.json @@ -41,9 +41,9 @@ "tld_list": ["eth"], "network_id": 1, "subgraph_name": "ens-subgraph", + "address_resolve_technique": "reverse_registry", "specific": { "type": "ens_like", - "address_resolve_technique": "reverse_registry", "native_token_contract": "0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85", "registry_contract": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e" }, @@ -57,9 +57,9 @@ "tld_list": ["gno"], "network_id": 10200, "subgraph_name": "genome-subgraph", + "address_resolve_technique": "reverse_registry", "specific": { "type": "ens_like", - "address_resolve_technique": "reverse_registry", "empty_label_hash": "0x1a13b687a5ff1d8ab1a9e189e1507a6abe834a9296cc8cff937905e3dee0c4f6", "native_token_contract": "0xfd3d666dB2557983F3F04d61f90E35cc696f6D60" }, From 8a4c79c4cf6f34e59a5a6e44172a7fe477f1b6f2 Mon Sep 17 00:00:00 2001 From: sevenzing Date: Wed, 6 Nov 2024 17:14:42 +0100 Subject: [PATCH 06/10] fix justfile --- blockscout-ens/justfile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/blockscout-ens/justfile b/blockscout-ens/justfile index f5874465f..758deb17d 100644 --- a/blockscout-ens/justfile +++ b/blockscout-ens/justfile @@ -35,8 +35,9 @@ graph-node-clean: graph-node-stop: docker-compose --file graph-node/docker-compose.yml down -deploy-subgraph name: - (cd graph-node/deployer && python3 deployer.py {{name}}) +deploy-subgraph *args: + (cd graph-node/deployer && python3 deployer.py {{args}}) + stop-test-postgres: just docker-name="{{docker-name}}-test" stop-postgres From f5f8dbc64c9e6bb0fdc1063f11fd8cf89b3d39ff Mon Sep 17 00:00:00 2001 From: sevenzing Date: Fri, 8 Nov 2024 17:54:49 +0100 Subject: [PATCH 07/10] fix blockscout-ens --- blockscout-ens/.env.dev | 6 ++++ .../migrations/20241104160016_addr2name.sql | 20 ------------ .../bens-logic/src/subgraph/reader.rs | 8 +++-- .../sql/{ => additional_tables}/addr2name.rs | 32 +++++++++++++++---- .../cache_views/addr_reverse_names.rs | 0 .../cache_views/address_names.rs | 0 .../cache_views/mod.rs | 9 +++--- .../src/subgraph/sql/additional_tables/mod.rs | 20 ++++++++++++ .../bens-logic/src/subgraph/sql/mod.rs | 6 ++-- blockscout-ens/bens-server/.gitignore | 2 -- .../graph-node/deployer/deployer.py | 2 +- .../d3-connect-subgraph/schema.graphql | 5 +++ .../d3-connect-subgraph/src/Registry.ts | 4 +++ .../lightlink-subgraph/subgraph.yaml | 3 -- blockscout-ens/justfile | 6 ++-- 15 files changed, 77 insertions(+), 46 deletions(-) create mode 100644 blockscout-ens/.env.dev delete mode 100644 blockscout-ens/bens-logic/migrations/20241104160016_addr2name.sql rename blockscout-ens/bens-logic/src/subgraph/sql/{ => additional_tables}/addr2name.rs (64%) rename blockscout-ens/bens-logic/src/subgraph/sql/{ => additional_tables}/cache_views/addr_reverse_names.rs (100%) rename blockscout-ens/bens-logic/src/subgraph/sql/{ => additional_tables}/cache_views/address_names.rs (100%) rename blockscout-ens/bens-logic/src/subgraph/sql/{ => additional_tables}/cache_views/mod.rs (99%) create mode 100644 blockscout-ens/bens-logic/src/subgraph/sql/additional_tables/mod.rs delete mode 100644 blockscout-ens/bens-server/.gitignore diff --git a/blockscout-ens/.env.dev b/blockscout-ens/.env.dev new file mode 100644 index 000000000..a120c62d9 --- /dev/null +++ b/blockscout-ens/.env.dev @@ -0,0 +1,6 @@ +RUST_LOG=info +BENS__TRACING__FORMAT=default +BENS__DATABASE__RUN_MIGRATIONS=true +BENS__METRICS__ENABLED=false + +BENS__CONFIG=./bens-server/config/dev.json diff --git a/blockscout-ens/bens-logic/migrations/20241104160016_addr2name.sql b/blockscout-ens/bens-logic/migrations/20241104160016_addr2name.sql deleted file mode 100644 index e58bbf767..000000000 --- a/blockscout-ens/bens-logic/migrations/20241104160016_addr2name.sql +++ /dev/null @@ -1,20 +0,0 @@ -DO $$ -DECLARE - schema_name text; -BEGIN - -- Loop through schemas that match the pattern 'sgd%' - FOR schema_name IN - SELECT schemata.schema_name - FROM information_schema.schemata AS schemata - WHERE schemata.schema_name LIKE 'sgd%' - LOOP - -- Dynamically construct and execute the SQL statement to add the columns - EXECUTE format(' - CREATE TABLE %I.addr2name ( - resolved_address TEXT PRIMARY KEY, - domain_id TEXT, - domain_name TEXT - ); - ', schema_name); - END LOOP; -END $$; diff --git a/blockscout-ens/bens-logic/src/subgraph/reader.rs b/blockscout-ens/bens-logic/src/subgraph/reader.rs index dc5849aa7..611da50f0 100644 --- a/blockscout-ens/bens-logic/src/subgraph/reader.rs +++ b/blockscout-ens/bens-logic/src/subgraph/reader.rs @@ -18,7 +18,7 @@ use crate::{ }, subgraph::{ resolve_addresses::resolve_addresses, - sql::{CachedView, DbErr}, + sql::{AdditionalTable, CachedView, DbErr}, }, }; use alloy::primitives::{Address, TxHash}; @@ -181,7 +181,11 @@ impl SubgraphReader { ))?; } AddressResolveTechnique::Addr2Name => { - // addr2name doesnt have view + sql::Addr2NameTable::create_table(self.pool.as_ref(), schema) + .await + .context(format!( + "failed to create Addr2NameTable for schema {schema}" + ))?; } } } diff --git a/blockscout-ens/bens-logic/src/subgraph/sql/addr2name.rs b/blockscout-ens/bens-logic/src/subgraph/sql/additional_tables/addr2name.rs similarity index 64% rename from blockscout-ens/bens-logic/src/subgraph/sql/addr2name.rs rename to blockscout-ens/bens-logic/src/subgraph/sql/additional_tables/addr2name.rs index 713358259..3d4dfadbb 100644 --- a/blockscout-ens/bens-logic/src/subgraph/sql/addr2name.rs +++ b/blockscout-ens/bens-logic/src/subgraph/sql/additional_tables/addr2name.rs @@ -1,28 +1,48 @@ -use super::{utils, DbErr}; -use crate::{entity::subgraph::domain::DomainWithAddress, protocols::Protocol}; +use super::AdditionalTable; +use crate::{ + entity::subgraph::domain::DomainWithAddress, + protocols::Protocol, + subgraph::sql::{utils, DbErr}, +}; use nonempty::NonEmpty; use sea_query::{Alias, Expr, PostgresQueryBuilder}; use sqlx::PgPool; pub struct Addr2NameTable; -impl Addr2NameTable { - pub fn view_table_name() -> &'static str { +#[async_trait::async_trait] +impl AdditionalTable for Addr2NameTable { + fn table_name() -> &'static str { "addr2name" } + fn create_table_sql(schema: &str) -> String { + let table_name = Self::table_name(); + format!( + r#" + CREATE TABLE IF NOT EXISTS {schema}.{table_name} ( + resolved_address TEXT PRIMARY KEY, + domain_id TEXT, + domain_name TEXT + ); + "# + ) + } +} + +impl Addr2NameTable { pub async fn batch_search_addreses( pool: &PgPool, protocols: &NonEmpty<&Protocol>, address: &[impl AsRef], ) -> Result, DbErr> { - let view_table_name = Self::view_table_name(); + let table_name = Self::table_name(); let queries = NonEmpty::collect(protocols.into_iter().map(|p| { sea_query::Query::select() .expr(Expr::cust("domain_id as id")) .expr(Expr::cust("domain_name")) .expr(Expr::cust("resolved_address")) - .from((Alias::new(&p.subgraph_schema), Alias::new(view_table_name))) + .from((Alias::new(&p.subgraph_schema), Alias::new(table_name))) .and_where(Expr::cust("resolved_address = ANY($1)")) .and_where(Expr::cust("domain_id is not null")) .and_where(Expr::cust("domain_name is not null")) diff --git a/blockscout-ens/bens-logic/src/subgraph/sql/cache_views/addr_reverse_names.rs b/blockscout-ens/bens-logic/src/subgraph/sql/additional_tables/cache_views/addr_reverse_names.rs similarity index 100% rename from blockscout-ens/bens-logic/src/subgraph/sql/cache_views/addr_reverse_names.rs rename to blockscout-ens/bens-logic/src/subgraph/sql/additional_tables/cache_views/addr_reverse_names.rs diff --git a/blockscout-ens/bens-logic/src/subgraph/sql/cache_views/address_names.rs b/blockscout-ens/bens-logic/src/subgraph/sql/additional_tables/cache_views/address_names.rs similarity index 100% rename from blockscout-ens/bens-logic/src/subgraph/sql/cache_views/address_names.rs rename to blockscout-ens/bens-logic/src/subgraph/sql/additional_tables/cache_views/address_names.rs diff --git a/blockscout-ens/bens-logic/src/subgraph/sql/cache_views/mod.rs b/blockscout-ens/bens-logic/src/subgraph/sql/additional_tables/cache_views/mod.rs similarity index 99% rename from blockscout-ens/bens-logic/src/subgraph/sql/cache_views/mod.rs rename to blockscout-ens/bens-logic/src/subgraph/sql/additional_tables/cache_views/mod.rs index e21e8e0b4..8d3965217 100644 --- a/blockscout-ens/bens-logic/src/subgraph/sql/cache_views/mod.rs +++ b/blockscout-ens/bens-logic/src/subgraph/sql/additional_tables/cache_views/mod.rs @@ -1,13 +1,12 @@ -use anyhow::Context; -use sqlx::{Executor, PgPool, Row}; - mod addr_reverse_names; mod address_names; - -use crate::subgraph::sql::DbErr; pub use addr_reverse_names::AddrReverseNamesView; pub use address_names::AddressNamesView; +use crate::subgraph::sql::DbErr; +use anyhow::Context; +use sqlx::{Executor, PgPool, Row}; + #[async_trait::async_trait] pub trait CachedView { fn refresh_function_name() -> &'static str; diff --git a/blockscout-ens/bens-logic/src/subgraph/sql/additional_tables/mod.rs b/blockscout-ens/bens-logic/src/subgraph/sql/additional_tables/mod.rs new file mode 100644 index 000000000..3efdce80f --- /dev/null +++ b/blockscout-ens/bens-logic/src/subgraph/sql/additional_tables/mod.rs @@ -0,0 +1,20 @@ +mod addr2name; +mod cache_views; +pub use addr2name::*; +pub use cache_views::*; + +use sqlx::{Executor, PgPool}; + +use super::DbErr; + +#[async_trait::async_trait] +pub trait AdditionalTable { + fn table_name() -> &'static str; + fn create_table_sql(schema: &str) -> String; + + async fn create_table(pool: &PgPool, schema: &str) -> Result<(), DbErr> { + pool.execute(sqlx::query(&Self::create_table_sql(schema))) + .await?; + Ok(()) + } +} diff --git a/blockscout-ens/bens-logic/src/subgraph/sql/mod.rs b/blockscout-ens/bens-logic/src/subgraph/sql/mod.rs index bf75adaf1..44e1bd8a5 100644 --- a/blockscout-ens/bens-logic/src/subgraph/sql/mod.rs +++ b/blockscout-ens/bens-logic/src/subgraph/sql/mod.rs @@ -1,5 +1,4 @@ -mod addr2name; -mod cache_views; +mod additional_tables; mod create; mod domain; mod schema_selector; @@ -7,8 +6,7 @@ mod transaction_history; mod update; mod utils; -pub use addr2name::*; -pub use cache_views::*; +pub use additional_tables::*; pub use create::*; pub use domain::*; pub use schema_selector::*; diff --git a/blockscout-ens/bens-server/.gitignore b/blockscout-ens/bens-server/.gitignore deleted file mode 100644 index 65d6d5786..000000000 --- a/blockscout-ens/bens-server/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.*.env -benchmark diff --git a/blockscout-ens/graph-node/deployer/deployer.py b/blockscout-ens/graph-node/deployer/deployer.py index 98b258a5e..731879b57 100644 --- a/blockscout-ens/graph-node/deployer/deployer.py +++ b/blockscout-ens/graph-node/deployer/deployer.py @@ -7,7 +7,7 @@ import sys import glob -DEFAULT_PROD_IFPS_URL = 'http://ipfs.node.blockscout.com' +DEFAULT_PROD_IFPS_URL = 'http://ipfs-main.node.blockscout.com' DEFAULT_IPFS_URL = "http://127.0.0.1:5001" diff --git a/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/schema.graphql b/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/schema.graphql index 90268cfc1..139164e74 100644 --- a/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/schema.graphql +++ b/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/schema.graphql @@ -43,6 +43,11 @@ type Domain @entity { "The events associated with the domain" events: [DomainEvent!]! @derivedFrom(field: "domain") + + "Is domain stored offchain" + storedOffchain: Boolean! + "Is domain resolved with wildcard" + resolvedWithWildcard: Boolean! } interface DomainEvent { diff --git a/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/src/Registry.ts b/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/src/Registry.ts index 703e3c971..cc5e0b99b 100644 --- a/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/src/Registry.ts +++ b/blockscout-ens/graph-node/subgraphs/d3-connect-subgraph/src/Registry.ts @@ -18,6 +18,8 @@ function createDomain(node: string, timestamp: BigInt): Domain { domain.isMigrated = true; domain.createdAt = timestamp; domain.subdomainCount = 0; + domain.storedOffchain = false; + domain.resolvedWithWildcard = false; } return domain; } @@ -62,6 +64,8 @@ function _handleNewDomain(tokenId: BigInt, to: Address, label: string, tld: stri domain = new Domain(subnode.toHexString()); domain.createdAt = block.timestamp; domain.subdomainCount = 0; + domain.storedOffchain = false; + domain.resolvedWithWildcard = false; } if (domain.parent === null && parent !== null) { diff --git a/blockscout-ens/graph-node/subgraphs/lightlink-subgraph/subgraph.yaml b/blockscout-ens/graph-node/subgraphs/lightlink-subgraph/subgraph.yaml index 6293f13d7..cbb00224a 100644 --- a/blockscout-ens/graph-node/subgraphs/lightlink-subgraph/subgraph.yaml +++ b/blockscout-ens/graph-node/subgraphs/lightlink-subgraph/subgraph.yaml @@ -32,8 +32,6 @@ dataSources: handler: handleNewResolver - event: NewTTL(indexed bytes32,uint64) handler: handleNewTTL - - - kind: ethereum/contract name: Resolver network: lightlink-phoenix @@ -101,7 +99,6 @@ dataSources: handler: handleNameRenewed - event: Transfer(indexed address,indexed address,indexed uint256) handler: handleNameTransferred - - kind: ethereum/contract name: RegistrarController network: lightlink-phoenix diff --git a/blockscout-ens/justfile b/blockscout-ens/justfile index 758deb17d..ad7c16c99 100644 --- a/blockscout-ens/justfile +++ b/blockscout-ens/justfile @@ -55,8 +55,8 @@ add-test-migration name: benchmark: cargo run --example resolve_benchmark -run config: - BENS__DATABASE__CONNECT__URL={{DATABASE_URL}} BENS__CONFIG=bens-server/config/{{config}}.json cargo run --bin bens-server +run: + BENS__DATABASE__CONNECT__URL={{DATABASE_URL}} cargo run --bin bens-server run-dev: - dotenv -e bens-server/.env -e bens-server/.dev.env -- just run dev + dotenv -e .env.dev -- just run From f65624229246c050ac78dfd7c585f873cc996a79 Mon Sep 17 00:00:00 2001 From: sevenzing Date: Tue, 12 Nov 2024 16:58:43 +0700 Subject: [PATCH 08/10] add env-collector and move deps to workspace --- blockscout-ens/.env.dev | 1 + blockscout-ens/Cargo.lock | 184 ++++++++++++++++-- blockscout-ens/Cargo.toml | 48 ++++- blockscout-ens/README.md | 20 +- blockscout-ens/bens-logic/Cargo.toml | 77 ++++---- blockscout-ens/bens-proto/Cargo.toml | 20 +- blockscout-ens/bens-server/Cargo.toml | 71 ++++--- .../bens-server/config/example.json | 7 + blockscout-ens/bens-server/config/prod.json | 3 +- .../src/{main.rs => bin/bens-server.rs} | 0 .../bens-server/src/bin/check-envs.rs | 17 ++ blockscout-ens/justfile | 2 +- 12 files changed, 350 insertions(+), 100 deletions(-) create mode 100644 blockscout-ens/bens-server/config/example.json rename blockscout-ens/bens-server/src/{main.rs => bin/bens-server.rs} (100%) create mode 100644 blockscout-ens/bens-server/src/bin/check-envs.rs diff --git a/blockscout-ens/.env.dev b/blockscout-ens/.env.dev index a120c62d9..f4b95d725 100644 --- a/blockscout-ens/.env.dev +++ b/blockscout-ens/.env.dev @@ -4,3 +4,4 @@ BENS__DATABASE__RUN_MIGRATIONS=true BENS__METRICS__ENABLED=false BENS__CONFIG=./bens-server/config/dev.json +BENS__DATABASE__CONNECT__URL=postgres://graph-node:let-me-in@localhost:5432/graph-node diff --git a/blockscout-ens/Cargo.lock b/blockscout-ens/Cargo.lock index 1d8ae86ea..3e342fc4d 100644 --- a/blockscout-ens/Cargo.lock +++ b/blockscout-ens/Cargo.lock @@ -1129,6 +1129,12 @@ dependencies = [ "rand 0.8.5", ] +[[package]] +name = "arraydeque" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d902e3d592a523def97af8f317b08ce16b7ab854c1985a0c671e6f15cebc236" + [[package]] name = "arrayvec" version = "0.7.6" @@ -1386,7 +1392,7 @@ dependencies = [ [[package]] name = "bens-server" -version = "1.4.0" +version = "1.5.0" dependencies = [ "actix-web", "alloy", @@ -1397,11 +1403,12 @@ dependencies = [ "blockscout-display-bytes", "blockscout-service-launcher", "chrono", - "config", + "config 0.13.4", + "env-collector", "hex", "nonempty", "pretty_assertions", - "reqwest 0.12.8", + "reqwest 0.11.27", "serde", "serde_json", "sqlx", @@ -1512,9 +1519,9 @@ dependencies = [ [[package]] name = "blockscout-service-launcher" -version = "0.12.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6f67eeae88453683ba50fcb8187c4acc1368c2f2d34829fd702ba924dc09e30" +checksum = "a63d6b6e01527cefc2c82f2ef1b874817d4d6cb51f9bacffd116a94917387dc6" dependencies = [ "actix-cors", "actix-web", @@ -1522,7 +1529,7 @@ dependencies = [ "anyhow", "blockscout-tracing-actix-web", "cfg-if", - "config", + "config 0.13.4", "futures", "once_cell", "opentelemetry", @@ -1701,7 +1708,6 @@ version = "0.46.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7c8c50262271cdf5abc979a5f76515c234e764fa025d1ba4862c0f0bcda0e95" dependencies = [ - "ahash 0.8.11", "async-trait", "cached_proc_macro", "cached_proc_macro_types", @@ -1857,14 +1863,33 @@ dependencies = [ "lazy_static", "nom", "pathdiff", - "ron", - "rust-ini", + "ron 0.7.1", + "rust-ini 0.18.0", "serde", "serde_json", - "toml", + "toml 0.5.11", "yaml-rust", ] +[[package]] +name = "config" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68578f196d2a33ff61b27fae256c3164f65e36382648e30666dde05b8cc9dfdf" +dependencies = [ + "async-trait", + "convert_case 0.6.0", + "json5", + "nom", + "pathdiff", + "ron 0.8.1", + "rust-ini 0.20.0", + "serde", + "serde_json", + "toml 0.8.19", + "yaml-rust2", +] + [[package]] name = "const-hex" version = "1.13.1" @@ -1884,12 +1909,41 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +[[package]] +name = "const-random" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom 0.2.15", + "once_cell", + "tiny-keccak", +] + [[package]] name = "convert_case" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" +[[package]] +name = "convert_case" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", +] + [[package]] name = "cookie" version = "0.16.2" @@ -2203,7 +2257,7 @@ version = "0.99.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" dependencies = [ - "convert_case", + "convert_case 0.4.0", "proc-macro2", "quote", "rustc_version 0.4.1", @@ -2281,6 +2335,15 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0688c2a7f92e427f44895cd63841bff7b29f8d7a1648b9e7e07a4a365b2e1257" +[[package]] +name = "dlv-list" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "442039f5147480ba31067cb00ada1adae6892028e40e45fc5de7b7df6dcc1b5f" +dependencies = [ + "const-random", +] + [[package]] name = "doctest-file" version = "1.0.0" @@ -2350,6 +2413,20 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "env-collector" +version = "0.1.1" +source = "git+https://github.com/blockscout/blockscout-rs#404277036f1902e63e16239f09866c9ad4cb6794" +dependencies = [ + "anyhow", + "config 0.14.1", + "itertools 0.13.0", + "json_dotpath", + "regex", + "serde", + "serde_json", +] + [[package]] name = "equivalent" version = "1.0.1" @@ -3441,6 +3518,18 @@ dependencies = [ "serde", ] +[[package]] +name = "json_dotpath" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbdcfef3cf5591f0cef62da413ae795e3d1f5a00936ccec0b2071499a32efd1a" +dependencies = [ + "serde", + "serde_derive", + "serde_json", + "thiserror", +] + [[package]] name = "k256" version = "0.13.4" @@ -3965,10 +4054,20 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccd746e37177e1711c20dd619a1620f34f5c8b569c53590a72dedd5344d8924a" dependencies = [ - "dlv-list", + "dlv-list 0.3.0", "hashbrown 0.12.3", ] +[[package]] +name = "ordered-multimap" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49203cdcae0030493bad186b28da2fa25645fa276a51b6fec8010d281e02ef79" +dependencies = [ + "dlv-list 0.5.2", + "hashbrown 0.14.5", +] + [[package]] name = "ouroboros" version = "0.17.2" @@ -4954,6 +5053,18 @@ dependencies = [ "serde", ] +[[package]] +name = "ron" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" +dependencies = [ + "base64 0.21.7", + "bitflags 2.6.0", + "serde", + "serde_derive", +] + [[package]] name = "rsa" version = "0.9.6" @@ -5011,7 +5122,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6d5f2436026b4f6e79dc829837d467cc7e9a55ee40e750d716713540715a2df" dependencies = [ "cfg-if", - "ordered-multimap", + "ordered-multimap 0.4.3", +] + +[[package]] +name = "rust-ini" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e0698206bcb8882bf2a9ecb4c1e7785db57ff052297085a6efd4fe42302068a" +dependencies = [ + "cfg-if", + "ordered-multimap 0.7.3", ] [[package]] @@ -5494,6 +5615,15 @@ dependencies = [ "thiserror", ] +[[package]] +name = "serde_spanned" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +dependencies = [ + "serde", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -6420,11 +6550,26 @@ dependencies = [ "serde", ] +[[package]] +name = "toml" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + [[package]] name = "toml_datetime" version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +dependencies = [ + "serde", +] [[package]] name = "toml_edit" @@ -6433,6 +6578,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ "indexmap 2.6.0", + "serde", + "serde_spanned", "toml_datetime", "winnow", ] @@ -7386,6 +7533,17 @@ dependencies = [ "linked-hash-map", ] +[[package]] +name = "yaml-rust2" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8902160c4e6f2fb145dbe9d6760a75e3c9522d8bf796ed7047c85919ac7115f8" +dependencies = [ + "arraydeque", + "encoding_rs", + "hashlink", +] + [[package]] name = "yansi" version = "1.0.1" diff --git a/blockscout-ens/Cargo.toml b/blockscout-ens/Cargo.toml index 2fb4d62d9..6befbad38 100644 --- a/blockscout-ens/Cargo.toml +++ b/blockscout-ens/Cargo.toml @@ -8,4 +8,50 @@ members = [ ] [workspace.dependencies] -blockscout-service-launcher = "0.12.1" +bens-proto = { path = "./bens-proto" } +bens-logic = { path = "./bens-logic" } + +actix-prost = { git = "https://github.com/blockscout/actix-prost" } +actix-prost-build = { git = "https://github.com/blockscout/actix-prost" } +actix-prost-macros = { git = "https://github.com/blockscout/actix-prost" } +actix-web = { version = "4" } +alloy = { version = "0.5.4", default-features = false } +alloy-ccip-read = { version = "0.3.0" } +anyhow = { version = "1" } +async-trait = { version = "0.1" } +bigdecimal = { version = "0.4" } +blockscout-display-bytes = { version = "1.0" } +blockscout-service-launcher = { version = "0.14.0" } +cached = { version = "0.46.1", default-features = false } +chrono = "0.4" +config = { version = "0.13" } +env-collector = { git = "https://github.com/blockscout/blockscout-rs" } +futures = { version = "0.3" } +hex = { version = "0.4" } +idna = { version = "1.0.2" } +itertools = { version = "0.11.0" } +lazy_static = { version = "1.4" } +nonempty = { version = "0.10.0", default-features = false } +pretty_assertions = { version = "1.4.0" } +prometheus = { version = "0.13.4" } +prost = { version = "0.11" } +prost-build = { version = "0.11" } +reqwest = { version = "0.11" } +reqwest-middleware = { version = "0.2" } +reqwest-retry = { version = "0.3" } +sea-query = { version = "0.30.5" } +serde = { version = "1" } +serde_json = { version = "1", default-features = false } +serde_with = { version = "2.0" } +sqlx = { version = "0.7", default-features = false } +tera = { version = "1.19" } +thiserror = { version = "1" } +tokio = { version = "1.23", default-features = false } +tokio-cron-scheduler = { version = "0.9.4" } +tonic = { version = "0.8" } +tonic-build = { version = "0.8" } +tracing = { version = "0.1" } +tracing-subscriber = { version = "0.3", default-features = false } +url = { version = "2.4" } +wiremock = { version = "0.5" } + diff --git a/blockscout-ens/README.md b/blockscout-ens/README.md index ebbe4044b..62a3643e4 100644 --- a/blockscout-ens/README.md +++ b/blockscout-ens/README.md @@ -8,6 +8,24 @@ Here is brief overview of the project stucture: Service is **multi-chain**, meaning that only one instance of `graph-node`, `postgres` and `bens-server` is required. +## Envs + +[anchor]: <> (anchors.envs.start.envs_main) + +| Variable | Req​uir​ed | Description | Default value | +| --- | --- | --- | --- | +| `BENS__DATABASE__CONNECT__URL` | true | e.g. `postgresql://postgres:postgres@localhost:5432/postgres` | | +| `BENS__DATABASE__CREATE_DATABASE` | | | `false` | +| `BENS__DATABASE__RUN_MIGRATIONS` | | | `false` | +| `BENS__SERVER__HTTP__ADDR` | | | `0.0.0.0:8050` | +| `BENS__SERVER__HTTP__ENABLED` | | | `true` | +| `BENS__SERVER__HTTP__MAX_BODY_SIZE` | | | `2097152` | +| `BENS__SUBGRAPHS_READER__REFRESH_CACHE_SCHEDULE` | | | `0 0 * * * *` | +| `BENS__TRACING__ENABLED` | | | `true` | +| `BENS__TRACING__FORMAT` | | | `default` | + +[anchor]: <> (anchors.envs.end.envs_main) + ## Contribute If you want to add your name service procol to blockscout you should: @@ -25,4 +43,4 @@ If you want to add your name service procol to blockscout you should: * New directory inside `blockscout-ens/graph-node/subgraphs` with your subgraph code * Updated BENS config * Updated supported domains list - * Result of indexed data: proof that your indexed subgraph contains correct amount of domains, resolved_addresses and so on + * Result of indexed data: proof that your indexed subgraph contains correct amount of domains, resolved_addresses and so on \ No newline at end of file diff --git a/blockscout-ens/bens-logic/Cargo.toml b/blockscout-ens/bens-logic/Cargo.toml index 8afd78277..7a81da830 100644 --- a/blockscout-ens/bens-logic/Cargo.toml +++ b/blockscout-ens/bens-logic/Cargo.toml @@ -6,47 +6,50 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -tokio = { version = "1.23", features = [ "rt-multi-thread", "macros" ] } -alloy-ccip-read = "0.3.0" -anyhow = "1" -hex = "0.4" -chrono = "0.4" -tera = "1.19" -thiserror = "1" -serde = "1" -serde_json = {version = "1", features = ["raw_value"]} -url = "2.4" -reqwest = "0.11" -reqwest-middleware = "0.2" -reqwest-retry = "0.3" -lazy_static = "1.4" -tracing = "0.1" -futures = "0.3" -cached = { version = "0.46.1", features = ["proc_macro", "tokio", "async", "async_tokio_rt_multi_thread"] } -wiremock = {version = "0.5", optional = true } -sea-query = "0.30.5" -bigdecimal = "0.4" -async-trait = "0.1" -nonempty = { version = "0.10.0", features = ["serde", "serialize"] } -itertools = "0.11.0" -idna = "1.0.2" -alloy = { version = "0.5.4", features = ["full"] } -prometheus = "0.13.4" - -[dependencies.sqlx] -version = "0.7" -features = [ - "bigdecimal", - "postgres", - "runtime-tokio", +alloy = { workspace = true, features = ["full"] } +alloy-ccip-read = { workspace = true } +anyhow = { workspace = true } +async-trait = { workspace = true } +bigdecimal = { workspace = true } +cached = { workspace = true, features = [ + "proc_macro", + "tokio", + "async", + "async_tokio_rt_multi_thread", +] } +chrono = { workspace = true } +futures = { workspace = true } +hex = { workspace = true } +idna = { workspace = true } +itertools = { workspace = true } +lazy_static = { workspace = true } +nonempty = { workspace = true, features = ["serde", "serialize"] } +prometheus = { workspace = true } +reqwest = { workspace = true } +reqwest-middleware = { workspace = true } +reqwest-retry = { workspace = true } +sea-query = { workspace = true } +serde = { workspace = true } +serde_json = { workspace = true, features = ["raw_value"] } +sqlx = { workspace = true, features = [ + "bigdecimal", + "postgres", + "runtime-tokio", "tls-rustls", "migrate", - "chrono" -] + "chrono", + "macros", +] } +tera = { workspace = true } +thiserror = { workspace = true } +tokio = { workspace = true, features = ["rt-multi-thread", "macros"] } +tracing = { workspace = true } +url = { workspace = true } +wiremock = { workspace = true, optional = true } [dev-dependencies] -pretty_assertions = "1.4.0" -tracing-subscriber = {version = "0.3", features = ["env-filter"]} +pretty_assertions = { workspace = true } +tracing-subscriber = { workspace = true, features = ["env-filter"] } [[example]] name = "resolve_benchmark" diff --git a/blockscout-ens/bens-proto/Cargo.toml b/blockscout-ens/bens-proto/Cargo.toml index 63ec5f1df..76a82403b 100644 --- a/blockscout-ens/bens-proto/Cargo.toml +++ b/blockscout-ens/bens-proto/Cargo.toml @@ -6,15 +6,15 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -actix-web = "4" -actix-prost = { git = "https://github.com/blockscout/actix-prost" } -actix-prost-macros = { git = "https://github.com/blockscout/actix-prost" } -prost = "0.11" -serde = { version = "1" } -serde_with = { version = "2.0" } -tonic = "0.8" +actix-prost = { workspace = true } +actix-prost-macros = { workspace = true } +actix-web = { workspace = true } +prost = { workspace = true } +serde = { workspace = true } +serde_with = { workspace = true } +tonic = { workspace = true } [build-dependencies] -actix-prost-build = { git = "https://github.com/blockscout/actix-prost" } -prost-build = "0.11" -tonic-build = "0.8" \ No newline at end of file +actix-prost-build = { workspace = true } +prost-build = { workspace = true } +tonic-build = { workspace = true} diff --git a/blockscout-ens/bens-server/Cargo.toml b/blockscout-ens/bens-server/Cargo.toml index 86f002e48..f6b0403ed 100644 --- a/blockscout-ens/bens-server/Cargo.toml +++ b/blockscout-ens/bens-server/Cargo.toml @@ -1,46 +1,45 @@ [package] name = "bens-server" -version = "1.4.0" +version = "1.5.0" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -bens-proto = { path = "../bens-proto" } -bens-logic = { path = "../bens-logic" } - -actix-web = "4.2" -anyhow = "1.0" -blockscout-display-bytes = "1.0" +actix-web = { workspace = true } +alloy = { workspace = true, features = ["full"] } +anyhow = { workspace = true } +async-trait = { workspace = true } +bens-logic = { workspace = true } +bens-proto = { workspace = true } +blockscout-display-bytes = { workspace = true } blockscout-service-launcher = { workspace = true, features = ["database-0_12"] } -config = "0.13" -alloy = { version = "0.5.4", features = ["full"] } -serde = "1.0" -serde_json = "1.0.96" -tokio = { version = "1.23", features = [ "rt-multi-thread", "macros" ] } -tonic = "0.8" -tracing = "0.1" -async-trait = "0.1" -url = { version = "2", features = ["serde"] } -hex = "0.4" -thiserror = "1" -chrono = "0.4" -tokio-cron-scheduler = "0.9.4" -nonempty = { version = "0.10.0", features = ["serde", "serialize"] } -tracing-subscriber = { version = "0.3", features = ["env-filter"] } - -[dependencies.sqlx] -version = "0.7" -features = [ - "postgres", - "runtime-tokio", - "tls-rustls", -] - +chrono = { workspace = true } +config = { workspace = true } +env-collector = { workspace = true } +hex = { workspace = true } +nonempty = { workspace = true, features = ["serde", "serialize"] } +serde = { workspace = true } +serde_json = { workspace = true } +sqlx = { workspace = true, default-features = true, features = [ + "postgres", + "runtime-tokio", + "tls-rustls", +] } +thiserror = { workspace = true } +tokio = { workspace = true, features = ["rt-multi-thread", "macros"] } +tokio-cron-scheduler = { workspace = true } +tonic = { workspace = true } +tracing = { workspace = true } +tracing-subscriber = { workspace = true, features = ["env-filter"] } +url = { workspace = true, features = ["serde"] } [dev-dependencies] -bens-logic = { path = "../bens-logic", features = ["test-utils"] } -blockscout-service-launcher = { workspace = true, features = [ "database-0_12", "test-server" ] } -pretty_assertions = "1.4.0" -tera = "1" -reqwest = "0.12.4" +bens-logic = { workspace = true, features = ["test-utils"] } +blockscout-service-launcher = { workspace = true, features = [ + "database-0_12", + "test-server", +] } +pretty_assertions = { workspace = true } +reqwest = { workspace = true } +tera = { workspace = true } diff --git a/blockscout-ens/bens-server/config/example.json b/blockscout-ens/bens-server/config/example.json new file mode 100644 index 000000000..ee061a125 --- /dev/null +++ b/blockscout-ens/bens-server/config/example.json @@ -0,0 +1,7 @@ +{ + "database": { + "connect": { + "url": "postgresql://postgres:postgres@localhost:5432/postgres" + } + } +} diff --git a/blockscout-ens/bens-server/config/prod.json b/blockscout-ens/bens-server/config/prod.json index 03b86115c..70a89aef9 100644 --- a/blockscout-ens/bens-server/config/prod.json +++ b/blockscout-ens/bens-server/config/prod.json @@ -6,7 +6,8 @@ "blockscout": { "url": "https://eth.blockscout.com" }, - "use_protocols": ["ens"] + "use_protocols": ["ens"], + "rpc_url": "http://91.210.101.45:8545" }, "10": { "blockscout": { diff --git a/blockscout-ens/bens-server/src/main.rs b/blockscout-ens/bens-server/src/bin/bens-server.rs similarity index 100% rename from blockscout-ens/bens-server/src/main.rs rename to blockscout-ens/bens-server/src/bin/bens-server.rs diff --git a/blockscout-ens/bens-server/src/bin/check-envs.rs b/blockscout-ens/bens-server/src/bin/check-envs.rs new file mode 100644 index 000000000..9530350be --- /dev/null +++ b/blockscout-ens/bens-server/src/bin/check-envs.rs @@ -0,0 +1,17 @@ +use bens_server::Settings; +use env_collector::{run_env_collector_cli, PrefixFilter}; + +fn main() { + run_env_collector_cli::( + "BENS", + "README.md", + "bens-server/config/example.json", + PrefixFilter::blacklist(&[ + "BENS__SERVER__HTTP__CORS", + "BENS__SERVER__GRPC", + "BENS__METRICS", + "BENS__JAEGER", + ]), + Some("envs_main"), + ); +} diff --git a/blockscout-ens/justfile b/blockscout-ens/justfile index ad7c16c99..faf786ca3 100644 --- a/blockscout-ens/justfile +++ b/blockscout-ens/justfile @@ -56,7 +56,7 @@ benchmark: cargo run --example resolve_benchmark run: - BENS__DATABASE__CONNECT__URL={{DATABASE_URL}} cargo run --bin bens-server + cargo run --bin bens-server run-dev: dotenv -e .env.dev -- just run From 8be38f05a107170a875b8dad8b4a03f729a88916 Mon Sep 17 00:00:00 2001 From: sevenzing Date: Tue, 12 Nov 2024 17:05:41 +0700 Subject: [PATCH 09/10] bump old versions --- blockscout-ens/.gitignore | 4 + blockscout-ens/Cargo.lock | 863 ++++++++++---------------- blockscout-ens/Cargo.toml | 24 +- blockscout-ens/bens-server/Cargo.toml | 4 +- 4 files changed, 337 insertions(+), 558 deletions(-) diff --git a/blockscout-ens/.gitignore b/blockscout-ens/.gitignore index 665da4550..35b859622 100644 --- a/blockscout-ens/.gitignore +++ b/blockscout-ens/.gitignore @@ -1,2 +1,6 @@ .env .env.* +!.env.dev + +d3example/ +bens-server/benchmark diff --git a/blockscout-ens/Cargo.lock b/blockscout-ens/Cargo.lock index 3e342fc4d..a121ccb43 100644 --- a/blockscout-ens/Cargo.lock +++ b/blockscout-ens/Cargo.lock @@ -64,7 +64,7 @@ dependencies = [ "mime", "percent-encoding", "pin-project-lite", - "rand 0.8.5", + "rand", "sha1", "smallvec", "tokio", @@ -80,7 +80,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" dependencies = [ "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -110,8 +110,8 @@ dependencies = [ "quote", "serde", "serde_yaml", - "syn 2.0.85", - "thiserror", + "syn 2.0.87", + "thiserror 1.0.65", ] [[package]] @@ -238,7 +238,7 @@ dependencies = [ "actix-router", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -274,7 +274,7 @@ version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" dependencies = [ - "getrandom 0.2.15", + "getrandom", "once_cell", "version_check", ] @@ -286,7 +286,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", - "getrandom 0.2.15", + "getrandom", "once_cell", "version_check", "zerocopy", @@ -366,11 +366,11 @@ dependencies = [ "async-trait", "derive-new", "futures-util", - "getrandom 0.2.15", + "getrandom", "reqwest 0.12.8", "serde", "serde_json", - "thiserror", + "thiserror 1.0.65", "tracing", "tracing-subscriber", ] @@ -383,7 +383,7 @@ checksum = "60888eb8eb66f26aecf96d8a3aeb1a3a05ebc179025a7f98ed1d8051988969ac" dependencies = [ "alloy-primitives", "num_enum", - "strum 0.26.3", + "strum", ] [[package]] @@ -420,14 +420,14 @@ dependencies = [ "alloy-transport", "futures", "futures-util", - "thiserror", + "thiserror 1.0.65", ] [[package]] name = "alloy-core" -version = "0.8.9" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cce174ca699ddee3bfb2ec1fbd99ad7efd05eca20c5c888d8320db41f7e8f04" +checksum = "47ef9e96462d0b9fee9008c53c1f3d017b9498fcdef3ad8d728db98afef47955" dependencies = [ "alloy-dyn-abi", "alloy-json-abi", @@ -438,9 +438,9 @@ dependencies = [ [[package]] name = "alloy-dyn-abi" -version = "0.8.9" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5647fce5a168f9630f935bf7821c4207b1755184edaeba783cb4e11d35058484" +checksum = "85132f2698b520fab3f54beed55a44389f7006a7b557a0261e1e69439dcc1572" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -508,9 +508,9 @@ dependencies = [ [[package]] name = "alloy-json-abi" -version = "0.8.9" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b5671117c38b1c2306891f97ad3828d85487087f54ebe2c7591a055ea5bcea7" +checksum = "ded610181f3dad5810f6ff12d1a99994cf9b42d2fcb7709029352398a5da5ae6" dependencies = [ "alloy-primitives", "alloy-sol-type-parser", @@ -528,7 +528,7 @@ dependencies = [ "alloy-sol-types", "serde", "serde_json", - "thiserror", + "thiserror 1.0.65", "tracing", ] @@ -550,7 +550,7 @@ dependencies = [ "async-trait", "auto_impl", "futures-utils-wasm", - "thiserror", + "thiserror 1.0.65", ] [[package]] @@ -568,9 +568,9 @@ dependencies = [ [[package]] name = "alloy-primitives" -version = "0.8.9" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71738eb20c42c5fb149571e76536a0f309d142f3957c28791662b96baf77a3d" +checksum = "fd58d377699e6cfeab52c4a9d28bdc4ef37e2bd235ff2db525071fe37a2e9af5" dependencies = [ "alloy-rlp", "bytes", @@ -586,7 +586,7 @@ dependencies = [ "keccak-asm", "paste", "proptest", - "rand 0.8.5", + "rand", "ruint", "rustc-hash", "serde", @@ -627,7 +627,7 @@ dependencies = [ "schnellru", "serde", "serde_json", - "thiserror", + "thiserror 1.0.65", "tokio", "tracing", "url", @@ -672,7 +672,7 @@ checksum = "2b09cae092c27b6f1bde952653a22708691802e57bfef4a2973b80bea21efd3f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -727,7 +727,7 @@ dependencies = [ "alloy-serde", "derive_more 1.0.0", "serde", - "strum 0.26.3", + "strum", ] [[package]] @@ -771,7 +771,7 @@ dependencies = [ "auto_impl", "elliptic-curve", "k256", - "thiserror", + "thiserror 1.0.65", ] [[package]] @@ -786,29 +786,29 @@ dependencies = [ "alloy-signer", "async-trait", "k256", - "rand 0.8.5", - "thiserror", + "rand", + "thiserror 1.0.65", ] [[package]] name = "alloy-sol-macro" -version = "0.8.9" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0900b83f4ee1f45c640ceee596afbc118051921b9438fdb5a3175c1a7e05f8b" +checksum = "8a1b42ac8f45e2f49f4bcdd72cbfde0bb148f5481d403774ffa546e48b83efc1" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] name = "alloy-sol-macro-expander" -version = "0.8.9" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a41b1e78dde06b5e12e6702fa8c1d30621bf07728ba75b801fb801c9c6a0ba10" +checksum = "06318f1778e57f36333e850aa71bd1bb5e560c10279e236622faae0470c50412" dependencies = [ "alloy-json-abi", "alloy-sol-macro-input", @@ -818,16 +818,16 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", "syn-solidity", "tiny-keccak", ] [[package]] name = "alloy-sol-macro-input" -version = "0.8.9" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91dc311a561a306664393407b88d3e53ae58581624128afd8a15faa5de3627dc" +checksum = "eaebb9b0ad61a41345a22c9279975c0cdd231b97947b10d7aad1cf0a7181e4a5" dependencies = [ "alloy-json-abi", "const-hex", @@ -836,15 +836,15 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.85", + "syn 2.0.87", "syn-solidity", ] [[package]] name = "alloy-sol-type-parser" -version = "0.8.9" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45d1fbee9e698f3ba176b6e7a145f4aefe6d2b746b611e8bb246fe11a0e9f6c4" +checksum = "12c71028bfbfec210e24106a542aad3def7caf1a70e2c05710e92a98481980d3" dependencies = [ "serde", "winnow", @@ -852,9 +852,9 @@ dependencies = [ [[package]] name = "alloy-sol-types" -version = "0.8.9" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "086f41bc6ebcd8cb15f38ba20e47be38dd03692149681ce8061c35d960dbf850" +checksum = "374d7fb042d68ddfe79ccb23359de3007f6d4d53c13f703b64fb0db422132111" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -875,7 +875,7 @@ dependencies = [ "futures-utils-wasm", "serde", "serde_json", - "thiserror", + "thiserror 1.0.65", "tokio", "tower 0.5.1", "tracing", @@ -927,7 +927,7 @@ dependencies = [ "alloy-transport", "futures", "http 1.1.0", - "rustls 0.23.15", + "rustls", "serde_json", "tokio", "tokio-tungstenite", @@ -1116,7 +1116,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" dependencies = [ "num-traits", - "rand 0.8.5", + "rand", ] [[package]] @@ -1126,7 +1126,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" dependencies = [ "num-traits", - "rand 0.8.5", + "rand", ] [[package]] @@ -1151,17 +1151,6 @@ dependencies = [ "serde_json", ] -[[package]] -name = "async-channel" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" -dependencies = [ - "concurrent-queue", - "event-listener", - "futures-core", -] - [[package]] name = "async-recursion" version = "1.1.1" @@ -1170,7 +1159,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -1192,7 +1181,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -1203,7 +1192,7 @@ checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -1240,7 +1229,7 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -1347,18 +1336,18 @@ dependencies = [ "alloy-ccip-read", "anyhow", "async-trait", - "bigdecimal 0.4.5", + "bigdecimal", "cached", "chrono", "futures", "hex", "idna 1.0.2", - "itertools 0.11.0", + "itertools 0.13.0", "lazy_static", "nonempty", "pretty_assertions", "prometheus", - "reqwest 0.11.27", + "reqwest 0.12.8", "reqwest-middleware", "reqwest-retry", "sea-query", @@ -1366,7 +1355,7 @@ dependencies = [ "serde_json", "sqlx", "tera", - "thiserror", + "thiserror 2.0.3", "tokio", "tracing", "tracing-subscriber", @@ -1385,7 +1374,7 @@ dependencies = [ "prost 0.11.9", "prost-build", "serde", - "serde_with 2.3.3", + "serde_with 3.11.0", "tonic", "tonic-build", ] @@ -1403,17 +1392,17 @@ dependencies = [ "blockscout-display-bytes", "blockscout-service-launcher", "chrono", - "config 0.13.4", + "config 0.14.1", "env-collector", "hex", "nonempty", "pretty_assertions", - "reqwest 0.11.27", + "reqwest 0.12.8", "serde", "serde_json", "sqlx", "tera", - "thiserror", + "thiserror 2.0.3", "tokio", "tokio-cron-scheduler", "tonic", @@ -1422,17 +1411,6 @@ dependencies = [ "url", ] -[[package]] -name = "bigdecimal" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6773ddc0eafc0e509fb60e48dff7f450f8e674a0686ae8605e8d9901bd5eefa" -dependencies = [ - "num-bigint", - "num-integer", - "num-traits", -] - [[package]] name = "bigdecimal" version = "0.4.5" @@ -1444,6 +1422,7 @@ dependencies = [ "num-bigint", "num-integer", "num-traits", + "serde", ] [[package]] @@ -1514,7 +1493,7 @@ dependencies = [ "serde", "serde_json", "serde_with 3.11.0", - "thiserror", + "thiserror 1.0.65", ] [[package]] @@ -1594,7 +1573,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", "syn_derive", ] @@ -1704,31 +1683,31 @@ dependencies = [ [[package]] name = "cached" -version = "0.46.1" +version = "0.54.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7c8c50262271cdf5abc979a5f76515c234e764fa025d1ba4862c0f0bcda0e95" +checksum = "9718806c4a2fe9e8a56fd736f97b340dd10ed1be8ed733ed50449f351dc33cae" dependencies = [ "async-trait", "cached_proc_macro", "cached_proc_macro_types", "futures", "hashbrown 0.14.5", - "instant", "once_cell", - "thiserror", + "thiserror 1.0.65", "tokio", + "web-time", ] [[package]] name = "cached_proc_macro" -version = "0.18.1" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c878c71c2821aa2058722038a59a67583a4240524687c6028571c9b395ded61f" +checksum = "2f42a145ed2d10dce2191e1dcf30cfccfea9026660e143662ba5eec4017d5daa" dependencies = [ - "darling 0.14.4", + "darling", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.87", ] [[package]] @@ -1816,7 +1795,7 @@ dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim 0.11.1", + "strsim", ] [[package]] @@ -1828,7 +1807,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -1924,7 +1903,7 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" dependencies = [ - "getrandom 0.2.15", + "getrandom", "once_cell", "tiny-keccak", ] @@ -2005,14 +1984,12 @@ dependencies = [ ] [[package]] -name = "cron" -version = "0.12.1" +name = "croner" +version = "2.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f8c3e73077b4b4a6ab1ea5047c37c57aee77657bc8ecd6f29b0af082d0b0c07" +checksum = "09b42c74d1c9fc4680c245ca7287bd631fe73eb364657268b0e65bafdec83d47" dependencies = [ "chrono", - "nom", - "once_cell", ] [[package]] @@ -2071,7 +2048,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ "generic-array", - "rand_core 0.6.4", + "rand_core", "subtle", "zeroize", ] @@ -2086,38 +2063,14 @@ dependencies = [ "typenum", ] -[[package]] -name = "darling" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" -dependencies = [ - "darling_core 0.14.4", - "darling_macro 0.14.4", -] - [[package]] name = "darling" version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" dependencies = [ - "darling_core 0.20.10", - "darling_macro 0.20.10", -] - -[[package]] -name = "darling_core" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.10.0", - "syn 1.0.109", + "darling_core", + "darling_macro", ] [[package]] @@ -2130,19 +2083,8 @@ dependencies = [ "ident_case", "proc-macro2", "quote", - "strsim 0.11.1", - "syn 2.0.85", -] - -[[package]] -name = "darling_macro" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" -dependencies = [ - "darling_core 0.14.4", - "quote", - "syn 1.0.109", + "strsim", + "syn 2.0.87", ] [[package]] @@ -2151,9 +2093,9 @@ version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ - "darling_core 0.20.10", + "darling_core", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -2191,14 +2133,13 @@ checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" [[package]] name = "deadpool" -version = "0.9.5" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "421fe0f90f2ab22016f32a9881be5134fdd71c65298917084b0c7477cbc3856e" +checksum = "fb84100978c1c7b37f09ed3ce3e5f843af02c2a2c431bae5b19230dad2c1b490" dependencies = [ "async-trait", "deadpool-runtime", "num_cpus", - "retain_mut", "tokio", ] @@ -2248,7 +2189,7 @@ checksum = "2cdc8d50f426189eef89dac62fabfa0abb27d5cc008f25bf4156a0203325becc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -2261,7 +2202,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version 0.4.1", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -2281,7 +2222,7 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", "unicode-xid", ] @@ -2326,7 +2267,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -2398,7 +2339,7 @@ dependencies = [ "generic-array", "group", "pkcs8", - "rand_core 0.6.4", + "rand_core", "sec1", "subtle", "zeroize", @@ -2456,17 +2397,13 @@ dependencies = [ [[package]] name = "event-listener" -version = "2.5.3" +version = "5.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" - -[[package]] -name = "fastrand" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" dependencies = [ - "instant", + "concurrent-queue", + "parking", + "pin-project-lite", ] [[package]] @@ -2492,7 +2429,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" dependencies = [ - "rand_core 0.6.4", + "rand_core", "subtle", ] @@ -2503,7 +2440,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" dependencies = [ "byteorder", - "rand 0.8.5", + "rand", "rustc-hex", "static_assertions", ] @@ -2636,21 +2573,6 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" -[[package]] -name = "futures-lite" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" -dependencies = [ - "fastrand 1.9.0", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite", - "waker-fn", -] - [[package]] name = "futures-macro" version = "0.3.31" @@ -2659,7 +2581,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -2674,12 +2596,6 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" -[[package]] -name = "futures-timer" -version = "3.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" - [[package]] name = "futures-util" version = "0.3.31" @@ -2715,17 +2631,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] - [[package]] name = "getrandom" version = "0.2.15" @@ -2735,7 +2640,7 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi", "wasm-bindgen", ] @@ -2782,7 +2687,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ "ff", - "rand_core 0.6.4", + "rand_core", "subtle", ] @@ -2870,14 +2775,20 @@ dependencies = [ "hashbrown 0.14.5", ] +[[package]] +name = "hashlink" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" +dependencies = [ + "hashbrown 0.14.5", +] + [[package]] name = "heck" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" -dependencies = [ - "unicode-segmentation", -] [[package]] name = "heck" @@ -2989,27 +2900,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "http-types" -version = "2.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e9b187a72d63adbfba487f48095306ac823049cb504ee195541e91c7775f5ad" -dependencies = [ - "anyhow", - "async-channel", - "base64 0.13.1", - "futures-lite", - "http 0.2.12", - "infer", - "pin-project-lite", - "rand 0.7.3", - "serde", - "serde_json", - "serde_qs", - "serde_urlencoded", - "url", -] - [[package]] name = "httparse" version = "1.9.5" @@ -3068,6 +2958,7 @@ dependencies = [ "http 1.1.0", "http-body 1.0.1", "httparse", + "httpdate", "itoa", "pin-project-lite", "smallvec", @@ -3085,7 +2976,7 @@ dependencies = [ "http 1.1.0", "hyper 1.5.0", "hyper-util", - "rustls 0.23.15", + "rustls", "rustls-pki-types", "tokio", "tokio-rustls", @@ -3290,7 +3181,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -3385,12 +3276,6 @@ dependencies = [ "serde", ] -[[package]] -name = "infer" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64e9829a50b42bb782c1df523f78d332fe371b10c661e78b7a3c34b0198e9fac" - [[package]] name = "inherent" version = "1.0.11" @@ -3399,7 +3284,7 @@ checksum = "0122b7114117e64a63ac49f752a5ca4624d534c7b1c7de796ac196381cd2d947" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -3456,15 +3341,6 @@ dependencies = [ "either", ] -[[package]] -name = "itertools" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" -dependencies = [ - "either", -] - [[package]] name = "itertools" version = "0.12.1" @@ -3527,7 +3403,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "thiserror", + "thiserror 1.0.65", ] [[package]] @@ -3591,9 +3467,9 @@ checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" [[package]] name = "libsqlite3-sys" -version = "0.27.0" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4e226dcd58b4be396f7bd3c20da8fdee2911400705297ba7d2d7cc2c30f716" +checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" dependencies = [ "cc", "pkg-config", @@ -3697,16 +3573,6 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" -[[package]] -name = "mime_guess" -version = "2.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" -dependencies = [ - "mime", - "unicase", -] - [[package]] name = "minimal-lexical" version = "0.2.1" @@ -3731,7 +3597,7 @@ dependencies = [ "hermit-abi", "libc", "log", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi", "windows-sys 0.52.0", ] @@ -3815,7 +3681,7 @@ dependencies = [ "num-integer", "num-iter", "num-traits", - "rand 0.8.5", + "rand", "smallvec", "zeroize", ] @@ -3828,13 +3694,13 @@ checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" [[package]] name = "num-derive" -version = "0.3.3" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.87", ] [[package]] @@ -3894,7 +3760,7 @@ checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -3935,7 +3801,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -3978,7 +3844,7 @@ dependencies = [ "once_cell", "opentelemetry", "opentelemetry-semantic-conventions", - "thiserror", + "thiserror 1.0.65", "thrift", "tokio", ] @@ -4004,7 +3870,7 @@ dependencies = [ "indexmap 1.9.3", "once_cell", "pin-project-lite", - "thiserror", + "thiserror 1.0.65", "urlencoding", ] @@ -4024,8 +3890,8 @@ dependencies = [ "once_cell", "opentelemetry_api", "percent-encoding", - "rand 0.8.5", - "thiserror", + "rand", + "thiserror 1.0.65", "tokio", "tokio-stream", ] @@ -4070,9 +3936,9 @@ dependencies = [ [[package]] name = "ouroboros" -version = "0.17.2" +version = "0.18.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2ba07320d39dfea882faa70554b4bd342a5f273ed59ba7c1c6b4c840492c954" +checksum = "944fa20996a25aded6b4795c6d63f10014a7a83f8be9828a11860b08c5fc4a67" dependencies = [ "aliasable", "ouroboros_macro", @@ -4081,15 +3947,16 @@ dependencies = [ [[package]] name = "ouroboros_macro" -version = "0.17.2" +version = "0.18.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec4c6225c69b4ca778c0aea097321a64c421cf4577b331c61b229267edabb6f8" +checksum = "39b0deead1528fd0e5947a8546a9642a9777c25f6e1e26f34c97b204bbb465bd" dependencies = [ "heck 0.4.1", - "proc-macro-error", + "itertools 0.12.1", "proc-macro2", + "proc-macro2-diagnostics", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -4221,7 +4088,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442" dependencies = [ "memchr", - "thiserror", + "thiserror 1.0.65", "ucd-trie", ] @@ -4245,7 +4112,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -4305,7 +4172,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" dependencies = [ "phf_shared", - "rand 0.8.5", + "rand", ] [[package]] @@ -4334,7 +4201,7 @@ checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -4418,7 +4285,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" dependencies = [ "proc-macro2", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -4450,7 +4317,6 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn 1.0.109", "version_check", ] @@ -4484,7 +4350,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -4496,6 +4362,19 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "proc-macro2-diagnostics" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", + "version_check", + "yansi", +] + [[package]] name = "prometheus" version = "0.13.4" @@ -4508,7 +4387,7 @@ dependencies = [ "memchr", "parking_lot 0.12.3", "protobuf", - "thiserror", + "thiserror 1.0.65", ] [[package]] @@ -4522,8 +4401,8 @@ dependencies = [ "bitflags 2.6.0", "lazy_static", "num-traits", - "rand 0.8.5", - "rand_chacha 0.3.1", + "rand", + "rand_chacha", "rand_xorshift", "regex-syntax 0.8.5", "rusty-fork", @@ -4596,7 +4475,7 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -4675,19 +4554,6 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc", -] - [[package]] name = "rand" version = "0.8.5" @@ -4695,21 +4561,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", + "rand_chacha", + "rand_core", "serde", ] -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", -] - [[package]] name = "rand_chacha" version = "0.3.1" @@ -4717,16 +4573,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", + "rand_core", ] [[package]] @@ -4735,16 +4582,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.15", -] - -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", + "getrandom", ] [[package]] @@ -4753,7 +4591,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" dependencies = [ - "rand_core 0.6.4", + "rand_core", ] [[package]] @@ -4859,7 +4697,6 @@ dependencies = [ "js-sys", "log", "mime", - "mime_guess", "native-tls", "once_cell", "percent-encoding", @@ -4925,57 +4762,48 @@ dependencies = [ [[package]] name = "reqwest-middleware" -version = "0.2.5" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a735987236a8e238bf0296c7e351b999c188ccc11477f311b82b55c93984216" +checksum = "d1ccd3b55e711f91a9885a2fa6fbbb2e39db1776420b062efc058c6410f7e5e3" dependencies = [ "anyhow", "async-trait", - "http 0.2.12", - "reqwest 0.11.27", + "http 1.1.0", + "reqwest 0.12.8", "serde", - "task-local-extensions", - "thiserror", + "thiserror 1.0.65", + "tower-service", ] [[package]] name = "reqwest-retry" -version = "0.3.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9af20b65c2ee9746cc575acb6bd28a05ffc0d15e25c992a8f4462d8686aacb4f" +checksum = "29c73e4195a6bfbcb174b790d9b3407ab90646976c55de58a6515da25d851178" dependencies = [ "anyhow", "async-trait", - "chrono", "futures", - "getrandom 0.2.15", - "http 0.2.12", - "hyper 0.14.31", + "getrandom", + "http 1.1.0", + "hyper 1.5.0", "parking_lot 0.11.2", - "reqwest 0.11.27", + "reqwest 0.12.8", "reqwest-middleware", "retry-policies", - "task-local-extensions", + "thiserror 1.0.65", "tokio", "tracing", "wasm-timer", ] -[[package]] -name = "retain_mut" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4389f1d5789befaf6029ebd9f7dac4af7f7e3d61b69d4f30e2ac02b57e7712b0" - [[package]] name = "retry-policies" -version = "0.2.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17dd00bff1d737c40dbcd47d4375281bf4c17933f9eef0a185fc7bacca23ecbd" +checksum = "5875471e6cab2871bc150ecb8c727db5113c9338cc3354dc5ee3425b6aa40a1c" dependencies = [ - "anyhow", - "chrono", - "rand 0.8.5", + "rand", ] [[package]] @@ -4996,7 +4824,7 @@ checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.15", + "getrandom", "libc", "spin", "untrusted", @@ -5078,7 +4906,7 @@ dependencies = [ "num-traits", "pkcs1", "pkcs8", - "rand_core 0.6.4", + "rand_core", "signature", "spki", "subtle", @@ -5101,7 +4929,7 @@ dependencies = [ "parity-scale-codec", "primitive-types", "proptest", - "rand 0.8.5", + "rand", "rlp", "ruint-macro", "serde", @@ -5145,7 +4973,7 @@ dependencies = [ "borsh", "bytes", "num-traits", - "rand 0.8.5", + "rand", "rkyv", "serde", "serde_json", @@ -5200,17 +5028,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "rustls" -version = "0.21.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" -dependencies = [ - "ring", - "rustls-webpki 0.101.7", - "sct", -] - [[package]] name = "rustls" version = "0.23.15" @@ -5220,7 +5037,7 @@ dependencies = [ "once_cell", "ring", "rustls-pki-types", - "rustls-webpki 0.102.8", + "rustls-webpki", "subtle", "zeroize", ] @@ -5249,16 +5066,6 @@ version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" -[[package]] -name = "rustls-webpki" -version = "0.101.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "rustls-webpki" version = "0.102.8" @@ -5329,16 +5136,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "sct" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "sea-bae" version = "0.2.1" @@ -5349,18 +5146,18 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] name = "sea-orm" -version = "0.12.15" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8814e37dc25de54398ee62228323657520b7f29713b8e238649385dbe473ee0" +checksum = "d5680a8b686985116607ef5f5af2b1f9e1cc2c228330e93101816a0baa279afa" dependencies = [ "async-stream", "async-trait", - "bigdecimal 0.3.1", + "bigdecimal", "chrono", "futures", "log", @@ -5372,8 +5169,8 @@ dependencies = [ "serde", "serde_json", "sqlx", - "strum 0.25.0", - "thiserror", + "strum", + "thiserror 1.0.65", "time", "tracing", "url", @@ -5382,9 +5179,9 @@ dependencies = [ [[package]] name = "sea-orm-cli" -version = "0.12.15" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "620bc560062ae251b1366bde43b3f1508445cab5c2c8cbdb397034638ab1b357" +checksum = "70a157f42d291ccbd6e913b9d9b12dbe2ccbcf0472efc60c8715dd1254083aec" dependencies = [ "chrono", "clap", @@ -5399,23 +5196,23 @@ dependencies = [ [[package]] name = "sea-orm-macros" -version = "0.12.15" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e115c6b078e013aa963cc2d38c196c2c40b05f03d0ac872fe06b6e0d5265603" +checksum = "3a239e3bb1b566ad4ec2654d0d193d6ceddfd733487edc9c21a64d214c773910" dependencies = [ "heck 0.4.1", "proc-macro2", "quote", "sea-bae", - "syn 2.0.85", + "syn 2.0.87", "unicode-ident", ] [[package]] name = "sea-orm-migration" -version = "0.12.15" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee8269bc6ff71afd6b78aa4333ac237a69eebd2cdb439036291e64fb4b8db23c" +checksum = "63ba07e9f2479cc671758fcb1edee42ff2e32c34b3e67ab41d0af1e41f73c74e" dependencies = [ "async-trait", "clap", @@ -5430,13 +5227,12 @@ dependencies = [ [[package]] name = "sea-query" -version = "0.30.7" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4166a1e072292d46dc91f31617c2a1cdaf55a8be4b5c9f4bf2ba248e3ac4999b" +checksum = "ff504d13b5e4b52fffcf2fb203d0352a5722fa5151696db768933e41e1e591bb" dependencies = [ - "bigdecimal 0.3.1", + "bigdecimal", "chrono", - "derivative", "inherent", "ordered-float 3.9.2", "rust_decimal", @@ -5448,11 +5244,11 @@ dependencies = [ [[package]] name = "sea-query-binder" -version = "0.5.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36bbb68df92e820e4d5aeb17b4acd5cc8b5d18b2c36a4dd6f4626aabfa7ab1b9" +checksum = "b0019f47430f7995af63deda77e238c17323359af241233ec768aba1faea7608" dependencies = [ - "bigdecimal 0.3.1", + "bigdecimal", "chrono", "rust_decimal", "sea-query", @@ -5468,19 +5264,19 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9834af2c4bd8c5162f00c89f1701fb6886119a88062cf76fe842ea9e232b9839" dependencies = [ - "darling 0.20.10", + "darling", "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.85", - "thiserror", + "syn 2.0.87", + "thiserror 1.0.65", ] [[package]] name = "sea-schema" -version = "0.14.2" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d148608012d25222442d1ebbfafd1228dbc5221baf4ec35596494e27a2394e" +checksum = "aab1592d17860a9a8584d9b549aebcd06f7bdc3ff615f71752486ba0b05b1e6e" dependencies = [ "futures", "sea-query", @@ -5489,14 +5285,14 @@ dependencies = [ [[package]] name = "sea-schema-derive" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6f686050f76bffc4f635cda8aea6df5548666b830b52387e8bc7de11056d11e" +checksum = "debdc8729c37fdbf88472f97fd470393089f997a909e535ff67c544d18cfccf0" dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.87", ] [[package]] @@ -5589,7 +5385,7 @@ checksum = "7e85ad2009c50b58e87caa8cd6dac16bdf511bbfb7af6c33df902396aa480fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -5604,17 +5400,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_qs" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7715380eec75f029a4ef7de39a9200e0a63823176b759d055b613f5a87df6a6" -dependencies = [ - "percent-encoding", - "serde", - "thiserror", -] - [[package]] name = "serde_spanned" version = "0.6.8" @@ -5676,10 +5461,10 @@ version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" dependencies = [ - "darling 0.20.10", + "darling", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -5688,10 +5473,10 @@ version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d846214a9854ef724f3da161b426242d8de7c1fc7de2f89bb1efcb154dca79d" dependencies = [ - "darling 0.20.10", + "darling", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -5780,7 +5565,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ "digest 0.10.7", - "rand_core 0.6.4", + "rand_core", ] [[package]] @@ -5819,6 +5604,9 @@ name = "smallvec" version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +dependencies = [ + "serde", +] [[package]] name = "socket2" @@ -5861,9 +5649,9 @@ dependencies = [ [[package]] name = "sqlx" -version = "0.7.4" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9a2ccff1a000a5a59cd33da541d9f2fdcd9e6e8229cc200565942bff36d0aaa" +checksum = "93334716a037193fac19df402f8571269c84a00852f6a7066b5d2616dcd64d3e" dependencies = [ "sqlx-core", "sqlx-macros", @@ -5874,13 +5662,12 @@ dependencies = [ [[package]] name = "sqlx-core" -version = "0.7.4" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24ba59a9342a3d9bab6c56c118be528b27c9b60e490080e9711a04dccac83ef6" +checksum = "d4d8060b456358185f7d50c55d9b5066ad956956fddec42ee2e8567134a8936e" dependencies = [ - "ahash 0.8.11", "atoi", - "bigdecimal 0.3.1", + "bigdecimal", "byteorder", "bytes", "chrono", @@ -5893,7 +5680,8 @@ dependencies = [ "futures-intrusive", "futures-io", "futures-util", - "hashlink", + "hashbrown 0.14.5", + "hashlink 0.9.1", "hex", "indexmap 2.6.0", "log", @@ -5902,45 +5690,45 @@ dependencies = [ "paste", "percent-encoding", "rust_decimal", - "rustls 0.21.12", - "rustls-pemfile 1.0.4", + "rustls", + "rustls-pemfile 2.2.0", "serde", "serde_json", "sha2", "smallvec", "sqlformat", - "thiserror", + "thiserror 1.0.65", "time", "tokio", "tokio-stream", "tracing", "url", "uuid", - "webpki-roots 0.25.4", + "webpki-roots", ] [[package]] name = "sqlx-macros" -version = "0.7.4" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ea40e2345eb2faa9e1e5e326db8c34711317d2b5e08d0d5741619048a803127" +checksum = "cac0692bcc9de3b073e8d747391827297e075c7710ff6276d9f7a1f3d58c6657" dependencies = [ "proc-macro2", "quote", "sqlx-core", "sqlx-macros-core", - "syn 1.0.109", + "syn 2.0.87", ] [[package]] name = "sqlx-macros-core" -version = "0.7.4" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5833ef53aaa16d860e92123292f1f6a3d53c34ba8b1969f152ef1a7bb803f3c8" +checksum = "1804e8a7c7865599c9c79be146dc8a9fd8cc86935fa641d3ea58e5f0688abaa5" dependencies = [ "dotenvy", "either", - "heck 0.4.1", + "heck 0.5.0", "hex", "once_cell", "proc-macro2", @@ -5952,7 +5740,7 @@ dependencies = [ "sqlx-mysql", "sqlx-postgres", "sqlx-sqlite", - "syn 1.0.109", + "syn 2.0.87", "tempfile", "tokio", "url", @@ -5960,13 +5748,13 @@ dependencies = [ [[package]] name = "sqlx-mysql" -version = "0.7.4" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ed31390216d20e538e447a7a9b959e06ed9fc51c37b514b46eb758016ecd418" +checksum = "64bb4714269afa44aef2755150a0fc19d756fb580a67db8885608cf02f47d06a" dependencies = [ "atoi", - "base64 0.21.7", - "bigdecimal 0.3.1", + "base64 0.22.1", + "bigdecimal", "bitflags 2.6.0", "byteorder", "bytes", @@ -5989,7 +5777,7 @@ dependencies = [ "memchr", "once_cell", "percent-encoding", - "rand 0.8.5", + "rand", "rsa", "rust_decimal", "serde", @@ -5998,7 +5786,7 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror", + "thiserror 1.0.65", "time", "tracing", "uuid", @@ -6007,13 +5795,13 @@ dependencies = [ [[package]] name = "sqlx-postgres" -version = "0.7.4" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c824eb80b894f926f89a0b9da0c7f435d27cdd35b8c655b114e58223918577e" +checksum = "6fa91a732d854c5d7726349bb4bb879bb9478993ceb764247660aee25f67c2f8" dependencies = [ "atoi", - "base64 0.21.7", - "bigdecimal 0.3.1", + "base64 0.22.1", + "bigdecimal", "bitflags 2.6.0", "byteorder", "chrono", @@ -6034,7 +5822,7 @@ dependencies = [ "memchr", "num-bigint", "once_cell", - "rand 0.8.5", + "rand", "rust_decimal", "serde", "serde_json", @@ -6042,7 +5830,7 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror", + "thiserror 1.0.65", "time", "tracing", "uuid", @@ -6051,9 +5839,9 @@ dependencies = [ [[package]] name = "sqlx-sqlite" -version = "0.7.4" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b244ef0a8414da0bed4bb1910426e890b19e5e9bccc27ada6b797d05c55ae0aa" +checksum = "d5b2cf34a45953bfd3daaf3db0f7a7878ab9b7a6b91b422d24a7a9e4c857b680" dependencies = [ "atoi", "chrono", @@ -6067,11 +5855,11 @@ dependencies = [ "log", "percent-encoding", "serde", + "serde_urlencoded", "sqlx-core", "time", "tracing", "url", - "urlencoding", "uuid", ] @@ -6098,24 +5886,12 @@ dependencies = [ "unicode-properties", ] -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - [[package]] name = "strsim" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" -[[package]] -name = "strum" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" - [[package]] name = "strum" version = "0.26.3" @@ -6135,7 +5911,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -6157,9 +5933,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.85" +version = "2.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5023162dfcd14ef8f32034d8bcd4cc5ddc61ef7a247c024a33e24e1f24d21b56" +checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" dependencies = [ "proc-macro2", "quote", @@ -6168,14 +5944,14 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "0.8.9" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d5e0c2ea8db64b2898b62ea2fbd60204ca95e0b2c6bdf53ff768bbe916fbe4d" +checksum = "edf42e81491fb8871b74df3d222c64ae8cbc1269ea509fa768a3ed3e1b0ac8cb" dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -6187,7 +5963,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -6213,7 +5989,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -6264,15 +6040,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" -[[package]] -name = "task-local-extensions" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba323866e5d033818e3240feeb9f7db2c4296674e4d9e16b97b7bf8f490434e8" -dependencies = [ - "pin-utils", -] - [[package]] name = "tempfile" version = "3.13.0" @@ -6280,7 +6047,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" dependencies = [ "cfg-if", - "fastrand 2.1.1", + "fastrand", "once_cell", "rustix", "windows-sys 0.59.0", @@ -6300,7 +6067,7 @@ dependencies = [ "percent-encoding", "pest", "pest_derive", - "rand 0.8.5", + "rand", "regex", "serde", "serde_json", @@ -6314,7 +6081,16 @@ version = "1.0.65" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d11abd9594d9b38965ef50805c5e469ca9cc6f197f883f717e0269a3057b3d5" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.65", +] + +[[package]] +name = "thiserror" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c006c85c7651b3cf2ada4584faa36773bd07bac24acfb39f3c431b36d7e667aa" +dependencies = [ + "thiserror-impl 2.0.3", ] [[package]] @@ -6325,7 +6101,18 @@ checksum = "ae71770322cbd277e69d762a16c444af02aa0575ac0d174f0b9562d3b37f8602" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f077553d607adc1caf65430528a576c757a71ed73944b66ebb58ef2bbd243568" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", ] [[package]] @@ -6445,12 +6232,12 @@ dependencies = [ [[package]] name = "tokio-cron-scheduler" -version = "0.9.4" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de2c1fd54a857b29c6cd1846f31903d0ae8e28175615c14a277aed45c58d8e27" +checksum = "6a5597b569b4712cf78aa0c9ae29742461b7bda1e49c2a5fdad1d79bf022f8f0" dependencies = [ "chrono", - "cron", + "croner", "num-derive", "num-traits", "tokio", @@ -6476,7 +6263,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -6495,7 +6282,7 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ - "rustls 0.23.15", + "rustls", "rustls-pki-types", "tokio", ] @@ -6520,12 +6307,12 @@ checksum = "edc5f74e248dc973e0dbb7b74c7e0d6fcc301c694ff50049504004ef4d0cdcd9" dependencies = [ "futures-util", "log", - "rustls 0.23.15", + "rustls", "rustls-pki-types", "tokio", "tokio-rustls", "tungstenite", - "webpki-roots 0.26.6", + "webpki-roots", ] [[package]] @@ -6640,7 +6427,7 @@ dependencies = [ "indexmap 1.9.3", "pin-project", "pin-project-lite", - "rand 0.8.5", + "rand", "slab", "tokio", "tokio-util", @@ -6695,7 +6482,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -6803,11 +6590,11 @@ dependencies = [ "http 1.1.0", "httparse", "log", - "rand 0.8.5", - "rustls 0.23.15", + "rand", + "rustls", "rustls-pki-types", "sha1", - "thiserror", + "thiserror 1.0.65", "utf-8", ] @@ -6891,12 +6678,6 @@ dependencies = [ "unic-common", ] -[[package]] -name = "unicase" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df" - [[package]] name = "unicode-bidi" version = "0.3.17" @@ -7002,7 +6783,7 @@ version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" dependencies = [ - "getrandom 0.2.15", + "getrandom", "serde", ] @@ -7033,12 +6814,6 @@ dependencies = [ "libc", ] -[[package]] -name = "waker-fn" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" - [[package]] name = "walkdir" version = "2.5.0" @@ -7058,12 +6833,6 @@ dependencies = [ "try-lock", ] -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -7098,7 +6867,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", "wasm-bindgen-shared", ] @@ -7132,7 +6901,7 @@ checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -7183,10 +6952,14 @@ dependencies = [ ] [[package]] -name = "webpki-roots" -version = "0.25.4" +name = "web-time" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] [[package]] name = "webpki-roots" @@ -7464,24 +7237,26 @@ dependencies = [ [[package]] name = "wiremock" -version = "0.5.22" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13a3a53eaf34f390dd30d7b1b078287dd05df2aa2e21a589ccb80f5c7253c2e9" +checksum = "7fff469918e7ca034884c7fd8f93fe27bacb7fcb599fd879df6c7b429a29b646" dependencies = [ "assert-json-diff", "async-trait", - "base64 0.21.7", + "base64 0.22.1", "deadpool", "futures", - "futures-timer", - "http-types", - "hyper 0.14.31", + "http 1.1.0", + "http-body-util", + "hyper 1.5.0", + "hyper-util", "log", "once_cell", "regex", "serde", "serde_json", "tokio", + "url", ] [[package]] @@ -7509,7 +7284,7 @@ dependencies = [ "pharos", "rustc_version 0.4.1", "send_wrapper", - "thiserror", + "thiserror 1.0.65", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -7541,7 +7316,7 @@ checksum = "8902160c4e6f2fb145dbe9d6760a75e3c9522d8bf796ed7047c85919ac7115f8" dependencies = [ "arraydeque", "encoding_rs", - "hashlink", + "hashlink 0.8.4", ] [[package]] @@ -7570,7 +7345,7 @@ checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", "synstructure", ] @@ -7592,7 +7367,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -7612,7 +7387,7 @@ checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", "synstructure", ] @@ -7633,7 +7408,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] @@ -7655,7 +7430,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.87", ] [[package]] diff --git a/blockscout-ens/Cargo.toml b/blockscout-ens/Cargo.toml index 6befbad38..4b2da975b 100644 --- a/blockscout-ens/Cargo.toml +++ b/blockscout-ens/Cargo.toml @@ -22,36 +22,36 @@ async-trait = { version = "0.1" } bigdecimal = { version = "0.4" } blockscout-display-bytes = { version = "1.0" } blockscout-service-launcher = { version = "0.14.0" } -cached = { version = "0.46.1", default-features = false } +cached = { version = "0.54.0", default-features = false } chrono = "0.4" -config = { version = "0.13" } +config = { version = "0.14" } env-collector = { git = "https://github.com/blockscout/blockscout-rs" } futures = { version = "0.3" } hex = { version = "0.4" } idna = { version = "1.0.2" } -itertools = { version = "0.11.0" } +itertools = { version = "0.13.0" } lazy_static = { version = "1.4" } nonempty = { version = "0.10.0", default-features = false } pretty_assertions = { version = "1.4.0" } prometheus = { version = "0.13.4" } prost = { version = "0.11" } prost-build = { version = "0.11" } -reqwest = { version = "0.11" } -reqwest-middleware = { version = "0.2" } -reqwest-retry = { version = "0.3" } -sea-query = { version = "0.30.5" } +reqwest = { version = "0.12" } +reqwest-middleware = { version = "0.4" } +reqwest-retry = { version = "0.7" } +sea-query = { version = "0.32" } serde = { version = "1" } serde_json = { version = "1", default-features = false } -serde_with = { version = "2.0" } -sqlx = { version = "0.7", default-features = false } +serde_with = { version = "3.11" } +sqlx = { version = "0.8", default-features = false } tera = { version = "1.19" } -thiserror = { version = "1" } +thiserror = { version = "2" } tokio = { version = "1.23", default-features = false } -tokio-cron-scheduler = { version = "0.9.4" } +tokio-cron-scheduler = { version = "0.13" } tonic = { version = "0.8" } tonic-build = { version = "0.8" } tracing = { version = "0.1" } tracing-subscriber = { version = "0.3", default-features = false } url = { version = "2.4" } -wiremock = { version = "0.5" } +wiremock = { version = "0.6" } diff --git a/blockscout-ens/bens-server/Cargo.toml b/blockscout-ens/bens-server/Cargo.toml index f6b0403ed..d6e9e56f4 100644 --- a/blockscout-ens/bens-server/Cargo.toml +++ b/blockscout-ens/bens-server/Cargo.toml @@ -13,7 +13,7 @@ async-trait = { workspace = true } bens-logic = { workspace = true } bens-proto = { workspace = true } blockscout-display-bytes = { workspace = true } -blockscout-service-launcher = { workspace = true, features = ["database-0_12"] } +blockscout-service-launcher = { workspace = true, features = ["database-1_0"] } chrono = { workspace = true } config = { workspace = true } env-collector = { workspace = true } @@ -37,7 +37,7 @@ url = { workspace = true, features = ["serde"] } [dev-dependencies] bens-logic = { workspace = true, features = ["test-utils"] } blockscout-service-launcher = { workspace = true, features = [ - "database-0_12", + "database-1_0", "test-server", ] } pretty_assertions = { workspace = true } From da1db3f8fafe5cdf5a1ee34a8906d3af1ce0e0c7 Mon Sep 17 00:00:00 2001 From: sevenzing Date: Tue, 12 Nov 2024 17:08:02 +0700 Subject: [PATCH 10/10] add env-collector to cicd --- .github/workflows/bens.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/bens.yml b/.github/workflows/bens.yml index 2dfb03960..f7afe4880 100644 --- a/.github/workflows/bens.yml +++ b/.github/workflows/bens.yml @@ -61,6 +61,11 @@ jobs: cache-on-failure: true workspaces: blockscout-ens -> target + - name: ENVs in doc tests + run: cargo run --bin check-envs + env: + VALIDATE_ONLY: true + - name: Unit tests run: cargo test --locked --workspace --all-features --lib --bins -- --nocapture if: success() || failure()