diff --git a/Cargo.lock b/Cargo.lock
index 8e4aa24a6aadb..41e7b96d4edfb 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -5923,7 +5923,7 @@ dependencies = [
"bitflags 1.3.2",
"strsim 0.8.0",
"textwrap 0.11.0",
- "unicode-width 0.1.11",
+ "unicode-width",
"vec_map",
]
@@ -6076,7 +6076,7 @@ checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
dependencies = [
"serde",
"termcolor",
- "unicode-width 0.1.11",
+ "unicode-width",
]
[[package]]
@@ -6146,7 +6146,7 @@ dependencies = [
"encode_unicode 0.3.6",
"lazy_static",
"libc",
- "unicode-width 0.1.11",
+ "unicode-width",
"windows-sys 0.45.0",
]
@@ -6651,15 +6651,16 @@ dependencies = [
[[package]]
name = "curve25519-dalek"
-version = "4.1.3"
+version = "4.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be"
+checksum = "0a677b8922c94e01bdbb12126b0bc852f00447528dee1782229af9c720c3f348"
dependencies = [
"cfg-if",
"cpufeatures",
"curve25519-dalek-derive",
"digest 0.10.7",
"fiat-crypto",
+ "platforms",
"rustc_version",
"subtle",
"zeroize",
@@ -7350,7 +7351,7 @@ version = "2.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871"
dependencies = [
- "curve25519-dalek 4.1.3",
+ "curve25519-dalek 4.1.2",
"ed25519 2.2.3",
"serde",
"sha2 0.10.8",
@@ -7837,9 +7838,9 @@ dependencies = [
[[package]]
name = "fiat-crypto"
-version = "0.2.9"
+version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d"
+checksum = "1676f435fc1dadde4d03e43f5d62b259e1ce5f40bd4ffb21db2b42ebe59c1382"
[[package]]
name = "field_count"
@@ -9283,15 +9284,15 @@ dependencies = [
[[package]]
name = "indicatif"
-version = "0.17.11"
+version = "0.17.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "183b3088984b400f4cfac3620d5e076c84da5364016b4f49473de574b2586235"
+checksum = "fb28741c9db9a713d93deb3bb9515c20788cef5815265bee4980e87bde7e0f25"
dependencies = [
"console",
+ "instant",
"number_prefix 0.4.0",
"portable-atomic",
- "unicode-width 0.2.0",
- "web-time",
+ "unicode-width",
]
[[package]]
@@ -11835,7 +11836,7 @@ version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2ad9b889f1b12e0b9ee24db044b5129150d5eada288edc800f789928dc8c0e3"
dependencies = [
- "unicode-width 0.1.11",
+ "unicode-width",
]
[[package]]
@@ -12332,6 +12333,12 @@ version = "0.3.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "69d3587f8a9e599cc7ec2c00e331f71c4e69a5f9a4b8a6efd5b07466b9736f9a"
+[[package]]
+name = "platforms"
+version = "3.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c"
+
[[package]]
name = "plotters"
version = "0.3.5"
@@ -12533,9 +12540,9 @@ dependencies = [
[[package]]
name = "portable-atomic"
-version = "1.11.0"
+version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e"
+checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0"
[[package]]
name = "poseidon-ark"
@@ -12699,7 +12706,7 @@ dependencies = [
"is-terminal",
"lazy_static",
"term",
- "unicode-width 0.1.11",
+ "unicode-width",
]
[[package]]
@@ -14018,9 +14025,9 @@ dependencies = [
[[package]]
name = "self-replace"
-version = "1.4.0"
+version = "1.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f7828a58998685d8bf5a3c5e7a3379a5867289c20828c3ee436280b44b598515"
+checksum = "525db198616b2bcd0f245daf7bfd8130222f7ee6af9ff9984c19a61bf1160c55"
dependencies = [
"fastrand 1.9.0",
"tempfile",
@@ -14033,7 +14040,7 @@ version = "0.39.0"
source = "git+https://github.com/banool/self_update.git?rev=8306158ad0fd5b9d4766a3c6bf967e7ef0ea5c4b#8306158ad0fd5b9d4766a3c6bf967e7ef0ea5c4b"
dependencies = [
"hyper",
- "indicatif 0.17.11",
+ "indicatif 0.17.7",
"log",
"quick-xml 0.23.1",
"regex",
@@ -15226,7 +15233,7 @@ version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
dependencies = [
- "unicode-width 0.1.11",
+ "unicode-width",
]
[[package]]
@@ -15236,7 +15243,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cd05616119e612a8041ef58f2b578906cc2531a6069047ae092cfb86a325d835"
dependencies = [
"smawk",
- "unicode-width 0.1.11",
+ "unicode-width",
]
[[package]]
@@ -15247,7 +15254,7 @@ checksum = "b7b3e525a49ec206798b40326a44121291b530c963cfb01018f63e135bac543d"
dependencies = [
"smawk",
"unicode-linebreak",
- "unicode-width 0.1.11",
+ "unicode-width",
]
[[package]]
@@ -15913,7 +15920,7 @@ dependencies = [
"cassowary",
"crossterm 0.25.0",
"unicode-segmentation",
- "unicode-width 0.1.11",
+ "unicode-width",
]
[[package]]
@@ -16130,12 +16137,6 @@ version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
-[[package]]
-name = "unicode-width"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd"
-
[[package]]
name = "unicode-xid"
version = "0.2.4"
@@ -16492,16 +16493,6 @@ dependencies = [
"wasm-bindgen",
]
-[[package]]
-name = "web-time"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb"
-dependencies = [
- "js-sys",
- "wasm-bindgen",
-]
-
[[package]]
name = "webpki"
version = "0.22.4"
@@ -16982,9 +16973,9 @@ dependencies = [
[[package]]
name = "zipsign-api"
-version = "0.1.2"
+version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6413a546ada9dbcd0b9a3e0b0880581279e35047bce9797e523b3408e1df607c"
+checksum = "2ba5aa1827d6b1a35a29b3413ec69ce5f796e4d897e3e5b38f461bef41d225ea"
dependencies = [
"ed25519-dalek 2.1.1",
"thiserror",
diff --git a/aptos-move/framework/move-stdlib/doc/features.md b/aptos-move/framework/move-stdlib/doc/features.md
index 4c6b8d80bfae9..6f5b75f1ae9d0 100644
--- a/aptos-move/framework/move-stdlib/doc/features.md
+++ b/aptos-move/framework/move-stdlib/doc/features.md
@@ -888,7 +888,7 @@ Lifetime: transient
-Whether Supra Appchain is enabled.
+Whether Supra Appchains are enabled.
Lifetime: transient
diff --git a/aptos-move/framework/supra-framework/doc/appchain_registry.md b/aptos-move/framework/supra-framework/doc/appchain_registry.md
new file mode 100644
index 0000000000000..0d396808d5116
--- /dev/null
+++ b/aptos-move/framework/supra-framework/doc/appchain_registry.md
@@ -0,0 +1,1025 @@
+
+
+
+# Module `0x1::appchain_registry`
+
+Copyright (c) 2025 Supra
+
+Appchain Registry Module
+
+This module manages the registration and lifecycle of appchains on Supra-L1.
+
+1. To enable support for a new appchain on Supra-L1, it must be first registered by Supra Governance
+using the register_appchain method of this module.
+2. If a registered appchain misbehaves, it can be deactivated by Supra Governance through the deactivate_appchain method.
+3. A previously deactivated appchain can be reactivated by Supra Governance using the reactivate_appchain method.
+4. Although the registry data is updated immediately, the changes are only considered by Supra-L1 validators
+after an epoch change. Therefore, it is strongly recommended to trigger an epoch change by invoking
+0x1::supra_governance::reconfigure.
+5. Supra-L1 validators consider the updated registry data only after the epoch change. Hence, it is
+highly recommended to perform an epoch change whenever the following methods are invoked:
+a. register_appchain
+b. deactivate_appchain
+c. reactivate_appchain
+
+
+- [Struct `ReservedRange`](#0x1_appchain_registry_ReservedRange)
+- [Struct `AppchainInfo`](#0x1_appchain_registry_AppchainInfo)
+- [Resource `AppchainRegistry`](#0x1_appchain_registry_AppchainRegistry)
+- [Struct `AppchainRegistered`](#0x1_appchain_registry_AppchainRegistered)
+- [Struct `AppchainDeactivated`](#0x1_appchain_registry_AppchainDeactivated)
+- [Struct `AppchainReactivated`](#0x1_appchain_registry_AppchainReactivated)
+- [Struct `AppchainMetadataLinkUpdated`](#0x1_appchain_registry_AppchainMetadataLinkUpdated)
+- [Constants](#@Constants_0)
+- [Function `initialize`](#0x1_appchain_registry_initialize)
+- [Function `register_appchain`](#0x1_appchain_registry_register_appchain)
+- [Function `deactivate_appchain`](#0x1_appchain_registry_deactivate_appchain)
+- [Function `reactivate_appchain`](#0x1_appchain_registry_reactivate_appchain)
+- [Function `update_appchain_metadata_link`](#0x1_appchain_registry_update_appchain_metadata_link)
+- [Function `add_reserved_range`](#0x1_appchain_registry_add_reserved_range)
+- [Function `new_reserved_range`](#0x1_appchain_registry_new_reserved_range)
+- [Function `appchain_state`](#0x1_appchain_registry_appchain_state)
+- [Function `is_appchain_active`](#0x1_appchain_registry_is_appchain_active)
+- [Function `active_appchains`](#0x1_appchain_registry_active_appchains)
+- [Function `appchain_metadata_link`](#0x1_appchain_registry_appchain_metadata_link)
+- [Function `appchain_info`](#0x1_appchain_registry_appchain_info)
+- [Function `is_chain_id_reserved`](#0x1_appchain_registry_is_chain_id_reserved)
+- [Function `borrow_global_appchain_registry`](#0x1_appchain_registry_borrow_global_appchain_registry)
+- [Function `borrow_global_mut_appchain_registry`](#0x1_appchain_registry_borrow_global_mut_appchain_registry)
+- [Function `assert_appchain_registered`](#0x1_appchain_registry_assert_appchain_registered)
+- [Function `is_chain_id_reserved_internal`](#0x1_appchain_registry_is_chain_id_reserved_internal)
+- [Specification](#@Specification_1)
+
+
+
use 0x1::error;
+use 0x1::event;
+use 0x1::features;
+use 0x1::simple_map;
+use 0x1::string;
+use 0x1::system_addresses;
+
+
+
+
+
+
+## Struct `ReservedRange`
+
+Represents reserved chain ID range.
+
+
+struct ReservedRange has copy, drop, store
+
+
+
+
+
+Fields
+
+
+
+-
+
start: u16
+
+-
+
+
+-
+
end: u16
+
+-
+
+
+
+
+
+
+
+
+
+## Struct `AppchainInfo`
+
+Represents information about the registered appchain.
+
+
+struct AppchainInfo has copy, drop, store
+
+
+
+
+
+Fields
+
+
+
+-
+
state: u8
+
+-
+
+
+-
+
metadata_link: string::String
+
+-
+
+
+
+
+
+
+
+
+
+## Resource `AppchainRegistry`
+
+Global appchain registry resource.
+
+
+#[resource_group_member(#[group = 0x1::object::ObjectGroup])]
+struct AppchainRegistry has key
+
+
+
+
+
+Fields
+
+
+
+-
+
appchains: simple_map::SimpleMap<u16, appchain_registry::AppchainInfo>
+
+-
+ Map from chain ID to appchain info.
+
+-
+
reserved_ranges: vector<appchain_registry::ReservedRange>
+
+-
+ Reserved chain ID ranges.
+
+
+
+
+
+
+
+
+## Struct `AppchainRegistered`
+
+
+
+#[event]
+struct AppchainRegistered has drop, store
+
+
+
+
+
+Fields
+
+
+
+-
+
chain_id: u16
+
+-
+
+
+-
+
metadata_link: string::String
+
+-
+
+
+
+
+
+
+
+
+
+## Struct `AppchainDeactivated`
+
+
+
+#[event]
+struct AppchainDeactivated has drop, store
+
+
+
+
+
+Fields
+
+
+
+-
+
chain_id: u16
+
+-
+
+
+
+
+
+
+
+
+
+## Struct `AppchainReactivated`
+
+
+
+#[event]
+struct AppchainReactivated has drop, store
+
+
+
+
+
+Fields
+
+
+
+-
+
chain_id: u16
+
+-
+
+
+
+
+
+
+
+
+
+## Struct `AppchainMetadataLinkUpdated`
+
+
+
+#[event]
+struct AppchainMetadataLinkUpdated has drop, store
+
+
+
+
+
+Fields
+
+
+
+-
+
chain_id: u16
+
+-
+
+
+-
+
old_metadata_link: string::String
+
+-
+
+
+-
+
new_metadata_link: string::String
+
+-
+
+
+
+
+
+
+
+
+
+## Constants
+
+
+
+
+The provided range is invalid, start value must be less than or equal to end value.
+
+
+const EINVALID_RANGE: u64 = 7;
+
+
+
+
+
+
+The appchain is already in the ACTIVE state and cannot be reactivated.
+
+
+const EAPPCHAIN_ALREADY_ACTIVE: u64 = 5;
+
+
+
+
+
+
+The appchain is already in the INACTIVE state and cannot be deactivated again.
+
+
+const EAPPCHAIN_ALREADY_DEACTIVATED: u64 = 4;
+
+
+
+
+
+
+The appchain with the given chain ID is already registered in the appchain registry.
+
+
+const EAPPCHAIN_ALREADY_REGISTERED: u64 = 1;
+
+
+
+
+
+
+The appchain with the given chain ID is not found in the appchain registry.
+
+
+const EAPPCHAIN_NOT_REGISTERED: u64 = 2;
+
+
+
+
+
+
+The chain ID falls within a reserved range and cannot be used for registration.
+
+
+const ECHAIN_ID_RESERVED: u64 = 3;
+
+
+
+
+
+
+The AppchainRegistry resource has not been initialized at @supra_framework.
+
+
+const EREGISTRY_NOT_INITIALIZED: u64 = 6;
+
+
+
+
+
+
+Supra Appchains feature is not enabled.
+
+
+const ESUPRA_APPCHAINS_FEATURE_DISABLED: u64 = 8;
+
+
+
+
+
+
+Registered as a appchain and actively working.
+
+
+const STATE_ACTIVE: u8 = 1;
+
+
+
+
+
+
+Registered as a appchain, but decommissioned from the Supra-L1.
+
+
+const STATE_INACTIVE: u8 = 0;
+
+
+
+
+
+
+Never registered as a appchain.
+
+
+const STATE_UNKNOWN: u8 = 2;
+
+
+
+
+
+
+## Function `initialize`
+
+Initializes the appchain registry.
+
+Appchain registry initialization does not require the SUPRA_APPCHAINS feature to be enabled.
+
+
+public(friend) fun initialize(supra_framework: &signer, reserved_ranges: vector<appchain_registry::ReservedRange>)
+
+
+
+
+
+Implementation
+
+
+public(friend) fun initialize(supra_framework: &signer, reserved_ranges: vector<ReservedRange>) {
+ system_addresses::assert_supra_framework(supra_framework);
+
+ move_to(supra_framework, AppchainRegistry {
+ appchains: simple_map::new(),
+ reserved_ranges,
+ });
+}
+
+
+
+
+
+
+
+
+## Function `register_appchain`
+
+Registers a new appchain.
+
+This method requires the supra_framework as a signer. Therefore, externally (out of the supra-framework package),
+it can only be invoked through a governance proposal move-script.
+
+It is strongly recommended to trigger an epoch change by calling 0x1::supra_governance::reconfigure
+after invoking this method. While this method could perform the reconfiguration internally, it
+intentionally does not. This is because governance proposal move-scripts may need to invoke
+additional methods after this one, so the responsibility of reconfiguration is left to the caller.
+
+Example usage:
+```
+supra_framework::appchain_registry::register_appchain(&supra_framework, chain_id, metadata_link);
+supra_framework::supra_governance::reconfigure(&supra_framework);
+```
+
+
+public fun register_appchain(supra_framework: &signer, chain_id: u16, metadata_link: string::String)
+
+
+
+
+
+Implementation
+
+
+public fun register_appchain(
+ supra_framework: &signer,
+ chain_id: u16,
+ metadata_link: String,
+) acquires AppchainRegistry {
+ let appchain_registry = borrow_global_mut_appchain_registry(supra_framework);
+
+ // Checks if given chain ID is reserved.
+ assert!(
+ !is_chain_id_reserved_internal(chain_id, &appchain_registry.reserved_ranges),
+ error::invalid_argument(ECHAIN_ID_RESERVED)
+ );
+ // Checks if a appchain is already registered.
+ assert!(
+ !simple_map::contains_key(&appchain_registry.appchains, &chain_id),
+ error::already_exists(EAPPCHAIN_ALREADY_REGISTERED)
+ );
+
+ let appchain_info = AppchainInfo {
+ state: STATE_ACTIVE,
+ metadata_link,
+ };
+ simple_map::add(&mut appchain_registry.appchains, chain_id, appchain_info);
+
+ event::emit(AppchainRegistered {
+ chain_id,
+ metadata_link,
+ });
+}
+
+
+
+
+
+
+
+
+## Function `deactivate_appchain`
+
+Deactivates the already registered appchain.
+
+This method requires the supra_framework as a signer. Therefore, externally (out of the supra-framework package),
+it can only be invoked through a governance proposal move-script.
+
+It is strongly recommended to trigger an epoch change by calling 0x1::supra_governance::reconfigure
+after invoking this method. While this method could perform the reconfiguration internally, it
+intentionally does not. This is because governance proposal move-scripts may need to invoke
+additional methods after this one, so the responsibility of reconfiguration is left to the caller.
+
+Example usage:
+```
+supra_framework::appchain_registry::deactivate_appchain(&supra_framework, chain_id);
+supra_framework::supra_governance::reconfigure(&supra_framework);
+```
+
+
+public fun deactivate_appchain(supra_framework: &signer, chain_id: u16)
+
+
+
+
+
+Implementation
+
+
+public fun deactivate_appchain(
+ supra_framework: &signer,
+ chain_id: u16,
+) acquires AppchainRegistry {
+ let appchain_registry = borrow_global_mut_appchain_registry(supra_framework);
+ assert_appchain_registered(&appchain_registry.appchains, &chain_id);
+
+ let appchain_info = simple_map::borrow_mut(&mut appchain_registry.appchains, &chain_id);
+ assert!(appchain_info.state == STATE_ACTIVE, error::invalid_state(EAPPCHAIN_ALREADY_DEACTIVATED));
+
+ appchain_info.state = STATE_INACTIVE;
+
+ event::emit(AppchainDeactivated {
+ chain_id,
+ });
+}
+
+
+
+
+
+
+
+
+## Function `reactivate_appchain`
+
+Reactivates the deactivated appchain.
+
+This method requires the supra_framework as a signer. Therefore, externally (out of the supra-framework package),
+it can only be invoked through a governance proposal move-script.
+
+It is strongly recommended to trigger an epoch change by calling 0x1::supra_governance::reconfigure
+after invoking this method. While this method could perform the reconfiguration internally, it
+intentionally does not. This is because governance proposal move-scripts may need to invoke
+additional methods after this one, so the responsibility of reconfiguration is left to the caller.
+
+Example usage:
+```
+supra_framework::appchain_registry::reactivate_appchain(&supra_framework, chain_id);
+supra_framework::supra_governance::reconfigure(&supra_framework);
+```
+
+
+public fun reactivate_appchain(supra_framework: &signer, chain_id: u16)
+
+
+
+
+
+Implementation
+
+
+public fun reactivate_appchain(
+ supra_framework: &signer,
+ chain_id: u16,
+) acquires AppchainRegistry {
+ let appchain_registry = borrow_global_mut_appchain_registry(supra_framework);
+ assert_appchain_registered(&appchain_registry.appchains, &chain_id);
+
+ let appchain_info = simple_map::borrow_mut(&mut appchain_registry.appchains, &chain_id);
+ assert!(appchain_info.state == STATE_INACTIVE, error::invalid_state(EAPPCHAIN_ALREADY_ACTIVE));
+
+ appchain_info.state = STATE_ACTIVE;
+
+ event::emit(AppchainReactivated {
+ chain_id,
+ });
+}
+
+
+
+
+
+
+
+
+## Function `update_appchain_metadata_link`
+
+Updates metadata link of a registered appchain.
+
+
+public fun update_appchain_metadata_link(supra_framework: &signer, chain_id: u16, new_metadata_link: string::String)
+
+
+
+
+
+Implementation
+
+
+public fun update_appchain_metadata_link(
+ supra_framework: &signer,
+ chain_id: u16,
+ new_metadata_link: String,
+) acquires AppchainRegistry {
+ let appchain_registry = borrow_global_mut_appchain_registry(supra_framework);
+ assert_appchain_registered(&appchain_registry.appchains, &chain_id);
+
+ let appchain_info = simple_map::borrow_mut(&mut appchain_registry.appchains, &chain_id);
+ let old_metadata_link = appchain_info.metadata_link;
+ appchain_info.metadata_link = new_metadata_link;
+
+ event::emit(AppchainMetadataLinkUpdated {
+ chain_id,
+ old_metadata_link,
+ new_metadata_link,
+ });
+}
+
+
+
+
+
+
+
+
+## Function `add_reserved_range`
+
+Adds a reserved chain ID range.
+
+
+public fun add_reserved_range(supra_framework: &signer, start: u16, end: u16)
+
+
+
+
+
+Implementation
+
+
+public fun add_reserved_range(
+ supra_framework: &signer,
+ start: u16,
+ end: u16,
+) acquires AppchainRegistry {
+ let appchain_registry = borrow_global_mut_appchain_registry(supra_framework);
+ assert!(start <= end, error::invalid_argument(EINVALID_RANGE));
+
+ vector::push_back(&mut appchain_registry.reserved_ranges, ReservedRange { start, end });
+}
+
+
+
+
+
+
+
+
+## Function `new_reserved_range`
+
+Constructor to create an instance of the ReservedRange.
+This will be utilized in move-script to initialize the appchain registry with reserved ranges.
+
+
+public fun new_reserved_range(start: u16, end: u16): appchain_registry::ReservedRange
+
+
+
+
+
+Implementation
+
+
+public fun new_reserved_range(
+ start: u16,
+ end: u16,
+): ReservedRange {
+ assert!(start <= end, error::invalid_argument(EINVALID_RANGE));
+ ReservedRange { start, end }
+}
+
+
+
+
+
+
+
+
+## Function `appchain_state`
+
+Get the state of a appchain.
+
+
+#[view]
+public fun appchain_state(chain_id: u16): u8
+
+
+
+
+
+Implementation
+
+
+public fun appchain_state(chain_id: u16): u8 acquires AppchainRegistry {
+ let appchain_registry = borrow_global_appchain_registry();
+ if (simple_map::contains_key(&appchain_registry.appchains, &chain_id)) {
+ return simple_map::borrow(&appchain_registry.appchains, &chain_id).state;
+ };
+
+ STATE_UNKNOWN
+}
+
+
+
+
+
+
+
+
+## Function `is_appchain_active`
+
+Check if a appchain is active.
+
+
+#[view]
+public fun is_appchain_active(chain_id: u16): bool
+
+
+
+
+
+Implementation
+
+
+public fun is_appchain_active(chain_id: u16): bool acquires AppchainRegistry {
+ appchain_state(chain_id) == STATE_ACTIVE
+}
+
+
+
+
+
+
+
+
+## Function `active_appchains`
+
+Get chain IDs of all appchain with Active state.
+
+
+#[view]
+public fun active_appchains(): vector<u16>
+
+
+
+
+
+Implementation
+
+
+public fun active_appchains(): vector<u16> acquires AppchainRegistry {
+ let appchain_registry = borrow_global_appchain_registry();
+ let appchains_chain_id = simple_map::keys(&appchain_registry.appchains);
+ let appchains_info = simple_map::values(&appchain_registry.appchains);
+ let active_appchains_chain_id = vector::empty<u16>();
+ vector::zip_reverse<u16, AppchainInfo>(appchains_chain_id, appchains_info, |chain_id, appchain_info|{
+ // New helper variable with explicit type annotation is required due to Move's lambda type inference
+ // limitations. When I don't use this new variable with explicit type declaration, compiler throws error
+ // and ask to infer the type.
+ let info: AppchainInfo = appchain_info;
+ if (info.state == STATE_ACTIVE) {
+ vector::push_back(&mut active_appchains_chain_id, chain_id);
+ }
+ });
+ active_appchains_chain_id
+}
+
+
+
+
+
+
+
+
+## Function `appchain_metadata_link`
+
+Get appchain metadata link.
+
+
+#[view]
+public fun appchain_metadata_link(chain_id: u16): string::String
+
+
+
+
+
+Implementation
+
+
+public fun appchain_metadata_link(chain_id: u16): String acquires AppchainRegistry {
+ let appchain_registry = borrow_global_appchain_registry();
+ assert_appchain_registered(&appchain_registry.appchains, &chain_id);
+
+ simple_map::borrow(&appchain_registry.appchains, &chain_id).metadata_link
+}
+
+
+
+
+
+
+
+
+## Function `appchain_info`
+
+Get appchain info.
+
+
+#[view]
+public fun appchain_info(chain_id: u16): (u8, string::String)
+
+
+
+
+
+Implementation
+
+
+public fun appchain_info(chain_id: u16): (u8, String) acquires AppchainRegistry {
+ let appchain_registry = borrow_global_appchain_registry();
+ assert_appchain_registered(&appchain_registry.appchains, &chain_id);
+
+ let appchain = simple_map::borrow(&appchain_registry.appchains, &chain_id);
+ (appchain.state, appchain.metadata_link)
+}
+
+
+
+
+
+
+
+
+## Function `is_chain_id_reserved`
+
+Check if a chain ID falls within reserved ranges.
+
+
+#[view]
+public fun is_chain_id_reserved(chain_id: u16): bool
+
+
+
+
+
+Implementation
+
+
+public fun is_chain_id_reserved(chain_id: u16): bool acquires AppchainRegistry {
+ is_chain_id_reserved_internal(chain_id, &borrow_global_appchain_registry().reserved_ranges)
+}
+
+
+
+
+
+
+
+
+## Function `borrow_global_appchain_registry`
+
+
+
+fun borrow_global_appchain_registry(): &appchain_registry::AppchainRegistry
+
+
+
+
+
+Implementation
+
+
+inline fun borrow_global_appchain_registry(): &AppchainRegistry acquires AppchainRegistry {
+ assert!(features::supra_appchains_enabled(), error::unavailable(ESUPRA_APPCHAINS_FEATURE_DISABLED));
+ assert!(exists<AppchainRegistry>(@supra_framework), error::not_found(EREGISTRY_NOT_INITIALIZED));
+ borrow_global<AppchainRegistry>(@supra_framework)
+}
+
+
+
+
+
+
+
+
+## Function `borrow_global_mut_appchain_registry`
+
+
+
+fun borrow_global_mut_appchain_registry(supra_framework: &signer): &mut appchain_registry::AppchainRegistry
+
+
+
+
+
+Implementation
+
+
+inline fun borrow_global_mut_appchain_registry(
+ supra_framework: &signer
+): &mut AppchainRegistry acquires AppchainRegistry {
+ assert!(features::supra_appchains_enabled(), error::unavailable(ESUPRA_APPCHAINS_FEATURE_DISABLED));
+ system_addresses::assert_supra_framework(supra_framework);
+ assert!(exists<AppchainRegistry>(@supra_framework), error::not_found(EREGISTRY_NOT_INITIALIZED));
+ borrow_global_mut<AppchainRegistry>(@supra_framework)
+}
+
+
+
+
+
+
+
+
+## Function `assert_appchain_registered`
+
+
+
+fun assert_appchain_registered(appchains: &simple_map::SimpleMap<u16, appchain_registry::AppchainInfo>, chain_id: &u16)
+
+
+
+
+
+Implementation
+
+
+inline fun assert_appchain_registered(appchains: &SimpleMap<u16, AppchainInfo>, chain_id: &u16) {
+ assert!(
+ simple_map::contains_key(appchains, chain_id),
+ error::not_found(EAPPCHAIN_NOT_REGISTERED)
+ );
+}
+
+
+
+
+
+
+
+
+## Function `is_chain_id_reserved_internal`
+
+
+
+fun is_chain_id_reserved_internal(chain_id: u16, reserved_ranges: &vector<appchain_registry::ReservedRange>): bool
+
+
+
+
+
+Implementation
+
+
+fun is_chain_id_reserved_internal(
+ chain_id: u16,
+ reserved_ranges: &vector<ReservedRange>
+): bool {
+ let i = 0;
+ let total_ranges = vector::length(reserved_ranges);
+ while (i < total_ranges) {
+ let range = vector::borrow(reserved_ranges, i);
+ if (chain_id >= range.start && chain_id <= range.end) {
+ return true
+ };
+ i = i + 1;
+ };
+
+ false
+}
+
+
+
+
+
+
+
+
+## Specification
+
+
+
+pragma verify = false;
+
+
+
+[move-book]: https://aptos.dev/move/book/SUMMARY
diff --git a/aptos-move/framework/supra-framework/doc/funnel_node_registry.md b/aptos-move/framework/supra-framework/doc/funnel_node_registry.md
new file mode 100644
index 0000000000000..620bfbef65868
--- /dev/null
+++ b/aptos-move/framework/supra-framework/doc/funnel_node_registry.md
@@ -0,0 +1,251 @@
+
+
+
+# Module `0x1::funnel_node_registry`
+
+Copyright (c) 2025 Supra
+
+Funnel Node Registry Module
+
+This module manages a list of registered funnel nodes' IP/DNS addresses.
+
+
+- [Resource `FunnelNodeRegistry`](#0x1_funnel_node_registry_FunnelNodeRegistry)
+- [Struct `FunnelNodesUpdated`](#0x1_funnel_node_registry_FunnelNodesUpdated)
+- [Constants](#@Constants_0)
+- [Function `initialize`](#0x1_funnel_node_registry_initialize)
+- [Function `update_funnel_nodes`](#0x1_funnel_node_registry_update_funnel_nodes)
+- [Function `funnel_nodes`](#0x1_funnel_node_registry_funnel_nodes)
+- [Function `assert_registry_initialized`](#0x1_funnel_node_registry_assert_registry_initialized)
+
+
+use 0x1::error;
+use 0x1::event;
+use 0x1::string;
+use 0x1::system_addresses;
+
+
+
+
+
+
+## Resource `FunnelNodeRegistry`
+
+Global funnel node registry resource.
+
+
+#[resource_group_member(#[group = 0x1::object::ObjectGroup])]
+struct FunnelNodeRegistry has key
+
+
+
+
+
+Fields
+
+
+
+-
+
funnel_nodes: vector<string::String>
+
+-
+
+
+
+
+
+
+
+
+
+## Struct `FunnelNodesUpdated`
+
+
+
+#[event]
+struct FunnelNodesUpdated has drop, store
+
+
+
+
+
+Fields
+
+
+
+-
+
old_funnel_nodes: vector<string::String>
+
+-
+
+
+-
+
new_funnel_nodes: vector<string::String>
+
+-
+
+
+
+
+
+
+
+
+
+## Constants
+
+
+
+
+The FunnelNodeRegistry resource has not been initialized at @supra_framework.
+
+
+const EREGISTRY_NOT_INITIALIZED: u64 = 1;
+
+
+
+
+
+
+## Function `initialize`
+
+Initializes the funnel node registry.
+
+
+public(friend) fun initialize(supra_framework: &signer, funnel_nodes: vector<string::String>)
+
+
+
+
+
+Implementation
+
+
+public(friend) fun initialize(supra_framework: &signer, funnel_nodes: vector<String>) {
+ system_addresses::assert_supra_framework(supra_framework);
+
+ move_to(supra_framework, FunnelNodeRegistry {
+ funnel_nodes,
+ });
+}
+
+
+
+
+
+
+
+
+## Function `update_funnel_nodes`
+
+Updates the funnel nodes in the funnel node registry.
+
+This method replaces the existing list of funnel nodes with the provided list. Therefore, it is
+strongly recommended that the new list contains valid URLs for all funnel nodes, and that the nodes
+are ordered based on their reputation and trust level.
+
+Technically, deduplication of new_funnel_nodes is necessary. However, performing it consumes a
+significant amount of execution gas. Since this method is expected to be invoked by appchain
+governance - which is assumed to perform governance operations carefully - the new_funnel_nodes
+list is **not** deduplicated internally. As a result, it is possible to pass a list containing duplicate
+entries without triggering an error. Therefore, deduplication should be performed as part of
+the validator node's sanity checks.
+
+This method requires the supra_framework as a signer. Therefore, externally (out of the supra-framework package),
+it can only be invoked through a governance proposal move-script.
+
+It is strongly recommended to trigger an epoch change by calling 0x1::supra_governance::reconfigure
+after invoking this method. While this method could perform the reconfiguration internally, it
+intentionally does not. This is because governance proposal move-scripts may need to invoke
+additional methods after this one, so the responsibility of reconfiguration is left to the caller.
+
+Example usage:
+```
+supra_framework::funnel_node_registry::update_funnel_nodes(&supra_framework, new_funnel_nodes);
+supra_framework::supra_governance::reconfigure(&supra_framework);
+```
+
+
+public fun update_funnel_nodes(supra_framework: &signer, new_funnel_nodes: vector<string::String>)
+
+
+
+
+
+Implementation
+
+
+public fun update_funnel_nodes(
+ supra_framework: &signer,
+ new_funnel_nodes: vector<String>
+) acquires FunnelNodeRegistry {
+ system_addresses::assert_supra_framework(supra_framework);
+ assert_registry_initialized();
+
+ let funnel_node_registry = borrow_global_mut<FunnelNodeRegistry>(@supra_framework);
+ let old_funnel_nodes = funnel_node_registry.funnel_nodes;
+ funnel_node_registry.funnel_nodes = new_funnel_nodes;
+ event::emit(FunnelNodesUpdated {
+ old_funnel_nodes,
+ new_funnel_nodes
+ })
+}
+
+
+
+
+
+
+
+
+## Function `funnel_nodes`
+
+Get funnel nodes list.
+
+
+#[view]
+public fun funnel_nodes(): vector<string::String>
+
+
+
+
+
+Implementation
+
+
+public fun funnel_nodes(): vector<String> acquires FunnelNodeRegistry {
+ assert_registry_initialized();
+ borrow_global_mut<FunnelNodeRegistry>(@supra_framework).funnel_nodes
+}
+
+
+
+
+
+
+
+
+## Function `assert_registry_initialized`
+
+
+
+fun assert_registry_initialized()
+
+
+
+
+
+Implementation
+
+
+inline fun assert_registry_initialized() {
+ assert!(exists<FunnelNodeRegistry>(@supra_framework), error::not_found(EREGISTRY_NOT_INITIALIZED));
+}
+
+
+
+
+
+
+
+[move-book]: https://aptos.dev/move/book/SUMMARY
diff --git a/aptos-move/framework/supra-framework/doc/genesis.md b/aptos-move/framework/supra-framework/doc/genesis.md
index 585539cb61c8c..7e6bb21aa0917 100644
--- a/aptos-move/framework/supra-framework/doc/genesis.md
+++ b/aptos-move/framework/supra-framework/doc/genesis.md
@@ -17,6 +17,8 @@
- [Function `initialize_supra_coin`](#0x1_genesis_initialize_supra_coin)
- [Function `initialize_supra_native_automation`](#0x1_genesis_initialize_supra_native_automation)
- [Function `initialize_supra_native_automation_v2`](#0x1_genesis_initialize_supra_native_automation_v2)
+- [Function `initialize_appchain_registry`](#0x1_genesis_initialize_appchain_registry)
+- [Function `initialize_funnel_node_registry`](#0x1_genesis_initialize_funnel_node_registry)
- [Function `initialize_core_resources_and_supra_coin`](#0x1_genesis_initialize_core_resources_and_supra_coin)
- [Function `initialize_evm_genesis_config`](#0x1_genesis_initialize_evm_genesis_config)
- [Function `create_accounts`](#0x1_genesis_create_accounts)
@@ -52,6 +54,7 @@
use 0x1::account;
use 0x1::aggregator_factory;
+use 0x1::appchain_registry;
use 0x1::automation_registry;
use 0x1::block;
use 0x1::chain_id;
@@ -64,6 +67,7 @@
use 0x1::execution_config;
use 0x1::features;
use 0x1::fixed_point32;
+use 0x1::funnel_node_registry;
use 0x1::gas_schedule;
use 0x1::multisig_account;
use 0x1::option;
@@ -705,8 +709,7 @@ Deprecated in favoor of initialize_supra_native_automation_v2.
_congestion_base_fee_in_quants_per_sec: u64,
_congestion_exponent: u8,
_task_capacity: u16,
-) {
-}
+) {}
@@ -764,6 +767,78 @@ Genesis step 3: Initialize Supra Native Automation.
+
+
+
+
+## Function `initialize_appchain_registry`
+
+Genesis step 4: Initialize Appchain Registry.
+
+This method allows to initialize the appchain registry either during the genesis initialization
+or after it has been completed.
+
+Because it is publicly accessible, it can be invoked via a move-script. Since it requires
+the supra_framework as the signer, the invocation must go through the governance process.
+
+
+public fun initialize_appchain_registry(supra_framework: &signer, reserved_ranges: vector<appchain_registry::ReservedRange>)
+
+
+
+
+
+Implementation
+
+
+public fun initialize_appchain_registry(
+ supra_framework: &signer,
+ reserved_ranges: vector<ReservedRange>
+) {
+ appchain_registry::initialize(
+ supra_framework, reserved_ranges
+ )
+}
+
+
+
+
+
+
+
+
+## Function `initialize_funnel_node_registry`
+
+Genesis step 5: Initialize Funnel Node Registry.
+
+This method allows to initialize the appchain registry either during the genesis initialization
+or after it has been completed.
+
+Because it is publicly accessible, it can be invoked via a move-script. Since it requires
+the supra_framework as the signer, the invocation must go through the governance process.
+
+
+public fun initialize_funnel_node_registry(supra_framework: &signer, funnel_nodes: vector<string::String>)
+
+
+
+
+
+Implementation
+
+
+public fun initialize_funnel_node_registry(
+ supra_framework: &signer,
+ funnel_nodes: vector<String>
+) {
+ funnel_node_registry::initialize(
+ supra_framework, funnel_nodes
+ )
+}
+
+
+
+
@@ -1550,7 +1625,7 @@ The last step of genesis.
#[verify_only]
-fun initialize_for_verification(gas_schedule: vector<u8>, chain_id: u8, initial_version: u64, consensus_config: vector<u8>, execution_config: vector<u8>, supra_config: vector<u8>, evm_genesis_config: vector<u8>, epoch_interval_microsecs: u64, minimum_stake: u64, maximum_stake: u64, recurring_lockup_duration_secs: u64, allow_validator_set_change: bool, rewards_rate: u64, rewards_rate_denominator: u64, voting_power_increase_limit: u64, supra_framework: &signer, voting_duration_secs: u64, supra_min_voting_threshold: u64, voters: vector<address>, accounts: vector<genesis::AccountMap>, employee_vesting_start: u64, employee_vesting_period_duration: u64, employees: vector<genesis::EmployeeAccountMap>, validators: vector<genesis::ValidatorConfigurationWithCommission>)
+fun initialize_for_verification(gas_schedule: vector<u8>, chain_id: u8, initial_version: u64, consensus_config: vector<u8>, execution_config: vector<u8>, supra_config: vector<u8>, _evm_genesis_config: vector<u8>, epoch_interval_microsecs: u64, minimum_stake: u64, maximum_stake: u64, recurring_lockup_duration_secs: u64, allow_validator_set_change: bool, rewards_rate: u64, rewards_rate_denominator: u64, voting_power_increase_limit: u64, supra_framework: &signer, voting_duration_secs: u64, supra_min_voting_threshold: u64, voters: vector<address>, accounts: vector<genesis::AccountMap>, employee_vesting_start: u64, employee_vesting_period_duration: u64, employees: vector<genesis::EmployeeAccountMap>, validators: vector<genesis::ValidatorConfigurationWithCommission>)
@@ -1566,7 +1641,7 @@ The last step of genesis.
consensus_config: vector<u8>,
execution_config: vector<u8>,
supra_config: vector<u8>,
- evm_genesis_config: vector<u8>,
+ _evm_genesis_config: vector<u8>,
epoch_interval_microsecs: u64,
minimum_stake: u64,
maximum_stake: u64,
@@ -1603,7 +1678,6 @@ The last step of genesis.
rewards_rate_denominator,
voting_power_increase_limit,
0,
-
);
features::change_feature_flags_for_verification(supra_framework, vector[1, 2, 11], vector[]);
initialize_supra_coin(supra_framework);
@@ -1961,7 +2035,7 @@ The last step of genesis.
#[verify_only]
-fun initialize_for_verification(gas_schedule: vector<u8>, chain_id: u8, initial_version: u64, consensus_config: vector<u8>, execution_config: vector<u8>, supra_config: vector<u8>, evm_genesis_config: vector<u8>, epoch_interval_microsecs: u64, minimum_stake: u64, maximum_stake: u64, recurring_lockup_duration_secs: u64, allow_validator_set_change: bool, rewards_rate: u64, rewards_rate_denominator: u64, voting_power_increase_limit: u64, supra_framework: &signer, voting_duration_secs: u64, supra_min_voting_threshold: u64, voters: vector<address>, accounts: vector<genesis::AccountMap>, employee_vesting_start: u64, employee_vesting_period_duration: u64, employees: vector<genesis::EmployeeAccountMap>, validators: vector<genesis::ValidatorConfigurationWithCommission>)
+fun initialize_for_verification(gas_schedule: vector<u8>, chain_id: u8, initial_version: u64, consensus_config: vector<u8>, execution_config: vector<u8>, supra_config: vector<u8>, _evm_genesis_config: vector<u8>, epoch_interval_microsecs: u64, minimum_stake: u64, maximum_stake: u64, recurring_lockup_duration_secs: u64, allow_validator_set_change: bool, rewards_rate: u64, rewards_rate_denominator: u64, voting_power_increase_limit: u64, supra_framework: &signer, voting_duration_secs: u64, supra_min_voting_threshold: u64, voters: vector<address>, accounts: vector<genesis::AccountMap>, employee_vesting_start: u64, employee_vesting_period_duration: u64, employees: vector<genesis::EmployeeAccountMap>, validators: vector<genesis::ValidatorConfigurationWithCommission>)
diff --git a/aptos-move/framework/supra-framework/doc/overview.md b/aptos-move/framework/supra-framework/doc/overview.md
index 202e9563f6480..19bdab18b3ec3 100644
--- a/aptos-move/framework/supra-framework/doc/overview.md
+++ b/aptos-move/framework/supra-framework/doc/overview.md
@@ -16,6 +16,7 @@ This is the reference documentation of the Supra framework.
- [`0x1::aggregator`](aggregator.md#0x1_aggregator)
- [`0x1::aggregator_factory`](aggregator_factory.md#0x1_aggregator_factory)
- [`0x1::aggregator_v2`](aggregator_v2.md#0x1_aggregator_v2)
+- [`0x1::appchain_registry`](appchain_registry.md#0x1_appchain_registry)
- [`0x1::automation_registry`](automation_registry.md#0x1_automation_registry)
- [`0x1::block`](block.md#0x1_block)
- [`0x1::chain_id`](chain_id.md#0x1_chain_id)
@@ -33,6 +34,7 @@ This is the reference documentation of the Supra framework.
- [`0x1::execution_config`](execution_config.md#0x1_execution_config)
- [`0x1::function_info`](function_info.md#0x1_function_info)
- [`0x1::fungible_asset`](fungible_asset.md#0x1_fungible_asset)
+- [`0x1::funnel_node_registry`](funnel_node_registry.md#0x1_funnel_node_registry)
- [`0x1::gas_schedule`](gas_schedule.md#0x1_gas_schedule)
- [`0x1::genesis`](genesis.md#0x1_genesis)
- [`0x1::governance_proposal`](governance_proposal.md#0x1_governance_proposal)
diff --git a/aptos-move/framework/supra-framework/sources/appchain_registry.move b/aptos-move/framework/supra-framework/sources/appchain_registry.move
new file mode 100644
index 0000000000000..76317eea53838
--- /dev/null
+++ b/aptos-move/framework/supra-framework/sources/appchain_registry.move
@@ -0,0 +1,377 @@
+/// Copyright (c) 2025 Supra
+///
+/// Appchain Registry Module
+///
+/// This module manages the registration and lifecycle of appchains on Supra-L1.
+///
+/// 1. To enable support for a new appchain on Supra-L1, it must be first registered by Supra Governance
+/// using the `register_appchain` method of this module.
+/// 2. If a registered appchain misbehaves, it can be deactivated by Supra Governance through the `deactivate_appchain` method.
+/// 3. A previously deactivated appchain can be reactivated by Supra Governance using the `reactivate_appchain` method.
+/// 4. Although the registry data is updated immediately, the changes are only considered by Supra-L1 validators
+/// after an epoch change. Therefore, it is strongly recommended to trigger an epoch change by invoking
+/// `0x1::supra_governance::reconfigure`.
+/// 5. Supra-L1 validators consider the updated registry data only after the epoch change. Hence, it is
+/// highly recommended to perform an epoch change whenever the following methods are invoked:
+/// a. `register_appchain`
+/// b. `deactivate_appchain`
+/// c. `reactivate_appchain`
+module supra_framework::appchain_registry {
+ use std::error;
+ use std::features;
+ use std::string::String;
+ use std::vector;
+
+ use aptos_std::simple_map::{Self, SimpleMap};
+
+ use supra_framework::event;
+ use supra_framework::system_addresses;
+
+ friend supra_framework::genesis;
+ #[test_only]
+ friend supra_framework::appchain_registry_tests;
+
+
+ /// The appchain with the given chain ID is already registered in the appchain registry.
+ const EAPPCHAIN_ALREADY_REGISTERED: u64 = 1;
+
+ /// The appchain with the given chain ID is not found in the appchain registry.
+ const EAPPCHAIN_NOT_REGISTERED: u64 = 2;
+
+ /// The chain ID falls within a reserved range and cannot be used for registration.
+ const ECHAIN_ID_RESERVED: u64 = 3;
+
+ /// The appchain is already in the `INACTIVE` state and cannot be deactivated again.
+ const EAPPCHAIN_ALREADY_DEACTIVATED: u64 = 4;
+
+ /// The appchain is already in the `ACTIVE` state and cannot be reactivated.
+ const EAPPCHAIN_ALREADY_ACTIVE: u64 = 5;
+
+ /// The `AppchainRegistry` resource has not been initialized at @supra_framework.
+ const EREGISTRY_NOT_INITIALIZED: u64 = 6;
+
+ /// The provided range is invalid, start value must be less than or equal to end value.
+ const EINVALID_RANGE: u64 = 7;
+
+ /// Supra Appchains feature is not enabled.
+ const ESUPRA_APPCHAINS_FEATURE_DISABLED: u64 = 8;
+
+
+ /// Registered as a appchain, but decommissioned from the Supra-L1.
+ const STATE_INACTIVE: u8 = 0;
+ /// Registered as a appchain and actively working.
+ const STATE_ACTIVE: u8 = 1;
+ /// Never registered as a appchain.
+ const STATE_UNKNOWN: u8 = 2;
+
+ /// Represents reserved chain ID range.
+ struct ReservedRange has store, copy, drop {
+ start: u16,
+ end: u16
+ }
+
+ /// Represents information about the registered appchain.
+ struct AppchainInfo has store, copy, drop {
+ state: u8,
+ metadata_link: String,
+ }
+
+ #[resource_group_member(group = supra_framework::object::ObjectGroup)]
+ /// Global appchain registry resource.
+ struct AppchainRegistry has key {
+ /// Map from chain ID to appchain info.
+ appchains: SimpleMap,
+ /// Reserved chain ID ranges.
+ reserved_ranges: vector,
+ }
+
+
+ #[event]
+ struct AppchainRegistered has store, drop {
+ chain_id: u16,
+ metadata_link: String,
+ }
+
+ #[event]
+ struct AppchainDeactivated has store, drop {
+ chain_id: u16,
+ }
+
+ #[event]
+ struct AppchainReactivated has store, drop {
+ chain_id: u16,
+ }
+
+ #[event]
+ struct AppchainMetadataLinkUpdated has store, drop {
+ chain_id: u16,
+ old_metadata_link: String,
+ new_metadata_link: String,
+ }
+
+ /// Initializes the appchain registry.
+ ///
+ /// Appchain registry initialization does not require the `SUPRA_APPCHAINS` feature to be enabled.
+ public(friend) fun initialize(supra_framework: &signer, reserved_ranges: vector) {
+ system_addresses::assert_supra_framework(supra_framework);
+
+ move_to(supra_framework, AppchainRegistry {
+ appchains: simple_map::new(),
+ reserved_ranges,
+ });
+ }
+
+ /// Registers a new appchain.
+ ///
+ /// This method requires the `supra_framework` as a signer. Therefore, externally (out of the supra-framework package),
+ /// it can only be invoked through a governance proposal move-script.
+ ///
+ /// It is strongly recommended to trigger an epoch change by calling `0x1::supra_governance::reconfigure`
+ /// after invoking this method. While this method could perform the reconfiguration internally, it
+ /// intentionally does not. This is because governance proposal move-scripts may need to invoke
+ /// additional methods after this one, so the responsibility of reconfiguration is left to the caller.
+ ///
+ /// Example usage:
+ /// ```
+ /// supra_framework::appchain_registry::register_appchain(&supra_framework, chain_id, metadata_link);
+ /// supra_framework::supra_governance::reconfigure(&supra_framework);
+ /// ```
+ public fun register_appchain(
+ supra_framework: &signer,
+ chain_id: u16,
+ metadata_link: String,
+ ) acquires AppchainRegistry {
+ let appchain_registry = borrow_global_mut_appchain_registry(supra_framework);
+
+ // Checks if given chain ID is reserved.
+ assert!(
+ !is_chain_id_reserved_internal(chain_id, &appchain_registry.reserved_ranges),
+ error::invalid_argument(ECHAIN_ID_RESERVED)
+ );
+ // Checks if a appchain is already registered.
+ assert!(
+ !simple_map::contains_key(&appchain_registry.appchains, &chain_id),
+ error::already_exists(EAPPCHAIN_ALREADY_REGISTERED)
+ );
+
+ let appchain_info = AppchainInfo {
+ state: STATE_ACTIVE,
+ metadata_link,
+ };
+ simple_map::add(&mut appchain_registry.appchains, chain_id, appchain_info);
+
+ event::emit(AppchainRegistered {
+ chain_id,
+ metadata_link,
+ });
+ }
+
+ /// Deactivates the already registered appchain.
+ ///
+ /// This method requires the `supra_framework` as a signer. Therefore, externally (out of the supra-framework package),
+ /// it can only be invoked through a governance proposal move-script.
+ ///
+ /// It is strongly recommended to trigger an epoch change by calling `0x1::supra_governance::reconfigure`
+ /// after invoking this method. While this method could perform the reconfiguration internally, it
+ /// intentionally does not. This is because governance proposal move-scripts may need to invoke
+ /// additional methods after this one, so the responsibility of reconfiguration is left to the caller.
+ ///
+ /// Example usage:
+ /// ```
+ /// supra_framework::appchain_registry::deactivate_appchain(&supra_framework, chain_id);
+ /// supra_framework::supra_governance::reconfigure(&supra_framework);
+ /// ```
+ public fun deactivate_appchain(
+ supra_framework: &signer,
+ chain_id: u16,
+ ) acquires AppchainRegistry {
+ let appchain_registry = borrow_global_mut_appchain_registry(supra_framework);
+ assert_appchain_registered(&appchain_registry.appchains, &chain_id);
+
+ let appchain_info = simple_map::borrow_mut(&mut appchain_registry.appchains, &chain_id);
+ assert!(appchain_info.state == STATE_ACTIVE, error::invalid_state(EAPPCHAIN_ALREADY_DEACTIVATED));
+
+ appchain_info.state = STATE_INACTIVE;
+
+ event::emit(AppchainDeactivated {
+ chain_id,
+ });
+ }
+
+ /// Reactivates the deactivated appchain.
+ ///
+ /// This method requires the `supra_framework` as a signer. Therefore, externally (out of the supra-framework package),
+ /// it can only be invoked through a governance proposal move-script.
+ ///
+ /// It is strongly recommended to trigger an epoch change by calling `0x1::supra_governance::reconfigure`
+ /// after invoking this method. While this method could perform the reconfiguration internally, it
+ /// intentionally does not. This is because governance proposal move-scripts may need to invoke
+ /// additional methods after this one, so the responsibility of reconfiguration is left to the caller.
+ ///
+ /// Example usage:
+ /// ```
+ /// supra_framework::appchain_registry::reactivate_appchain(&supra_framework, chain_id);
+ /// supra_framework::supra_governance::reconfigure(&supra_framework);
+ /// ```
+ public fun reactivate_appchain(
+ supra_framework: &signer,
+ chain_id: u16,
+ ) acquires AppchainRegistry {
+ let appchain_registry = borrow_global_mut_appchain_registry(supra_framework);
+ assert_appchain_registered(&appchain_registry.appchains, &chain_id);
+
+ let appchain_info = simple_map::borrow_mut(&mut appchain_registry.appchains, &chain_id);
+ assert!(appchain_info.state == STATE_INACTIVE, error::invalid_state(EAPPCHAIN_ALREADY_ACTIVE));
+
+ appchain_info.state = STATE_ACTIVE;
+
+ event::emit(AppchainReactivated {
+ chain_id,
+ });
+ }
+
+ /// Updates metadata link of a registered appchain.
+ public fun update_appchain_metadata_link(
+ supra_framework: &signer,
+ chain_id: u16,
+ new_metadata_link: String,
+ ) acquires AppchainRegistry {
+ let appchain_registry = borrow_global_mut_appchain_registry(supra_framework);
+ assert_appchain_registered(&appchain_registry.appchains, &chain_id);
+
+ let appchain_info = simple_map::borrow_mut(&mut appchain_registry.appchains, &chain_id);
+ let old_metadata_link = appchain_info.metadata_link;
+ appchain_info.metadata_link = new_metadata_link;
+
+ event::emit(AppchainMetadataLinkUpdated {
+ chain_id,
+ old_metadata_link,
+ new_metadata_link,
+ });
+ }
+
+ /// Adds a reserved chain ID range.
+ public fun add_reserved_range(
+ supra_framework: &signer,
+ start: u16,
+ end: u16,
+ ) acquires AppchainRegistry {
+ let appchain_registry = borrow_global_mut_appchain_registry(supra_framework);
+ assert!(start <= end, error::invalid_argument(EINVALID_RANGE));
+
+ vector::push_back(&mut appchain_registry.reserved_ranges, ReservedRange { start, end });
+ }
+
+
+ /// Constructor to create an instance of the `ReservedRange`.
+ /// This will be utilized in move-script to initialize the appchain registry with reserved ranges.
+ public fun new_reserved_range(
+ start: u16,
+ end: u16,
+ ): ReservedRange {
+ assert!(start <= end, error::invalid_argument(EINVALID_RANGE));
+ ReservedRange { start, end }
+ }
+
+
+ #[view]
+ /// Get the state of a appchain.
+ public fun appchain_state(chain_id: u16): u8 acquires AppchainRegistry {
+ let appchain_registry = borrow_global_appchain_registry();
+ if (simple_map::contains_key(&appchain_registry.appchains, &chain_id)) {
+ return simple_map::borrow(&appchain_registry.appchains, &chain_id).state;
+ };
+
+ STATE_UNKNOWN
+ }
+
+ #[view]
+ /// Check if a appchain is active.
+ public fun is_appchain_active(chain_id: u16): bool acquires AppchainRegistry {
+ appchain_state(chain_id) == STATE_ACTIVE
+ }
+
+ #[view]
+ /// Get chain IDs of all appchain with `Active` state.
+ public fun active_appchains(): vector acquires AppchainRegistry {
+ let appchain_registry = borrow_global_appchain_registry();
+ let appchains_chain_id = simple_map::keys(&appchain_registry.appchains);
+ let appchains_info = simple_map::values(&appchain_registry.appchains);
+ let active_appchains_chain_id = vector::empty();
+ vector::zip_reverse(appchains_chain_id, appchains_info, |chain_id, appchain_info|{
+ // New helper variable with explicit type annotation is required due to Move's lambda type inference
+ // limitations. When I don't use this new variable with explicit type declaration, compiler throws error
+ // and ask to infer the type.
+ let info: AppchainInfo = appchain_info;
+ if (info.state == STATE_ACTIVE) {
+ vector::push_back(&mut active_appchains_chain_id, chain_id);
+ }
+ });
+ active_appchains_chain_id
+ }
+
+ #[view]
+ /// Get appchain metadata link.
+ public fun appchain_metadata_link(chain_id: u16): String acquires AppchainRegistry {
+ let appchain_registry = borrow_global_appchain_registry();
+ assert_appchain_registered(&appchain_registry.appchains, &chain_id);
+
+ simple_map::borrow(&appchain_registry.appchains, &chain_id).metadata_link
+ }
+
+ #[view]
+ /// Get appchain info.
+ public fun appchain_info(chain_id: u16): (u8, String) acquires AppchainRegistry {
+ let appchain_registry = borrow_global_appchain_registry();
+ assert_appchain_registered(&appchain_registry.appchains, &chain_id);
+
+ let appchain = simple_map::borrow(&appchain_registry.appchains, &chain_id);
+ (appchain.state, appchain.metadata_link)
+ }
+
+ #[view]
+ /// Check if a chain ID falls within reserved ranges.
+ public fun is_chain_id_reserved(chain_id: u16): bool acquires AppchainRegistry {
+ is_chain_id_reserved_internal(chain_id, &borrow_global_appchain_registry().reserved_ranges)
+ }
+
+ inline fun borrow_global_appchain_registry(): &AppchainRegistry acquires AppchainRegistry {
+ assert!(features::supra_appchains_enabled(), error::unavailable(ESUPRA_APPCHAINS_FEATURE_DISABLED));
+ assert!(exists(@supra_framework), error::not_found(EREGISTRY_NOT_INITIALIZED));
+ borrow_global(@supra_framework)
+ }
+
+ inline fun borrow_global_mut_appchain_registry(
+ supra_framework: &signer
+ ): &mut AppchainRegistry acquires AppchainRegistry {
+ assert!(features::supra_appchains_enabled(), error::unavailable(ESUPRA_APPCHAINS_FEATURE_DISABLED));
+ system_addresses::assert_supra_framework(supra_framework);
+ assert!(exists(@supra_framework), error::not_found(EREGISTRY_NOT_INITIALIZED));
+ borrow_global_mut(@supra_framework)
+ }
+
+ inline fun assert_appchain_registered(appchains: &SimpleMap, chain_id: &u16) {
+ assert!(
+ simple_map::contains_key(appchains, chain_id),
+ error::not_found(EAPPCHAIN_NOT_REGISTERED)
+ );
+ }
+
+
+ fun is_chain_id_reserved_internal(
+ chain_id: u16,
+ reserved_ranges: &vector
+ ): bool {
+ let i = 0;
+ let total_ranges = vector::length(reserved_ranges);
+ while (i < total_ranges) {
+ let range = vector::borrow(reserved_ranges, i);
+ if (chain_id >= range.start && chain_id <= range.end) {
+ return true
+ };
+ i = i + 1;
+ };
+
+ false
+ }
+}
diff --git a/aptos-move/framework/supra-framework/sources/appchain_registry.spec.move b/aptos-move/framework/supra-framework/sources/appchain_registry.spec.move
new file mode 100644
index 0000000000000..5a39491d44f68
--- /dev/null
+++ b/aptos-move/framework/supra-framework/sources/appchain_registry.spec.move
@@ -0,0 +1,5 @@
+spec supra_framework::appchain_registry {
+ spec module {
+ pragma verify = false;
+ }
+}
diff --git a/aptos-move/framework/supra-framework/sources/funnel_node_registry.move b/aptos-move/framework/supra-framework/sources/funnel_node_registry.move
new file mode 100644
index 0000000000000..2120a430fc21d
--- /dev/null
+++ b/aptos-move/framework/supra-framework/sources/funnel_node_registry.move
@@ -0,0 +1,96 @@
+/// Copyright (c) 2025 Supra
+///
+/// Funnel Node Registry Module
+///
+/// This module manages a list of registered funnel nodes' IP/DNS addresses.
+module supra_framework::funnel_node_registry {
+ use std::error;
+ use std::string::String;
+
+ use supra_framework::event;
+ use supra_framework::system_addresses;
+
+ friend supra_framework::genesis;
+ #[test_only]
+ friend supra_framework::funnel_node_registry_tests;
+
+
+ /// The `FunnelNodeRegistry` resource has not been initialized at @supra_framework.
+ const EREGISTRY_NOT_INITIALIZED: u64 = 1;
+
+
+ #[resource_group_member(group = supra_framework::object::ObjectGroup)]
+ /// Global funnel node registry resource.
+ struct FunnelNodeRegistry has key {
+ funnel_nodes: vector,
+ }
+
+ #[event]
+ struct FunnelNodesUpdated has store, drop {
+ old_funnel_nodes: vector,
+ new_funnel_nodes: vector,
+ }
+
+
+ /// Initializes the funnel node registry.
+ public(friend) fun initialize(supra_framework: &signer, funnel_nodes: vector) {
+ system_addresses::assert_supra_framework(supra_framework);
+
+ move_to(supra_framework, FunnelNodeRegistry {
+ funnel_nodes,
+ });
+ }
+
+ /// Updates the funnel nodes in the funnel node registry.
+ ///
+ /// This method replaces the existing list of funnel nodes with the provided list. Therefore, it is
+ /// strongly recommended that the new list contains valid URLs for all funnel nodes, and that the nodes
+ /// are ordered based on their reputation and trust level.
+ ///
+ /// Technically, deduplication of `new_funnel_nodes` is necessary. However, performing it consumes a
+ /// significant amount of execution gas. Since this method is expected to be invoked by appchain
+ /// governance - which is assumed to perform governance operations carefully - the `new_funnel_nodes`
+ /// list is **not** deduplicated internally. As a result, it is possible to pass a list containing duplicate
+ /// entries without triggering an error. Therefore, deduplication should be performed as part of
+ /// the validator node's sanity checks.
+ ///
+ /// This method requires the `supra_framework` as a signer. Therefore, externally (out of the supra-framework package),
+ /// it can only be invoked through a governance proposal move-script.
+ ///
+ /// It is strongly recommended to trigger an epoch change by calling `0x1::supra_governance::reconfigure`
+ /// after invoking this method. While this method could perform the reconfiguration internally, it
+ /// intentionally does not. This is because governance proposal move-scripts may need to invoke
+ /// additional methods after this one, so the responsibility of reconfiguration is left to the caller.
+ ///
+ /// Example usage:
+ /// ```
+ /// supra_framework::funnel_node_registry::update_funnel_nodes(&supra_framework, new_funnel_nodes);
+ /// supra_framework::supra_governance::reconfigure(&supra_framework);
+ /// ```
+ public fun update_funnel_nodes(
+ supra_framework: &signer,
+ new_funnel_nodes: vector
+ ) acquires FunnelNodeRegistry {
+ system_addresses::assert_supra_framework(supra_framework);
+ assert_registry_initialized();
+
+ let funnel_node_registry = borrow_global_mut(@supra_framework);
+ let old_funnel_nodes = funnel_node_registry.funnel_nodes;
+ funnel_node_registry.funnel_nodes = new_funnel_nodes;
+ event::emit(FunnelNodesUpdated {
+ old_funnel_nodes,
+ new_funnel_nodes
+ })
+ }
+
+ #[view]
+ /// Get funnel nodes list.
+ public fun funnel_nodes(): vector acquires FunnelNodeRegistry {
+ assert_registry_initialized();
+ borrow_global_mut(@supra_framework).funnel_nodes
+ }
+
+ inline fun assert_registry_initialized() {
+ assert!(exists(@supra_framework), error::not_found(EREGISTRY_NOT_INITIALIZED));
+ }
+}
diff --git a/aptos-move/framework/supra-framework/sources/genesis.move b/aptos-move/framework/supra-framework/sources/genesis.move
index a13f985ba3823..af6ac0b927bf5 100644
--- a/aptos-move/framework/supra-framework/sources/genesis.move
+++ b/aptos-move/framework/supra-framework/sources/genesis.move
@@ -36,6 +36,8 @@ module supra_framework::genesis {
use supra_framework::version;
use supra_framework::vesting;
use supra_framework::vesting_without_staking;
+ use supra_framework::appchain_registry::{Self, ReservedRange};
+ use supra_framework::funnel_node_registry;
#[test_only]
use aptos_std::ed25519;
@@ -225,8 +227,7 @@ module supra_framework::genesis {
_congestion_base_fee_in_quants_per_sec: u64,
_congestion_exponent: u8,
_task_capacity: u16,
- ) {
- }
+ ) {}
/// Genesis step 3: Initialize Supra Native Automation.
public fun initialize_supra_native_automation_v2(
@@ -261,6 +262,37 @@ module supra_framework::genesis {
)
}
+ /// Genesis step 4: Initialize Appchain Registry.
+ ///
+ /// This method allows to initialize the appchain registry either during the genesis initialization
+ /// or after it has been completed.
+ ///
+ /// Because it is publicly accessible, it can be invoked via a move-script. Since it requires
+ /// the `supra_framework` as the signer, the invocation must go through the governance process.
+ public fun initialize_appchain_registry(
+ supra_framework: &signer,
+ reserved_ranges: vector
+ ) {
+ appchain_registry::initialize(
+ supra_framework, reserved_ranges
+ )
+ }
+
+ /// Genesis step 5: Initialize Funnel Node Registry.
+ ///
+ /// This method allows to initialize the appchain registry either during the genesis initialization
+ /// or after it has been completed.
+ ///
+ /// Because it is publicly accessible, it can be invoked via a move-script. Since it requires
+ /// the `supra_framework` as the signer, the invocation must go through the governance process.
+ public fun initialize_funnel_node_registry(
+ supra_framework: &signer,
+ funnel_nodes: vector
+ ) {
+ funnel_node_registry::initialize(
+ supra_framework, funnel_nodes
+ )
+ }
/// Only called for testnets and e2e tests.
fun initialize_core_resources_and_supra_coin(
@@ -731,7 +763,7 @@ module supra_framework::genesis {
consensus_config: vector,
execution_config: vector,
supra_config: vector,
- evm_genesis_config: vector,
+ _evm_genesis_config: vector,
epoch_interval_microsecs: u64,
minimum_stake: u64,
maximum_stake: u64,
@@ -768,7 +800,6 @@ module supra_framework::genesis {
rewards_rate_denominator,
voting_power_increase_limit,
0,
-
);
features::change_feature_flags_for_verification(supra_framework, vector[1, 2, 11], vector[]);
initialize_supra_coin(supra_framework);
@@ -1159,14 +1190,14 @@ module supra_framework::genesis {
let cliff_period_in_seconds = 100;
let period_duration_in_seconds = 200;
let pool_config = VestingPoolsMap {
- admin_address: admin_address,
- vpool_locking_percentage: vpool_locking_percentage,
- vesting_numerators: vesting_numerators,
- vesting_denominator: vesting_denominator,
- withdrawal_address: withdrawal_address,
- shareholders: shareholders,
- cliff_period_in_seconds: cliff_period_in_seconds,
- period_duration_in_seconds: period_duration_in_seconds,
+ admin_address,
+ vpool_locking_percentage,
+ vesting_numerators,
+ vesting_denominator,
+ withdrawal_address,
+ shareholders,
+ cliff_period_in_seconds,
+ period_duration_in_seconds,
};
let vesting_pool_map = vector[pool_config];
create_vesting_without_staking_pools(vesting_pool_map);
diff --git a/aptos-move/framework/supra-framework/tests/appchain_registry_tests.move b/aptos-move/framework/supra-framework/tests/appchain_registry_tests.move
new file mode 100644
index 0000000000000..61e01bf7e28ac
--- /dev/null
+++ b/aptos-move/framework/supra-framework/tests/appchain_registry_tests.move
@@ -0,0 +1,325 @@
+#[test_only]
+module supra_framework::appchain_registry_tests {
+ use std::features;
+ use std::string;
+ use std::vector;
+
+ use supra_framework::account;
+ use supra_framework::appchain_registry;
+
+
+ /// Registered as a appchain, but decommissioned from the Supra-L1.
+ const STATE_INACTIVE: u8 = 0;
+ /// Registered as a appchain and actively working.
+ const STATE_ACTIVE: u8 = 1;
+ /// Never registered as a appchain.
+ const STATE_UNKNOWN: u8 = 2;
+
+ // Test constants
+ const TEST_CHAIN_ID_1: u16 = 10;
+ const TEST_CHAIN_ID_2: u16 = 20;
+ const TEST_CHAIN_ID_3: u16 = 30;
+ const RESERVED_CHAIN_ID: u16 = 5;
+
+
+ fun setup_test(): signer {
+ let supra_framework = account::create_account_for_test(@supra_framework);
+ enable_supra_appchain_feature(&supra_framework);
+ appchain_registry::initialize(&supra_framework, vector::empty());
+ supra_framework
+ }
+
+ fun enable_supra_appchain_feature(supra_framework: &signer) {
+ features::change_feature_flags_for_testing(
+ supra_framework,
+ vector[features::get_supra_appchains_feature()],
+ vector[]
+ );
+ }
+
+ fun create_metadata_link(suffix: vector): string::String {
+ let base = b"https://temp.com/temp/";
+ vector::append(&mut base, suffix);
+ string::utf8(base)
+ }
+
+ // Module Initialization Tests.
+
+ #[test]
+ fun test_initialize() {
+ let supra_framework = account::create_account_for_test(@supra_framework);
+ appchain_registry::initialize(
+ &supra_framework,
+ vector[
+ appchain_registry::new_reserved_range(0, 0),
+ appchain_registry::new_reserved_range(1, 10)
+ ]
+ );
+ // Although the Appchain registry can be initialized without the `SUPRA_APPCHAIN` feature enabled, but all other
+ // methods of `appchain_registry` module require that feature enabled.
+ enable_supra_appchain_feature(&supra_framework);
+ assert!(appchain_registry::appchain_state(TEST_CHAIN_ID_1) == STATE_UNKNOWN, 1);
+ assert!(appchain_registry::is_chain_id_reserved(6), 2)
+ }
+
+ #[test]
+ #[expected_failure(abort_code = 0x50003, location = supra_framework::system_addresses)]
+ fun test_initialize_with_non_supra_framework() {
+ let non_supra_framework = account::create_account_for_test(@0x123);
+ appchain_registry::initialize(&non_supra_framework, vector::empty());
+ }
+
+
+ // Register Appchain Tests.
+
+ #[test]
+ fun test_register_appchain() {
+ let supra_framework = setup_test();
+ let metadata = create_metadata_link(b"chain1");
+ appchain_registry::register_appchain(
+ &supra_framework,
+ TEST_CHAIN_ID_1,
+ metadata
+ );
+ assert!(appchain_registry::appchain_state(TEST_CHAIN_ID_1) == STATE_ACTIVE, 1);
+ assert!(appchain_registry::is_appchain_active(TEST_CHAIN_ID_1), 2);
+ assert!(appchain_registry::appchain_metadata_link(TEST_CHAIN_ID_1) == metadata, 3);
+
+ appchain_registry::register_appchain(
+ &supra_framework,
+ TEST_CHAIN_ID_2,
+ create_metadata_link(b"chain2")
+ );
+ appchain_registry::register_appchain(
+ &supra_framework,
+ TEST_CHAIN_ID_3,
+ create_metadata_link(b"chain3")
+ );
+ assert!(appchain_registry::is_appchain_active(TEST_CHAIN_ID_2), 4);
+ assert!(appchain_registry::is_appchain_active(TEST_CHAIN_ID_3), 5);
+ assert!(appchain_registry::active_appchains() == vector[30, 20, 10], 6)
+ }
+
+
+ #[test]
+ #[expected_failure(abort_code = 0xd0008, location = supra_framework::appchain_registry)]
+ fun test_register_appchain_without_feature_enable() {
+ let supra_framework = account::create_account_for_test(@supra_framework);
+ appchain_registry::initialize(&supra_framework, vector::empty());
+ appchain_registry::register_appchain(
+ &supra_framework,
+ TEST_CHAIN_ID_1,
+ create_metadata_link(b"chain1")
+ );
+ }
+
+ #[test]
+ #[expected_failure(abort_code = 0x60006, location = supra_framework::appchain_registry)]
+ fun test_register_appchain_without_initialization() {
+ let supra_framework = account::create_account_for_test(@supra_framework);
+ enable_supra_appchain_feature(&supra_framework);
+ appchain_registry::register_appchain(
+ &supra_framework,
+ TEST_CHAIN_ID_1,
+ create_metadata_link(b"chain1")
+ );
+ }
+
+ #[test]
+ #[expected_failure(abort_code = 0x50003, location = supra_framework::system_addresses)]
+ fun test_register_appchain_with_non_supra_framework_signer() {
+ let _ = setup_test();
+ let non_supra_framework = account::create_account_for_test(@0x123);
+ appchain_registry::register_appchain(
+ &non_supra_framework,
+ RESERVED_CHAIN_ID,
+ create_metadata_link(b"reserved")
+ );
+ }
+
+ #[test]
+ #[expected_failure(abort_code = 0x80001, location = supra_framework::appchain_registry)]
+ fun test_register_appchain_with_already_registered_appchain() {
+ let supra_framework = setup_test();
+ let metadata = create_metadata_link(b"chain1");
+ appchain_registry::register_appchain(
+ &supra_framework,
+ TEST_CHAIN_ID_1,
+ metadata
+ );
+ appchain_registry::register_appchain(
+ &supra_framework,
+ TEST_CHAIN_ID_1,
+ create_metadata_link(b"chain1_duplicate")
+ );
+ }
+
+ #[test]
+ #[expected_failure(abort_code = 0x10003, location = supra_framework::appchain_registry)]
+ fun test_register_appchain_with_reserved_chain_id() {
+ let supra_framework = setup_test();
+ appchain_registry::add_reserved_range(&supra_framework, 1, 10);
+
+ appchain_registry::register_appchain(
+ &supra_framework,
+ RESERVED_CHAIN_ID,
+ create_metadata_link(b"reserved")
+ );
+ }
+
+
+ // Deactivate Appchain Tests.
+
+ #[test]
+ fun test_deactivate_appchain_success() {
+ let supra_framework = setup_test();
+ appchain_registry::register_appchain(
+ &supra_framework,
+ TEST_CHAIN_ID_1,
+ create_metadata_link(b"chain1")
+ );
+ appchain_registry::deactivate_appchain(&supra_framework, TEST_CHAIN_ID_1);
+
+ assert!(appchain_registry::appchain_state(TEST_CHAIN_ID_1) == STATE_INACTIVE, 1);
+ assert!(!appchain_registry::is_appchain_active(TEST_CHAIN_ID_1), 2);
+ }
+
+ #[test]
+ #[expected_failure(abort_code = 0x60002, location = supra_framework::appchain_registry)]
+ fun test_deactivate_appchain_with_unregistered_appchain() {
+ let supra_framework = setup_test();
+ appchain_registry::deactivate_appchain(&supra_framework, TEST_CHAIN_ID_1);
+ }
+
+ #[test]
+ #[expected_failure(abort_code = 0x30004, location = supra_framework::appchain_registry)]
+ fun test_deactivate_appchain_with_already_deactivated_appchain() {
+ let supra_framework = setup_test();
+ appchain_registry::register_appchain(
+ &supra_framework,
+ TEST_CHAIN_ID_1,
+ create_metadata_link(b"chain1")
+ );
+ // Here, we are deactivating it first time.
+ appchain_registry::deactivate_appchain(&supra_framework, TEST_CHAIN_ID_1);
+ // Now, again we are trying to deactivate the appchain and this should cause failure.
+ appchain_registry::deactivate_appchain(&supra_framework, TEST_CHAIN_ID_1);
+ }
+
+
+ // Reactivate Appchain Tests.
+
+ #[test]
+ fun test_reactivate_appchain() {
+ let supra_framework = setup_test();
+ appchain_registry::register_appchain(
+ &supra_framework,
+ TEST_CHAIN_ID_1,
+ create_metadata_link(b"chain1")
+ );
+ appchain_registry::deactivate_appchain(&supra_framework, TEST_CHAIN_ID_1);
+ appchain_registry::reactivate_appchain(&supra_framework, TEST_CHAIN_ID_1);
+
+ assert!(appchain_registry::appchain_state(TEST_CHAIN_ID_1) == STATE_ACTIVE, 1);
+ assert!(appchain_registry::is_appchain_active(TEST_CHAIN_ID_1), 2);
+ }
+
+ #[test]
+ #[expected_failure(abort_code = 0x60002, location = supra_framework::appchain_registry)]
+ fun test_reactivate_appchain_with_unregistered_appchain() {
+ let supra_framework = setup_test();
+ appchain_registry::reactivate_appchain(&supra_framework, TEST_CHAIN_ID_1);
+ }
+
+ #[test]
+ #[expected_failure(abort_code = 0x30005, location = supra_framework::appchain_registry)]
+ fun test_reactivate_appchain_with_already_active_appchain() {
+ let supra_framework = setup_test();
+ appchain_registry::register_appchain(
+ &supra_framework,
+ TEST_CHAIN_ID_1,
+ create_metadata_link(b"chain1")
+ );
+ appchain_registry::reactivate_appchain(&supra_framework, TEST_CHAIN_ID_1);
+ }
+
+
+ // Update Appchain Metadata Link Tests.
+
+ #[test]
+ fun test_update_appchain_metadata_link() {
+ let supra_framework = setup_test();
+ let initial_metadata = create_metadata_link(b"chain1");
+ let new_metadata = create_metadata_link(b"chain1_updated");
+ appchain_registry::register_appchain(
+ &supra_framework,
+ TEST_CHAIN_ID_1,
+ initial_metadata
+ );
+ assert!(appchain_registry::appchain_metadata_link(TEST_CHAIN_ID_1) == initial_metadata, 1);
+
+ // Now, Updating the metadata link.
+ appchain_registry::update_appchain_metadata_link(
+ &supra_framework,
+ TEST_CHAIN_ID_1,
+ new_metadata
+ );
+ assert!(appchain_registry::appchain_metadata_link(TEST_CHAIN_ID_1) == new_metadata, 2);
+ }
+
+ #[test]
+ #[expected_failure(abort_code = 0x60002, location = supra_framework::appchain_registry)]
+ fun test_update_appchain_metadata_link_with_unregistered_appchain() {
+ let supra_framework = setup_test();
+ appchain_registry::update_appchain_metadata_link(
+ &supra_framework,
+ TEST_CHAIN_ID_1,
+ create_metadata_link(b"chain1")
+ );
+ }
+
+
+ // Add Reserved Ranges Tests.
+
+ #[test]
+ fun test_add_reserved_range() {
+ let supra_framework = setup_test();
+ appchain_registry::add_reserved_range(&supra_framework, 1, 10);
+ appchain_registry::add_reserved_range(&supra_framework, 200, 255);
+
+ // Verify reserved ranges
+ assert!(appchain_registry::is_chain_id_reserved(1), 1);
+ assert!(appchain_registry::is_chain_id_reserved(5), 2);
+ assert!(appchain_registry::is_chain_id_reserved(10), 3);
+ assert!(!appchain_registry::is_chain_id_reserved(50), 4);
+ assert!(appchain_registry::is_chain_id_reserved(220), 5);
+ assert!(!appchain_registry::is_chain_id_reserved(0), 6);
+
+ // Reserving single range, trying 0-0.
+ appchain_registry::add_reserved_range(&supra_framework, 0, 0);
+ assert!(appchain_registry::is_chain_id_reserved(0), 7);
+ }
+
+ #[test]
+ fun test_overlapping_reserved_ranges() {
+ let supra_framework = setup_test();
+
+ appchain_registry::add_reserved_range(&supra_framework, 10, 20);
+ appchain_registry::add_reserved_range(&supra_framework, 15, 25);
+ appchain_registry::add_reserved_range(&supra_framework, 20, 30);
+
+ // All overlapping IDs should be reserved
+ assert!(appchain_registry::is_chain_id_reserved(10), 1);
+ assert!(appchain_registry::is_chain_id_reserved(15), 2);
+ assert!(appchain_registry::is_chain_id_reserved(20), 3);
+ assert!(appchain_registry::is_chain_id_reserved(25), 4);
+ assert!(appchain_registry::is_chain_id_reserved(30), 5);
+ }
+
+ #[test]
+ #[expected_failure(abort_code = 0x10007, location = supra_framework::appchain_registry)]
+ fun test_add_reserved_range_with_invalid_range() {
+ let supra_framework = setup_test();
+ appchain_registry::add_reserved_range(&supra_framework, 20, 10);
+ }
+}
diff --git a/aptos-move/framework/supra-framework/tests/funnel_node_registry_tests.move b/aptos-move/framework/supra-framework/tests/funnel_node_registry_tests.move
new file mode 100644
index 0000000000000..94d48adc704af
--- /dev/null
+++ b/aptos-move/framework/supra-framework/tests/funnel_node_registry_tests.move
@@ -0,0 +1,88 @@
+#[test_only]
+module supra_framework::funnel_node_registry_tests {
+ use std::string::{Self, String};
+ use std::vector;
+
+ use supra_framework::account;
+ use supra_framework::funnel_node_registry;
+
+
+ // Test helper to create a vector of funnel node Socket-Address
+ fun create_test_funnel_nodes(): vector {
+ let nodes = vector::empty();
+ vector::push_back(&mut nodes, string::utf8(b"1.1.1.1:26000"));
+ vector::push_back(&mut nodes, string::utf8(b"2.1.1.1:26000"));
+ vector::push_back(&mut nodes, string::utf8(b"3.1.1.1:26000"));
+ nodes
+ }
+
+
+ // Test helper to create updated funnel nodes
+ fun create_updated_funnel_nodes(): vector {
+ let nodes = vector::empty();
+ vector::push_back(&mut nodes, string::utf8(b"4.1.1.1:26000"));
+ vector::push_back(&mut nodes, string::utf8(b"5.1.1.1:26000"));
+ nodes
+ }
+
+
+ // Module Initialization Tests.
+
+ #[test]
+ fun test_initialize() {
+ let supra_framework = account::create_account_for_test(@supra_framework);
+ let funnel_nodes = create_test_funnel_nodes();
+ funnel_node_registry::initialize(&supra_framework, funnel_nodes);
+
+ let stored_nodes = funnel_node_registry::funnel_nodes();
+ assert!(vector::length(&stored_nodes) == 3, 1);
+ assert!(vector::borrow(&stored_nodes, 0) == vector::borrow(&funnel_nodes, 0), 2);
+ assert!(vector::borrow(&stored_nodes, 1) == vector::borrow(&funnel_nodes, 1), 3);
+ assert!(vector::borrow(&stored_nodes, 2) == vector::borrow(&funnel_nodes, 2), 4);
+ }
+
+ #[test]
+ #[expected_failure(abort_code = 0x50003, location = supra_framework::system_addresses)]
+ fun test_initialize_fails_non_framework() {
+ let non_supra_framework = account::create_account_for_test(@123);
+ let funnel_nodes = create_test_funnel_nodes();
+ funnel_node_registry::initialize(&non_supra_framework, funnel_nodes);
+ }
+
+
+ // Update Funnel Nodes Tests.
+
+ #[test]
+ fun test_update_funnel_nodes() {
+ let supra_framework = account::create_account_for_test(@supra_framework);
+ let initial_funnel_nodes = create_test_funnel_nodes();
+ funnel_node_registry::initialize(&supra_framework, initial_funnel_nodes);
+
+ let new_funnel_nodes = create_updated_funnel_nodes();
+ funnel_node_registry::update_funnel_nodes(&supra_framework, new_funnel_nodes);
+ let stored_nodes = funnel_node_registry::funnel_nodes();
+ assert!(vector::length(&stored_nodes) == 2, 1);
+ assert!(vector::borrow(&stored_nodes, 0) == vector::borrow(&new_funnel_nodes, 0), 2);
+ assert!(vector::borrow(&stored_nodes, 1) == vector::borrow(&new_funnel_nodes, 1), 3);
+ }
+
+ #[test]
+ #[expected_failure(abort_code = 0x50003, location = supra_framework::system_addresses)]
+ fun test_update_fails_non_framework() {
+ let supra_framework = account::create_account_for_test(@supra_framework);
+ let initial_funnel_nodes = create_test_funnel_nodes();
+ funnel_node_registry::initialize(&supra_framework, initial_funnel_nodes);
+
+ let non_supra_framework = account::create_account_for_test(@123);
+ let new_funnel_nodes = create_updated_funnel_nodes();
+ funnel_node_registry::update_funnel_nodes(&non_supra_framework, new_funnel_nodes);
+ }
+
+ #[test]
+ #[expected_failure(abort_code = 0x60001, location = supra_framework::funnel_node_registry)]
+ fun test_update_fails_not_initialized() {
+ let supra_framework = account::create_account_for_test(@supra_framework);
+ let new_funnel_nodes = create_updated_funnel_nodes();
+ funnel_node_registry::update_funnel_nodes(&supra_framework, new_funnel_nodes);
+ }
+}
\ No newline at end of file
diff --git a/aptos-move/vm-genesis/src/lib.rs b/aptos-move/vm-genesis/src/lib.rs
index a8aeddc99eee3..42dea35ae55b8 100644
--- a/aptos-move/vm-genesis/src/lib.rs
+++ b/aptos-move/vm-genesis/src/lib.rs
@@ -32,9 +32,10 @@ use aptos_types::{
move_utils::as_move_value::AsMoveValue,
on_chain_config::{
randomness_api_v0_config::{AllowCustomMaxGasFlag, RequiredGasDeposit},
- AutomationRegistryConfig, FeatureFlag, Features, GasScheduleV2, OnChainConsensusConfig,
- OnChainEvmGenesisConfig, OnChainExecutionConfig, OnChainJWKConsensusConfig,
- OnChainRandomnessConfig, RandomnessConfigMoveStruct, APTOS_MAX_KNOWN_VERSION,
+ AutomationRegistryConfig, FeatureFlag, Features, FunnelNodeRegistryConfig, GasScheduleV2,
+ AppchainRegistryConfig, OnChainConsensusConfig, OnChainEvmGenesisConfig,
+ OnChainExecutionConfig, OnChainJWKConsensusConfig, OnChainRandomnessConfig,
+ RandomnessConfigMoveStruct, APTOS_MAX_KNOWN_VERSION,
},
transaction::{authenticator::AuthenticationKey, ChangeSet, Transaction, WriteSetPayload},
write_set::TransactionWrite,
@@ -108,6 +109,8 @@ pub struct GenesisConfiguration {
pub randomness_config_override: Option,
pub jwk_consensus_config_override: Option,
pub automation_registry_config: Option,
+ pub appchain_registry_config: Option,
+ pub funnel_node_registry_config: Option,
}
pub static GENESIS_KEYPAIR: Lazy<(Ed25519PrivateKey, Ed25519PublicKey)> = Lazy::new(|| {
@@ -174,6 +177,8 @@ pub fn encode_supra_mainnet_genesis_transaction(
);
initialize_supra_coin(&mut session);
initialize_supra_native_automation(&mut session, genesis_config);
+ initialize_appchain_registry(&mut session, genesis_config);
+ initialize_funnel_node_registry(&mut session, genesis_config);
initialize_on_chain_governance(&mut session, genesis_config);
create_accounts(&mut session, accounts);
@@ -233,6 +238,7 @@ pub fn encode_supra_mainnet_genesis_transaction(
Transaction::GenesisTransaction(WriteSetPayload::Direct(change_set))
}
+#[allow(clippy::too_many_arguments)]
pub fn encode_genesis_transaction_for_testnet(
aptos_root_key: Ed25519PublicKey,
validators: &[Validator],
@@ -273,6 +279,7 @@ pub fn encode_genesis_transaction_for_testnet(
))
}
+#[allow(clippy::too_many_arguments)]
pub fn encode_genesis_change_set_for_testnet(
core_resources_key: &Ed25519PublicKey,
accounts: &BTreeSet,
@@ -326,6 +333,8 @@ pub fn encode_genesis_change_set_for_testnet(
initialize_supra_coin(&mut session);
}
initialize_supra_native_automation(&mut session, genesis_config);
+ initialize_appchain_registry(&mut session, genesis_config);
+ initialize_funnel_node_registry(&mut session, genesis_config);
initialize_config_buffer(&mut session);
initialize_dkg(&mut session);
initialize_reconfiguration_state(&mut session);
@@ -584,6 +593,35 @@ fn initialize_supra_native_automation(
);
}
+fn initialize_appchain_registry(session: &mut SessionExt, genesis_config: &GenesisConfiguration) {
+ let Some(config) = &genesis_config.appchain_registry_config else {
+ return;
+ };
+ exec_function(
+ session,
+ GENESIS_MODULE_NAME,
+ "initialize_appchain_registry",
+ vec![],
+ config.serialize_into_move_values(),
+ );
+}
+
+fn initialize_funnel_node_registry(
+ session: &mut SessionExt,
+ genesis_config: &GenesisConfiguration,
+) {
+ let Some(config) = &genesis_config.funnel_node_registry_config else {
+ return;
+ };
+ exec_function(
+ session,
+ GENESIS_MODULE_NAME,
+ "initialize_funnel_node_registry",
+ vec![],
+ config.serialize_into_move_values(),
+ );
+}
+
fn initialize_evm_genesis_config(
session: &mut SessionExt,
evm_genesis_config: &OnChainEvmGenesisConfig,
@@ -1242,6 +1280,8 @@ pub fn generate_test_genesis(
randomness_config_override: None,
jwk_consensus_config_override: None,
automation_registry_config: Some(AutomationRegistryConfig::default()),
+ appchain_registry_config: Some(AppchainRegistryConfig::default()),
+ funnel_node_registry_config: Some(FunnelNodeRegistryConfig::default()),
},
&OnChainConsensusConfig::default_for_genesis(),
&OnChainExecutionConfig::default_for_genesis(),
@@ -1310,6 +1350,8 @@ fn mainnet_genesis_config() -> GenesisConfiguration {
randomness_config_override: None,
jwk_consensus_config_override: None,
automation_registry_config: Some(AutomationRegistryConfig::default()),
+ appchain_registry_config: Some(AppchainRegistryConfig::default()),
+ funnel_node_registry_config: Some(FunnelNodeRegistryConfig::default()),
}
}
diff --git a/crates/aptos-genesis/src/builder.rs b/crates/aptos-genesis/src/builder.rs
index bdb84a172d61a..bccb1f44b1fcb 100644
--- a/crates/aptos-genesis/src/builder.rs
+++ b/crates/aptos-genesis/src/builder.rs
@@ -24,6 +24,9 @@ use aptos_crypto::{
use aptos_framework::ReleaseBundle;
use aptos_keygen::KeyGen;
use aptos_logger::prelude::*;
+use aptos_types::on_chain_config::{
+ AutomationRegistryConfig, FunnelNodeRegistryConfig, AppchainRegistryConfig,
+};
use aptos_types::{
account_address::AccountAddress,
chain_id::ChainId,
@@ -45,7 +48,6 @@ use std::{
path::{Path, PathBuf},
sync::Arc,
};
-use aptos_types::on_chain_config::AutomationRegistryConfig;
const VALIDATOR_IDENTITY: &str = "validator-identity.yaml";
const VFN_IDENTITY: &str = "vfn-identity.yaml";
@@ -438,6 +440,8 @@ pub struct GenesisConfiguration {
pub randomness_config_override: Option,
pub jwk_consensus_config_override: Option,
pub automation_registry_config: Option,
+ pub appchain_registry_config: Option,
+ pub funnel_node_registry_config: Option,
}
pub type InitConfigFn = Arc;
@@ -662,6 +666,8 @@ impl Builder {
randomness_config_override: None,
jwk_consensus_config_override: None,
automation_registry_config: Some(AutomationRegistryConfig::default()),
+ appchain_registry_config: Some(AppchainRegistryConfig::default()),
+ funnel_node_registry_config: Some(FunnelNodeRegistryConfig::default()),
};
if let Some(init_genesis_config) = &self.init_genesis_config {
(init_genesis_config)(&mut genesis_config);
diff --git a/crates/aptos-genesis/src/config.rs b/crates/aptos-genesis/src/config.rs
index 5449c46382afe..e67fdc9ac3606 100644
--- a/crates/aptos-genesis/src/config.rs
+++ b/crates/aptos-genesis/src/config.rs
@@ -3,6 +3,9 @@
use aptos_config::config::HANDSHAKE_VERSION;
use aptos_crypto::{ed25519, ed25519::Ed25519PublicKey, x25519};
+use aptos_types::on_chain_config::{
+ AutomationRegistryConfig, FunnelNodeRegistryConfig, AppchainRegistryConfig,
+};
use aptos_types::{
account_address::{AccountAddress, AccountAddressWithChecks},
chain_id::ChainId,
@@ -21,7 +24,6 @@ use std::{
path::Path,
str::FromStr,
};
-use aptos_types::on_chain_config::AutomationRegistryConfig;
/// Template for setting up Github for Genesis
///
@@ -83,6 +85,8 @@ pub struct Layout {
pub jwk_consensus_config_override: Option,
/// An optional supra native automation config.
pub automation_registry_config: Option,
+ pub appchain_registry_config: Option,
+ pub funnel_node_registry_config: Option,
}
impl Layout {
@@ -126,6 +130,8 @@ impl Default for Layout {
on_chain_execution_config: OnChainExecutionConfig::default_for_genesis(),
jwk_consensus_config_override: None,
automation_registry_config: Some(AutomationRegistryConfig::default()),
+ appchain_registry_config: Some(AppchainRegistryConfig::default()),
+ funnel_node_registry_config: Some(FunnelNodeRegistryConfig::default()),
}
}
}
diff --git a/crates/aptos-genesis/src/lib.rs b/crates/aptos-genesis/src/lib.rs
index 1c5b9fd858da2..c4d38bf386593 100644
--- a/crates/aptos-genesis/src/lib.rs
+++ b/crates/aptos-genesis/src/lib.rs
@@ -21,11 +21,15 @@ use aptos_db::AptosDB;
use aptos_framework::ReleaseBundle;
use aptos_storage_interface::DbReaderWriter;
use aptos_temppath::TempPath;
+use aptos_types::on_chain_config::{
+ AutomationRegistryConfig, FunnelNodeRegistryConfig, AppchainRegistryConfig,
+};
use aptos_types::{
account_address::AccountAddress,
chain_id::ChainId,
on_chain_config::{
- Features, GasScheduleV2, OnChainConsensusConfig, OnChainExecutionConfig, OnChainJWKConsensusConfig, OnChainRandomnessConfig
+ Features, GasScheduleV2, OnChainConsensusConfig, OnChainExecutionConfig,
+ OnChainJWKConsensusConfig, OnChainRandomnessConfig,
},
transaction::Transaction,
waypoint::Waypoint,
@@ -33,7 +37,6 @@ use aptos_types::{
use aptos_vm::AptosVM;
use aptos_vm_genesis::Validator;
use std::convert::TryInto;
-use aptos_types::on_chain_config::AutomationRegistryConfig;
/// Holder object for all pieces needed to generate a genesis transaction
#[derive(Clone)]
@@ -82,6 +85,8 @@ pub struct GenesisInfo {
pub randomness_config_override: Option,
pub jwk_consensus_config_override: Option,
pub automation_registry_config: Option,
+ pub appchain_registry_config: Option,
+ pub funnel_node_registry_config: Option,
}
impl GenesisInfo {
@@ -124,6 +129,8 @@ impl GenesisInfo {
randomness_config_override: genesis_config.randomness_config_override.clone(),
jwk_consensus_config_override: genesis_config.jwk_consensus_config_override.clone(),
automation_registry_config: genesis_config.automation_registry_config.clone(),
+ appchain_registry_config: genesis_config.appchain_registry_config.clone(),
+ funnel_node_registry_config: genesis_config.funnel_node_registry_config.clone(),
})
}
@@ -152,7 +159,7 @@ impl GenesisInfo {
epoch_duration_secs: self.epoch_duration_secs,
is_test: true,
min_stake: self.min_stake,
- min_voting_threshold: self.min_voting_threshold as u64,
+ min_voting_threshold: self.min_voting_threshold,
max_stake: self.max_stake,
recurring_lockup_duration_secs: self.recurring_lockup_duration_secs,
required_proposer_stake: self.required_proposer_stake,
@@ -167,6 +174,8 @@ impl GenesisInfo {
jwk_consensus_config_override: self.jwk_consensus_config_override.clone(),
genesis_timestamp_in_microseconds: self.genesis_timestamp_in_microseconds,
automation_registry_config: self.automation_registry_config.clone(),
+ appchain_registry_config: self.appchain_registry_config.clone(),
+ funnel_node_registry_config: self.funnel_node_registry_config.clone(),
},
&self.consensus_config,
&self.execution_config,
diff --git a/crates/aptos-genesis/src/mainnet.rs b/crates/aptos-genesis/src/mainnet.rs
index 1478112f58cf9..90460344cdeca 100644
--- a/crates/aptos-genesis/src/mainnet.rs
+++ b/crates/aptos-genesis/src/mainnet.rs
@@ -10,6 +10,9 @@ use aptos_db::AptosDB;
use aptos_framework::ReleaseBundle;
use aptos_storage_interface::DbReaderWriter;
use aptos_temppath::TempPath;
+use aptos_types::on_chain_config::{
+ AutomationRegistryConfig, FunnelNodeRegistryConfig, AppchainRegistryConfig,
+};
use aptos_types::{
account_address::AccountAddress,
chain_id::ChainId,
@@ -17,7 +20,6 @@ use aptos_types::{
transaction::Transaction,
waypoint::Waypoint,
};
-use aptos_types::on_chain_config::AutomationRegistryConfig;
use aptos_vm::AptosVM;
use aptos_vm_genesis::{AccountBalance, EmployeePool, ValidatorWithCommissionRate};
@@ -72,6 +74,8 @@ pub struct MainnetGenesisInfo {
jwk_consensus_config_override: Option,
/// Supra native automation feature configuration parameters
automation_registry_config: Option,
+ appchain_registry_config: Option,
+ funnel_node_registry_config: Option,
}
impl MainnetGenesisInfo {
@@ -117,6 +121,8 @@ impl MainnetGenesisInfo {
randomness_config_override: genesis_config.randomness_config_override.clone(),
jwk_consensus_config_override: genesis_config.jwk_consensus_config_override.clone(),
automation_registry_config: genesis_config.automation_registry_config.clone(),
+ appchain_registry_config: genesis_config.appchain_registry_config.clone(),
+ funnel_node_registry_config: genesis_config.funnel_node_registry_config.clone(),
})
}
@@ -146,7 +152,7 @@ impl MainnetGenesisInfo {
is_test: false,
epoch_duration_secs: self.epoch_duration_secs,
min_stake: self.min_stake,
- min_voting_threshold: self.min_voting_threshold as u64,
+ min_voting_threshold: self.min_voting_threshold,
max_stake: self.max_stake,
recurring_lockup_duration_secs: self.recurring_lockup_duration_secs,
required_proposer_stake: self.required_proposer_stake,
@@ -161,6 +167,8 @@ impl MainnetGenesisInfo {
randomness_config_override: self.randomness_config_override.clone(),
jwk_consensus_config_override: self.jwk_consensus_config_override.clone(),
automation_registry_config: self.automation_registry_config.clone(),
+ appchain_registry_config: self.appchain_registry_config.clone(),
+ funnel_node_registry_config: self.funnel_node_registry_config.clone(),
},
b"test".to_vec(),
)
diff --git a/crates/aptos/src/genesis/mod.rs b/crates/aptos/src/genesis/mod.rs
index f893ca4b88fb4..679c72acc5739 100644
--- a/crates/aptos/src/genesis/mod.rs
+++ b/crates/aptos/src/genesis/mod.rs
@@ -260,6 +260,8 @@ pub fn fetch_mainnet_genesis_info(git_options: GitOptions) -> CliTypedResult CliTypedResult=14"
}
},
"node_modules/@ethereumjs/tx": {
- "version": "3.5.1",
- "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.1.tgz",
- "integrity": "sha512-xzDrTiu4sqZXUcaBxJ4n4W5FrppwxLxZB4ZDGVLtxSQR4lVuOnFR6RcUHdg1mpUhAPVrmnzLJpxaeXnPxIyhWA==",
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz",
+ "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==",
+ "dev": true,
+ "license": "MPL-2.0",
+ "dependencies": {
+ "@ethereumjs/common": "^2.6.4",
+ "ethereumjs-util": "^7.1.5"
+ }
+ },
+ "node_modules/@ethereumjs/util": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz",
+ "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==",
+ "dev": true,
+ "license": "MPL-2.0",
+ "dependencies": {
+ "@ethereumjs/rlp": "^4.0.1",
+ "ethereum-cryptography": "^2.0.0",
+ "micro-ftch": "^0.3.1"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@ethereumjs/util/node_modules/@noble/hashes": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz",
+ "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@ethereumjs/util/node_modules/@scure/base": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz",
+ "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@ethereumjs/util/node_modules/@scure/bip32": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz",
+ "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@noble/curves": "~1.4.0",
+ "@noble/hashes": "~1.4.0",
+ "@scure/base": "~1.1.6"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@ethereumjs/util/node_modules/@scure/bip39": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz",
+ "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@noble/hashes": "~1.4.0",
+ "@scure/base": "~1.1.6"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz",
+ "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@ethereumjs/common": "^2.6.3",
- "ethereumjs-util": "^7.1.4"
+ "@noble/curves": "1.4.2",
+ "@noble/hashes": "1.4.0",
+ "@scure/bip32": "1.4.0",
+ "@scure/bip39": "1.3.0"
}
},
"node_modules/@ethersproject/abi": {
@@ -1116,6 +1228,32 @@
"rlp": "^2.2.3"
}
},
+ "node_modules/@noble/curves": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz",
+ "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@noble/hashes": "1.4.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@noble/curves/node_modules/@noble/hashes": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz",
+ "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
"node_modules/@noble/hashes": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.0.0.tgz",
@@ -4304,14 +4442,28 @@
}
},
"node_modules/@types/bn.js": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz",
- "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.2.0.tgz",
+ "integrity": "sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/node": "*"
}
},
+ "node_modules/@types/cacheable-request": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz",
+ "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/http-cache-semantics": "*",
+ "@types/keyv": "^3.1.4",
+ "@types/node": "*",
+ "@types/responselike": "^1.0.0"
+ }
+ },
"node_modules/@types/chai": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.0.tgz",
@@ -4336,6 +4488,23 @@
"@types/node": "*"
}
},
+ "node_modules/@types/http-cache-semantics": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz",
+ "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/keyv": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz",
+ "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
"node_modules/@types/lru-cache": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz",
@@ -4351,12 +4520,6 @@
"@types/node": "*"
}
},
- "node_modules/@types/mocha": {
- "version": "9.1.1",
- "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz",
- "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==",
- "dev": true
- },
"node_modules/@types/node": {
"version": "17.0.23",
"resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.23.tgz",
@@ -4403,6 +4566,16 @@
"@types/node": "*"
}
},
+ "node_modules/@types/responselike": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz",
+ "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
"node_modules/@types/secp256k1": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz",
@@ -4471,6 +4644,13 @@
"node": ">=6.5"
}
},
+ "node_modules/abortcontroller-polyfill": {
+ "version": "1.7.8",
+ "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.8.tgz",
+ "integrity": "sha512-9f1iZ2uWh92VcrU9Y8x+LdM4DLj75VE0MJB8zuF1iUnroEptStw+DQ8EQPMUdfe5k+PkB1uUfDQfWbhstH8LrQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/abstract-level": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz",
@@ -5327,6 +5507,16 @@
"node": ">= 0.8"
}
},
+ "node_modules/cacheable-lookup": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz",
+ "integrity": "sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.6.0"
+ }
+ },
"node_modules/cacheable-request": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
@@ -6016,6 +6206,16 @@
"sha.js": "^2.4.8"
}
},
+ "node_modules/cross-fetch": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz",
+ "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "node-fetch": "^2.7.0"
+ }
+ },
"node_modules/cross-spawn": {
"version": "6.0.5",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
@@ -6537,6 +6737,13 @@
"es6-symbol": "^3.1.1"
}
},
+ "node_modules/es6-promise": {
+ "version": "4.2.8",
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
+ "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/es6-symbol": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
@@ -7357,10 +7564,11 @@
}
},
"node_modules/ethereumjs-util": {
- "version": "7.1.4",
- "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.4.tgz",
- "integrity": "sha512-p6KmuPCX4mZIqsQzXfmSx9Y0l2hqf+VkAiwSisW3UKUFdk8ZkAt+AYaor83z2nSi6CU2zSsXMlD80hAbNEGM0A==",
+ "version": "7.1.5",
+ "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz",
+ "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==",
"dev": true,
+ "license": "MPL-2.0",
"dependencies": {
"@types/bn.js": "^5.1.0",
"bn.js": "^5.1.2",
@@ -7829,6 +8037,13 @@
"node": ">= 6"
}
},
+ "node_modules/form-data-encoder": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz",
+ "integrity": "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/forwarded": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
@@ -18320,18 +18535,8 @@
}
},
"node_modules/hardhat-move": {
- "version": "0.0.1",
- "resolved": "file:../hardhat-move",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/mocha": "^9.1.0",
- "neverthrow": "^4.3.1",
- "typescript": "^4.6.3"
- },
- "peerDependencies": {
- "hardhat": "^2.0.0"
- }
+ "resolved": "../hardhat-move",
+ "link": true
},
"node_modules/hardhat/node_modules/@noble/hashes": {
"version": "1.2.0",
@@ -18736,6 +18941,20 @@
"npm": ">=1.3.7"
}
},
+ "node_modules/http2-wrapper": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz",
+ "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "quick-lru": "^5.1.1",
+ "resolve-alpn": "^1.2.0"
+ },
+ "engines": {
+ "node": ">=10.19.0"
+ }
+ },
"node_modules/https-proxy-agent": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
@@ -19828,6 +20047,13 @@
"node": ">= 0.6"
}
},
+ "node_modules/micro-ftch": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz",
+ "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/micromatch": {
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
@@ -20290,12 +20516,6 @@
"node": ">= 0.6"
}
},
- "node_modules/neverthrow": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/neverthrow/-/neverthrow-4.4.2.tgz",
- "integrity": "sha512-QVY0ylzBF71pUdLshRrqtweMgqKnE3R37/T82Z5bhO/z8P9z96PC/5pEl2FmiZSy0p+3lsjKerh6jmTWM5fv2g==",
- "dev": true
- },
"node_modules/next-tick": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
@@ -20343,10 +20563,11 @@
}
},
"node_modules/node-fetch": {
- "version": "2.6.7",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
- "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
+ "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"whatwg-url": "^5.0.0"
},
@@ -21144,6 +21365,19 @@
}
]
},
+ "node_modules/quick-lru": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
+ "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/randombytes": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
@@ -21429,6 +21663,13 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/resolve-alpn": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz",
+ "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/resolve-from": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
@@ -22668,6 +22909,7 @@
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
"integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
"dev": true,
+ "peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -22826,16 +23068,16 @@
"dev": true
},
"node_modules/util": {
- "version": "0.12.4",
- "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz",
- "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==",
+ "version": "0.12.5",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
+ "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"inherits": "^2.0.3",
"is-arguments": "^1.0.4",
"is-generator-function": "^1.0.7",
"is-typed-array": "^1.1.3",
- "safe-buffer": "^5.1.2",
"which-typed-array": "^1.1.2"
}
},
@@ -22903,356 +23145,308 @@
}
},
"node_modules/web3": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3/-/web3-1.7.1.tgz",
- "integrity": "sha512-RKVdyZ5FuVEykj62C1o2tc0teJciSOh61jpVB9yb344dBHO3ZV4XPPP24s/PPqIMXmVFN00g2GD9M/v1SoHO/A==",
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3/-/web3-1.10.4.tgz",
+ "integrity": "sha512-kgJvQZjkmjOEKimx/tJQsqWfRDPTTcBfYPa9XletxuHLpHcXdx67w8EFn5AW3eVxCutE9dTVHgGa9VYe8vgsEA==",
"dev": true,
"hasInstallScript": true,
+ "license": "LGPL-3.0",
"dependencies": {
- "web3-bzz": "1.7.1",
- "web3-core": "1.7.1",
- "web3-eth": "1.7.1",
- "web3-eth-personal": "1.7.1",
- "web3-net": "1.7.1",
- "web3-shh": "1.7.1",
- "web3-utils": "1.7.1"
+ "web3-bzz": "1.10.4",
+ "web3-core": "1.10.4",
+ "web3-eth": "1.10.4",
+ "web3-eth-personal": "1.10.4",
+ "web3-net": "1.10.4",
+ "web3-shh": "1.10.4",
+ "web3-utils": "1.10.4"
},
"engines": {
"node": ">=8.0.0"
}
},
"node_modules/web3-bzz": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.7.1.tgz",
- "integrity": "sha512-sVeUSINx4a4pfdnT+3ahdRdpDPvZDf4ZT/eBF5XtqGWq1mhGTl8XaQAk15zafKVm6Onq28vN8abgB/l+TrG8kA==",
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.10.4.tgz",
+ "integrity": "sha512-ZZ/X4sJ0Uh2teU9lAGNS8EjveEppoHNQiKlOXAjedsrdWuaMErBPdLQjXfcrYvN6WM6Su9PMsAxf3FXXZ+HwQw==",
"dev": true,
"hasInstallScript": true,
+ "license": "LGPL-3.0",
"dependencies": {
"@types/node": "^12.12.6",
- "got": "9.6.0",
+ "got": "12.1.0",
"swarm-js": "^0.1.40"
},
"engines": {
"node": ">=8.0.0"
}
},
- "node_modules/web3-bzz/node_modules/@types/node": {
- "version": "12.20.47",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.47.tgz",
- "integrity": "sha512-BzcaRsnFuznzOItW1WpQrDHM7plAa7GIDMZ6b5pnMbkqEtM/6WCOhvZar39oeMQP79gwvFUWjjptE7/KGcNqFg==",
- "dev": true
- },
- "node_modules/web3-core": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.7.1.tgz",
- "integrity": "sha512-HOyDPj+4cNyeNPwgSeUkhtS0F+Pxc2obcm4oRYPW5ku6jnTO34pjaij0us+zoY3QEusR8FfAKVK1kFPZnS7Dzw==",
+ "node_modules/web3-bzz/node_modules/@sindresorhus/is": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz",
+ "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==",
"dev": true,
- "dependencies": {
- "@types/bn.js": "^4.11.5",
- "@types/node": "^12.12.6",
- "bignumber.js": "^9.0.0",
- "web3-core-helpers": "1.7.1",
- "web3-core-method": "1.7.1",
- "web3-core-requestmanager": "1.7.1",
- "web3-utils": "1.7.1"
- },
+ "license": "MIT",
"engines": {
- "node": ">=8.0.0"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/is?sponsor=1"
}
},
- "node_modules/web3-core-helpers": {
- "version": "1.5.3",
- "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.5.3.tgz",
- "integrity": "sha512-Ip1IjB3S8vN7Kf1PPjK41U5gskmMk6IJQlxIVuS8/1U7n/o0jC8krqtpRwiMfAgYyw3TXwBFtxSRTvJtnLyXZw==",
+ "node_modules/web3-bzz/node_modules/@szmarczak/http-timer": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz",
+ "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "web3-eth-iban": "1.5.3",
- "web3-utils": "1.5.3"
+ "defer-to-connect": "^2.0.1"
},
"engines": {
- "node": ">=8.0.0"
+ "node": ">=14.16"
}
},
- "node_modules/web3-core-helpers/node_modules/eth-lib": {
- "version": "0.2.8",
- "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz",
- "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==",
+ "node_modules/web3-bzz/node_modules/@types/node": {
+ "version": "12.20.55",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz",
+ "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==",
"dev": true,
- "dependencies": {
- "bn.js": "^4.11.6",
- "elliptic": "^6.4.0",
- "xhr-request-promise": "^0.1.2"
- }
+ "license": "MIT"
},
- "node_modules/web3-core-helpers/node_modules/web3-utils": {
- "version": "1.5.3",
- "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.5.3.tgz",
- "integrity": "sha512-56nRgA+Ad9SEyCv39g36rTcr5fpsd4L9LgV3FK0aB66nAMazLAA6Qz4lH5XrUKPDyBIPGJIR+kJsyRtwcu2q1Q==",
+ "node_modules/web3-bzz/node_modules/cacheable-request": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz",
+ "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "bn.js": "^4.11.9",
- "eth-lib": "0.2.8",
- "ethereum-bloom-filters": "^1.0.6",
- "ethjs-unit": "0.1.6",
- "number-to-bn": "1.7.0",
- "randombytes": "^2.1.0",
- "utf8": "3.0.0"
+ "clone-response": "^1.0.2",
+ "get-stream": "^5.1.0",
+ "http-cache-semantics": "^4.0.0",
+ "keyv": "^4.0.0",
+ "lowercase-keys": "^2.0.0",
+ "normalize-url": "^6.0.1",
+ "responselike": "^2.0.0"
},
"engines": {
- "node": ">=8.0.0"
+ "node": ">=8"
}
},
- "node_modules/web3-core-method": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.7.1.tgz",
- "integrity": "sha512-383wu5FMcEphBFl5jCjk502JnEg3ugHj7MQrsX7DY76pg5N5/dEzxeEMIJFCN6kr5Iq32NINOG3VuJIyjxpsEg==",
+ "node_modules/web3-bzz/node_modules/cacheable-request/node_modules/get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@ethersproject/transactions": "^5.0.0-beta.135",
- "web3-core-helpers": "1.7.1",
- "web3-core-promievent": "1.7.1",
- "web3-core-subscriptions": "1.7.1",
- "web3-utils": "1.7.1"
+ "pump": "^3.0.0"
},
"engines": {
- "node": ">=8.0.0"
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/web3-core-method/node_modules/web3-core-helpers": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.1.tgz",
- "integrity": "sha512-xn7Sx+s4CyukOJdlW8bBBDnUCWndr+OCJAlUe/dN2wXiyaGRiCWRhuQZrFjbxLeBt1fYFH7uWyYHhYU6muOHgw==",
+ "node_modules/web3-bzz/node_modules/cacheable-request/node_modules/lowercase-keys": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
+ "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
"dev": true,
- "dependencies": {
- "web3-eth-iban": "1.7.1",
- "web3-utils": "1.7.1"
- },
+ "license": "MIT",
"engines": {
- "node": ">=8.0.0"
+ "node": ">=8"
}
},
- "node_modules/web3-core-method/node_modules/web3-core-promievent": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.7.1.tgz",
- "integrity": "sha512-Vd+CVnpPejrnevIdxhCkzMEywqgVbhHk/AmXXceYpmwA6sX41c5a65TqXv1i3FWRJAz/dW7oKz9NAzRIBAO/kA==",
+ "node_modules/web3-bzz/node_modules/decompress-response": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
+ "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "eventemitter3": "4.0.4"
+ "mimic-response": "^3.1.0"
},
"engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/web3-core-method/node_modules/web3-eth-iban": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.1.tgz",
- "integrity": "sha512-XG4I3QXuKB/udRwZdNEhdYdGKjkhfb/uH477oFVMLBqNimU/Cw8yXUI5qwFKvBHM+hMQWfzPDuSDEDKC2uuiMg==",
- "dev": true,
- "dependencies": {
- "bn.js": "^4.11.9",
- "web3-utils": "1.7.1"
+ "node": ">=10"
},
- "engines": {
- "node": ">=8.0.0"
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/web3-core-promievent": {
- "version": "1.5.3",
- "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.5.3.tgz",
- "integrity": "sha512-CFfgqvk3Vk6PIAxtLLuX+pOMozxkKCY+/GdGr7weMh033mDXEPvwyVjoSRO1PqIKj668/hMGQsVoIgbyxkJ9Mg==",
+ "node_modules/web3-bzz/node_modules/defer-to-connect": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz",
+ "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==",
"dev": true,
- "dependencies": {
- "eventemitter3": "4.0.4"
- },
+ "license": "MIT",
"engines": {
- "node": ">=8.0.0"
+ "node": ">=10"
}
},
- "node_modules/web3-core-requestmanager": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.7.1.tgz",
- "integrity": "sha512-/EHVTiMShpZKiq0Jka0Vgguxi3vxq1DAHKxg42miqHdUsz4/cDWay2wGALDR2x3ofDB9kqp7pb66HsvQImQeag==",
+ "node_modules/web3-bzz/node_modules/get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
"dev": true,
- "dependencies": {
- "util": "^0.12.0",
- "web3-core-helpers": "1.7.1",
- "web3-providers-http": "1.7.1",
- "web3-providers-ipc": "1.7.1",
- "web3-providers-ws": "1.7.1"
- },
+ "license": "MIT",
"engines": {
- "node": ">=8.0.0"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/web3-core-requestmanager/node_modules/web3-core-helpers": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.1.tgz",
- "integrity": "sha512-xn7Sx+s4CyukOJdlW8bBBDnUCWndr+OCJAlUe/dN2wXiyaGRiCWRhuQZrFjbxLeBt1fYFH7uWyYHhYU6muOHgw==",
+ "node_modules/web3-bzz/node_modules/got": {
+ "version": "12.1.0",
+ "resolved": "https://registry.npmjs.org/got/-/got-12.1.0.tgz",
+ "integrity": "sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "web3-eth-iban": "1.7.1",
- "web3-utils": "1.7.1"
+ "@sindresorhus/is": "^4.6.0",
+ "@szmarczak/http-timer": "^5.0.1",
+ "@types/cacheable-request": "^6.0.2",
+ "@types/responselike": "^1.0.0",
+ "cacheable-lookup": "^6.0.4",
+ "cacheable-request": "^7.0.2",
+ "decompress-response": "^6.0.0",
+ "form-data-encoder": "1.7.1",
+ "get-stream": "^6.0.1",
+ "http2-wrapper": "^2.1.10",
+ "lowercase-keys": "^3.0.0",
+ "p-cancelable": "^3.0.0",
+ "responselike": "^2.0.0"
},
"engines": {
- "node": ">=8.0.0"
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/got?sponsor=1"
}
},
- "node_modules/web3-core-requestmanager/node_modules/web3-eth-iban": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.1.tgz",
- "integrity": "sha512-XG4I3QXuKB/udRwZdNEhdYdGKjkhfb/uH477oFVMLBqNimU/Cw8yXUI5qwFKvBHM+hMQWfzPDuSDEDKC2uuiMg==",
+ "node_modules/web3-bzz/node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
"dev": true,
- "dependencies": {
- "bn.js": "^4.11.9",
- "web3-utils": "1.7.1"
- },
- "engines": {
- "node": ">=8.0.0"
- }
+ "license": "MIT"
},
- "node_modules/web3-core-subscriptions": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.7.1.tgz",
- "integrity": "sha512-NZBsvSe4J+Wt16xCf4KEtBbxA9TOwSVr8KWfUQ0tC2KMdDYdzNswl0Q9P58xaVuNlJ3/BH+uDFZJJ5E61BSA1Q==",
+ "node_modules/web3-bzz/node_modules/keyv": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "eventemitter3": "4.0.4",
- "web3-core-helpers": "1.7.1"
- },
- "engines": {
- "node": ">=8.0.0"
+ "json-buffer": "3.0.1"
}
},
- "node_modules/web3-core-subscriptions/node_modules/web3-core-helpers": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.1.tgz",
- "integrity": "sha512-xn7Sx+s4CyukOJdlW8bBBDnUCWndr+OCJAlUe/dN2wXiyaGRiCWRhuQZrFjbxLeBt1fYFH7uWyYHhYU6muOHgw==",
+ "node_modules/web3-bzz/node_modules/lowercase-keys": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz",
+ "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==",
"dev": true,
- "dependencies": {
- "web3-eth-iban": "1.7.1",
- "web3-utils": "1.7.1"
- },
+ "license": "MIT",
"engines": {
- "node": ">=8.0.0"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/web3-core-subscriptions/node_modules/web3-eth-iban": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.1.tgz",
- "integrity": "sha512-XG4I3QXuKB/udRwZdNEhdYdGKjkhfb/uH477oFVMLBqNimU/Cw8yXUI5qwFKvBHM+hMQWfzPDuSDEDKC2uuiMg==",
+ "node_modules/web3-bzz/node_modules/mimic-response": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
+ "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
"dev": true,
- "dependencies": {
- "bn.js": "^4.11.9",
- "web3-utils": "1.7.1"
- },
+ "license": "MIT",
"engines": {
- "node": ">=8.0.0"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/web3-core/node_modules/@types/bn.js": {
- "version": "4.11.6",
- "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz",
- "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==",
+ "node_modules/web3-bzz/node_modules/normalize-url": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",
+ "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==",
"dev": true,
- "dependencies": {
- "@types/node": "*"
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/web3-core/node_modules/@types/node": {
- "version": "12.20.47",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.47.tgz",
- "integrity": "sha512-BzcaRsnFuznzOItW1WpQrDHM7plAa7GIDMZ6b5pnMbkqEtM/6WCOhvZar39oeMQP79gwvFUWjjptE7/KGcNqFg==",
- "dev": true
- },
- "node_modules/web3-core/node_modules/bignumber.js": {
- "version": "9.0.2",
- "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz",
- "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==",
+ "node_modules/web3-bzz/node_modules/p-cancelable": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz",
+ "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==",
"dev": true,
+ "license": "MIT",
"engines": {
- "node": "*"
+ "node": ">=12.20"
}
},
- "node_modules/web3-core/node_modules/web3-core-helpers": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.1.tgz",
- "integrity": "sha512-xn7Sx+s4CyukOJdlW8bBBDnUCWndr+OCJAlUe/dN2wXiyaGRiCWRhuQZrFjbxLeBt1fYFH7uWyYHhYU6muOHgw==",
+ "node_modules/web3-bzz/node_modules/responselike": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz",
+ "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "web3-eth-iban": "1.7.1",
- "web3-utils": "1.7.1"
+ "lowercase-keys": "^2.0.0"
},
- "engines": {
- "node": ">=8.0.0"
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/web3-core/node_modules/web3-eth-iban": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.1.tgz",
- "integrity": "sha512-XG4I3QXuKB/udRwZdNEhdYdGKjkhfb/uH477oFVMLBqNimU/Cw8yXUI5qwFKvBHM+hMQWfzPDuSDEDKC2uuiMg==",
+ "node_modules/web3-bzz/node_modules/responselike/node_modules/lowercase-keys": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
+ "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
"dev": true,
- "dependencies": {
- "bn.js": "^4.11.9",
- "web3-utils": "1.7.1"
- },
+ "license": "MIT",
"engines": {
- "node": ">=8.0.0"
+ "node": ">=8"
}
},
- "node_modules/web3-eth": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.7.1.tgz",
- "integrity": "sha512-Uz3gO4CjTJ+hMyJZAd2eiv2Ur1uurpN7sTMATWKXYR/SgG+SZgncnk/9d8t23hyu4lyi2GiVL1AqVqptpRElxg==",
+ "node_modules/web3-core": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.10.4.tgz",
+ "integrity": "sha512-B6elffYm81MYZDTrat7aEhnhdtVE3lDBUZft16Z8awYMZYJDbnykEbJVS+l3mnA7AQTnSDr/1MjWofGDLBJPww==",
"dev": true,
+ "license": "LGPL-3.0",
"dependencies": {
- "web3-core": "1.7.1",
- "web3-core-helpers": "1.7.1",
- "web3-core-method": "1.7.1",
- "web3-core-subscriptions": "1.7.1",
- "web3-eth-abi": "1.7.1",
- "web3-eth-accounts": "1.7.1",
- "web3-eth-contract": "1.7.1",
- "web3-eth-ens": "1.7.1",
- "web3-eth-iban": "1.7.1",
- "web3-eth-personal": "1.7.1",
- "web3-net": "1.7.1",
- "web3-utils": "1.7.1"
+ "@types/bn.js": "^5.1.1",
+ "@types/node": "^12.12.6",
+ "bignumber.js": "^9.0.0",
+ "web3-core-helpers": "1.10.4",
+ "web3-core-method": "1.10.4",
+ "web3-core-requestmanager": "1.10.4",
+ "web3-utils": "1.10.4"
},
"engines": {
"node": ">=8.0.0"
}
},
- "node_modules/web3-eth-abi": {
+ "node_modules/web3-core-helpers": {
"version": "1.5.3",
- "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.5.3.tgz",
- "integrity": "sha512-i/qhuFsoNrnV130CSRYX/z4SlCfSQ4mHntti5yTmmQpt70xZKYZ57BsU0R29ueSQ9/P+aQrL2t2rqkQkAloUxg==",
+ "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.5.3.tgz",
+ "integrity": "sha512-Ip1IjB3S8vN7Kf1PPjK41U5gskmMk6IJQlxIVuS8/1U7n/o0jC8krqtpRwiMfAgYyw3TXwBFtxSRTvJtnLyXZw==",
"dev": true,
"dependencies": {
- "@ethersproject/abi": "5.0.7",
+ "web3-eth-iban": "1.5.3",
"web3-utils": "1.5.3"
},
"engines": {
"node": ">=8.0.0"
}
},
- "node_modules/web3-eth-abi/node_modules/@ethersproject/abi": {
- "version": "5.0.7",
- "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.0.7.tgz",
- "integrity": "sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw==",
- "dev": true,
- "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"
- }
- },
- "node_modules/web3-eth-abi/node_modules/eth-lib": {
+ "node_modules/web3-core-helpers/node_modules/eth-lib": {
"version": "0.2.8",
"resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz",
"integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==",
@@ -23263,7 +23457,7 @@
"xhr-request-promise": "^0.1.2"
}
},
- "node_modules/web3-eth-abi/node_modules/web3-utils": {
+ "node_modules/web3-core-helpers/node_modules/web3-utils": {
"version": "1.5.3",
"resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.5.3.tgz",
"integrity": "sha512-56nRgA+Ad9SEyCv39g36rTcr5fpsd4L9LgV3FK0aB66nAMazLAA6Qz4lH5XrUKPDyBIPGJIR+kJsyRtwcu2q1Q==",
@@ -23281,191 +23475,515 @@
"node": ">=8.0.0"
}
},
- "node_modules/web3-eth-accounts": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.7.1.tgz",
- "integrity": "sha512-3xGQ2bkTQc7LFoqGWxp5cQDrKndlX05s7m0rAFVoyZZODMqrdSGjMPMqmWqHzJRUswNEMc+oelqSnGBubqhguQ==",
+ "node_modules/web3-core-method": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.10.4.tgz",
+ "integrity": "sha512-uZTb7flr+Xl6LaDsyTeE2L1TylokCJwTDrIVfIfnrGmnwLc6bmTWCCrm71sSrQ0hqs6vp/MKbQYIYqUN0J8WyA==",
"dev": true,
+ "license": "LGPL-3.0",
"dependencies": {
- "@ethereumjs/common": "^2.5.0",
- "@ethereumjs/tx": "^3.3.2",
- "crypto-browserify": "3.12.0",
- "eth-lib": "0.2.8",
- "ethereumjs-util": "^7.0.10",
- "scrypt-js": "^3.0.1",
- "uuid": "3.3.2",
- "web3-core": "1.7.1",
- "web3-core-helpers": "1.7.1",
- "web3-core-method": "1.7.1",
- "web3-utils": "1.7.1"
+ "@ethersproject/transactions": "^5.6.2",
+ "web3-core-helpers": "1.10.4",
+ "web3-core-promievent": "1.10.4",
+ "web3-core-subscriptions": "1.10.4",
+ "web3-utils": "1.10.4"
},
"engines": {
"node": ">=8.0.0"
}
},
- "node_modules/web3-eth-accounts/node_modules/eth-lib": {
- "version": "0.2.8",
- "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz",
- "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==",
+ "node_modules/web3-core-method/node_modules/@ethersproject/address": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz",
+ "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==",
"dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
"dependencies": {
- "bn.js": "^4.11.6",
- "elliptic": "^6.4.0",
- "xhr-request-promise": "^0.1.2"
+ "@ethersproject/bignumber": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/keccak256": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/rlp": "^5.8.0"
}
},
- "node_modules/web3-eth-accounts/node_modules/uuid": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
- "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
- "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
+ "node_modules/web3-core-method/node_modules/@ethersproject/bignumber": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz",
+ "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==",
"dev": true,
- "bin": {
- "uuid": "bin/uuid"
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "bn.js": "^5.2.1"
}
},
- "node_modules/web3-eth-accounts/node_modules/web3-core-helpers": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.1.tgz",
- "integrity": "sha512-xn7Sx+s4CyukOJdlW8bBBDnUCWndr+OCJAlUe/dN2wXiyaGRiCWRhuQZrFjbxLeBt1fYFH7uWyYHhYU6muOHgw==",
+ "node_modules/web3-core-method/node_modules/@ethersproject/bytes": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz",
+ "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==",
"dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
"dependencies": {
- "web3-eth-iban": "1.7.1",
- "web3-utils": "1.7.1"
- },
- "engines": {
- "node": ">=8.0.0"
+ "@ethersproject/logger": "^5.8.0"
}
},
- "node_modules/web3-eth-accounts/node_modules/web3-eth-iban": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.1.tgz",
- "integrity": "sha512-XG4I3QXuKB/udRwZdNEhdYdGKjkhfb/uH477oFVMLBqNimU/Cw8yXUI5qwFKvBHM+hMQWfzPDuSDEDKC2uuiMg==",
+ "node_modules/web3-core-method/node_modules/@ethersproject/constants": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz",
+ "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==",
"dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
"dependencies": {
- "bn.js": "^4.11.9",
- "web3-utils": "1.7.1"
- },
- "engines": {
- "node": ">=8.0.0"
+ "@ethersproject/bignumber": "^5.8.0"
}
},
- "node_modules/web3-eth-contract": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.7.1.tgz",
- "integrity": "sha512-HpnbkPYkVK3lOyos2SaUjCleKfbF0SP3yjw7l551rAAi5sIz/vwlEzdPWd0IHL7ouxXbO0tDn7jzWBRcD3sTbA==",
+ "node_modules/web3-core-method/node_modules/@ethersproject/keccak256": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz",
+ "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==",
"dev": true,
- "dependencies": {
- "@types/bn.js": "^4.11.5",
- "web3-core": "1.7.1",
- "web3-core-helpers": "1.7.1",
- "web3-core-method": "1.7.1",
- "web3-core-promievent": "1.7.1",
- "web3-core-subscriptions": "1.7.1",
- "web3-eth-abi": "1.7.1",
- "web3-utils": "1.7.1"
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bytes": "^5.8.0",
+ "js-sha3": "0.8.0"
+ }
+ },
+ "node_modules/web3-core-method/node_modules/@ethersproject/logger": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz",
+ "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/web3-core-method/node_modules/@ethersproject/properties": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz",
+ "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/logger": "^5.8.0"
+ }
+ },
+ "node_modules/web3-core-method/node_modules/@ethersproject/rlp": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz",
+ "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0"
+ }
+ },
+ "node_modules/web3-core-method/node_modules/@ethersproject/signing-key": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz",
+ "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0",
+ "bn.js": "^5.2.1",
+ "elliptic": "6.6.1",
+ "hash.js": "1.1.7"
+ }
+ },
+ "node_modules/web3-core-method/node_modules/@ethersproject/transactions": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz",
+ "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/address": "^5.8.0",
+ "@ethersproject/bignumber": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/constants": "^5.8.0",
+ "@ethersproject/keccak256": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0",
+ "@ethersproject/rlp": "^5.8.0",
+ "@ethersproject/signing-key": "^5.8.0"
+ }
+ },
+ "node_modules/web3-core-method/node_modules/bn.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz",
+ "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/web3-core-method/node_modules/elliptic": {
+ "version": "6.6.1",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz",
+ "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==",
+ "dev": true,
+ "license": "MIT",
+ "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"
+ }
+ },
+ "node_modules/web3-core-method/node_modules/elliptic/node_modules/bn.js": {
+ "version": "4.12.2",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz",
+ "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/web3-core-method/node_modules/web3-core-helpers": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.4.tgz",
+ "integrity": "sha512-r+L5ylA17JlD1vwS8rjhWr0qg7zVoVMDvWhajWA5r5+USdh91jRUYosp19Kd1m2vE034v7Dfqe1xYRoH2zvG0g==",
+ "dev": true,
+ "license": "LGPL-3.0",
+ "dependencies": {
+ "web3-eth-iban": "1.10.4",
+ "web3-utils": "1.10.4"
},
"engines": {
"node": ">=8.0.0"
}
},
- "node_modules/web3-eth-contract/node_modules/@ethersproject/abi": {
- "version": "5.0.7",
- "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.0.7.tgz",
- "integrity": "sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw==",
+ "node_modules/web3-core-method/node_modules/web3-core-promievent": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.4.tgz",
+ "integrity": "sha512-2de5WnJQ72YcIhYwV/jHLc4/cWJnznuoGTJGD29ncFQHAfwW/MItHFSVKPPA5v8AhJe+r6y4Y12EKvZKjQVBvQ==",
"dev": true,
+ "license": "LGPL-3.0",
"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"
+ "eventemitter3": "4.0.4"
+ },
+ "engines": {
+ "node": ">=8.0.0"
}
},
- "node_modules/web3-eth-contract/node_modules/@types/bn.js": {
- "version": "4.11.6",
- "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz",
- "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==",
+ "node_modules/web3-core-method/node_modules/web3-eth-iban": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.4.tgz",
+ "integrity": "sha512-0gE5iNmOkmtBmbKH2aTodeompnNE8jEyvwFJ6s/AF6jkw9ky9Op9cqfzS56AYAbrqEFuClsqB/AoRves7LDELw==",
"dev": true,
+ "license": "LGPL-3.0",
"dependencies": {
- "@types/node": "*"
+ "bn.js": "^5.2.1",
+ "web3-utils": "1.10.4"
+ },
+ "engines": {
+ "node": ">=8.0.0"
}
},
- "node_modules/web3-eth-contract/node_modules/web3-core-helpers": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.1.tgz",
- "integrity": "sha512-xn7Sx+s4CyukOJdlW8bBBDnUCWndr+OCJAlUe/dN2wXiyaGRiCWRhuQZrFjbxLeBt1fYFH7uWyYHhYU6muOHgw==",
+ "node_modules/web3-core-promievent": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.5.3.tgz",
+ "integrity": "sha512-CFfgqvk3Vk6PIAxtLLuX+pOMozxkKCY+/GdGr7weMh033mDXEPvwyVjoSRO1PqIKj668/hMGQsVoIgbyxkJ9Mg==",
"dev": true,
"dependencies": {
- "web3-eth-iban": "1.7.1",
- "web3-utils": "1.7.1"
+ "eventemitter3": "4.0.4"
},
"engines": {
"node": ">=8.0.0"
}
},
- "node_modules/web3-eth-contract/node_modules/web3-core-promievent": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.7.1.tgz",
- "integrity": "sha512-Vd+CVnpPejrnevIdxhCkzMEywqgVbhHk/AmXXceYpmwA6sX41c5a65TqXv1i3FWRJAz/dW7oKz9NAzRIBAO/kA==",
+ "node_modules/web3-core-requestmanager": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.10.4.tgz",
+ "integrity": "sha512-vqP6pKH8RrhT/2MoaU+DY/OsYK9h7HmEBNCdoMj+4ZwujQtw/Mq2JifjwsJ7gits7Q+HWJwx8q6WmQoVZAWugg==",
"dev": true,
+ "license": "LGPL-3.0",
"dependencies": {
- "eventemitter3": "4.0.4"
+ "util": "^0.12.5",
+ "web3-core-helpers": "1.10.4",
+ "web3-providers-http": "1.10.4",
+ "web3-providers-ipc": "1.10.4",
+ "web3-providers-ws": "1.10.4"
},
"engines": {
"node": ">=8.0.0"
}
},
- "node_modules/web3-eth-contract/node_modules/web3-eth-abi": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.7.1.tgz",
- "integrity": "sha512-8BVBOoFX1oheXk+t+uERBibDaVZ5dxdcefpbFTWcBs7cdm0tP8CD1ZTCLi5Xo+1bolVHNH2dMSf/nEAssq5pUA==",
+ "node_modules/web3-core-requestmanager/node_modules/bn.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz",
+ "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/web3-core-requestmanager/node_modules/web3-core-helpers": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.4.tgz",
+ "integrity": "sha512-r+L5ylA17JlD1vwS8rjhWr0qg7zVoVMDvWhajWA5r5+USdh91jRUYosp19Kd1m2vE034v7Dfqe1xYRoH2zvG0g==",
"dev": true,
+ "license": "LGPL-3.0",
"dependencies": {
- "@ethersproject/abi": "5.0.7",
- "web3-utils": "1.7.1"
+ "web3-eth-iban": "1.10.4",
+ "web3-utils": "1.10.4"
},
"engines": {
"node": ">=8.0.0"
}
},
- "node_modules/web3-eth-contract/node_modules/web3-eth-iban": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.1.tgz",
- "integrity": "sha512-XG4I3QXuKB/udRwZdNEhdYdGKjkhfb/uH477oFVMLBqNimU/Cw8yXUI5qwFKvBHM+hMQWfzPDuSDEDKC2uuiMg==",
+ "node_modules/web3-core-requestmanager/node_modules/web3-eth-iban": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.4.tgz",
+ "integrity": "sha512-0gE5iNmOkmtBmbKH2aTodeompnNE8jEyvwFJ6s/AF6jkw9ky9Op9cqfzS56AYAbrqEFuClsqB/AoRves7LDELw==",
"dev": true,
+ "license": "LGPL-3.0",
"dependencies": {
- "bn.js": "^4.11.9",
- "web3-utils": "1.7.1"
+ "bn.js": "^5.2.1",
+ "web3-utils": "1.10.4"
},
"engines": {
"node": ">=8.0.0"
}
},
- "node_modules/web3-eth-ens": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.7.1.tgz",
- "integrity": "sha512-DVCF76i9wM93DrPQwLrYiCw/UzxFuofBsuxTVugrnbm0SzucajLLNftp3ITK0c4/lV3x9oo5ER/wD6RRMHQnvw==",
+ "node_modules/web3-core-subscriptions": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.10.4.tgz",
+ "integrity": "sha512-o0lSQo/N/f7/L76C0HV63+S54loXiE9fUPfHFcTtpJRQNDBVsSDdWRdePbWwR206XlsBqD5VHApck1//jEafTw==",
"dev": true,
+ "license": "LGPL-3.0",
"dependencies": {
- "content-hash": "^2.5.2",
- "eth-ens-namehash": "2.0.8",
- "web3-core": "1.7.1",
- "web3-core-helpers": "1.7.1",
- "web3-core-promievent": "1.7.1",
- "web3-eth-abi": "1.7.1",
- "web3-eth-contract": "1.7.1",
- "web3-utils": "1.7.1"
+ "eventemitter3": "4.0.4",
+ "web3-core-helpers": "1.10.4"
},
"engines": {
"node": ">=8.0.0"
}
},
- "node_modules/web3-eth-ens/node_modules/@ethersproject/abi": {
+ "node_modules/web3-core-subscriptions/node_modules/bn.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz",
+ "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/web3-core-subscriptions/node_modules/web3-core-helpers": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.4.tgz",
+ "integrity": "sha512-r+L5ylA17JlD1vwS8rjhWr0qg7zVoVMDvWhajWA5r5+USdh91jRUYosp19Kd1m2vE034v7Dfqe1xYRoH2zvG0g==",
+ "dev": true,
+ "license": "LGPL-3.0",
+ "dependencies": {
+ "web3-eth-iban": "1.10.4",
+ "web3-utils": "1.10.4"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/web3-core-subscriptions/node_modules/web3-eth-iban": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.4.tgz",
+ "integrity": "sha512-0gE5iNmOkmtBmbKH2aTodeompnNE8jEyvwFJ6s/AF6jkw9ky9Op9cqfzS56AYAbrqEFuClsqB/AoRves7LDELw==",
+ "dev": true,
+ "license": "LGPL-3.0",
+ "dependencies": {
+ "bn.js": "^5.2.1",
+ "web3-utils": "1.10.4"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/web3-core/node_modules/@types/node": {
+ "version": "12.20.55",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz",
+ "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/web3-core/node_modules/bignumber.js": {
+ "version": "9.3.1",
+ "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz",
+ "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/web3-core/node_modules/bn.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz",
+ "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/web3-core/node_modules/web3-core-helpers": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.4.tgz",
+ "integrity": "sha512-r+L5ylA17JlD1vwS8rjhWr0qg7zVoVMDvWhajWA5r5+USdh91jRUYosp19Kd1m2vE034v7Dfqe1xYRoH2zvG0g==",
+ "dev": true,
+ "license": "LGPL-3.0",
+ "dependencies": {
+ "web3-eth-iban": "1.10.4",
+ "web3-utils": "1.10.4"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/web3-core/node_modules/web3-eth-iban": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.4.tgz",
+ "integrity": "sha512-0gE5iNmOkmtBmbKH2aTodeompnNE8jEyvwFJ6s/AF6jkw9ky9Op9cqfzS56AYAbrqEFuClsqB/AoRves7LDELw==",
+ "dev": true,
+ "license": "LGPL-3.0",
+ "dependencies": {
+ "bn.js": "^5.2.1",
+ "web3-utils": "1.10.4"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/web3-eth": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.10.4.tgz",
+ "integrity": "sha512-Sql2kYKmgt+T/cgvg7b9ce24uLS7xbFrxE4kuuor1zSCGrjhTJ5rRNG8gTJUkAJGKJc7KgnWmgW+cOfMBPUDSA==",
+ "dev": true,
+ "license": "LGPL-3.0",
+ "dependencies": {
+ "web3-core": "1.10.4",
+ "web3-core-helpers": "1.10.4",
+ "web3-core-method": "1.10.4",
+ "web3-core-subscriptions": "1.10.4",
+ "web3-eth-abi": "1.10.4",
+ "web3-eth-accounts": "1.10.4",
+ "web3-eth-contract": "1.10.4",
+ "web3-eth-ens": "1.10.4",
+ "web3-eth-iban": "1.10.4",
+ "web3-eth-personal": "1.10.4",
+ "web3-net": "1.10.4",
+ "web3-utils": "1.10.4"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/web3-eth-abi": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.5.3.tgz",
+ "integrity": "sha512-i/qhuFsoNrnV130CSRYX/z4SlCfSQ4mHntti5yTmmQpt70xZKYZ57BsU0R29ueSQ9/P+aQrL2t2rqkQkAloUxg==",
+ "dev": true,
+ "dependencies": {
+ "@ethersproject/abi": "5.0.7",
+ "web3-utils": "1.5.3"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/web3-eth-abi/node_modules/@ethersproject/abi": {
"version": "5.0.7",
"resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.0.7.tgz",
"integrity": "sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw==",
@@ -23482,361 +24000,1925 @@
"@ethersproject/strings": "^5.0.4"
}
},
- "node_modules/web3-eth-ens/node_modules/web3-core-helpers": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.1.tgz",
- "integrity": "sha512-xn7Sx+s4CyukOJdlW8bBBDnUCWndr+OCJAlUe/dN2wXiyaGRiCWRhuQZrFjbxLeBt1fYFH7uWyYHhYU6muOHgw==",
- "dev": true,
- "dependencies": {
- "web3-eth-iban": "1.7.1",
- "web3-utils": "1.7.1"
+ "node_modules/web3-eth-abi/node_modules/eth-lib": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz",
+ "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^4.11.6",
+ "elliptic": "^6.4.0",
+ "xhr-request-promise": "^0.1.2"
+ }
+ },
+ "node_modules/web3-eth-abi/node_modules/web3-utils": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.5.3.tgz",
+ "integrity": "sha512-56nRgA+Ad9SEyCv39g36rTcr5fpsd4L9LgV3FK0aB66nAMazLAA6Qz4lH5XrUKPDyBIPGJIR+kJsyRtwcu2q1Q==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^4.11.9",
+ "eth-lib": "0.2.8",
+ "ethereum-bloom-filters": "^1.0.6",
+ "ethjs-unit": "0.1.6",
+ "number-to-bn": "1.7.0",
+ "randombytes": "^2.1.0",
+ "utf8": "3.0.0"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/web3-eth-accounts": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.10.4.tgz",
+ "integrity": "sha512-ysy5sVTg9snYS7tJjxVoQAH6DTOTkRGR8emEVCWNGLGiB9txj+qDvSeT0izjurS/g7D5xlMAgrEHLK1Vi6I3yg==",
+ "dev": true,
+ "license": "LGPL-3.0",
+ "dependencies": {
+ "@ethereumjs/common": "2.6.5",
+ "@ethereumjs/tx": "3.5.2",
+ "@ethereumjs/util": "^8.1.0",
+ "eth-lib": "0.2.8",
+ "scrypt-js": "^3.0.1",
+ "uuid": "^9.0.0",
+ "web3-core": "1.10.4",
+ "web3-core-helpers": "1.10.4",
+ "web3-core-method": "1.10.4",
+ "web3-utils": "1.10.4"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/web3-eth-accounts/node_modules/eth-lib": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz",
+ "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bn.js": "^4.11.6",
+ "elliptic": "^6.4.0",
+ "xhr-request-promise": "^0.1.2"
+ }
+ },
+ "node_modules/web3-eth-accounts/node_modules/uuid": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
+ "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
+ "dev": true,
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/web3-eth-accounts/node_modules/web3-core-helpers": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.4.tgz",
+ "integrity": "sha512-r+L5ylA17JlD1vwS8rjhWr0qg7zVoVMDvWhajWA5r5+USdh91jRUYosp19Kd1m2vE034v7Dfqe1xYRoH2zvG0g==",
+ "dev": true,
+ "license": "LGPL-3.0",
+ "dependencies": {
+ "web3-eth-iban": "1.10.4",
+ "web3-utils": "1.10.4"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/web3-eth-accounts/node_modules/web3-eth-iban": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.4.tgz",
+ "integrity": "sha512-0gE5iNmOkmtBmbKH2aTodeompnNE8jEyvwFJ6s/AF6jkw9ky9Op9cqfzS56AYAbrqEFuClsqB/AoRves7LDELw==",
+ "dev": true,
+ "license": "LGPL-3.0",
+ "dependencies": {
+ "bn.js": "^5.2.1",
+ "web3-utils": "1.10.4"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/web3-eth-accounts/node_modules/web3-eth-iban/node_modules/bn.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz",
+ "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/web3-eth-contract": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.10.4.tgz",
+ "integrity": "sha512-Q8PfolOJ4eV9TvnTj1TGdZ4RarpSLmHnUnzVxZ/6/NiTfe4maJz99R0ISgwZkntLhLRtw0C7LRJuklzGYCNN3A==",
+ "dev": true,
+ "license": "LGPL-3.0",
+ "dependencies": {
+ "@types/bn.js": "^5.1.1",
+ "web3-core": "1.10.4",
+ "web3-core-helpers": "1.10.4",
+ "web3-core-method": "1.10.4",
+ "web3-core-promievent": "1.10.4",
+ "web3-core-subscriptions": "1.10.4",
+ "web3-eth-abi": "1.10.4",
+ "web3-utils": "1.10.4"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/web3-eth-contract/node_modules/@ethersproject/abi": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz",
+ "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/address": "^5.8.0",
+ "@ethersproject/bignumber": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/constants": "^5.8.0",
+ "@ethersproject/hash": "^5.8.0",
+ "@ethersproject/keccak256": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0",
+ "@ethersproject/strings": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth-contract/node_modules/@ethersproject/abstract-provider": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz",
+ "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bignumber": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/networks": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0",
+ "@ethersproject/transactions": "^5.8.0",
+ "@ethersproject/web": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth-contract/node_modules/@ethersproject/abstract-signer": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz",
+ "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/abstract-provider": "^5.8.0",
+ "@ethersproject/bignumber": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth-contract/node_modules/@ethersproject/address": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz",
+ "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bignumber": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/keccak256": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/rlp": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth-contract/node_modules/@ethersproject/base64": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz",
+ "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bytes": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth-contract/node_modules/@ethersproject/bignumber": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz",
+ "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "bn.js": "^5.2.1"
+ }
+ },
+ "node_modules/web3-eth-contract/node_modules/@ethersproject/bytes": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz",
+ "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/logger": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth-contract/node_modules/@ethersproject/constants": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz",
+ "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bignumber": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth-contract/node_modules/@ethersproject/hash": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz",
+ "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/abstract-signer": "^5.8.0",
+ "@ethersproject/address": "^5.8.0",
+ "@ethersproject/base64": "^5.8.0",
+ "@ethersproject/bignumber": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/keccak256": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0",
+ "@ethersproject/strings": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth-contract/node_modules/@ethersproject/keccak256": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz",
+ "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bytes": "^5.8.0",
+ "js-sha3": "0.8.0"
+ }
+ },
+ "node_modules/web3-eth-contract/node_modules/@ethersproject/logger": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz",
+ "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/web3-eth-contract/node_modules/@ethersproject/networks": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz",
+ "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/logger": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth-contract/node_modules/@ethersproject/properties": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz",
+ "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/logger": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth-contract/node_modules/@ethersproject/rlp": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz",
+ "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth-contract/node_modules/@ethersproject/signing-key": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz",
+ "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0",
+ "bn.js": "^5.2.1",
+ "elliptic": "6.6.1",
+ "hash.js": "1.1.7"
+ }
+ },
+ "node_modules/web3-eth-contract/node_modules/@ethersproject/strings": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz",
+ "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/constants": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth-contract/node_modules/@ethersproject/transactions": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz",
+ "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/address": "^5.8.0",
+ "@ethersproject/bignumber": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/constants": "^5.8.0",
+ "@ethersproject/keccak256": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0",
+ "@ethersproject/rlp": "^5.8.0",
+ "@ethersproject/signing-key": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth-contract/node_modules/@ethersproject/web": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz",
+ "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/base64": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0",
+ "@ethersproject/strings": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth-contract/node_modules/bn.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz",
+ "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/web3-eth-contract/node_modules/elliptic": {
+ "version": "6.6.1",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz",
+ "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==",
+ "dev": true,
+ "license": "MIT",
+ "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"
+ }
+ },
+ "node_modules/web3-eth-contract/node_modules/elliptic/node_modules/bn.js": {
+ "version": "4.12.2",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz",
+ "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/web3-eth-contract/node_modules/web3-core-helpers": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.4.tgz",
+ "integrity": "sha512-r+L5ylA17JlD1vwS8rjhWr0qg7zVoVMDvWhajWA5r5+USdh91jRUYosp19Kd1m2vE034v7Dfqe1xYRoH2zvG0g==",
+ "dev": true,
+ "license": "LGPL-3.0",
+ "dependencies": {
+ "web3-eth-iban": "1.10.4",
+ "web3-utils": "1.10.4"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/web3-eth-contract/node_modules/web3-core-promievent": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.4.tgz",
+ "integrity": "sha512-2de5WnJQ72YcIhYwV/jHLc4/cWJnznuoGTJGD29ncFQHAfwW/MItHFSVKPPA5v8AhJe+r6y4Y12EKvZKjQVBvQ==",
+ "dev": true,
+ "license": "LGPL-3.0",
+ "dependencies": {
+ "eventemitter3": "4.0.4"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/web3-eth-contract/node_modules/web3-eth-abi": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.4.tgz",
+ "integrity": "sha512-cZ0q65eJIkd/jyOlQPDjr8X4fU6CRL1eWgdLwbWEpo++MPU/2P4PFk5ZLAdye9T5Sdp+MomePPJ/gHjLMj2VfQ==",
+ "dev": true,
+ "license": "LGPL-3.0",
+ "dependencies": {
+ "@ethersproject/abi": "^5.6.3",
+ "web3-utils": "1.10.4"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/web3-eth-contract/node_modules/web3-eth-iban": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.4.tgz",
+ "integrity": "sha512-0gE5iNmOkmtBmbKH2aTodeompnNE8jEyvwFJ6s/AF6jkw9ky9Op9cqfzS56AYAbrqEFuClsqB/AoRves7LDELw==",
+ "dev": true,
+ "license": "LGPL-3.0",
+ "dependencies": {
+ "bn.js": "^5.2.1",
+ "web3-utils": "1.10.4"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/web3-eth-ens": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.10.4.tgz",
+ "integrity": "sha512-LLrvxuFeVooRVZ9e5T6OWKVflHPFgrVjJ/jtisRWcmI7KN/b64+D/wJzXqgmp6CNsMQcE7rpmf4CQmJCrTdsgg==",
+ "dev": true,
+ "license": "LGPL-3.0",
+ "dependencies": {
+ "content-hash": "^2.5.2",
+ "eth-ens-namehash": "2.0.8",
+ "web3-core": "1.10.4",
+ "web3-core-helpers": "1.10.4",
+ "web3-core-promievent": "1.10.4",
+ "web3-eth-abi": "1.10.4",
+ "web3-eth-contract": "1.10.4",
+ "web3-utils": "1.10.4"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/web3-eth-ens/node_modules/@ethersproject/abi": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz",
+ "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/address": "^5.8.0",
+ "@ethersproject/bignumber": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/constants": "^5.8.0",
+ "@ethersproject/hash": "^5.8.0",
+ "@ethersproject/keccak256": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0",
+ "@ethersproject/strings": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth-ens/node_modules/@ethersproject/abstract-provider": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz",
+ "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bignumber": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/networks": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0",
+ "@ethersproject/transactions": "^5.8.0",
+ "@ethersproject/web": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth-ens/node_modules/@ethersproject/abstract-signer": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz",
+ "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/abstract-provider": "^5.8.0",
+ "@ethersproject/bignumber": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth-ens/node_modules/@ethersproject/address": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz",
+ "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bignumber": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/keccak256": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/rlp": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth-ens/node_modules/@ethersproject/base64": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz",
+ "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bytes": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth-ens/node_modules/@ethersproject/bignumber": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz",
+ "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "bn.js": "^5.2.1"
+ }
+ },
+ "node_modules/web3-eth-ens/node_modules/@ethersproject/bytes": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz",
+ "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/logger": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth-ens/node_modules/@ethersproject/constants": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz",
+ "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bignumber": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth-ens/node_modules/@ethersproject/hash": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz",
+ "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/abstract-signer": "^5.8.0",
+ "@ethersproject/address": "^5.8.0",
+ "@ethersproject/base64": "^5.8.0",
+ "@ethersproject/bignumber": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/keccak256": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0",
+ "@ethersproject/strings": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth-ens/node_modules/@ethersproject/keccak256": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz",
+ "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bytes": "^5.8.0",
+ "js-sha3": "0.8.0"
+ }
+ },
+ "node_modules/web3-eth-ens/node_modules/@ethersproject/logger": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz",
+ "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/web3-eth-ens/node_modules/@ethersproject/networks": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz",
+ "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/logger": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth-ens/node_modules/@ethersproject/properties": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz",
+ "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/logger": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth-ens/node_modules/@ethersproject/rlp": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz",
+ "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth-ens/node_modules/@ethersproject/signing-key": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz",
+ "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0",
+ "bn.js": "^5.2.1",
+ "elliptic": "6.6.1",
+ "hash.js": "1.1.7"
+ }
+ },
+ "node_modules/web3-eth-ens/node_modules/@ethersproject/strings": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz",
+ "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/constants": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth-ens/node_modules/@ethersproject/transactions": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz",
+ "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/address": "^5.8.0",
+ "@ethersproject/bignumber": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/constants": "^5.8.0",
+ "@ethersproject/keccak256": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0",
+ "@ethersproject/rlp": "^5.8.0",
+ "@ethersproject/signing-key": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth-ens/node_modules/@ethersproject/web": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz",
+ "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/base64": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0",
+ "@ethersproject/strings": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth-ens/node_modules/bn.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz",
+ "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/web3-eth-ens/node_modules/elliptic": {
+ "version": "6.6.1",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz",
+ "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==",
+ "dev": true,
+ "license": "MIT",
+ "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"
+ }
+ },
+ "node_modules/web3-eth-ens/node_modules/elliptic/node_modules/bn.js": {
+ "version": "4.12.2",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz",
+ "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/web3-eth-ens/node_modules/web3-core-helpers": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.4.tgz",
+ "integrity": "sha512-r+L5ylA17JlD1vwS8rjhWr0qg7zVoVMDvWhajWA5r5+USdh91jRUYosp19Kd1m2vE034v7Dfqe1xYRoH2zvG0g==",
+ "dev": true,
+ "license": "LGPL-3.0",
+ "dependencies": {
+ "web3-eth-iban": "1.10.4",
+ "web3-utils": "1.10.4"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/web3-eth-ens/node_modules/web3-core-promievent": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.4.tgz",
+ "integrity": "sha512-2de5WnJQ72YcIhYwV/jHLc4/cWJnznuoGTJGD29ncFQHAfwW/MItHFSVKPPA5v8AhJe+r6y4Y12EKvZKjQVBvQ==",
+ "dev": true,
+ "license": "LGPL-3.0",
+ "dependencies": {
+ "eventemitter3": "4.0.4"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/web3-eth-ens/node_modules/web3-eth-abi": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.4.tgz",
+ "integrity": "sha512-cZ0q65eJIkd/jyOlQPDjr8X4fU6CRL1eWgdLwbWEpo++MPU/2P4PFk5ZLAdye9T5Sdp+MomePPJ/gHjLMj2VfQ==",
+ "dev": true,
+ "license": "LGPL-3.0",
+ "dependencies": {
+ "@ethersproject/abi": "^5.6.3",
+ "web3-utils": "1.10.4"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/web3-eth-ens/node_modules/web3-eth-iban": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.4.tgz",
+ "integrity": "sha512-0gE5iNmOkmtBmbKH2aTodeompnNE8jEyvwFJ6s/AF6jkw9ky9Op9cqfzS56AYAbrqEFuClsqB/AoRves7LDELw==",
+ "dev": true,
+ "license": "LGPL-3.0",
+ "dependencies": {
+ "bn.js": "^5.2.1",
+ "web3-utils": "1.10.4"
},
"engines": {
"node": ">=8.0.0"
}
},
- "node_modules/web3-eth-ens/node_modules/web3-core-promievent": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.7.1.tgz",
- "integrity": "sha512-Vd+CVnpPejrnevIdxhCkzMEywqgVbhHk/AmXXceYpmwA6sX41c5a65TqXv1i3FWRJAz/dW7oKz9NAzRIBAO/kA==",
+ "node_modules/web3-eth-iban": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.5.3.tgz",
+ "integrity": "sha512-vMzmGqolYZvRHwP9P4Nf6G8uYM5aTLlQu2a34vz78p0KlDC+eV1th3+90Qeaupa28EG7OO0IT1F0BejiIauOPw==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^4.11.9",
+ "web3-utils": "1.5.3"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/web3-eth-iban/node_modules/eth-lib": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz",
+ "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^4.11.6",
+ "elliptic": "^6.4.0",
+ "xhr-request-promise": "^0.1.2"
+ }
+ },
+ "node_modules/web3-eth-iban/node_modules/web3-utils": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.5.3.tgz",
+ "integrity": "sha512-56nRgA+Ad9SEyCv39g36rTcr5fpsd4L9LgV3FK0aB66nAMazLAA6Qz4lH5XrUKPDyBIPGJIR+kJsyRtwcu2q1Q==",
+ "dev": true,
+ "dependencies": {
+ "bn.js": "^4.11.9",
+ "eth-lib": "0.2.8",
+ "ethereum-bloom-filters": "^1.0.6",
+ "ethjs-unit": "0.1.6",
+ "number-to-bn": "1.7.0",
+ "randombytes": "^2.1.0",
+ "utf8": "3.0.0"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/web3-eth-personal": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.10.4.tgz",
+ "integrity": "sha512-BRa/hs6jU1hKHz+AC/YkM71RP3f0Yci1dPk4paOic53R4ZZG4MgwKRkJhgt3/GPuPliwS46f/i5A7fEGBT4F9w==",
+ "dev": true,
+ "license": "LGPL-3.0",
+ "dependencies": {
+ "@types/node": "^12.12.6",
+ "web3-core": "1.10.4",
+ "web3-core-helpers": "1.10.4",
+ "web3-core-method": "1.10.4",
+ "web3-net": "1.10.4",
+ "web3-utils": "1.10.4"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/web3-eth-personal/node_modules/@types/node": {
+ "version": "12.20.55",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz",
+ "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/web3-eth-personal/node_modules/bn.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz",
+ "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/web3-eth-personal/node_modules/web3-core-helpers": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.4.tgz",
+ "integrity": "sha512-r+L5ylA17JlD1vwS8rjhWr0qg7zVoVMDvWhajWA5r5+USdh91jRUYosp19Kd1m2vE034v7Dfqe1xYRoH2zvG0g==",
+ "dev": true,
+ "license": "LGPL-3.0",
+ "dependencies": {
+ "web3-eth-iban": "1.10.4",
+ "web3-utils": "1.10.4"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/web3-eth-personal/node_modules/web3-eth-iban": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.4.tgz",
+ "integrity": "sha512-0gE5iNmOkmtBmbKH2aTodeompnNE8jEyvwFJ6s/AF6jkw9ky9Op9cqfzS56AYAbrqEFuClsqB/AoRves7LDELw==",
+ "dev": true,
+ "license": "LGPL-3.0",
+ "dependencies": {
+ "bn.js": "^5.2.1",
+ "web3-utils": "1.10.4"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/web3-eth/node_modules/@ethersproject/abi": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz",
+ "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/address": "^5.8.0",
+ "@ethersproject/bignumber": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/constants": "^5.8.0",
+ "@ethersproject/hash": "^5.8.0",
+ "@ethersproject/keccak256": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0",
+ "@ethersproject/strings": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth/node_modules/@ethersproject/abstract-provider": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz",
+ "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bignumber": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/networks": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0",
+ "@ethersproject/transactions": "^5.8.0",
+ "@ethersproject/web": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth/node_modules/@ethersproject/abstract-signer": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz",
+ "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/abstract-provider": "^5.8.0",
+ "@ethersproject/bignumber": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth/node_modules/@ethersproject/address": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz",
+ "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bignumber": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/keccak256": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/rlp": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth/node_modules/@ethersproject/base64": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz",
+ "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bytes": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth/node_modules/@ethersproject/bignumber": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz",
+ "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "bn.js": "^5.2.1"
+ }
+ },
+ "node_modules/web3-eth/node_modules/@ethersproject/bytes": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz",
+ "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/logger": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth/node_modules/@ethersproject/constants": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz",
+ "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==",
"dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bignumber": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth/node_modules/@ethersproject/hash": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz",
+ "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/abstract-signer": "^5.8.0",
+ "@ethersproject/address": "^5.8.0",
+ "@ethersproject/base64": "^5.8.0",
+ "@ethersproject/bignumber": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/keccak256": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0",
+ "@ethersproject/strings": "^5.8.0"
+ }
+ },
+ "node_modules/web3-eth/node_modules/@ethersproject/keccak256": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz",
+ "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ethersproject/bytes": "^5.8.0",
+ "js-sha3": "0.8.0"
+ }
+ },
+ "node_modules/web3-eth/node_modules/@ethersproject/logger": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz",
+ "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/web3-eth/node_modules/@ethersproject/networks": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz",
+ "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
"dependencies": {
- "eventemitter3": "4.0.4"
- },
- "engines": {
- "node": ">=8.0.0"
+ "@ethersproject/logger": "^5.8.0"
}
},
- "node_modules/web3-eth-ens/node_modules/web3-eth-abi": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.7.1.tgz",
- "integrity": "sha512-8BVBOoFX1oheXk+t+uERBibDaVZ5dxdcefpbFTWcBs7cdm0tP8CD1ZTCLi5Xo+1bolVHNH2dMSf/nEAssq5pUA==",
+ "node_modules/web3-eth/node_modules/@ethersproject/properties": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz",
+ "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==",
"dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
"dependencies": {
- "@ethersproject/abi": "5.0.7",
- "web3-utils": "1.7.1"
- },
- "engines": {
- "node": ">=8.0.0"
+ "@ethersproject/logger": "^5.8.0"
}
},
- "node_modules/web3-eth-ens/node_modules/web3-eth-iban": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.1.tgz",
- "integrity": "sha512-XG4I3QXuKB/udRwZdNEhdYdGKjkhfb/uH477oFVMLBqNimU/Cw8yXUI5qwFKvBHM+hMQWfzPDuSDEDKC2uuiMg==",
+ "node_modules/web3-eth/node_modules/@ethersproject/rlp": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz",
+ "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==",
"dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
"dependencies": {
- "bn.js": "^4.11.9",
- "web3-utils": "1.7.1"
- },
- "engines": {
- "node": ">=8.0.0"
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0"
}
},
- "node_modules/web3-eth-iban": {
- "version": "1.5.3",
- "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.5.3.tgz",
- "integrity": "sha512-vMzmGqolYZvRHwP9P4Nf6G8uYM5aTLlQu2a34vz78p0KlDC+eV1th3+90Qeaupa28EG7OO0IT1F0BejiIauOPw==",
+ "node_modules/web3-eth/node_modules/@ethersproject/signing-key": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz",
+ "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==",
"dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
"dependencies": {
- "bn.js": "^4.11.9",
- "web3-utils": "1.5.3"
- },
- "engines": {
- "node": ">=8.0.0"
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0",
+ "bn.js": "^5.2.1",
+ "elliptic": "6.6.1",
+ "hash.js": "1.1.7"
}
},
- "node_modules/web3-eth-iban/node_modules/eth-lib": {
- "version": "0.2.8",
- "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz",
- "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==",
+ "node_modules/web3-eth/node_modules/@ethersproject/strings": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz",
+ "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==",
"dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
"dependencies": {
- "bn.js": "^4.11.6",
- "elliptic": "^6.4.0",
- "xhr-request-promise": "^0.1.2"
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/constants": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0"
}
},
- "node_modules/web3-eth-iban/node_modules/web3-utils": {
- "version": "1.5.3",
- "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.5.3.tgz",
- "integrity": "sha512-56nRgA+Ad9SEyCv39g36rTcr5fpsd4L9LgV3FK0aB66nAMazLAA6Qz4lH5XrUKPDyBIPGJIR+kJsyRtwcu2q1Q==",
+ "node_modules/web3-eth/node_modules/@ethersproject/transactions": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz",
+ "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==",
"dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
"dependencies": {
- "bn.js": "^4.11.9",
- "eth-lib": "0.2.8",
- "ethereum-bloom-filters": "^1.0.6",
- "ethjs-unit": "0.1.6",
- "number-to-bn": "1.7.0",
- "randombytes": "^2.1.0",
- "utf8": "3.0.0"
- },
- "engines": {
- "node": ">=8.0.0"
+ "@ethersproject/address": "^5.8.0",
+ "@ethersproject/bignumber": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/constants": "^5.8.0",
+ "@ethersproject/keccak256": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0",
+ "@ethersproject/rlp": "^5.8.0",
+ "@ethersproject/signing-key": "^5.8.0"
}
},
- "node_modules/web3-eth-personal": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.7.1.tgz",
- "integrity": "sha512-02H6nFBNfNmFjMGZL6xcDi0r7tUhxrUP91FTFdoLyR94eIJDadPp4rpXfG7MVES873i1PReh4ep5pSCHbc3+Pg==",
+ "node_modules/web3-eth/node_modules/@ethersproject/web": {
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz",
+ "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==",
"dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.buymeacoffee.com/ricmoo"
+ }
+ ],
+ "license": "MIT",
"dependencies": {
- "@types/node": "^12.12.6",
- "web3-core": "1.7.1",
- "web3-core-helpers": "1.7.1",
- "web3-core-method": "1.7.1",
- "web3-net": "1.7.1",
- "web3-utils": "1.7.1"
- },
- "engines": {
- "node": ">=8.0.0"
+ "@ethersproject/base64": "^5.8.0",
+ "@ethersproject/bytes": "^5.8.0",
+ "@ethersproject/logger": "^5.8.0",
+ "@ethersproject/properties": "^5.8.0",
+ "@ethersproject/strings": "^5.8.0"
}
},
- "node_modules/web3-eth-personal/node_modules/@types/node": {
- "version": "12.20.47",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.47.tgz",
- "integrity": "sha512-BzcaRsnFuznzOItW1WpQrDHM7plAa7GIDMZ6b5pnMbkqEtM/6WCOhvZar39oeMQP79gwvFUWjjptE7/KGcNqFg==",
- "dev": true
- },
- "node_modules/web3-eth-personal/node_modules/web3-core-helpers": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.1.tgz",
- "integrity": "sha512-xn7Sx+s4CyukOJdlW8bBBDnUCWndr+OCJAlUe/dN2wXiyaGRiCWRhuQZrFjbxLeBt1fYFH7uWyYHhYU6muOHgw==",
+ "node_modules/web3-eth/node_modules/bn.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz",
+ "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==",
"dev": true,
- "dependencies": {
- "web3-eth-iban": "1.7.1",
- "web3-utils": "1.7.1"
- },
- "engines": {
- "node": ">=8.0.0"
- }
+ "license": "MIT"
},
- "node_modules/web3-eth-personal/node_modules/web3-eth-iban": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.1.tgz",
- "integrity": "sha512-XG4I3QXuKB/udRwZdNEhdYdGKjkhfb/uH477oFVMLBqNimU/Cw8yXUI5qwFKvBHM+hMQWfzPDuSDEDKC2uuiMg==",
+ "node_modules/web3-eth/node_modules/elliptic": {
+ "version": "6.6.1",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz",
+ "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"bn.js": "^4.11.9",
- "web3-utils": "1.7.1"
- },
- "engines": {
- "node": ">=8.0.0"
+ "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"
}
},
- "node_modules/web3-eth/node_modules/@ethersproject/abi": {
- "version": "5.0.7",
- "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.0.7.tgz",
- "integrity": "sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw==",
+ "node_modules/web3-eth/node_modules/elliptic/node_modules/bn.js": {
+ "version": "4.12.2",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz",
+ "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==",
"dev": true,
- "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"
- }
+ "license": "MIT"
},
"node_modules/web3-eth/node_modules/web3-core-helpers": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.1.tgz",
- "integrity": "sha512-xn7Sx+s4CyukOJdlW8bBBDnUCWndr+OCJAlUe/dN2wXiyaGRiCWRhuQZrFjbxLeBt1fYFH7uWyYHhYU6muOHgw==",
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.4.tgz",
+ "integrity": "sha512-r+L5ylA17JlD1vwS8rjhWr0qg7zVoVMDvWhajWA5r5+USdh91jRUYosp19Kd1m2vE034v7Dfqe1xYRoH2zvG0g==",
"dev": true,
+ "license": "LGPL-3.0",
"dependencies": {
- "web3-eth-iban": "1.7.1",
- "web3-utils": "1.7.1"
+ "web3-eth-iban": "1.10.4",
+ "web3-utils": "1.10.4"
},
"engines": {
"node": ">=8.0.0"
}
},
"node_modules/web3-eth/node_modules/web3-eth-abi": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.7.1.tgz",
- "integrity": "sha512-8BVBOoFX1oheXk+t+uERBibDaVZ5dxdcefpbFTWcBs7cdm0tP8CD1ZTCLi5Xo+1bolVHNH2dMSf/nEAssq5pUA==",
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.4.tgz",
+ "integrity": "sha512-cZ0q65eJIkd/jyOlQPDjr8X4fU6CRL1eWgdLwbWEpo++MPU/2P4PFk5ZLAdye9T5Sdp+MomePPJ/gHjLMj2VfQ==",
"dev": true,
+ "license": "LGPL-3.0",
"dependencies": {
- "@ethersproject/abi": "5.0.7",
- "web3-utils": "1.7.1"
+ "@ethersproject/abi": "^5.6.3",
+ "web3-utils": "1.10.4"
},
"engines": {
"node": ">=8.0.0"
}
},
"node_modules/web3-eth/node_modules/web3-eth-iban": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.1.tgz",
- "integrity": "sha512-XG4I3QXuKB/udRwZdNEhdYdGKjkhfb/uH477oFVMLBqNimU/Cw8yXUI5qwFKvBHM+hMQWfzPDuSDEDKC2uuiMg==",
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.4.tgz",
+ "integrity": "sha512-0gE5iNmOkmtBmbKH2aTodeompnNE8jEyvwFJ6s/AF6jkw9ky9Op9cqfzS56AYAbrqEFuClsqB/AoRves7LDELw==",
"dev": true,
+ "license": "LGPL-3.0",
"dependencies": {
- "bn.js": "^4.11.9",
- "web3-utils": "1.7.1"
+ "bn.js": "^5.2.1",
+ "web3-utils": "1.10.4"
},
"engines": {
"node": ">=8.0.0"
}
},
"node_modules/web3-net": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.7.1.tgz",
- "integrity": "sha512-8yPNp2gvjInWnU7DCoj4pIPNhxzUjrxKlODsyyXF8j0q3Z2VZuQp+c63gL++r2Prg4fS8t141/HcJw4aMu5sVA==",
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.10.4.tgz",
+ "integrity": "sha512-mKINnhOOnZ4koA+yV2OT5s5ztVjIx7IY9a03w6s+yao/BUn+Luuty0/keNemZxTr1E8Ehvtn28vbOtW7Ids+Ow==",
"dev": true,
+ "license": "LGPL-3.0",
"dependencies": {
- "web3-core": "1.7.1",
- "web3-core-method": "1.7.1",
- "web3-utils": "1.7.1"
+ "web3-core": "1.10.4",
+ "web3-core-method": "1.10.4",
+ "web3-utils": "1.10.4"
},
"engines": {
"node": ">=8.0.0"
}
},
"node_modules/web3-providers-http": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.7.1.tgz",
- "integrity": "sha512-dmiO6G4dgAa3yv+2VD5TduKNckgfR97VI9YKXVleWdcpBoKXe2jofhdvtafd42fpIoaKiYsErxQNcOC5gI/7Vg==",
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.10.4.tgz",
+ "integrity": "sha512-m2P5Idc8hdiO0l60O6DSCPw0kw64Zgi0pMjbEFRmxKIck2Py57RQMu4bxvkxJwkF06SlGaEQF8rFZBmuX7aagQ==",
"dev": true,
+ "license": "LGPL-3.0",
"dependencies": {
- "web3-core-helpers": "1.7.1",
- "xhr2-cookies": "1.1.0"
+ "abortcontroller-polyfill": "^1.7.5",
+ "cross-fetch": "^4.0.0",
+ "es6-promise": "^4.2.8",
+ "web3-core-helpers": "1.10.4"
},
"engines": {
"node": ">=8.0.0"
}
},
+ "node_modules/web3-providers-http/node_modules/bn.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz",
+ "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/web3-providers-http/node_modules/web3-core-helpers": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.1.tgz",
- "integrity": "sha512-xn7Sx+s4CyukOJdlW8bBBDnUCWndr+OCJAlUe/dN2wXiyaGRiCWRhuQZrFjbxLeBt1fYFH7uWyYHhYU6muOHgw==",
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.4.tgz",
+ "integrity": "sha512-r+L5ylA17JlD1vwS8rjhWr0qg7zVoVMDvWhajWA5r5+USdh91jRUYosp19Kd1m2vE034v7Dfqe1xYRoH2zvG0g==",
"dev": true,
+ "license": "LGPL-3.0",
"dependencies": {
- "web3-eth-iban": "1.7.1",
- "web3-utils": "1.7.1"
+ "web3-eth-iban": "1.10.4",
+ "web3-utils": "1.10.4"
},
"engines": {
"node": ">=8.0.0"
}
},
"node_modules/web3-providers-http/node_modules/web3-eth-iban": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.1.tgz",
- "integrity": "sha512-XG4I3QXuKB/udRwZdNEhdYdGKjkhfb/uH477oFVMLBqNimU/Cw8yXUI5qwFKvBHM+hMQWfzPDuSDEDKC2uuiMg==",
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.4.tgz",
+ "integrity": "sha512-0gE5iNmOkmtBmbKH2aTodeompnNE8jEyvwFJ6s/AF6jkw9ky9Op9cqfzS56AYAbrqEFuClsqB/AoRves7LDELw==",
"dev": true,
+ "license": "LGPL-3.0",
"dependencies": {
- "bn.js": "^4.11.9",
- "web3-utils": "1.7.1"
+ "bn.js": "^5.2.1",
+ "web3-utils": "1.10.4"
},
"engines": {
"node": ">=8.0.0"
}
},
"node_modules/web3-providers-ipc": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.7.1.tgz",
- "integrity": "sha512-uNgLIFynwnd5M9ZC0lBvRQU5iLtU75hgaPpc7ZYYR+kjSk2jr2BkEAQhFVJ8dlqisrVmmqoAPXOEU0flYZZgNQ==",
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.10.4.tgz",
+ "integrity": "sha512-YRF/bpQk9z3WwjT+A6FI/GmWRCASgd+gC0si7f9zbBWLXjwzYAKG73bQBaFRAHex1hl4CVcM5WUMaQXf3Opeuw==",
"dev": true,
+ "license": "LGPL-3.0",
"dependencies": {
"oboe": "2.1.5",
- "web3-core-helpers": "1.7.1"
+ "web3-core-helpers": "1.10.4"
},
"engines": {
"node": ">=8.0.0"
}
},
+ "node_modules/web3-providers-ipc/node_modules/bn.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz",
+ "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/web3-providers-ipc/node_modules/web3-core-helpers": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.1.tgz",
- "integrity": "sha512-xn7Sx+s4CyukOJdlW8bBBDnUCWndr+OCJAlUe/dN2wXiyaGRiCWRhuQZrFjbxLeBt1fYFH7uWyYHhYU6muOHgw==",
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.4.tgz",
+ "integrity": "sha512-r+L5ylA17JlD1vwS8rjhWr0qg7zVoVMDvWhajWA5r5+USdh91jRUYosp19Kd1m2vE034v7Dfqe1xYRoH2zvG0g==",
"dev": true,
+ "license": "LGPL-3.0",
"dependencies": {
- "web3-eth-iban": "1.7.1",
- "web3-utils": "1.7.1"
+ "web3-eth-iban": "1.10.4",
+ "web3-utils": "1.10.4"
},
"engines": {
"node": ">=8.0.0"
}
},
"node_modules/web3-providers-ipc/node_modules/web3-eth-iban": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.1.tgz",
- "integrity": "sha512-XG4I3QXuKB/udRwZdNEhdYdGKjkhfb/uH477oFVMLBqNimU/Cw8yXUI5qwFKvBHM+hMQWfzPDuSDEDKC2uuiMg==",
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.4.tgz",
+ "integrity": "sha512-0gE5iNmOkmtBmbKH2aTodeompnNE8jEyvwFJ6s/AF6jkw9ky9Op9cqfzS56AYAbrqEFuClsqB/AoRves7LDELw==",
"dev": true,
+ "license": "LGPL-3.0",
"dependencies": {
- "bn.js": "^4.11.9",
- "web3-utils": "1.7.1"
+ "bn.js": "^5.2.1",
+ "web3-utils": "1.10.4"
},
"engines": {
"node": ">=8.0.0"
}
},
"node_modules/web3-providers-ws": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.7.1.tgz",
- "integrity": "sha512-Uj0n5hdrh0ESkMnTQBsEUS2u6Unqdc7Pe4Zl+iZFb7Yn9cIGsPJBl7/YOP4137EtD5ueXAv+MKwzcelpVhFiFg==",
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.10.4.tgz",
+ "integrity": "sha512-j3FBMifyuFFmUIPVQR4pj+t5ILhAexAui0opgcpu9R5LxQrLRUZxHSnU+YO25UycSOa/NAX8A+qkqZNpcFAlxA==",
"dev": true,
+ "license": "LGPL-3.0",
"dependencies": {
"eventemitter3": "4.0.4",
- "web3-core-helpers": "1.7.1",
+ "web3-core-helpers": "1.10.4",
"websocket": "^1.0.32"
},
"engines": {
"node": ">=8.0.0"
}
},
+ "node_modules/web3-providers-ws/node_modules/bn.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz",
+ "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/web3-providers-ws/node_modules/web3-core-helpers": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.1.tgz",
- "integrity": "sha512-xn7Sx+s4CyukOJdlW8bBBDnUCWndr+OCJAlUe/dN2wXiyaGRiCWRhuQZrFjbxLeBt1fYFH7uWyYHhYU6muOHgw==",
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.4.tgz",
+ "integrity": "sha512-r+L5ylA17JlD1vwS8rjhWr0qg7zVoVMDvWhajWA5r5+USdh91jRUYosp19Kd1m2vE034v7Dfqe1xYRoH2zvG0g==",
"dev": true,
+ "license": "LGPL-3.0",
"dependencies": {
- "web3-eth-iban": "1.7.1",
- "web3-utils": "1.7.1"
+ "web3-eth-iban": "1.10.4",
+ "web3-utils": "1.10.4"
},
"engines": {
"node": ">=8.0.0"
}
},
"node_modules/web3-providers-ws/node_modules/web3-eth-iban": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.1.tgz",
- "integrity": "sha512-XG4I3QXuKB/udRwZdNEhdYdGKjkhfb/uH477oFVMLBqNimU/Cw8yXUI5qwFKvBHM+hMQWfzPDuSDEDKC2uuiMg==",
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.4.tgz",
+ "integrity": "sha512-0gE5iNmOkmtBmbKH2aTodeompnNE8jEyvwFJ6s/AF6jkw9ky9Op9cqfzS56AYAbrqEFuClsqB/AoRves7LDELw==",
"dev": true,
+ "license": "LGPL-3.0",
"dependencies": {
- "bn.js": "^4.11.9",
- "web3-utils": "1.7.1"
+ "bn.js": "^5.2.1",
+ "web3-utils": "1.10.4"
},
"engines": {
"node": ">=8.0.0"
}
},
"node_modules/web3-shh": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.7.1.tgz",
- "integrity": "sha512-NO+jpEjo8kYX6c7GiaAm57Sx93PLYkWYUCWlZmUOW7URdUcux8VVluvTWklGPvdM9H1WfDrol91DjuSW+ykyqg==",
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.10.4.tgz",
+ "integrity": "sha512-cOH6iFFM71lCNwSQrC3niqDXagMqrdfFW85hC9PFUrAr3PUrIem8TNstTc3xna2bwZeWG6OBy99xSIhBvyIACw==",
"dev": true,
"hasInstallScript": true,
+ "license": "LGPL-3.0",
"dependencies": {
- "web3-core": "1.7.1",
- "web3-core-method": "1.7.1",
- "web3-core-subscriptions": "1.7.1",
- "web3-net": "1.7.1"
+ "web3-core": "1.10.4",
+ "web3-core-method": "1.10.4",
+ "web3-core-subscriptions": "1.10.4",
+ "web3-net": "1.10.4"
},
"engines": {
"node": ">=8.0.0"
}
},
"node_modules/web3-utils": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.1.tgz",
- "integrity": "sha512-fef0EsqMGJUgiHPdX+KN9okVWshbIumyJPmR+btnD1HgvoXijKEkuKBv0OmUqjbeqmLKP2/N9EiXKJel5+E1Dw==",
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.4.tgz",
+ "integrity": "sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==",
"dev": true,
+ "license": "LGPL-3.0",
"dependencies": {
- "bn.js": "^4.11.9",
+ "@ethereumjs/util": "^8.1.0",
+ "bn.js": "^5.2.1",
"ethereum-bloom-filters": "^1.0.6",
- "ethereumjs-util": "^7.1.0",
+ "ethereum-cryptography": "^2.1.2",
"ethjs-unit": "0.1.6",
"number-to-bn": "1.7.0",
"randombytes": "^2.1.0",
@@ -23846,6 +25928,78 @@
"node": ">=8.0.0"
}
},
+ "node_modules/web3-utils/node_modules/@noble/hashes": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz",
+ "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/web3-utils/node_modules/@scure/base": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz",
+ "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/web3-utils/node_modules/@scure/bip32": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz",
+ "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@noble/curves": "~1.4.0",
+ "@noble/hashes": "~1.4.0",
+ "@scure/base": "~1.1.6"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/web3-utils/node_modules/@scure/bip39": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz",
+ "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@noble/hashes": "~1.4.0",
+ "@scure/base": "~1.1.6"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/web3-utils/node_modules/bn.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz",
+ "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/web3-utils/node_modules/ethereum-cryptography": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz",
+ "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@noble/curves": "1.4.2",
+ "@noble/hashes": "1.4.0",
+ "@scure/bip32": "1.4.0",
+ "@scure/bip39": "1.3.0"
+ }
+ },
"node_modules/webidl-conversions": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
diff --git a/types/Cargo.toml b/types/Cargo.toml
index b25532ea0d7d1..e722e32d64d30 100644
--- a/types/Cargo.toml
+++ b/types/Cargo.toml
@@ -65,6 +65,7 @@ strum = { workspace = true }
strum_macros = { workspace = true }
thiserror = { workspace = true }
derive_more = { workspace = true }
+url = { workspace = true }
[dev-dependencies]
ahash = { workspace = true }
@@ -86,11 +87,15 @@ regex = { workspace = true }
reqwest = { workspace = true }
serde_json = { workspace = true }
tokio = { workspace = true }
-url = { workspace = true }
[features]
default = []
-fuzzing = ["proptest", "proptest-derive", "aptos-crypto/fuzzing", "move-core-types/fuzzing"]
+fuzzing = [
+ "proptest",
+ "proptest-derive",
+ "aptos-crypto/fuzzing",
+ "move-core-types/fuzzing",
+]
[[bench]]
name = "keyless"
diff --git a/types/src/on_chain_config/appchain_registry.rs b/types/src/on_chain_config/appchain_registry.rs
new file mode 100644
index 0000000000000..6e213906cf95b
--- /dev/null
+++ b/types/src/on_chain_config/appchain_registry.rs
@@ -0,0 +1,59 @@
+use crate::account_config::CORE_CODE_ADDRESS;
+use move_core_types::value::{serialize_values, MoveStruct, MoveValue};
+use serde::{Deserialize, Serialize};
+
+#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
+pub struct AppchainRegistryConfig {
+ reserved_ranges: Vec,
+}
+
+impl AppchainRegistryConfig {
+ pub fn new(reserved_ranges: Vec) -> Self {
+ Self { reserved_ranges }
+ }
+
+ pub fn serialize_into_move_values(&self) -> Vec> {
+ let reserved_ranges_vec_move_value: Vec =
+ self.reserved_ranges.iter().map(MoveValue::from).collect();
+ let arguments = vec![
+ MoveValue::Signer(CORE_CODE_ADDRESS),
+ MoveValue::Vector(reserved_ranges_vec_move_value),
+ ];
+ serialize_values(&arguments)
+ }
+}
+
+#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
+pub struct ReservedRange {
+ start: u16,
+ end: u16,
+}
+
+impl From<&ReservedRange> for MoveValue {
+ fn from(value: &ReservedRange) -> MoveValue {
+ MoveValue::Struct(MoveStruct::new(vec![
+ MoveValue::U16(value.start),
+ MoveValue::U16(value.end),
+ ]))
+ }
+}
+
+impl Default for ReservedRange {
+ fn default() -> Self {
+ Self {
+ start: Self::DEFAULT_START,
+ end: Self::DEFAULT_END,
+ }
+ }
+}
+
+impl ReservedRange {
+ // Currently, default values are not finalized yet, however, by considering that our production
+ // networks chain IDs falls between 0-10, according to me the current default values are best.
+ pub const DEFAULT_START: u16 = 0;
+ pub const DEFAULT_END: u16 = 10;
+
+ pub fn new(start: u16, end: u16) -> Self {
+ Self { start, end }
+ }
+}
diff --git a/types/src/on_chain_config/aptos_features.rs b/types/src/on_chain_config/aptos_features.rs
index 72dc7c68be297..0aa6667629782 100644
--- a/types/src/on_chain_config/aptos_features.rs
+++ b/types/src/on_chain_config/aptos_features.rs
@@ -170,7 +170,6 @@ impl FeatureFlag {
FeatureFlag::SUPRA_COUNT_FAILED_PROPOSALS,
FeatureFlag::SUPRA_DELEGATION_POOL_IDENTITY,
FeatureFlag::SUPRA_AUTOMATION_V2,
- FeatureFlag::SUPRA_APPCHAINS,
]
}
}
diff --git a/types/src/on_chain_config/funnel_node_registry.rs b/types/src/on_chain_config/funnel_node_registry.rs
new file mode 100644
index 0000000000000..f8efe4fda04f2
--- /dev/null
+++ b/types/src/on_chain_config/funnel_node_registry.rs
@@ -0,0 +1,32 @@
+use crate::account_config::CORE_CODE_ADDRESS;
+use move_core_types::value::{serialize_values, MoveStruct, MoveValue};
+use serde::{Deserialize, Serialize};
+use url::Url;
+
+#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
+pub struct FunnelNodeRegistryConfig {
+ funnel_nodes: Vec,
+}
+
+impl FunnelNodeRegistryConfig {
+ pub fn new(funnel_nodes: Vec) -> Self {
+ Self { funnel_nodes }
+ }
+
+ pub fn serialize_into_move_values(&self) -> Vec> {
+ let funnel_nodes_vec_move_value: Vec = self
+ .funnel_nodes
+ .iter()
+ .map(|node_endpoint_url| {
+ MoveValue::Struct(MoveStruct::new(vec![MoveValue::vector_u8(
+ node_endpoint_url.to_string().into_bytes(),
+ )]))
+ })
+ .collect();
+ let arguments = vec![
+ MoveValue::Signer(CORE_CODE_ADDRESS),
+ MoveValue::Vector(funnel_nodes_vec_move_value),
+ ];
+ serialize_values(&arguments)
+ }
+}
diff --git a/types/src/on_chain_config/mod.rs b/types/src/on_chain_config/mod.rs
index 30fd0b8c79549..f37454f35d6b1 100644
--- a/types/src/on_chain_config/mod.rs
+++ b/types/src/on_chain_config/mod.rs
@@ -29,8 +29,10 @@ mod commit_history;
mod consensus_config;
mod evm_genesis_config;
mod execution_config;
+mod funnel_node_registry;
mod gas_schedule;
mod jwk_consensus_config;
+mod appchain_registry;
pub mod randomness_api_v0_config;
mod randomness_config;
mod timed_features;
@@ -46,7 +48,8 @@ pub use self::{
},
automation_registry::{
AutomationCycleDetails, AutomationCycleEvent, AutomationCycleInfo, AutomationCycleState,
- AutomationRegistryConfig, AutomationRegistryConfigV1, AutomationRegistryConfigV2, AutomationCycleTransitionState
+ AutomationCycleTransitionState, AutomationRegistryConfig, AutomationRegistryConfigV1,
+ AutomationRegistryConfigV2,
},
commit_history::CommitHistoryResource,
consensus_config::{
@@ -54,14 +57,19 @@ pub use self::{
LeaderReputationType, OnChainConsensusConfig, ProposerAndVoterConfig, ProposerElectionType,
ValidatorTxnConfig,
},
+ evm_genesis_config::{
+ GenesisEvmContract, GenesisEvmEOA, OnChainEvmGenesisConfig, EVM_GENESIS_EVENT_MOVE_TYPE_TAG,
+ },
execution_config::{
BlockGasLimitType, ExecutionConfigV1, ExecutionConfigV2, ExecutionConfigV4,
OnChainExecutionConfig, TransactionDeduperType, TransactionShufflerType,
},
+ funnel_node_registry::FunnelNodeRegistryConfig,
gas_schedule::{DiffItem, GasSchedule, GasScheduleV2, StorageGasSchedule},
jwk_consensus_config::{
ConfigV1 as JWKConsensusConfigV1, OIDCProvider, OnChainJWKConsensusConfig,
},
+ appchain_registry::{AppchainRegistryConfig, ReservedRange},
randomness_config::{
OnChainRandomnessConfig, RandomnessConfigMoveStruct, RandomnessConfigSeqNum,
},
@@ -69,7 +77,6 @@ pub use self::{
timestamp::CurrentTimeMicroseconds,
transaction_fee::TransactionFeeBurnCap,
validator_set::{ConsensusScheme, ValidatorSet},
- evm_genesis_config::{OnChainEvmGenesisConfig, GenesisEvmContract, GenesisEvmEOA, EVM_GENESIS_EVENT_MOVE_TYPE_TAG},
};
/// To register an on-chain config in Rust: