From 6b1f06445bdb7f63bf1ad1fd207c36a788023e31 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Wed, 31 Mar 2021 08:34:44 +0000 Subject: [PATCH 01/66] build: switch substrate branch to frontier Signed-off-by: Yaroslav Bolyukin --- node/Cargo.toml | 58 +++++++++++++++++++-------------------- pallets/nft/Cargo.toml | 24 ++++++++-------- runtime/Cargo.toml | 62 +++++++++++++++++++++--------------------- 3 files changed, 72 insertions(+), 72 deletions(-) diff --git a/node/Cargo.toml b/node/Cargo.toml index 9bcd2943c7..698c493812 100644 --- a/node/Cargo.toml +++ b/node/Cargo.toml @@ -28,36 +28,36 @@ jsonrpc-core = '15.0.0' # Substrate dependencies nft-runtime = { path = '../runtime', version = '3.0.0' } -frame-benchmarking = '3.0.0' -frame-benchmarking-cli = '3.0.0' -pallet-transaction-payment-rpc = '3.0.0' -sc-basic-authorship = '0.9.0' -sc-cli = { features = ['wasmtime'], version = '0.9.0' } -sc-client-api = '3.0.0' -sc-consensus = '0.9.0' -sc-consensus-aura = '0.9.0' -sc-executor = { features = ['wasmtime'], version = '0.9.0' } -sc-finality-grandpa = '0.9.0' +frame-benchmarking = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +frame-benchmarking-cli = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-transaction-payment-rpc = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sc-basic-authorship = { version = '0.9.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sc-cli = { version = '0.9.0', features = ['wasmtime'], git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sc-client-api = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sc-consensus = { version = '0.9.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sc-consensus-aura = { version = '0.9.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sc-executor = { version = '0.9.0', features = ['wasmtime'], git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sc-finality-grandpa = { version = '0.9.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } -sc-keystore = '3.0.0' -sc-rpc = '3.0.0' -sc-rpc-api = '0.9.0' -sc-service = { features = ['wasmtime'], version = '0.9.0' } -sc-transaction-pool = '3.0.0' -sp-api = '3.0.0' -sp-block-builder = '3.0.0' -sp-blockchain = '3.0.0' -sp-consensus = '0.9.0' -sp-consensus-aura = '0.9.0' -sp-core = '3.0.0' -sp-finality-grandpa = '3.0.0' -sp-inherents = '3.0.0' -sp-runtime = '3.0.0' -sp-transaction-pool = '3.0.0' -substrate-frame-rpc-system = '3.0.0' -sc-network = '0.9.0' -pallet-contracts-rpc = '3.0.0' -sc-telemetry = '3.0.0' +sc-keystore = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sc-rpc = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sc-rpc-api = { version = '0.9.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sc-service = { version = '0.9.0', features = ['wasmtime'], git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sc-transaction-pool = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-api = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-block-builder = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-blockchain = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-consensus = { version = '0.9.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-consensus-aura = { version = '0.9.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-core = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-finality-grandpa = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-inherents = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-runtime = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-transaction-pool = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +substrate-frame-rpc-system = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sc-network = { version = '0.9.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-contracts-rpc = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sc-telemetry = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } serde = { version = "1.0.102", features = ["derive"] } serde_json = "1.0.41" diff --git a/pallets/nft/Cargo.toml b/pallets/nft/Cargo.toml index 0db757b7fc..299e13a573 100644 --- a/pallets/nft/Cargo.toml +++ b/pallets/nft/Cargo.toml @@ -20,18 +20,18 @@ version = '2.0.0' [dependencies] serde = { version = "1.0.119" } -frame-support = { default-features = false, version = '3.0.0' } -frame-system = { default-features = false, version = '3.0.0' } -pallet-balances = { default-features = false, version = '3.0.0' } -pallet-timestamp = { default-features = false, version = '3.0.0' } -pallet-randomness-collective-flip = { default-features = false, version = '3.0.0' } -sp-std = { default-features = false, version = '3.0.0' } -frame-benchmarking = { default-features = false, version = '3.0.0', optional = true } -sp-core = { default-features = false, version = '3.0.0' } -sp-io = { default-features = false, version = '3.0.0' } -sp-runtime = { default-features = false, version = '3.0.0' } -pallet-contracts = { default-features = false, version = '3.0.0' } -pallet-transaction-payment = { default-features = false, version = "3.0.0" } +frame-support = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +frame-system = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-balances = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-timestamp = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-randomness-collective-flip = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-std = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +frame-benchmarking = { default-features = false, version = '3.0.0', optional = true, git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-core = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-io = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-runtime = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-contracts = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-transaction-payment = { default-features = false, version = "3.0.0", git = "https://github.com/paritytech/substrate.git", branch = "frontier" } [features] default = ['std'] diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index e7fcc64bbb..3a25d0d128 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -28,37 +28,37 @@ serde = { features = ['derive'], optional = true, version = '1.0.119' } pallet-nft = { path = '../pallets/nft', default-features = false, version = '3.0.0' } # Substrate dependencies -frame-benchmarking = { default-features = false, optional = true, version = '3.0.0' } -frame-executive = { default-features = false, version = '3.0.0' } -frame-support = { default-features = false, version = '3.0.0' } -frame-system = { default-features = false, version = '3.0.0' } -frame-system-benchmarking = { default-features = false, optional = true, version = '3.0.0' } -frame-system-rpc-runtime-api = { default-features = false, version = '3.0.0' } -pallet-aura = { default-features = false, version = '3.0.0' } -pallet-balances = { default-features = false, version = '3.0.0' } -pallet-contracts = { default-features = false, version = '3.0.0' } -pallet-contracts-primitives = { default-features = false, version = '3.0.0' } -pallet-contracts-rpc-runtime-api = { default-features = false, version = '3.0.0' } -pallet-grandpa = { default-features = false, version = '3.0.0' } -pallet-randomness-collective-flip = { default-features = false, version = '3.0.0' } -pallet-sudo = { default-features = false, version = '3.0.0' } -pallet-timestamp = { default-features = false, version = '3.0.0' } -pallet-transaction-payment = { default-features = false, version = '3.0.0' } -pallet-transaction-payment-rpc-runtime-api = { default-features = false, version = '3.0.0' } -pallet-treasury = { default-features = false, version = "3.0.0" } -pallet-vesting = { default-features = false, version = "3.0.0" } -sp-arithmetic = { default-features = false, version = '3.0.0' } -sp-api = { default-features = false, version = '3.0.0' } -sp-block-builder = { default-features = false, version = '3.0.0' } -sp-consensus-aura = { default-features = false, version = '0.9.0' } -sp-core = { default-features = false, version = '3.0.0' } -sp-inherents = { default-features = false, version = '3.0.0' } -sp-offchain = { default-features = false, version = '3.0.0' } -sp-runtime = { default-features = false, version = '3.0.0' } -sp-session = { default-features = false, version = '3.0.0' } -sp-std = { default-features = false, version = '3.0.0' } -sp-transaction-pool = { default-features = false, version = '3.0.0' } -sp-version = { default-features = false, version = '3.0.0' } +frame-benchmarking = { default-features = false, optional = true, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +frame-executive = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +frame-support = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +frame-system = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +frame-system-benchmarking = { default-features = false, optional = true, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +frame-system-rpc-runtime-api = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-aura = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-balances = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-contracts = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-contracts-primitives = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-contracts-rpc-runtime-api = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-grandpa = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-randomness-collective-flip = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-sudo = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-timestamp = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-transaction-payment = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-transaction-payment-rpc-runtime-api = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-treasury = { default-features = false, version = "3.0.0", git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-vesting = { default-features = false, version = "3.0.0", git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-arithmetic = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-api = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-block-builder = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-consensus-aura = { default-features = false, version = '0.9.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-core = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-inherents = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-offchain = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-runtime = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-session = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-std = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-transaction-pool = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-version = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } smallvec = "1.4.1" [features] From c72f0fa64b8e9909cc06767fb1c96ea3e270a825 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Wed, 31 Mar 2021 08:36:12 +0000 Subject: [PATCH 02/66] build: add frontier dependencies Signed-off-by: Yaroslav Bolyukin --- node/Cargo.toml | 9 +++++++++ runtime/Cargo.toml | 4 ++++ 2 files changed, 13 insertions(+) diff --git a/node/Cargo.toml b/node/Cargo.toml index 698c493812..930d2dbfbb 100644 --- a/node/Cargo.toml +++ b/node/Cargo.toml @@ -25,12 +25,19 @@ flexi_logger = "0.15.7" parking_lot = '0.10.0' structopt = '0.3.8' jsonrpc-core = '15.0.0' +jsonrpc-pubsub = "15.0.0" # Substrate dependencies nft-runtime = { path = '../runtime', version = '3.0.0' } frame-benchmarking = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } frame-benchmarking-cli = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } pallet-transaction-payment-rpc = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +fc-rpc-core = { version = "0.1.0", git = "https://github.com/PureStake/frontier.git", branch = "notlesh-substrate-8b3e5bc" } +fc-consensus = { version = "0.1.0", git = "https://github.com/PureStake/frontier.git", branch = "notlesh-substrate-8b3e5bc" } +fc-mapping-sync = { version = "0.1.0", git = "https://github.com/PureStake/frontier.git", branch = "notlesh-substrate-8b3e5bc" } +fc-rpc = { version = "0.1.0", git = "https://github.com/PureStake/frontier.git", branch = "notlesh-substrate-8b3e5bc" } +fc-db = { version = "0.1.0", git = "https://github.com/PureStake/frontier.git", branch = "notlesh-substrate-8b3e5bc" } +fp-rpc = { version = "0.1.0", git = "https://github.com/PureStake/frontier.git", branch = "notlesh-substrate-8b3e5bc" } sc-basic-authorship = { version = '0.9.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } sc-cli = { version = '0.9.0', features = ['wasmtime'], git = "https://github.com/paritytech/substrate.git", branch = "frontier" } sc-client-api = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } @@ -53,10 +60,12 @@ sp-core = { version = '3.0.0', git = "https://github.com/paritytech/substrate.gi sp-finality-grandpa = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } sp-inherents = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } sp-runtime = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-timestamp = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } sp-transaction-pool = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } substrate-frame-rpc-system = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } sc-network = { version = '0.9.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } pallet-contracts-rpc = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-ethereum = { version = "0.1.0", git = "https://github.com/PureStake/frontier.git", branch = "notlesh-substrate-8b3e5bc" } sc-telemetry = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } serde = { version = "1.0.102", features = ["derive"] } diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 3a25d0d128..13100c8dfc 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -39,6 +39,8 @@ pallet-balances = { default-features = false, version = '3.0.0', git = "https:// pallet-contracts = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } pallet-contracts-primitives = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } pallet-contracts-rpc-runtime-api = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-evm = { default-features = false, version = "3.0.0", git = "https://github.com/PureStake/frontier.git", branch = "notlesh-substrate-8b3e5bc" } +pallet-ethereum = { default-features = false, version = "0.1.0", git = "https://github.com/PureStake/frontier.git", branch = "notlesh-substrate-8b3e5bc" } pallet-grandpa = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } pallet-randomness-collective-flip = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } pallet-sudo = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } @@ -47,6 +49,7 @@ pallet-transaction-payment = { default-features = false, version = '3.0.0', git pallet-transaction-payment-rpc-runtime-api = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } pallet-treasury = { default-features = false, version = "3.0.0", git = "https://github.com/paritytech/substrate.git", branch = "frontier" } pallet-vesting = { default-features = false, version = "3.0.0", git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +fp-rpc = { default-features = false, version = "0.1.0", git = "https://github.com/PureStake/frontier.git", branch = "notlesh-substrate-8b3e5bc" } sp-arithmetic = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } sp-api = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } sp-block-builder = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } @@ -94,6 +97,7 @@ std = [ 'pallet-transaction-payment-rpc-runtime-api/std', 'pallet-treasury/std', 'pallet-vesting/std', + 'pallet-evm/std', 'pallet-nft/std', 'sp-api/std', From 7d3a8681206d234b401d10799d215a6a891edcda Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Wed, 31 Mar 2021 08:37:18 +0000 Subject: [PATCH 03/66] build: resolve dependencies Lockfile is edited manually, better do not recreate it Signed-off-by: Yaroslav Bolyukin --- Cargo.lock | 1181 +++++++++++++++++++++++++++++++++++----------------- Cargo.toml | 1 + 2 files changed, 791 insertions(+), 391 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8f9bd00161..b8d95c0591 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,5 +1,7 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. +version = 3 + [[package]] name = "Inflector" version = "0.11.4" @@ -248,13 +250,13 @@ dependencies = [ [[package]] name = "async-process" -version = "1.0.2" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef37b86e2fa961bae5a4d212708ea0154f904ce31d1a4a7f47e1bbc33a0c040b" +checksum = "4c8cea09c1fb10a317d1b5af8024eeba256d6554763e85ecd90ff8df31c7bbda" dependencies = [ "async-io", "blocking", - "cfg-if 1.0.0", + "cfg-if 0.1.10", "event-listener", "futures-lite", "once_cell", @@ -405,9 +407,9 @@ checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" [[package]] name = "bincode" -version = "1.3.1" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30d3a39baa26f9651f17b375061f3233dde33424a8b72b0dbe93a68a0bc896d" +checksum = "d175dfa69e619905c4c3cdb7c3c203fa3bdd5d51184e3afdb2742c0280493772" dependencies = [ "byteorder", "serde", @@ -445,9 +447,9 @@ checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" [[package]] name = "bitvec" -version = "0.20.1" +version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5011ffc90248764d7005b0e10c7294f5aa1bd87d9dd7248f4ad475b347c294d" +checksum = "1f682656975d3a682daff957be4ddeb65d6ad656737cd821f2d00685ae466af1" dependencies = [ "funty", "radium", @@ -581,9 +583,9 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bstr" -version = "0.2.15" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a40b47ad93e1a5404e6c18dec46b628214fee441c70f4ab5d6942142cc268a3d" +checksum = "473fc6b38233f9af7baa94fb5852dca389e3d95b8e21c8e3719301462c5d9faf" dependencies = [ "memchr", ] @@ -617,9 +619,9 @@ checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" [[package]] name = "byteorder" -version = "1.4.2" +version = "1.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae44d1a3d5a19df61dd0c8beb138458ac2a53a7ac09eba97d55592540004306b" +checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" [[package]] name = "bytes" @@ -802,12 +804,6 @@ dependencies = [ "cache-padded", ] -[[package]] -name = "const_fn" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b9d6de7f49e22cf97ad17fc4036ece69300032f45f78f30b4a4482cdc3f4a6" - [[package]] name = "constant_time_eq" version = "0.1.5" @@ -983,7 +979,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94af6efb46fef72616855b036a624cf27ba656ffc9be1b9a3c931cfc7749a9a9" dependencies = [ "cfg-if 1.0.0", - "crossbeam-epoch 0.9.1", + "crossbeam-epoch 0.9.2", "crossbeam-utils 0.8.1", ] @@ -1004,14 +1000,14 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1aaa739f95311c2c7887a76863f500026092fb1dce0161dab577e559ef3569d" +checksum = "d60ab4a8dba064f2fbb5aa270c28da5cf4bbd0e72dae1140a6b0353a779dbe00" dependencies = [ "cfg-if 1.0.0", - "const_fn", "crossbeam-utils 0.8.1", "lazy_static", + "loom", "memoffset 0.6.1", "scopeguard", ] @@ -1362,12 +1358,111 @@ dependencies = [ "libc", ] +[[package]] +name = "ethbloom" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "779864b9c7f7ead1f092972c3257496c6a84b46dba2ce131dd8a282cb2cc5972" +dependencies = [ + "crunchy", + "fixed-hash", + "impl-codec", + "impl-rlp", + "impl-serde", + "tiny-keccak", +] + +[[package]] +name = "ethereum" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567ce064a8232c16e2b2c2173a936b91fbe35c2f2c5278871f5a1a31688b42e9" +dependencies = [ + "ethereum-types", + "funty", + "hash-db", + "hash256-std-hasher", + "parity-scale-codec", + "rlp", + "rlp-derive", + "serde", + "sha3 0.9.1", + "triehash", +] + +[[package]] +name = "ethereum-types" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f64b5df66a228d85e4b17e5d6c6aa43b0310898ffe8a85988c4c032357aaabfd" +dependencies = [ + "ethbloom", + "fixed-hash", + "impl-codec", + "impl-rlp", + "impl-serde", + "primitive-types", + "uint", +] + [[package]] name = "event-listener" version = "2.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7531096570974c3a9dcf9e4b8e1cede1ec26cf5046219fb3b9d897503b9be59" +[[package]] +name = "evm" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b4bd1fb06a4962a243c8be285d8a9b2493ffa79acb32633ad07a0bc523b1acd" +dependencies = [ + "ethereum", + "evm-core", + "evm-gasometer", + "evm-runtime", + "log", + "parity-scale-codec", + "primitive-types", + "rlp", + "serde", + "sha3 0.8.2", +] + +[[package]] +name = "evm-core" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b4eea3882c798813a6f92e8855ec1fc3f5ababd8b274cb81d4bedee701b478e" +dependencies = [ + "funty", + "parity-scale-codec", + "primitive-types", + "serde", +] + +[[package]] +name = "evm-gasometer" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a8f04dcc8b0296652eabfa443a08ebed6071a1178e0f42a7f7b63a612bddf0b" +dependencies = [ + "evm-core", + "evm-runtime", + "primitive-types", +] + +[[package]] +name = "evm-runtime" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54c302f29ca8bba82a382aa52d427869964179e4f24eae57bde70958ce9b7607" +dependencies = [ + "evm-core", + "primitive-types", + "sha3 0.8.2", +] + [[package]] name = "exit-future" version = "0.2.0" @@ -1420,6 +1515,117 @@ dependencies = [ "instant", ] +[[package]] +name = "fc-consensus" +version = "0.1.0" +source = "git+https://github.com/PureStake/frontier.git?branch=notlesh-substrate-8b3e5bc#1f8de106db767ad957193ca4bc5b398a4191c778" +dependencies = [ + "derive_more", + "fc-db", + "fp-consensus", + "fp-rpc", + "futures 0.3.12", + "log", + "parity-scale-codec", + "sc-client-api", + "sp-api", + "sp-block-builder", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-inherents", + "sp-runtime", + "sp-timestamp", + "substrate-prometheus-endpoint", +] + +[[package]] +name = "fc-db" +version = "0.1.0" +source = "git+https://github.com/PureStake/frontier.git?branch=notlesh-substrate-8b3e5bc#1f8de106db767ad957193ca4bc5b398a4191c778" +dependencies = [ + "kvdb", + "kvdb-rocksdb", + "parity-scale-codec", + "parking_lot 0.11.1", + "sp-core", + "sp-database", + "sp-runtime", +] + +[[package]] +name = "fc-mapping-sync" +version = "0.1.0" +source = "git+https://github.com/PureStake/frontier.git?branch=notlesh-substrate-8b3e5bc#1f8de106db767ad957193ca4bc5b398a4191c778" +dependencies = [ + "fc-consensus", + "fc-db", + "fp-consensus", + "fp-rpc", + "futures 0.3.12", + "futures-timer 3.0.2", + "log", + "sc-client-api", + "sp-api", + "sp-blockchain", + "sp-runtime", +] + +[[package]] +name = "fc-rpc" +version = "0.1.0" +source = "git+https://github.com/PureStake/frontier.git?branch=notlesh-substrate-8b3e5bc#1f8de106db767ad957193ca4bc5b398a4191c778" +dependencies = [ + "ethereum", + "ethereum-types", + "fc-consensus", + "fc-db", + "fc-rpc-core", + "fp-consensus", + "fp-evm", + "fp-rpc", + "fp-storage", + "futures 0.3.12", + "jsonrpc-core 15.1.0", + "jsonrpc-core-client 14.2.0", + "jsonrpc-derive 14.2.2", + "jsonrpc-pubsub 15.1.0", + "libsecp256k1", + "log", + "pallet-ethereum", + "pallet-evm", + "parity-scale-codec", + "rand 0.7.3", + "rlp", + "rustc-hex", + "sc-client-api", + "sc-network", + "sc-rpc", + "sc-service", + "sha3 0.8.2", + "sp-api", + "sp-blockchain", + "sp-io", + "sp-runtime", + "sp-storage", + "sp-transaction-pool", +] + +[[package]] +name = "fc-rpc-core" +version = "0.1.0" +source = "git+https://github.com/PureStake/frontier.git?branch=notlesh-substrate-8b3e5bc#1f8de106db767ad957193ca4bc5b398a4191c778" +dependencies = [ + "ethereum-types", + "jsonrpc-core 15.1.0", + "jsonrpc-core-client 14.2.0", + "jsonrpc-derive 14.2.2", + "jsonrpc-pubsub 15.1.0", + "rustc-hex", + "serde", + "serde_json", +] + [[package]] name = "fdlimit" version = "0.2.1" @@ -1441,9 +1647,9 @@ dependencies = [ [[package]] name = "finality-grandpa" -version = "0.13.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cd795898c348a8ec9edc66ec9e014031c764d4c88cc26d09b492cd93eb41339" +checksum = "c6447e2f8178843749e8c8003206def83ec124a7859475395777a28b5338647c" dependencies = [ "either", "futures 0.3.12", @@ -1510,8 +1716,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "632b95f97f332b2ff5bc3a42bc8e28772b067e333830e03fd046504f11cd0fb8" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "parity-scale-codec", ] @@ -1526,15 +1731,73 @@ dependencies = [ "percent-encoding 2.1.0", ] +[[package]] +name = "fp-consensus" +version = "0.1.0" +source = "git+https://github.com/PureStake/frontier.git?branch=notlesh-substrate-8b3e5bc#1f8de106db767ad957193ca4bc5b398a4191c778" +dependencies = [ + "ethereum", + "parity-scale-codec", + "rlp", + "sha3 0.8.2", + "sp-core", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "fp-evm" +version = "0.8.0" +source = "git+https://github.com/PureStake/frontier.git?branch=notlesh-substrate-8b3e5bc#1f8de106db767ad957193ca4bc5b398a4191c778" +dependencies = [ + "evm", + "impl-trait-for-tuples 0.1.3", + "parity-scale-codec", + "serde", + "sp-core", + "sp-std", +] + +[[package]] +name = "fp-rpc" +version = "0.1.0" +source = "git+https://github.com/PureStake/frontier.git?branch=notlesh-substrate-8b3e5bc#1f8de106db767ad957193ca4bc5b398a4191c778" +dependencies = [ + "ethereum", + "ethereum-types", + "fp-evm", + "parity-scale-codec", + "sp-api", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "fp-storage" +version = "0.1.0" +source = "git+https://github.com/PureStake/frontier.git?branch=notlesh-substrate-8b3e5bc#1f8de106db767ad957193ca4bc5b398a4191c778" +dependencies = [ + "ethereum", + "ethereum-types", + "fp-evm", + "parity-scale-codec", + "sp-api", + "sp-core", + "sp-runtime", + "sp-std", +] + [[package]] name = "frame-benchmarking" version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70fe99487f84579a3f2c4ba52650fec875492eea41be0e4eea8019187f105052" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "frame-support", "frame-system", "linregress", + "log", "parity-scale-codec", "paste 1.0.4", "sp-api", @@ -1548,8 +1811,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2921b7890c5e4421a0b2eafbf835417eed8127b1cec3e1a0389515069f11d219" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "Inflector", "chrono", @@ -1572,8 +1834,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1da8fd471442bee91b9b3f587ec832e3f47800374fdb89b4a66591cd7c42b29f" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "frame-support", "frame-system", @@ -1589,8 +1850,7 @@ dependencies = [ [[package]] name = "frame-metadata" version = "13.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "073f7bef18421362441a1708f8528e442234954611f95bdc554b313fb321948e" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "parity-scale-codec", "serde", @@ -1601,13 +1861,12 @@ dependencies = [ [[package]] name = "frame-support" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04e521e6214615bd82ba6b5fc7fd40a9cc14fdeb40f83da5eba12aa2f8179fb8" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "bitflags", "frame-metadata", "frame-support-procedural", - "impl-trait-for-tuples", + "impl-trait-for-tuples 0.2.1", "log", "once_cell", "parity-scale-codec", @@ -1628,8 +1887,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2668e24cbaba7f0e91d0c92a94bd1ae425a942608ad0b775db32477f5df4da9e" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "Inflector", "frame-support-procedural-tools", @@ -1641,11 +1899,10 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4f88cfd111e004590f4542b75e6d3302137b9067d7e7219e4ac47a535c3b5c1" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "frame-support-procedural-tools-derive", - "proc-macro-crate", + "proc-macro-crate 1.0.0", "proc-macro2", "quote", "syn", @@ -1654,8 +1911,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79285388b120ac96c15a791c56b26b9264f7231324fbe0fd05026acd92bf2e6a" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "proc-macro2", "quote", @@ -1665,11 +1921,11 @@ dependencies = [ [[package]] name = "frame-system" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5fedbff05d665c00bf4e089b4377fcb15b8bd37ebc3e5fc06665474cf6e25d7" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "frame-support", - "impl-trait-for-tuples", + "impl-trait-for-tuples 0.2.1", + "log", "parity-scale-codec", "serde", "sp-core", @@ -1682,8 +1938,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e93602f58cdab9820b6d607b7b50834d9b878efa33405a65c89ebfb5a596b584" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "frame-benchmarking", "frame-support", @@ -1697,8 +1952,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cb9d2f86a903fdee4ca3d660c767e69a743cee8aeb103563a14ea52e9f0001d" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "parity-scale-codec", "sp-api", @@ -1716,6 +1970,16 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "fs2" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" +dependencies = [ + "libc", + "winapi 0.3.9", +] + [[package]] name = "fuchsia-cprng" version = "0.1.1" @@ -1917,6 +2181,19 @@ version = "0.3.55" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" +[[package]] +name = "generator" +version = "0.6.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "061d3be1afec479d56fa3bd182bf966c7999ec175fcfdb87ac14d417241366c6" +dependencies = [ + "cc", + "libc", + "log", + "rustversion", + "winapi 0.3.9", +] + [[package]] name = "generic-array" version = "0.12.3" @@ -2060,9 +2337,9 @@ dependencies = [ [[package]] name = "handlebars" -version = "3.5.2" +version = "3.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "964d0e99a61fe9b1b347389b77ebf8b7e1587b70293676aaca7d27e59b9073b2" +checksum = "cdb0867bbc5a3da37a753e78021d5fcf8a4db00e18dd2dd90fd36e24190e162d" dependencies = [ "log", "pest", @@ -2260,9 +2537,9 @@ dependencies = [ [[package]] name = "hyper" -version = "0.13.10" +version = "0.13.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a6f157065790a3ed2f88679250419b5cdd96e714a0d65f7797fd337186e96bb" +checksum = "f6ad767baac13b44d4529fcf58ba2cd0995e36e7b435bc5b039de6f47e880dbf" dependencies = [ "bytes 0.5.6", "futures-channel", @@ -2291,7 +2568,7 @@ dependencies = [ "bytes 0.5.6", "ct-logs", "futures-util", - "hyper 0.13.10", + "hyper 0.13.9", "log", "rustls 0.18.1", "rustls-native-certs", @@ -2313,9 +2590,9 @@ dependencies = [ [[package]] name = "idna" -version = "0.2.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de910d521f7cc3135c4de8db1cb910e0b5ed1dc6f57c381cd07e8e661ce10094" +checksum = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9" dependencies = [ "matches", "unicode-bidi", @@ -2368,6 +2645,15 @@ dependencies = [ "parity-scale-codec", ] +[[package]] +name = "impl-rlp" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28220f89297a075ddc7245cd538076ee98b01f2a9c23a53a4f1105d5a322808" +dependencies = [ + "rlp", +] + [[package]] name = "impl-serde" version = "0.3.1" @@ -2377,6 +2663,17 @@ dependencies = [ "serde", ] +[[package]] +name = "impl-trait-for-tuples" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef5550a42e3740a0e71f909d4c861056a284060af885ae7aa6242820f920d9d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "impl-trait-for-tuples" version = "0.2.1" @@ -2481,6 +2778,22 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "jsonrpc-client-transports" +version = "14.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2773fa94a2a1fd51efb89a8f45b8861023dbb415d18d3c9235ae9388d780f9ec" +dependencies = [ + "failure", + "futures 0.1.30", + "jsonrpc-core 14.2.0", + "jsonrpc-pubsub 14.2.0", + "log", + "serde", + "serde_json", + "url 1.7.2", +] + [[package]] name = "jsonrpc-client-transports" version = "15.1.0" @@ -2489,14 +2802,27 @@ checksum = "489b9c612e60c766f751ab40fcb43cbb55a1e10bb44a9b4307ed510ca598cbd7" dependencies = [ "failure", "futures 0.1.30", - "jsonrpc-core", - "jsonrpc-pubsub", + "jsonrpc-core 15.1.0", + "jsonrpc-pubsub 15.1.0", "log", "serde", "serde_json", "url 1.7.2", ] +[[package]] +name = "jsonrpc-core" +version = "14.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0747307121ffb9703afd93afbd0fb4f854c38fb873f2c8b90e0e902f27c7b62" +dependencies = [ + "futures 0.1.30", + "log", + "serde", + "serde_derive", + "serde_json", +] + [[package]] name = "jsonrpc-core" version = "15.1.0" @@ -2510,13 +2836,34 @@ dependencies = [ "serde_json", ] +[[package]] +name = "jsonrpc-core-client" +version = "14.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34221123bc79b66279a3fde2d3363553835b43092d629b34f2e760c44dc94713" +dependencies = [ + "jsonrpc-client-transports 14.2.1", +] + [[package]] name = "jsonrpc-core-client" version = "15.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f764902d7b891344a0acb65625f32f6f7c6db006952143bd650209fbe7d94db" dependencies = [ - "jsonrpc-client-transports", + "jsonrpc-client-transports 15.1.0", +] + +[[package]] +name = "jsonrpc-derive" +version = "14.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0e77e8812f02155b85a677a96e1d16b60181950c0636199bc4528524fba98dc" +dependencies = [ + "proc-macro-crate 0.1.5", + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -2525,7 +2872,7 @@ version = "15.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99a847f9ec7bb52149b2786a17c9cb260d6effc6b8eeb8c16b343a487a7563a3" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 0.1.5", "proc-macro2", "quote", "syn", @@ -2538,7 +2885,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fb5c4513b7b542f42da107942b7b759f27120b5cc894729f88254b28dff44b7" dependencies = [ "hyper 0.12.35", - "jsonrpc-core", + "jsonrpc-core 15.1.0", "jsonrpc-server-utils", "log", "net2", @@ -2552,7 +2899,7 @@ version = "15.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf50e53e4eea8f421a7316c5f63e395f7bc7c4e786a6dc54d76fab6ff7aa7ce7" dependencies = [ - "jsonrpc-core", + "jsonrpc-core 15.1.0", "jsonrpc-server-utils", "log", "parity-tokio-ipc", @@ -2560,13 +2907,26 @@ dependencies = [ "tokio-service", ] +[[package]] +name = "jsonrpc-pubsub" +version = "14.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d44f5602a11d657946aac09357956d2841299ed422035edf140c552cb057986" +dependencies = [ + "jsonrpc-core 14.2.0", + "log", + "parking_lot 0.10.2", + "rand 0.7.3", + "serde", +] + [[package]] name = "jsonrpc-pubsub" version = "15.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "639558e0604013be9787ae52f798506ae42bf4220fe587bdc5625871cc8b9c77" dependencies = [ - "jsonrpc-core", + "jsonrpc-core 15.1.0", "log", "parking_lot 0.10.2", "rand 0.7.3", @@ -2581,7 +2941,7 @@ checksum = "72f1f3990650c033bd8f6bd46deac76d990f9bbfb5f8dc8c4767bf0a00392176" dependencies = [ "bytes 0.4.12", "globset", - "jsonrpc-core", + "jsonrpc-core 15.1.0", "lazy_static", "log", "tokio 0.1.22", @@ -2595,7 +2955,7 @@ version = "15.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6596fe75209b73a2a75ebe1dce4e60e03b88a2b25e8807b667597f6315150d22" dependencies = [ - "jsonrpc-core", + "jsonrpc-core 15.1.0", "jsonrpc-server-utils", "log", "parity-ws", @@ -2687,9 +3047,9 @@ checksum = "3576a87f2ba00f6f106fdfcd16db1d698d648a26ad8e0573cad8537c3c362d2a" [[package]] name = "libc" -version = "0.2.86" +version = "0.2.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7282d924be3275cec7f6756ff4121987bc6481325397dde6ba3e7802b1a8b1c" +checksum = "7ccac4b00700875e6a07c6cde370d44d32fa01c5a65cdd2fca6858c479d28bb3" [[package]] name = "libloading" @@ -2709,16 +3069,15 @@ checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a" [[package]] name = "libp2p" -version = "0.34.0" +version = "0.35.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5133112ce42be9482f6a87be92a605dd6bbc9e93c297aee77d172ff06908f3a" +checksum = "adc225a49973cf9ab10d0cdd6a4b8f0cda299df9b760824bbb623f15f8f0c95a" dependencies = [ "atomic", "bytes 1.0.1", "futures 0.3.12", "lazy_static", "libp2p-core", - "libp2p-core-derive", "libp2p-deflate", "libp2p-dns", "libp2p-floodsub", @@ -2733,6 +3092,7 @@ dependencies = [ "libp2p-pnet", "libp2p-request-response", "libp2p-swarm", + "libp2p-swarm-derive", "libp2p-tcp", "libp2p-uds", "libp2p-wasm-ext", @@ -2773,20 +3133,10 @@ dependencies = [ "rw-stream-sink", "sha2 0.9.3", "smallvec 1.6.1", - "thiserror", - "unsigned-varint 0.7.0", - "void", - "zeroize", -] - -[[package]] -name = "libp2p-core-derive" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4bc40943156e42138d22ed3c57ff0e1a147237742715937622a99b10fbe0156" -dependencies = [ - "quote", - "syn", + "thiserror", + "unsigned-varint 0.7.0", + "void", + "zeroize", ] [[package]] @@ -2831,11 +3181,11 @@ dependencies = [ [[package]] name = "libp2p-gossipsub" -version = "0.27.0" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12451ba9493e87c91baf2a6dffce9ddf1fbc807a0861532d7cf477954f8ebbee" +checksum = "502dc5fcbfec4aa1c63ef3f7307ffe20e90c1a1387bf23ed0bec087f2dde58a1" dependencies = [ - "asynchronous-codec 0.5.0", + "asynchronous-codec 0.6.0", "base64 0.13.0", "byteorder", "bytes 1.0.1", @@ -2851,7 +3201,7 @@ dependencies = [ "regex", "sha2 0.9.3", "smallvec 1.6.1", - "unsigned-varint 0.6.0", + "unsigned-varint 0.7.0", "wasm-timer", ] @@ -3001,7 +3351,7 @@ dependencies = [ "pin-project 1.0.5", "rand 0.7.3", "salsa20", - "sha3", + "sha3 0.9.1", ] [[package]] @@ -3040,6 +3390,16 @@ dependencies = [ "wasm-timer", ] +[[package]] +name = "libp2p-swarm-derive" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c564ebaa36a64839f51eaddb0243aaaa29ce64affb56129193cc3248b72af273" +dependencies = [ + "quote", + "syn", +] + [[package]] name = "libp2p-tcp" version = "0.27.1" @@ -3103,9 +3463,9 @@ dependencies = [ [[package]] name = "libp2p-yamux" -version = "0.30.0" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "490b8b27fc40fe35212df1b6a3d14bffaa4117cbff956fdc2892168a371102ad" +checksum = "4819358c542a86ff95f6ae691efb4b94ddaf477079b01a686f5705b79bfc232a" dependencies = [ "futures 0.3.12", "libp2p-core", @@ -3206,6 +3566,17 @@ dependencies = [ "value-bag", ] +[[package]] +name = "loom" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d44c73b4636e497b4917eb21c33539efa3816741a2d3ff26c6316f1b529481a4" +dependencies = [ + "cfg-if 1.0.0", + "generator", + "scoped-tls", +] + [[package]] name = "lru" version = "0.6.5" @@ -3458,7 +3829,7 @@ dependencies = [ "generic-array 0.14.4", "multihash-derive", "sha2 0.9.3", - "sha3", + "sha3 0.9.1", "unsigned-varint 0.5.1", ] @@ -3468,7 +3839,7 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85ee3c48cb9d9b275ad967a0e96715badc13c6029adb92f34fa17b9ff28fd81f" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 0.1.5", "proc-macro-error", "proc-macro2", "quote", @@ -3484,16 +3855,16 @@ checksum = "1255076139a83bb467426e7f8d0134968a8118844faa755985e077cf31850333" [[package]] name = "multistream-select" -version = "0.10.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5df70763c86c98487451f307e1b68b4100da9076f4c12146905fc2054277f4e8" +checksum = "10ddc0eb0117736f19d556355464fc87efc8ad98b29e3fd84f02531eb6e90840" dependencies = [ "bytes 1.0.1", "futures 0.3.12", "log", "pin-project 1.0.5", "smallvec 1.6.1", - "unsigned-varint 0.7.0", + "unsigned-varint 0.6.0", ] [[package]] @@ -3525,12 +3896,12 @@ dependencies = [ [[package]] name = "nb-connect" -version = "1.0.3" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "670361df1bc2399ee1ff50406a0d422587dd3bb0da596e1978fe8e05dabddf4f" +checksum = "8123a81538e457d44b933a02faf885d3fe8408806b23fa700e8f01c6c3a98998" dependencies = [ "libc", - "socket2", + "winapi 0.3.9", ] [[package]] @@ -3548,14 +3919,22 @@ dependencies = [ name = "nft" version = "3.0.0" dependencies = [ + "fc-consensus", + "fc-db", + "fc-mapping-sync", + "fc-rpc", + "fc-rpc-core", "flexi_logger", + "fp-rpc", "frame-benchmarking", "frame-benchmarking-cli", "futures 0.3.12", - "jsonrpc-core", + "jsonrpc-core 15.1.0", + "jsonrpc-pubsub 15.1.0", "log", "nft-runtime", "pallet-contracts-rpc", + "pallet-ethereum", "pallet-transaction-payment-rpc", "parking_lot 0.10.2", "sc-basic-authorship", @@ -3583,6 +3962,7 @@ dependencies = [ "sp-finality-grandpa", "sp-inherents", "sp-runtime", + "sp-timestamp", "sp-transaction-pool", "structopt", "substrate-build-script-utils", @@ -3593,6 +3973,7 @@ dependencies = [ name = "nft-runtime" version = "3.0.0" dependencies = [ + "fp-rpc", "frame-benchmarking", "frame-executive", "frame-support", @@ -3605,6 +3986,8 @@ dependencies = [ "pallet-contracts", "pallet-contracts-primitives", "pallet-contracts-rpc-runtime-api", + "pallet-ethereum", + "pallet-evm", "pallet-grandpa", "pallet-nft", "pallet-randomness-collective-flip", @@ -3772,8 +4155,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73ff6054e982e7841a2519c988680620a85c1da5cd32363998a30302ed47f6f9" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "frame-support", "frame-system", @@ -3785,18 +4167,16 @@ dependencies = [ "sp-consensus-aura", "sp-runtime", "sp-std", - "sp-timestamp", ] [[package]] name = "pallet-authorship" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47433a94141451e7079aabf3ca28f2bde8c642d84b568be9626e9b7cae8b11b1" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "frame-support", "frame-system", - "impl-trait-for-tuples", + "impl-trait-for-tuples 0.2.1", "parity-scale-codec", "sp-authorship", "sp-inherents", @@ -3807,12 +4187,12 @@ dependencies = [ [[package]] name = "pallet-balances" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41aaeaf084e594273f82bcbf96416ef1fcab602e15dd1df04b9930eceb2eb518" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", + "log", "parity-scale-codec", "serde", "sp-runtime", @@ -3822,11 +4202,11 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0979c1dd82fc56a87b37311006fe56f406de027c24591353058e9e9fc56487c" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "frame-support", "frame-system", + "log", "pallet-contracts-primitives", "pallet-contracts-proc-macro", "parity-scale-codec", @@ -3844,8 +4224,7 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "621d75148763349f72e76e79f62365d28adb51e3f2e0285e4e8b8600ae600978" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "bitflags", "parity-scale-codec", @@ -3856,8 +4235,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90046017aeee3f77752a6c77cdfb1bc93eb728591dc6edad36e2706f7626fd50" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "proc-macro2", "quote", @@ -3867,12 +4245,11 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22491e3c304819f96c83d02e43bd99128e4e42a57da4d6a9d4b5193778da915b" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "jsonrpc-core", - "jsonrpc-core-client", - "jsonrpc-derive", + "jsonrpc-core 15.1.0", + "jsonrpc-core-client 15.1.0", + "jsonrpc-derive 15.1.0", "pallet-contracts-primitives", "pallet-contracts-rpc-runtime-api", "parity-scale-codec", @@ -3887,8 +4264,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc-runtime-api" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb4b410cb148e68256e3827854a67ec34b16157f448e78173219dcd6a8ec7343" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "pallet-contracts-primitives", "parity-scale-codec", @@ -3897,15 +4273,67 @@ dependencies = [ "sp-std", ] +[[package]] +name = "pallet-ethereum" +version = "0.1.0" +source = "git+https://github.com/PureStake/frontier.git?branch=notlesh-substrate-8b3e5bc#1f8de106db767ad957193ca4bc5b398a4191c778" +dependencies = [ + "ethereum", + "ethereum-types", + "evm", + "fp-consensus", + "fp-evm", + "fp-rpc", + "fp-storage", + "frame-support", + "frame-system", + "libsecp256k1", + "pallet-balances", + "pallet-evm", + "pallet-timestamp", + "parity-scale-codec", + "rlp", + "rustc-hex", + "serde", + "sha3 0.8.2", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-evm" +version = "3.0.0" +source = "git+https://github.com/PureStake/frontier.git?branch=notlesh-substrate-8b3e5bc#1f8de106db767ad957193ca4bc5b398a4191c778" +dependencies = [ + "evm", + "evm-gasometer", + "evm-runtime", + "fp-evm", + "frame-support", + "frame-system", + "pallet-balances", + "pallet-timestamp", + "parity-scale-codec", + "primitive-types", + "rlp", + "serde", + "sha3 0.8.2", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + [[package]] name = "pallet-grandpa" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c012cb0337ce1eaf0685be2777bce1ef8c5d7b7be77ea33916c316b40af43fa" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", + "log", "pallet-authorship", "pallet-session", "parity-scale-codec", @@ -3942,8 +4370,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3ea6fa9aa36735ec11d7ec4d97dd6472650c0656fdc6d4adaca2578bd71134" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "frame-support", "frame-system", @@ -3956,12 +4383,11 @@ dependencies = [ [[package]] name = "pallet-session" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d243c3ccac56a4c55fade6be5c5af1de07fac374fa7856377980a76b0c193cf" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "frame-support", "frame-system", - "impl-trait-for-tuples", + "impl-trait-for-tuples 0.2.1", "pallet-timestamp", "parity-scale-codec", "serde", @@ -3977,8 +4403,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a96774302e3824b7924c2465935ca4d558ea5f6a762c043fbc45fd2646ce89" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "frame-support", "frame-system", @@ -3992,13 +4417,13 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b17dd274716a55a2c3e34d9c0ed66aaac3d7e0393ec9fd985e2b8532d697a7f3" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", - "impl-trait-for-tuples", + "impl-trait-for-tuples 0.2.1", + "log", "parity-scale-codec", "serde", "sp-inherents", @@ -4011,8 +4436,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48e10dc1a10dd3f52edb20d3885cf5b2b16f26273a4d93e61331c6691fb13ab3" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "frame-support", "frame-system", @@ -4028,12 +4452,11 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7835717b7d8fb59c33dd73f083c68a6d143a1dbe6029364c63ea7f4cb0ba3f9c" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "jsonrpc-core", - "jsonrpc-core-client", - "jsonrpc-derive", + "jsonrpc-core 15.1.0", + "jsonrpc-core-client 15.1.0", + "jsonrpc-derive 15.1.0", "pallet-transaction-payment-rpc-runtime-api", "parity-scale-codec", "sp-api", @@ -4046,8 +4469,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a92d3383260d0d19d9a36f40766d48d779fd19baccba8b20c3e7d2670a26ee1" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -4058,12 +4480,11 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d19f881664d42d1c33dd67e690d6bddd35d38723fcc099b19304f9723fc3070c" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "frame-support", "frame-system", - "impl-trait-for-tuples", + "impl-trait-for-tuples 0.2.1", "pallet-balances", "parity-scale-codec", "serde", @@ -4074,8 +4495,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4e1af42bbdf1d477c3762387c74855f24bca47700df3ce7d9428045986b544" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "enumflags2", "frame-support", @@ -4088,12 +4508,13 @@ dependencies = [ [[package]] name = "parity-db" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "111e193c96758d476d272093a853882668da17489f76bf4361b8decae0b6c515" +checksum = "495197c078e54b8735181aa35c00a327f7f3a3cc00a1ee8c95926dd010f0ec6b" dependencies = [ "blake2-rfc", "crc32fast", + "fs2", "hex", "libc", "log", @@ -4139,7 +4560,7 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa04976a81fde04924b40cc4036c4d12841e8bb04325a5cf2ada75731a150a7d" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 0.1.5", "proc-macro2", "quote", "syn", @@ -4178,7 +4599,7 @@ checksum = "664a8c6b8e62d8f9f2f937e391982eb433ab285b4cd9545b342441e04a906e42" dependencies = [ "cfg-if 1.0.0", "hashbrown", - "impl-trait-for-tuples", + "impl-trait-for-tuples 0.2.1", "parity-util-mem-derive", "parking_lot 0.11.1", "primitive-types", @@ -4265,7 +4686,7 @@ checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb" dependencies = [ "instant", "lock_api 0.4.2", - "parking_lot_core 0.8.3", + "parking_lot_core 0.8.2", ] [[package]] @@ -4299,14 +4720,14 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.8.3" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7a782938e745763fe6907fc6ba86946d72f49fe7e21de074e08128a99fb018" +checksum = "9ccb628cad4f84851442432c60ad8e1f607e29752d0bf072cbd0baf28aa34272" dependencies = [ "cfg-if 1.0.0", "instant", "libc", - "redox_syscall 0.2.5", + "redox_syscall 0.1.57", "smallvec 1.6.1", "winapi 0.3.9", ] @@ -4550,6 +4971,7 @@ checksum = "2415937401cb030a2a0a4d922483f945fa068f52a7dbb22ce0fe5f2b6f6adace" dependencies = [ "fixed-hash", "impl-codec", + "impl-rlp", "impl-serde", "uint", ] @@ -4563,6 +4985,16 @@ dependencies = [ "toml", ] +[[package]] +name = "proc-macro-crate" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41fdbd1df62156fbc5945f4762632564d7d038153091c3fcf1067f6aef7cff92" +dependencies = [ + "thiserror", + "toml", +] + [[package]] name = "proc-macro-error" version = "1.0.4" @@ -4729,9 +5161,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.9" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" +checksum = "991431c3519a3f36861882da93630ce66b52918dcf1b8e2fd66b397fc96f28df" dependencies = [ "proc-macro2", ] @@ -4787,7 +5219,7 @@ checksum = "0ef9e7e66b4468674bfcb0c81af8b7fa0bb154fa9f28eb840da5c447baeb8d7e" dependencies = [ "libc", "rand_chacha 0.3.0", - "rand_core 0.6.2", + "rand_core 0.6.1", "rand_hc 0.3.0", ] @@ -4808,7 +5240,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d" dependencies = [ "ppv-lite86", - "rand_core 0.6.2", + "rand_core 0.6.1", ] [[package]] @@ -4837,9 +5269,9 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.6.2" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34cf66eb183df1c5876e2dcf6b13d57340741e8dc255b48e40a26de954d06ae7" +checksum = "c026d7df8b298d90ccbbc5190bd04d85e159eaf5576caeacf8741da93ccbd2e5" dependencies = [ "getrandom 0.2.2", ] @@ -4868,7 +5300,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73" dependencies = [ - "rand_core 0.6.2", + "rand_core 0.6.1", ] [[package]] @@ -4939,9 +5371,9 @@ checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" [[package]] name = "redox_syscall" -version = "0.2.5" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94341e4e44e24f6b591b59e47a8a027df12e008d73fd5672dbea9cc22f4507d9" +checksum = "05ec8ca9416c5ea37062b502703cd7fcb207736bc294f6e0cf367ac6fc234570" dependencies = [ "bitflags", ] @@ -4964,7 +5396,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64" dependencies = [ "getrandom 0.2.2", - "redox_syscall 0.2.5", + "redox_syscall 0.2.4", ] [[package]] @@ -5068,6 +5500,27 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "rlp" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e54369147e3e7796c9b885c7304db87ca3d09a0a98f72843d532868675bbfba8" +dependencies = [ + "bytes 1.0.1", + "rustc-hex", +] + +[[package]] +name = "rlp-derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e33d7b2abe0c340d8797fe2907d3f20d3b5ea5908683618bfe80df7f621f672a" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "rocksdb" version = "0.15.0" @@ -5165,6 +5618,12 @@ dependencies = [ "security-framework", ] +[[package]] +name = "rustversion" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb5d2a036dc6d2d8fd16fde3498b04306e29bd193bf306a57427019b823d5acd" + [[package]] name = "rw-stream-sink" version = "0.2.1" @@ -5212,8 +5671,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de86afb63617599821312bda08882451ff2b49d9c45e22513ddff5a07c6d966e" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "futures 0.3.12", "futures-timer 3.0.2", @@ -5236,15 +5694,13 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9862161f9d09d870401c7256c89ad1eb3afa56a61f7d7135c2bac76ff7152955" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "parity-scale-codec", "sc-client-api", "sp-api", "sp-block-builder", "sp-blockchain", - "sp-consensus", "sp-core", "sp-inherents", "sp-runtime", @@ -5254,10 +5710,9 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d97030776b49bc9c109e2d349212d8f2500637761048e1af5b7ce2dfd994c7" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "impl-trait-for-tuples", + "impl-trait-for-tuples 0.2.1", "parity-scale-codec", "sc-chain-spec-derive", "sc-consensus-babe", @@ -5276,10 +5731,9 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f14985513db9798fcedea58bdc8a08f1c6b3a515d6546ced7467b059b7982c4" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.0.0", "proc-macro2", "quote", "syn", @@ -5288,8 +5742,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ec1647b5c1483fa05f7f32e436d0e378e2f3d5696a5a30bddf66f5faf28acb4" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "chrono", "fdlimit", @@ -5327,8 +5780,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56d8b2c8dc0cee9ac56e87ad50c980edbdeb35bdd5b5d9da4ae90567423363be" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "derive_more", "fnv", @@ -5362,8 +5814,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5741e447d71ff36c147f961b2271b6b3fad0cc347e96936bc8b63ddffa594b27" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "blake2-rfc", "hash-db", @@ -5393,8 +5844,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99f20cc8b8a74e218365ac4187bce26ea631d58d221caa1797bc6ec8056dba33" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "sc-client-api", "sp-blockchain", @@ -5405,8 +5855,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e0d32ccddef567a0fe373729aa4da51b2d437cbb102b9810400c9e77e040c1d" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "derive_more", "futures 0.3.12", @@ -5438,8 +5887,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98d52048476e0fcb53feae8ca919a602104f1ba0b89a729b496440f36b332961" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "derive_more", "fork-tree", @@ -5485,8 +5933,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "326313ffb249a526e8ee8e08af9fdf0c4459cebeaa760b934e9df3985b68e4df" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "fork-tree", "parity-scale-codec", @@ -5499,8 +5946,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76e09ff8b680d449102da9717a70c3bbbbb981fd4cf1bfbafc1739d954eb0898" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "futures 0.3.12", "futures-timer 3.0.2", @@ -5526,8 +5972,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37294bae6d787eecf2b15255dc75cd559b4ad813e0efcf28cd4423e218931b80" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "log", "sc-client-api", @@ -5541,8 +5986,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bace6a35999d2da7311d8fb98a29c1e89dbf0d14e50ac14140f2c38089819f46" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "derive_more", "lazy_static", @@ -5571,8 +6015,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87004102a8e95f432f1c624c7fa7fb0edc5995db2e0fcbabbb697f1955e7c1d2" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "derive_more", "parity-scale-codec", @@ -5588,8 +6031,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d3d7b6db2df5f2c24848883a855a8276363f00cef5b49744974f7e1203bf274" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "log", "parity-scale-codec", @@ -5604,8 +6046,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24673c981fad2dff4398a09a1086579e2774f18d81639fa2bd9cb215e6dd9e36" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "log", "parity-scale-codec", @@ -5623,10 +6064,10 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7e87e63c57933e173a8643ff197b579e3fc5c91b16ca006096f482de8159318" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "derive_more", + "dyn-clone", "finality-grandpa", "fork-tree", "futures 0.3.12", @@ -5662,8 +6103,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f4c8994853e1158dc4f448b014aa83eef56ced214ec0af316eecf4a6ca3268f" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "ansi_term 0.12.1", "futures 0.3.12", @@ -5681,8 +6121,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d966ed36c404eced656bd63aad8a30d2c1a14633f07cd1d7d9c11b62f75a7905" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "async-trait", "derive_more", @@ -5702,8 +6141,7 @@ dependencies = [ [[package]] name = "sc-light" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04e8dbcb2951f7cf76ddf97ed26dcef0dab79d76745de4a8f169d58236ea8704" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "hash-db", "lazy_static", @@ -5722,8 +6160,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20fb4ed5d6b86faafb0743c8c2fd1c89b52cde7697373b254c7553800efaebbf" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "async-std", "async-trait", @@ -5776,8 +6213,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2cd5487d6f8051863a186e2aea4c233a07bb691780d3b117c9d6ffe1ff9a8fe" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "futures 0.3.12", "futures-timer 3.0.2", @@ -5793,14 +6229,14 @@ dependencies = [ [[package]] name = "sc-offchain" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bc91fc71c128748a3393cb3421e12a7759ccffcc1cc4a9e6ff4ead6cc68ba48" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "bytes 0.5.6", "fnv", "futures 0.3.12", "futures-timer 3.0.2", - "hyper 0.13.10", + "hex", + "hyper 0.13.9", "hyper-rustls", "log", "num_cpus", @@ -5821,8 +6257,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce454e528e7797a239e734d0d66bf904d48be47aa92691ac7546a45ec32a64cf" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "futures 0.3.12", "libp2p", @@ -5835,8 +6270,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecfc2c6cc5dc0ecb1109cce9773b50ad9a3cdbf239dc702ef9071949244dcf3e" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -5845,13 +6279,12 @@ dependencies = [ [[package]] name = "sc-rpc" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "750397c6aa5a4f922cac99599ad74a4082e3e87553d51ceb4c48abfa056ff32c" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "futures 0.3.12", "hash-db", - "jsonrpc-core", - "jsonrpc-pubsub", + "jsonrpc-core 15.1.0", + "jsonrpc-pubsub 15.1.0", "log", "parity-scale-codec", "parking_lot 0.11.1", @@ -5880,15 +6313,14 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc8393410297df2885efec20d0629a9833b4fd9e4ad83a92471e1ea0c11a0a54" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "derive_more", "futures 0.3.12", - "jsonrpc-core", - "jsonrpc-core-client", - "jsonrpc-derive", - "jsonrpc-pubsub", + "jsonrpc-core 15.1.0", + "jsonrpc-core-client 15.1.0", + "jsonrpc-derive 15.1.0", + "jsonrpc-pubsub 15.1.0", "log", "parity-scale-codec", "parking_lot 0.11.1", @@ -5905,14 +6337,13 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c76164897bd3b0d04c2d6aeeb4d3492c86e324b0b08f408b847ea35421b589" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "futures 0.1.30", - "jsonrpc-core", + "jsonrpc-core 15.1.0", "jsonrpc-http-server", "jsonrpc-ipc-server", - "jsonrpc-pubsub", + "jsonrpc-pubsub 15.1.0", "jsonrpc-ws-server", "log", "serde", @@ -5924,8 +6355,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9315b44eb991ca4f477d889bbd649a2b4b557f963fe48ec5a36c3422518e4a0" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "directories", "exit-future", @@ -5933,8 +6363,8 @@ dependencies = [ "futures 0.3.12", "futures-timer 3.0.2", "hash-db", - "jsonrpc-core", - "jsonrpc-pubsub", + "jsonrpc-core 15.1.0", + "jsonrpc-pubsub 15.1.0", "lazy_static", "log", "parity-scale-codec", @@ -5988,8 +6418,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f144043d5860ce133f701fa78679d6278f2dfc698686beb5f6d892c267e9d92" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "log", "parity-scale-codec", @@ -6004,8 +6433,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05040c594b331d90d7341e82c6dc6a3eb7bb2afb4e5dc9c36a79a6754166057" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "chrono", "futures 0.3.12", @@ -6016,10 +6444,8 @@ dependencies = [ "rand 0.7.3", "serde", "serde_json", - "sp-utils", "take_mut", - "tracing", - "tracing-subscriber", + "thiserror", "void", "wasm-timer", ] @@ -6027,8 +6453,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef0a4aa327b8bc89d9c5ae57a2f493d8f54ccd706f6763614ab522559fe481d8" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "ansi_term 0.12.1", "atty", @@ -6039,7 +6464,6 @@ dependencies = [ "parking_lot 0.11.1", "regex", "rustc-hash", - "sc-telemetry", "sc-tracing-proc-macro", "serde", "serde_json", @@ -6056,10 +6480,9 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec18b0506911e6d624d9ea8f8cc5f503e7944a0fe7d37de95ee84033cf160ebc" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.0.0", "proc-macro2", "quote", "syn", @@ -6068,8 +6491,7 @@ dependencies = [ [[package]] name = "sc-transaction-graph" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87b385b8f66cce185478c500ad3de8f4775ab0e948c31561aeac78a27bedc654" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "derive_more", "futures 0.3.12", @@ -6091,8 +6513,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09f4331ea8da2ff45a9466637f90f5cc89f9d31fcd1cd20f74f2520b33bff069" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "futures 0.3.12", "futures-diagnose", @@ -6283,9 +6704,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.62" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea1c6153794552ea7cf7cf63b1231a25de00ec90db326ba6264440fa08e31486" +checksum = "4fceb2595057b6891a4ee808f70054bd2d12f0e97f1cbb78689b59f676df325a" dependencies = [ "itoa", "ryu", @@ -6342,6 +6763,19 @@ dependencies = [ "opaque-debug 0.3.0", ] +[[package]] +name = "sha3" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd26bc0e7a2e3a7c959bc494caf58b72ee0c71d67704e9520f736ca7e4853ecf" +dependencies = [ + "block-buffer 0.7.3", + "byte-tools", + "digest 0.8.1", + "keccak", + "opaque-debug 0.2.3", +] + [[package]] name = "sha3" version = "0.9.1" @@ -6371,9 +6805,9 @@ checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2" [[package]] name = "signal-hook" -version = "0.3.4" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "780f5e3fe0c66f67197236097d89de1e86216f1f6fdeaf47c442f854ab46c240" +checksum = "7e31d442c16f047a671b5a71e2161d6e68814012b7f5379d269ebd915fac2729" dependencies = [ "libc", "signal-hook-registry", @@ -6475,8 +6909,7 @@ dependencies = [ [[package]] name = "sp-allocator" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec5f988ad0cabdb646318cb515a91e9d89062debc9728f9b634d73acab3f3f39" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "log", "sp-core", @@ -6488,10 +6921,10 @@ dependencies = [ [[package]] name = "sp-api" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e63c3460d5daecf67df542c34c2bbd636214a5a200d4bddcfa2ffb9e72c346af" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "hash-db", + "log", "parity-scale-codec", "sp-api-proc-macro", "sp-core", @@ -6505,11 +6938,10 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "289624f4fe0f61e63a5019ed26c3bc732b5145eb52796ac6053cd72656d947a1" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "blake2-rfc", - "proc-macro-crate", + "proc-macro-crate 1.0.0", "proc-macro2", "quote", "syn", @@ -6518,8 +6950,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c52e2e6d43036b97c4fce1ed87c5262c1ffdc78c655ada4d3024a3f8094bdd2c" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "parity-scale-codec", "serde", @@ -6531,8 +6962,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0f1c69966c192d1dee8521f0b29ece2b14db07b9b44d801a94e295234761645" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "integer-sqrt", "num-traits", @@ -6545,8 +6975,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ec68fb8e5a37548b06c14ee91a9c574cc330324c86d37810ec29dd4f8bc68d7" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -6557,8 +6986,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0adc979dbe619f56d664ebd1293dce13fcad6b8a47bcdd620ed53a454d330d12" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "parity-scale-codec", "sp-api", @@ -6570,8 +6998,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8007c1ad8e9fb6cd8eed4e0fc91504a9ca4b228e1315302a2fbb0ac7f509f1b" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "futures 0.3.12", "log", @@ -6589,8 +7016,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a24beb11980d0c755ead0c05f3f966c490e4a3730785c04c03855fada65d697" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "serde", "serde_json", @@ -6599,8 +7025,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "884db6c4b03f0f2fb2993127a2db95fc740fcd3496746dcaa6829c9868e7dc75" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "futures 0.3.12", "futures-timer 3.0.2", @@ -6626,8 +7051,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bd00fc95b26393522be1394fb67cc536736cc5a902dec0d3e2827909b7c1118" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "parity-scale-codec", "sp-api", @@ -6642,11 +7066,11 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a153085b1542b5cbe23686433cd36d1a634964f1b707671d0ffb01d8d9313047" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "merlin", "parity-scale-codec", + "serde", "sp-api", "sp-application-crypto", "sp-consensus", @@ -6663,8 +7087,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32bd501ab76c827d74f145063cd8cb993a9f634dac93c9b0d909111cd5900a6a" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "parity-scale-codec", "sp-arithmetic", @@ -6674,8 +7097,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "030895d70bf3095c857f4727a7cce7c43af29efe3413bb547ee28700f7d78766" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -6687,8 +7109,7 @@ dependencies = [ [[package]] name = "sp-core" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abbc8d4e9b8a7d5819ed26f1374017bb32833ef4890e4ff065e1da30669876bc" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "base58", "blake2-rfc", @@ -6732,8 +7153,7 @@ dependencies = [ [[package]] name = "sp-database" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8c3f018913eef191d95c824657c5759c459d28670e654fa34f5d9bd5e6f0492" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "kvdb", "parking_lot 0.11.1", @@ -6742,8 +7162,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e80275f23b4e7ba8f54dec5f90f016530e7307d2ee9445f617ab986cbe97f31e" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "proc-macro2", "quote", @@ -6753,8 +7172,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fdc625f8c7b13b9a136d334888b21b5743d2081cb666cb03efca1dc9b8f74d1" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "environmental", "parity-scale-codec", @@ -6765,8 +7183,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "702e0be150e1b557df42326ec9b82c2010366631d03be27c69912d446abbf87a" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "finality-grandpa", "log", @@ -6783,8 +7200,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2542380b535c6941502a0a3069a657eb5abb70fd67b11afa164d4a4b038ba73a" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "parity-scale-codec", "parking_lot 0.11.1", @@ -6796,8 +7212,7 @@ dependencies = [ [[package]] name = "sp-io" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33fd69f0a6e91bedc2fb1c5cc3689c212474b6c918274cb4cb14dbbe3c428c14" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "futures 0.3.12", "hash-db", @@ -6821,8 +7236,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b59f2b0e94b2048d4984aa6eb40eef2e4c05d3adf27a083dd3c9b0fce74ef7a" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "lazy_static", "sp-core", @@ -6833,8 +7247,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db6ccd2baf189112355338e8b224dc513cd239b974dbd717f12b3dc7a7248c3b" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "async-trait", "derive_more", @@ -6851,8 +7264,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bd80eedcedcc8342e77c26d59ad90b6904715a862731fa16616650773570e63" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "sp-api", "sp-core", @@ -6862,8 +7274,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54702e109f1c8a870dd4065a497d2612d42cec5817126e96cc0658c5ea975784" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "backtrace", ] @@ -6871,8 +7282,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2e5b1ed655d11449073b914b048895f45241e02b3919d1d0187f315435fee18" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "serde", "sp-core", @@ -6881,12 +7291,11 @@ dependencies = [ [[package]] name = "sp-runtime" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfa4b353b76f04616dbdb8d269d58dcac47acb31c006d3b70e7b64233e68695e" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "either", "hash256-std-hasher", - "impl-trait-for-tuples", + "impl-trait-for-tuples 0.2.1", "log", "parity-scale-codec", "parity-util-mem", @@ -6903,10 +7312,9 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2e5c88b4bc8d607e4e2ff767a85db58cf7101f3dd6064f06929342ea67fe8fb" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "impl-trait-for-tuples", + "impl-trait-for-tuples 0.2.1", "parity-scale-codec", "primitive-types", "sp-externalities", @@ -6921,11 +7329,10 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19a6c7c2251512c9e533d15db8a863b06ece1cbee778130dd9adbe44b6b39aa9" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "Inflector", - "proc-macro-crate", + "proc-macro-crate 1.0.0", "proc-macro2", "quote", "syn", @@ -6934,8 +7341,7 @@ dependencies = [ [[package]] name = "sp-sandbox" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e92caf4555d676d8f0b67def0041da789f79a5d5f341130496f15a6261926cc" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "parity-scale-codec", "sp-core", @@ -6948,8 +7354,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "982d793f01eb9eea9f30ffc63b821170068b9f0d9edf715d8ba77dc4de9c300f" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "serde", "serde_json", @@ -6958,8 +7363,7 @@ dependencies = [ [[package]] name = "sp-session" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c7cf161533725a78083b04f3269effe4c3b4b6ce5f655019b3eec3e729ba4d4" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "parity-scale-codec", "sp-api", @@ -6972,8 +7376,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc729eb10f8809c61a1fe439ac118a4413de004aaf863003ee8752ac0b596e73" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -6983,8 +7386,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46fa4143e58e9130f726d4e8a9b86f3530a8bd19a2eedcdcf4af205f4b5a6d4f" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "hash-db", "log", @@ -7006,14 +7408,12 @@ dependencies = [ [[package]] name = "sp-std" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35391ea974fa5ee869cb094d5b437688fbf3d8127d64d1b9fed5822a1ed39b12" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" [[package]] name = "sp-storage" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86af458d4a0251c490cdde9dcaaccb88d398f3b97ac6694cdd49ed9337e6b961" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "impl-serde", "parity-scale-codec", @@ -7026,8 +7426,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c585340cbee96c53a9b43fd07d81edf6cebeb80e4ca7c0ee79b856c0b1883a0e" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "log", "sp-core", @@ -7040,10 +7439,8 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27387c541197b9f47f3d9ddcab5649a3ecdca582d2f2ea2b511af24a3d3cbf83" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "impl-trait-for-tuples", "parity-scale-codec", "sp-api", "sp-inherents", @@ -7055,8 +7452,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567382d8d4e14fb572752863b5cd57a78f9e9a6583332b590b726f061f3ea957" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "log", "parity-scale-codec", @@ -7069,8 +7465,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3264d3b7ea31483eddffa2cc7f28c4d9c022598e456a985fd1cb5879a4609853" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "derive_more", "futures 0.3.12", @@ -7086,8 +7481,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b85b7f745da41ef825c6f7b93f1fdc897b03df94a4884adfbb70fbcd0aed1298" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "hash-db", "memory-db", @@ -7101,8 +7495,7 @@ dependencies = [ [[package]] name = "sp-utils" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ec2a5f924f7affd1e959f8f3c02bd87cdfa0e11c71a4cbc075f955ead8c1a1" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "futures 0.3.12", "futures-core", @@ -7114,8 +7507,7 @@ dependencies = [ [[package]] name = "sp-version" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbeffa538a13d715d30e01d57a2636ba32845b737a29a3ea32403576588222e7" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "impl-serde", "parity-scale-codec", @@ -7127,10 +7519,9 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b214e125666a6416cf30a70cc6a5dacd34a4e5197f8a3d479f714af7e1dc7a47" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "impl-trait-for-tuples", + "impl-trait-for-tuples 0.2.1", "parity-scale-codec", "sp-std", "wasmi", @@ -7258,14 +7649,13 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e46123ec4a690d91967de07cd6af4dde90d14519a1a8d43f61bd3f78dd3d0ef" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.12", - "jsonrpc-core", - "jsonrpc-core-client", - "jsonrpc-derive", + "jsonrpc-core 15.1.0", + "jsonrpc-core-client 15.1.0", + "jsonrpc-derive 15.1.0", "log", "parity-scale-codec", "sc-client-api", @@ -7282,13 +7672,12 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb561c19a121e1c89daa79dbfa67a55080f813caa47fd231833a0669696d508" +source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "async-std", "derive_more", "futures-util", - "hyper 0.13.10", + "hyper 0.13.9", "log", "prometheus", "tokio 0.2.25", @@ -7372,7 +7761,7 @@ dependencies = [ "cfg-if 1.0.0", "libc", "rand 0.8.3", - "redox_syscall 0.2.5", + "redox_syscall 0.2.4", "remove_dir_all", "winapi 0.3.9", ] @@ -7397,18 +7786,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76cc616c6abf8c8928e2fdcc0dbfab37175edd8fb49a4641066ad1364fdab146" +checksum = "e0f4a65597094d4483ddaed134f409b2cb7c1beccf25201a9f73c719254fa98e" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9be73a2caec27583d0046ef3796c3794f868a5bc813db689eed00c7631275cd1" +checksum = "7765189610d8241a44529806d6fd1f2e0a08734313a35d5b3a556f92b381f3c0" dependencies = [ "proc-macro2", "quote", @@ -7417,9 +7806,9 @@ dependencies = [ [[package]] name = "thread_local" -version = "1.1.3" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8018d24e04c95ac8790716a5987d0fec4f8b27249ffa0f7d33f1369bdfb88cbd" +checksum = "d8208a331e1cb318dd5bd76951d2b8fc48ca38a69f5f4e4af1b6a9f8c6236915" dependencies = [ "once_cell", ] @@ -7766,9 +8155,9 @@ checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" [[package]] name = "tracing" -version = "0.1.23" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d40a22fd029e33300d8d89a5cc8ffce18bb7c587662f54629e94c9de5487f3" +checksum = "01ebdc2bb4498ab1ab5f5b73c5803825e60199229ccba0698170e3be0e7f959f" dependencies = [ "cfg-if 1.0.0", "log", @@ -7779,9 +8168,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.12" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43f080ea7e4107844ef4766459426fa2d5c1ada2e47edba05dc7fa99d9629f47" +checksum = "41768be5b9f3489491825f56f01f25290aa1d3e7cc97e182d4d34360493ba6fa" dependencies = [ "proc-macro2", "quote", @@ -7799,19 +8188,19 @@ dependencies = [ [[package]] name = "tracing-futures" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab7bb6f14721aa00656086e9335d363c5c8747bae02ebe32ea2c7dece5689b4c" +checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" dependencies = [ - "pin-project 0.4.27", + "pin-project 1.0.5", "tracing", ] [[package]] name = "tracing-log" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e0f8c7178e13481ff6765bd169b33e8d554c5d2bbede5e32c356194be02b9b9" +checksum = "a6923477a48e41c1951f1999ef8bb5a3023eb723ceadafe78ffb65dc366761e3" dependencies = [ "lazy_static", "log", @@ -7830,9 +8219,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1fa8f0c8f4c594e4fc9debc1990deab13238077271ba84dd853d54902ee3401" +checksum = "8ab8966ac3ca27126141f7999361cc97dd6fb4b71da04c02044fa9045d98bb96" dependencies = [ "ansi_term 0.12.1", "chrono", @@ -7872,6 +8261,16 @@ dependencies = [ "hash-db", ] +[[package]] +name = "triehash" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1631b201eb031b563d2e85ca18ec8092508e262a3196ce9bd10a67ec87b9f5c" +dependencies = [ + "hash-db", + "rlp", +] + [[package]] name = "try-lock" version = "0.2.3" @@ -7885,7 +8284,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04f8ab788026715fa63b31960869617cba39117e520eb415b0139543e325ab59" dependencies = [ "cfg-if 0.1.10", - "rand 0.7.3", + "rand 0.3.23", "static_assertions", ] @@ -7933,9 +8332,9 @@ dependencies = [ [[package]] name = "unicode-normalization" -version = "0.1.17" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07fbfce1c8a97d547e8b5334978438d9d6ec8c20e38f56d4a4374d181493eaef" +checksum = "a13e63ab62dbe32aeee58d1c5408d35c36c392bba5d9d3142287219721afe606" dependencies = [ "tinyvec", ] @@ -8022,7 +8421,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5909f2b0817350449ed73e8bcd81c8c3c8d9a7a5d8acba4b27db277f1868976e" dependencies = [ "form_urlencoded", - "idna 0.2.1", + "idna 0.2.0", "matches", "percent-encoding 2.1.0", ] @@ -8426,18 +8825,18 @@ dependencies = [ [[package]] name = "wast" -version = "33.0.0" +version = "35.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d04fe175c7f78214971293e7d8875673804e736092206a3a4544dbc12811c1b" +checksum = "db5ae96da18bb5926341516fd409b5a8ce4e4714da7f0a1063d3b20ac9f9a1e1" dependencies = [ "leb128", ] [[package]] name = "wat" -version = "1.0.34" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ec9c6ee01ae07a26adadcdfed22c7a97e0b8cbee9c06e0e96076ece5aeb5cfe" +checksum = "0b0fa059022c5dabe129f02b429d67086400deb8277f89c975555dacc1dadbcc" dependencies = [ "wast", ] @@ -8571,9 +8970,9 @@ dependencies = [ [[package]] name = "yamux" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aeb8c4043cac71c3c299dff107171c220d179492350ea198e109a414981b83c" +checksum = "1cc7bd8c983209ed5d527f44b01c41b7dc146fd960c61cf9e1d25399841dc271" dependencies = [ "futures 0.3.12", "log", diff --git a/Cargo.toml b/Cargo.toml index 68fa042216..185f987585 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,4 +1,5 @@ [workspace] +resolver = "2" members = [ 'node', 'pallets/nft', From de5a81f655268b8b2db0717db9fda7e9c294fd53 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Wed, 31 Mar 2021 08:38:16 +0000 Subject: [PATCH 04/66] feat: add frontier pallets to runtime Signed-off-by: Yaroslav Bolyukin --- runtime/src/lib.rs | 645 +++++++++++++++++++++++++++++---------------- 1 file changed, 411 insertions(+), 234 deletions(-) diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index a1fbc678a9..3c0700d90b 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -17,17 +17,17 @@ use pallet_grandpa::fg_primitives; use pallet_grandpa::{AuthorityId as GrandpaId, AuthorityList as GrandpaAuthorityList}; use sp_api::impl_runtime_apis; use sp_consensus_aura::sr25519::AuthorityId as AuraId; -use sp_core::{ crypto::KeyTypeId, crypto::Public, OpaqueMetadata }; +use sp_core::{ crypto::KeyTypeId, crypto::Public, OpaqueMetadata, H160, U256 }; use sp_runtime::{ - Permill, Perbill, Percent, - ModuleId, - create_runtime_str, generic, impl_opaque_keys, - traits::{ - Convert, ConvertInto, BlakeTwo256, Block as BlockT, IdentifyAccount, - IdentityLookup, NumberFor, Verify, AccountIdConversion, - }, - transaction_validity::{TransactionSource, TransactionValidity}, - ApplyExtrinsicResult, MultiSignature, + Permill, Perbill, Percent, + ModuleId, + create_runtime_str, generic, impl_opaque_keys, + traits::{ + Convert, ConvertInto, BlakeTwo256, Block as BlockT, IdentifyAccount, + IdentityLookup, NumberFor, Verify, AccountIdConversion, + }, + transaction_validity::{TransactionSource, TransactionValidity}, + ApplyExtrinsicResult, MultiSignature, }; #[cfg(feature = "std")] use sp_version::NativeVersion; @@ -35,32 +35,38 @@ use sp_version::RuntimeVersion; pub use pallet_transaction_payment::{Multiplier, TargetedFeeAdjustment, CurrencyAdapter, FeeDetails, RuntimeDispatchInfo}; // A few exports that help ease life for downstream crates. pub use pallet_balances::Call as BalancesCall; +pub use pallet_evm::{EnsureAddressTruncated, HashedAddressMapping, Runner}; pub use pallet_contracts::{Schedule as ContractsSchedule }; pub use frame_support::{ - construct_runtime, - dispatch::DispatchResult, - parameter_types, - StorageValue, - traits::{ - Currency, ExistenceRequirement, Get, KeyOwnerProofSystem, OnUnbalanced, Randomness, - LockIdentifier, - }, - weights::{ - constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_PER_SECOND}, - DispatchClass, DispatchInfo, GetDispatchInfo, Pays, PostDispatchInfo, Weight, - WeightToFeePolynomial, WeightToFeeCoefficient, WeightToFeeCoefficients - }, + construct_runtime, + dispatch::DispatchResult, + parameter_types, + StorageValue, + traits::{ + Currency, ExistenceRequirement, Get, KeyOwnerProofSystem, OnUnbalanced, Randomness, + LockIdentifier, FindAuthor, + }, + weights::{ + constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_PER_SECOND}, + DispatchClass, DispatchInfo, GetDispatchInfo, Pays, PostDispatchInfo, Weight, + WeightToFeePolynomial, WeightToFeeCoefficient, WeightToFeeCoefficients + }, + ConsensusEngineId, }; use pallet_contracts::weights::WeightInfo; // #[cfg(any(feature = "std", test))] use frame_system::{ - self as system, - EnsureRoot, + self as system, + EnsureRoot, limits::{BlockWeights, BlockLength}, }; use sp_std::{prelude::*, marker::PhantomData}; use sp_arithmetic::{traits::{BaseArithmetic, Unsigned}}; use smallvec::smallvec; +use codec::{Encode, Decode}; +use pallet_evm::{Account as EVMAccount, FeeCalculator}; +use fp_rpc::TransactionStatus; +use sp_core::H256; pub use pallet_timestamp::Call as TimestampCall; @@ -127,34 +133,34 @@ mod nft_weights; /// of data like extrinsics, allowing for them to continue syncing the network through upgrades /// to even the core data structures. pub mod opaque { - use super::*; + use super::*; - pub use sp_runtime::OpaqueExtrinsic as UncheckedExtrinsic; + pub use sp_runtime::OpaqueExtrinsic as UncheckedExtrinsic; - /// Opaque block header type. - pub type Header = generic::Header; - /// Opaque block type. - pub type Block = generic::Block; - /// Opaque block identifier type. - pub type BlockId = generic::BlockId; + /// Opaque block header type. + pub type Header = generic::Header; + /// Opaque block type. + pub type Block = generic::Block; + /// Opaque block identifier type. + pub type BlockId = generic::BlockId; - impl_opaque_keys! { - pub struct SessionKeys { - pub aura: Aura, - pub grandpa: Grandpa, - } - } + impl_opaque_keys! { + pub struct SessionKeys { + pub aura: Aura, + pub grandpa: Grandpa, + } + } } /// This runtime version. pub const VERSION: RuntimeVersion = RuntimeVersion { - spec_name: create_runtime_str!("nft"), - impl_name: create_runtime_str!("nft"), - authoring_version: 1, - spec_version: 3, - impl_version: 1, - apis: RUNTIME_API_VERSIONS, - transaction_version: 1, + spec_name: create_runtime_str!("nft"), + impl_name: create_runtime_str!("nft"), + authoring_version: 1, + spec_version: 3, + impl_version: 1, + apis: RUNTIME_API_VERSIONS, + transaction_version: 1, }; pub const MILLISECS_PER_BLOCK: u64 = 6000; @@ -169,37 +175,37 @@ pub const DAYS: BlockNumber = HOURS * 24; /// The version information used to identify this runtime when compiled natively. #[cfg(feature = "std")] pub fn native_version() -> NativeVersion { - NativeVersion { - runtime_version: VERSION, - can_author_with: Default::default(), - } + NativeVersion { + runtime_version: VERSION, + can_author_with: Default::default(), + } } /// Provides a membership set with only the configured aura users pub struct ValiudatorsOnly(PhantomData); impl frame_support::traits::Contains for ValiudatorsOnly { fn contains(t: &AccountId) -> bool { - let arr: [u8; 32] = *t.as_ref(); - let raw_key: Vec = Vec::from(arr); + let arr: [u8; 32] = *t.as_ref(); + let raw_key: Vec = Vec::from(arr); - match pallet_aura::Module::::authorities().iter().find(|auth| auth.to_raw_vec() == raw_key) { - Some(_) => true, - None => false, - } + match pallet_aura::Module::::authorities().iter().find(|auth| auth.to_raw_vec() == raw_key) { + Some(_) => true, + None => false, + } } fn sorted_members() -> Vec { - let mut members: Vec = Vec::new(); - for auth in pallet_aura::Module::::authorities() { - let mut arr: [u8; 32] = Default::default(); - let bor_arr = auth.clone().to_raw_vec(); - let slice = bor_arr.as_slice(); - arr.copy_from_slice(slice); - members.push(AccountId::from(arr)); - } - members + let mut members: Vec = Vec::new(); + for auth in pallet_aura::Module::::authorities() { + let mut arr: [u8; 32] = Default::default(); + let bor_arr = auth.clone().to_raw_vec(); + let slice = bor_arr.as_slice(); + arr.copy_from_slice(slice); + members.push(AccountId::from(arr)); + } + members } fn count() -> usize { - pallet_aura::Module::::authorities().len() + pallet_aura::Module::::authorities().len() } } @@ -255,11 +261,11 @@ const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); const MAXIMUM_BLOCK_WEIGHT: Weight = 2 * WEIGHT_PER_SECOND; parameter_types! { - pub const BlockHashCount: BlockNumber = 2400; + pub const BlockHashCount: BlockNumber = 2400; pub RuntimeBlockLength: BlockLength = BlockLength::max_with_normal_ratio(5 * 1024 * 1024, NORMAL_DISPATCH_RATIO); - pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75); - pub const MaximumBlockLength: u32 = 5 * 1024 * 1024; + pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75); + pub const MaximumBlockLength: u32 = 5 * 1024 * 1024; pub RuntimeBlockWeights: BlockWeights = BlockWeights::builder() .base_block(BlockExecutionWeight::get()) .for_class(DispatchClass::all(), |weights| { @@ -278,59 +284,102 @@ parameter_types! { }) .avg_block_initialization(AVERAGE_ON_INITIALIZE_RATIO) .build_or_panic(); - pub const Version: RuntimeVersion = VERSION; - pub const SS58Prefix: u8 = 42; + pub const Version: RuntimeVersion = VERSION; + pub const SS58Prefix: u8 = 42; } impl system::Config for Runtime { - /// The basic call filter to use in dispatchable. - type BaseCallFilter = (); - /// The identifier used to distinguish between accounts. - type AccountId = AccountId; - /// The aggregated dispatch type that is available for extrinsics. - type Call = Call; - /// The lookup mechanism to get account ID from whatever is passed in dispatchers. - type Lookup = IdentityLookup; - /// The index type for storing how many extrinsics an account has signed. - type Index = Index; - /// The index type for blocks. - type BlockNumber = BlockNumber; - /// The type for hashing blocks and tries. - type Hash = Hash; - /// The hashing algorithm used. - type Hashing = BlakeTwo256; - /// The header type. - type Header = generic::Header; - /// The ubiquitous event type. - type Event = Event; - /// The ubiquitous origin type. - type Origin = Origin; - /// Maximum number of block number to block hash mappings to keep (oldest pruned first). - type BlockHashCount = BlockHashCount; - /// The weight of database operations that the runtime can invoke. - type DbWeight = RocksDbWeight; - /// The weight of the overhead invoked on the block import process, independent of the - /// extrinsics included in that block. + /// The basic call filter to use in dispatchable. + type BaseCallFilter = (); + /// The identifier used to distinguish between accounts. + type AccountId = AccountId; + /// The aggregated dispatch type that is available for extrinsics. + type Call = Call; + /// The lookup mechanism to get account ID from whatever is passed in dispatchers. + type Lookup = IdentityLookup; + /// The index type for storing how many extrinsics an account has signed. + type Index = Index; + /// The index type for blocks. + type BlockNumber = BlockNumber; + /// The type for hashing blocks and tries. + type Hash = Hash; + /// The hashing algorithm used. + type Hashing = BlakeTwo256; + /// The header type. + type Header = generic::Header; + /// The ubiquitous event type. + type Event = Event; + /// The ubiquitous origin type. + type Origin = Origin; + /// Maximum number of block number to block hash mappings to keep (oldest pruned first). + type BlockHashCount = BlockHashCount; + /// The weight of database operations that the runtime can invoke. + type DbWeight = RocksDbWeight; + /// The weight of the overhead invoked on the block import process, independent of the + /// extrinsics included in that block. type BlockWeights = RuntimeBlockWeights; - /// Version of the runtime. - type Version = Version; + /// Version of the runtime. + type Version = Version; /// This type is being generated by `construct_runtime!`. - type PalletInfo = PalletInfo; - /// What to do if a new account is created. - type OnNewAccount = (); - /// What to do if an account is fully reaped from the system. - type OnKilledAccount = (); - /// The data to be stored in an account. - type AccountData = pallet_balances::AccountData; + type PalletInfo = PalletInfo; + /// What to do if a new account is created. + type OnNewAccount = (); + /// What to do if an account is fully reaped from the system. + type OnKilledAccount = (); + /// The data to be stored in an account. + type AccountData = pallet_balances::AccountData; /// Weight information for the extrinsics of this pallet. - type SystemWeightInfo = system::weights::SubstrateWeight; - + type SystemWeightInfo = system::weights::SubstrateWeight; + type BlockLength = RuntimeBlockLength; type SS58Prefix = SS58Prefix; } impl pallet_aura::Config for Runtime { - type AuthorityId = AuraId; + type AuthorityId = AuraId; +} + +parameter_types! { + pub const ChainId: u64 = 8888; +} + +impl pallet_evm::Config for Runtime { + type FeeCalculator = (); + type GasWeightMapping = (); + type CallOrigin = EnsureAddressTruncated; + type WithdrawOrigin = EnsureAddressTruncated; + type AddressMapping = HashedAddressMapping; + type Currency = Balances; + type Event = Event; + type Precompiles = (); + type ChainId = ChainId; + type Runner = pallet_evm::runner::stack::Runner; + type OnChargeTransaction = (); +} + +pub struct EthereumFindAuthor(PhantomData); +impl> FindAuthor for EthereumFindAuthor +{ + fn find_author<'a, I>(digests: I) -> Option where + I: 'a + IntoIterator + { + if let Some(author_index) = F::find_author(digests) { + let authority_id = Aura::authorities()[author_index as usize].clone(); + return Some(H160::from_slice(&authority_id.to_raw_vec()[4..24])); + } + None + } +} + +parameter_types! { + pub BlockGasLimit: U256 = U256::from(u32::max_value()); +} + +impl pallet_ethereum::Config for Runtime { + type Event = Event; + type FindAuthor = EthereumFindAuthor; + type StateRoot = pallet_ethereum::IntermediateStateRoot; + type BlockGasLimit = BlockGasLimit; } impl pallet_grandpa::Config for Runtime { @@ -353,7 +402,7 @@ impl pallet_grandpa::Config for Runtime { } parameter_types! { - pub const MinimumPeriod: u64 = SLOT_DURATION / 2; + pub const MinimumPeriod: u64 = SLOT_DURATION / 2; } impl pallet_timestamp::Config for Runtime { @@ -365,8 +414,8 @@ impl pallet_timestamp::Config for Runtime { } parameter_types! { - // pub const ExistentialDeposit: u128 = 500; - pub const ExistentialDeposit: u128 = 0; + // pub const ExistentialDeposit: u128 = 500; + pub const ExistentialDeposit: u128 = 0; pub const MaxLocks: u32 = 50; } @@ -388,7 +437,7 @@ pub const CENTIUNIQUE: Balance = 10 * MILLIUNIQUE; pub const UNIQUE: Balance = 100 * CENTIUNIQUE; pub const fn deposit(items: u32, bytes: u32) -> Balance { - items as Balance * 15 * CENTIUNIQUE + (bytes as Balance) * 6 * CENTIUNIQUE + items as Balance * 15 * CENTIUNIQUE + (bytes as Balance) * 6 * CENTIUNIQUE } parameter_types! { @@ -404,7 +453,7 @@ parameter_types! { pub const SignedClaimHandicap: u32 = 2; pub const MaxDepth: u32 = 32; pub const MaxValueSize: u32 = 16 * 1024; - pub const MaxCodeSize: u32 = 1024 * 1024 * 25; // 25 Mb + pub const MaxCodeSize: u32 = 1024 * 1024 * 25; // 25 Mb // The lazy deletion runs inside on_initialize. pub DeletionWeightLimit: Weight = AVERAGE_ON_INITIALIZE_RATIO * RuntimeBlockWeights::get().max_block; @@ -441,10 +490,10 @@ impl pallet_contracts::Config for Runtime { } parameter_types! { - pub const TransactionByteFee: Balance = 501 * MICROUNIQUE; // Targeting 0.1 Unique per NFT transfer + pub const TransactionByteFee: Balance = 501 * MICROUNIQUE; // Targeting 0.1 Unique per NFT transfer } -/// Linear implementor of `WeightToFeePolynomial` +/// Linear implementor of `WeightToFeePolynomial` pub struct LinearFee(sp_std::marker::PhantomData); impl WeightToFeePolynomial for LinearFee where @@ -504,8 +553,8 @@ impl pallet_treasury::Config for Runtime { } impl pallet_sudo::Config for Runtime { - type Event = Event; - type Call = Call; + type Event = Event; + type Call = Call; } parameter_types! { @@ -527,34 +576,52 @@ parameter_types! { /// Used for the module nft in `./nft.rs` impl pallet_nft::Config for Runtime { - type Event = Event; - type WeightInfo = nft_weights::WeightInfo; + type Event = Event; + type WeightInfo = nft_weights::WeightInfo; type Currency = Balances; type CollectionCreationPrice = CollectionCreationPrice; type TreasuryAccountId = TreasuryAccountId; } construct_runtime!( - pub enum Runtime where - Block = Block, - NodeBlock = opaque::Block, - UncheckedExtrinsic = UncheckedExtrinsic - { - System: system::{Module, Call, Config, Storage, Event}, - RandomnessCollectiveFlip: pallet_randomness_collective_flip::{Module, Call, Storage}, - Contracts: pallet_contracts::{Module, Call, Config, Storage, Event}, - Timestamp: pallet_timestamp::{Module, Call, Storage, Inherent}, - Aura: pallet_aura::{Module, Config }, - Grandpa: pallet_grandpa::{Module, Call, Storage, Config, Event}, - Balances: pallet_balances::{Module, Call, Storage, Config, Event}, - TransactionPayment: pallet_transaction_payment::{Module, Storage}, - Sudo: pallet_sudo::{Module, Call, Config, Storage, Event}, - Nft: pallet_nft::{Module, Call, Config, Storage, Event}, - Treasury: pallet_treasury::{Module, Call, Storage, Config, Event}, - Vesting: pallet_vesting::{Module, Call, Config, Storage, Event}, - } + pub enum Runtime where + Block = Block, + NodeBlock = opaque::Block, + UncheckedExtrinsic = UncheckedExtrinsic + { + System: system::{Module, Call, Config, Storage, Event}, + RandomnessCollectiveFlip: pallet_randomness_collective_flip::{Module, Call, Storage}, + Contracts: pallet_contracts::{Module, Call, Config, Storage, Event}, + Timestamp: pallet_timestamp::{Module, Call, Storage, Inherent}, + Aura: pallet_aura::{Module, Config }, + EVM: pallet_evm::{Module, Config, Call, Storage, Event}, + Ethereum: pallet_ethereum::{Module, Config, Call, Storage, Event}, + Grandpa: pallet_grandpa::{Module, Call, Storage, Config, Event}, + Balances: pallet_balances::{Module, Call, Storage, Config, Event}, + TransactionPayment: pallet_transaction_payment::{Module, Storage}, + Sudo: pallet_sudo::{Module, Call, Config, Storage, Event}, + Nft: pallet_nft::{Module, Call, Config, Storage, Event}, + Treasury: pallet_treasury::{Module, Call, Storage, Config, Event}, + Vesting: pallet_vesting::{Module, Call, Config, Storage, Event}, + } ); +pub struct TransactionConverter; + +impl fp_rpc::ConvertTransaction for TransactionConverter { + fn convert_transaction(&self, transaction: pallet_ethereum::Transaction) -> UncheckedExtrinsic { + UncheckedExtrinsic::new_unsigned(pallet_ethereum::Call::::transact(transaction).into()) + } +} + +impl fp_rpc::ConvertTransaction for TransactionConverter { + fn convert_transaction(&self, transaction: pallet_ethereum::Transaction) -> opaque::UncheckedExtrinsic { + let extrinsic = UncheckedExtrinsic::new_unsigned(pallet_ethereum::Call::::transact(transaction).into()); + let encoded = extrinsic.encode(); + opaque::UncheckedExtrinsic::decode(&mut &encoded[..]).expect("Encoded extrinsic is always valid") + } +} + /// The address format for describing accounts. pub type Address = AccountId; /// Block header type as expected by this runtime. @@ -567,13 +634,13 @@ pub type SignedBlock = generic::SignedBlock; pub type BlockId = generic::BlockId; /// The SignedExtension to the basic transaction logic. pub type SignedExtra = ( - system::CheckSpecVersion, - system::CheckTxVersion, - system::CheckGenesis, - system::CheckEra, - system::CheckNonce, - system::CheckWeight, - pallet_nft::ChargeTransactionPayment, + system::CheckSpecVersion, + system::CheckTxVersion, + system::CheckGenesis, + system::CheckEra, + system::CheckNonce, + system::CheckWeight, + pallet_nft::ChargeTransactionPayment, ); /// Unchecked extrinsic type as expected by this runtime. pub type UncheckedExtrinsic = generic::UncheckedExtrinsic; @@ -581,7 +648,7 @@ pub type UncheckedExtrinsic = generic::UncheckedExtrinsic; /// Executive: handles dispatch to the various modules. pub type Executive = - frame_executive::Executive, Runtime, AllModules>; + frame_executive::Executive, Runtime, AllModules>; impl_runtime_apis! { @@ -612,87 +679,197 @@ impl_runtime_apis! { } } - impl sp_api::Core for Runtime { - fn version() -> RuntimeVersion { - VERSION - } - - fn execute_block(block: Block) { - Executive::execute_block(block) - } - - fn initialize_block(header: &::Header) { - Executive::initialize_block(header) - } - } - - impl sp_api::Metadata for Runtime { - fn metadata() -> OpaqueMetadata { - Runtime::metadata().into() - } - } - - impl sp_block_builder::BlockBuilder for Runtime { - fn apply_extrinsic(extrinsic: ::Extrinsic) -> ApplyExtrinsicResult { - Executive::apply_extrinsic(extrinsic) - } - - fn finalize_block() -> ::Header { - Executive::finalize_block() - } - - fn inherent_extrinsics(data: sp_inherents::InherentData) -> Vec<::Extrinsic> { - data.create_extrinsics() - } - - fn check_inherents( - block: Block, - data: sp_inherents::InherentData, - ) -> sp_inherents::CheckInherentsResult { - data.check_extrinsics(&block) - } - - fn random_seed() -> ::Hash { - RandomnessCollectiveFlip::random_seed() - } - } - - impl sp_transaction_pool::runtime_api::TaggedTransactionQueue for Runtime { - fn validate_transaction( - source: TransactionSource, - tx: ::Extrinsic, - ) -> TransactionValidity { - Executive::validate_transaction(source, tx) - } - } - - impl sp_offchain::OffchainWorkerApi for Runtime { - fn offchain_worker(header: &::Header) { - Executive::offchain_worker(header) - } - } - - impl sp_consensus_aura::AuraApi for Runtime { - fn slot_duration() -> u64 { - Aura::slot_duration() - } - - fn authorities() -> Vec { - Aura::authorities() - } - } - - impl sp_session::SessionKeys for Runtime { - fn generate_session_keys(seed: Option>) -> Vec { - opaque::SessionKeys::generate(seed) - } - - fn decode_session_keys( - encoded: Vec, - ) -> Option, KeyTypeId)>> { - opaque::SessionKeys::decode_into_raw_public_keys(&encoded) - } - } + impl sp_api::Core for Runtime { + fn version() -> RuntimeVersion { + VERSION + } + + fn execute_block(block: Block) { + Executive::execute_block(block) + } + + fn initialize_block(header: &::Header) { + Executive::initialize_block(header) + } + } + + impl sp_api::Metadata for Runtime { + fn metadata() -> OpaqueMetadata { + Runtime::metadata().into() + } + } + + impl sp_block_builder::BlockBuilder for Runtime { + fn apply_extrinsic(extrinsic: ::Extrinsic) -> ApplyExtrinsicResult { + Executive::apply_extrinsic(extrinsic) + } + + fn finalize_block() -> ::Header { + Executive::finalize_block() + } + + fn inherent_extrinsics(data: sp_inherents::InherentData) -> Vec<::Extrinsic> { + data.create_extrinsics() + } + + fn check_inherents( + block: Block, + data: sp_inherents::InherentData, + ) -> sp_inherents::CheckInherentsResult { + data.check_extrinsics(&block) + } + + fn random_seed() -> ::Hash { + RandomnessCollectiveFlip::random_seed().0 + } + } + + impl sp_transaction_pool::runtime_api::TaggedTransactionQueue for Runtime { + fn validate_transaction( + source: TransactionSource, + tx: ::Extrinsic, + ) -> TransactionValidity { + Executive::validate_transaction(source, tx) + } + } + + impl sp_offchain::OffchainWorkerApi for Runtime { + fn offchain_worker(header: &::Header) { + Executive::offchain_worker(header) + } + } + + impl sp_consensus_aura::AuraApi for Runtime { + fn slot_duration() -> u64 { + Aura::slot_duration() + } + + fn authorities() -> Vec { + Aura::authorities() + } + } + + impl fp_rpc::EthereumRuntimeRPCApi for Runtime { + fn chain_id() -> u64 { + ::ChainId::get() + } + + fn account_basic(address: H160) -> EVMAccount { + EVM::account_basic(&address) + } + + fn gas_price() -> U256 { + ::FeeCalculator::min_gas_price() + } + + fn account_code_at(address: H160) -> Vec { + EVM::account_codes(address) + } + + fn author() -> H160 { + >::find_author() + } + + fn storage_at(address: H160, index: U256) -> H256 { + let mut tmp = [0u8; 32]; + index.to_big_endian(&mut tmp); + EVM::account_storages(address, H256::from_slice(&tmp[..])) + } + + fn call( + from: H160, + to: H160, + data: Vec, + value: U256, + gas_limit: U256, + gas_price: Option, + nonce: Option, + estimate: bool, + ) -> Result { + let config = if estimate { + let mut config = ::config().clone(); + config.estimate = true; + Some(config) + } else { + None + }; + + ::Runner::call( + from, + to, + data, + value, + gas_limit.low_u64(), + gas_price, + nonce, + config.as_ref().unwrap_or(::config()), + ).map_err(|err| err.into()) + } + + fn create( + from: H160, + data: Vec, + value: U256, + gas_limit: U256, + gas_price: Option, + nonce: Option, + estimate: bool, + ) -> Result { + let config = if estimate { + let mut config = ::config().clone(); + config.estimate = true; + Some(config) + } else { + None + }; + + ::Runner::create( + from, + data, + value, + gas_limit.low_u64(), + gas_price, + nonce, + config.as_ref().unwrap_or(::config()), + ).map_err(|err| err.into()) + } + + fn current_transaction_statuses() -> Option> { + Ethereum::current_transaction_statuses() + } + + fn current_block() -> Option { + Ethereum::current_block() + } + + fn current_receipts() -> Option> { + Ethereum::current_receipts() + } + + fn current_all() -> ( + Option, + Option>, + Option> + ) { + ( + Ethereum::current_block(), + Ethereum::current_receipts(), + Ethereum::current_transaction_statuses() + ) + } + } + + impl sp_session::SessionKeys for Runtime { + fn generate_session_keys(seed: Option>) -> Vec { + opaque::SessionKeys::generate(seed) + } + + fn decode_session_keys( + encoded: Vec, + ) -> Option, KeyTypeId)>> { + opaque::SessionKeys::decode_into_raw_public_keys(&encoded) + } + } impl fg_primitives::GrandpaApi for Runtime { fn grandpa_authorities() -> GrandpaAuthorityList { @@ -718,8 +895,8 @@ impl_runtime_apis! { // with no values). None } - } - + } + impl frame_system_rpc_runtime_api::AccountNonceApi for Runtime { fn account_nonce(account: AccountId) -> Index { System::account_nonce(account) @@ -735,7 +912,7 @@ impl_runtime_apis! { } } - #[cfg(feature = "runtime-benchmarks")] + #[cfg(feature = "runtime-benchmarks")] impl frame_benchmarking::Benchmark for Runtime { fn dispatch_benchmark( config: frame_benchmarking::BenchmarkConfig @@ -753,7 +930,7 @@ impl_runtime_apis! { // hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850").to_vec().into(), // // System Events // hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7").to_vec().into(), - ]; + ]; let mut batches = Vec::::new(); let params = (&config, &whitelist); @@ -764,4 +941,4 @@ impl_runtime_apis! { Ok(batches) } } -} \ No newline at end of file +} From d9a94fdfefd5d035998a55dce482e17be34e366a Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Wed, 31 Mar 2021 08:41:06 +0000 Subject: [PATCH 05/66] refactor: merge with new node template Signed-off-by: Yaroslav Bolyukin --- node/src/chain_spec.rs | 173 +++++++-------- node/src/command.rs | 12 +- node/src/lib.rs | 3 - node/src/main.rs | 2 +- node/src/rpc.rs | 167 ++++++++++++-- node/src/service.rs | 484 +++++++++++++++++++++++++++-------------- 6 files changed, 569 insertions(+), 272 deletions(-) delete mode 100644 node/src/lib.rs diff --git a/node/src/chain_spec.rs b/node/src/chain_spec.rs index 92e0782777..12d803bc54 100644 --- a/node/src/chain_spec.rs +++ b/node/src/chain_spec.rs @@ -3,19 +3,18 @@ // file 'LICENSE', which is part of this source code package. // -// use nft_runtime::{ -// AccountId, AuraConfig, BalancesConfig, GenesisConfig, GrandpaConfig, Signature, SudoConfig, -// SystemConfig, WASM_BINARY, -// }; -// use nft_runtime::{ContractsConfig, ContractsSchedule, NftConfig, CollectionType}; use nft_runtime::*; -use sc_service::ChainType; +use sp_core::{Pair, Public, sr25519}; +use nft_runtime::{ + AccountId, AuraConfig, BalancesConfig, EVMConfig, EthereumConfig, GenesisConfig, GrandpaConfig, + SudoConfig, SystemConfig, WASM_BINARY, Signature +}; use sp_consensus_aura::sr25519::AuthorityId as AuraId; -use sp_core::{sr25519, Pair, Public}; use sp_finality_grandpa::AuthorityId as GrandpaId; -use sp_runtime::traits::{IdentifyAccount, Verify}; +use sp_runtime::traits::{Verify, IdentifyAccount}; +use sc_service::ChainType; use serde_json::map::Map; -// use crate::chain_spec::api::chain_extension::*; +use std::collections::BTreeMap; // Note this is the URL for the telemetry server //const STAGING_TELEMETRY_URL: &str = "wss://telemetry.polkadot.io/submit/"; @@ -25,9 +24,9 @@ pub type ChainSpec = sc_service::GenericChainSpec; /// Helper function to generate a crypto pair from seed pub fn get_from_seed(seed: &str) -> ::Public { - TPublic::Pair::from_string(&format!("//{}", seed), None) - .expect("static values are valid; qed") - .public() + TPublic::Pair::from_string(&format!("//{}", seed), None) + .expect("static values are valid; qed") + .public() } type AccountPublic = ::Signer; @@ -35,14 +34,14 @@ type AccountPublic = ::Signer; /// Helper function to generate an account ID from seed pub fn get_account_id_from_seed(seed: &str) -> AccountId where - AccountPublic: From<::Public>, + AccountPublic: From<::Public>, { - AccountPublic::from(get_from_seed::(seed)).into_account() + AccountPublic::from(get_from_seed::(seed)).into_account() } /// Helper function to generate an authority key for Aura pub fn authority_keys_from_seed(s: &str) -> (AuraId, GrandpaId) { - (get_from_seed::(s), get_from_seed::(s)) + (get_from_seed::(s), get_from_seed::(s)) } pub fn development_config() -> Result { @@ -138,88 +137,92 @@ pub fn local_testnet_config() -> Result { } fn testnet_genesis( - wasm_binary: &[u8], - initial_authorities: Vec<(AuraId, GrandpaId)>, - root_key: AccountId, - endowed_accounts: Vec, - enable_println: bool, + wasm_binary: &[u8], + initial_authorities: Vec<(AuraId, GrandpaId)>, + root_key: AccountId, + endowed_accounts: Vec, + enable_println: bool, ) -> GenesisConfig { let vested_accounts = vec![ get_account_id_from_seed::("Bob"), ]; - GenesisConfig { - system: Some(SystemConfig { - code: wasm_binary.to_vec(), - changes_trie_config: Default::default(), - }), - pallet_balances: Some(BalancesConfig { - balances: endowed_accounts - .iter() - .cloned() - .map(|k| (k, 1 << 100)) - .collect(), - }), - pallet_aura: Some(AuraConfig { - authorities: initial_authorities.iter().map(|x| (x.0.clone())).collect(), - }), - pallet_grandpa: Some(GrandpaConfig { - authorities: initial_authorities - .iter() - .map(|x| (x.1.clone(), 1)) - .collect(), - }), - pallet_treasury: Some(Default::default()), - pallet_sudo: Some(SudoConfig { key: root_key }), - pallet_vesting: Some(VestingConfig { - vesting: vested_accounts - .iter() - .cloned() - .map(|k| (k, 1000, 100, 1 << 98)) - .collect(), - }), - pallet_nft: Some(NftConfig { - collection_id: vec![( - 1, - Collection { - owner: get_account_id_from_seed::("Alice"), - mode: CollectionMode::NFT, - access: AccessMode::Normal, - decimal_points: 0, - name: vec![], - description: vec![], - token_prefix: vec![], - mint_mode: false, + GenesisConfig { + system: SystemConfig { + code: wasm_binary.to_vec(), + changes_trie_config: Default::default(), + }, + pallet_balances: BalancesConfig { + balances: endowed_accounts + .iter() + .cloned() + .map(|k| (k, 1 << 100)) + .collect(), + }, + pallet_aura: AuraConfig { + authorities: initial_authorities.iter().map(|x| (x.0.clone())).collect(), + }, + pallet_grandpa: GrandpaConfig { + authorities: initial_authorities + .iter() + .map(|x| (x.1.clone(), 1)) + .collect(), + }, + pallet_treasury: Default::default(), + pallet_sudo: SudoConfig { key: root_key }, + pallet_vesting: VestingConfig { + vesting: vested_accounts + .iter() + .cloned() + .map(|k| (k, 1000, 100, 1 << 98)) + .collect(), + }, + pallet_nft: NftConfig { + collection_id: vec![( + 1, + Collection { + owner: get_account_id_from_seed::("Alice"), + mode: CollectionMode::NFT, + access: AccessMode::Normal, + decimal_points: 0, + name: vec![], + description: vec![], + token_prefix: vec![], + mint_mode: false, offchain_schema: vec![], schema_version: SchemaVersion::default(), - sponsorship: SponsorshipState::Confirmed(get_account_id_from_seed::("Alice")), - const_on_chain_schema: vec![], + sponsorship: SponsorshipState::Confirmed(get_account_id_from_seed::("Alice")), + const_on_chain_schema: vec![], variable_on_chain_schema: vec![], limits: CollectionLimits::default() - }, - )], - nft_item_id: vec![], - fungible_item_id: vec![], - refungible_item_id: vec![], - chain_limit: ChainLimits { - collection_numbers_limit: 100000, - account_token_ownership_limit: 1000000, - collections_admins_limit: 5, - custom_data_limit: 2048, - nft_sponsor_transfer_timeout: 15, - fungible_sponsor_transfer_timeout: 15, + }, + )], + nft_item_id: vec![], + fungible_item_id: vec![], + refungible_item_id: vec![], + chain_limit: ChainLimits { + collection_numbers_limit: 100000, + account_token_ownership_limit: 1000000, + collections_admins_limit: 5, + custom_data_limit: 2048, + nft_sponsor_transfer_timeout: 15, + fungible_sponsor_transfer_timeout: 15, refungible_sponsor_transfer_timeout: 15, offchain_schema_limit: 1024, variable_on_chain_schema_limit: 1024, const_on_chain_schema_limit: 1024, - }, - }), - pallet_contracts: Some(ContractsConfig { - current_schedule: ContractsSchedule { - enable_println, - ..Default::default() - }, - }), - } + }, + }, + pallet_contracts: ContractsConfig { + current_schedule: ContractsSchedule { + enable_println, + ..Default::default() + }, + }, + pallet_evm: EVMConfig { + accounts: BTreeMap::new(), + }, + pallet_ethereum: EthereumConfig {}, + } } diff --git a/node/src/command.rs b/node/src/command.rs index cbf0bed18c..d7c3f42a6b 100644 --- a/node/src/command.rs +++ b/node/src/command.rs @@ -75,7 +75,7 @@ pub fn run() -> sc_cli::Result<()> { let runner = cli.create_runner(cmd)?; runner.async_run(|config| { let PartialComponents { client, task_manager, import_queue, ..} - = service::new_partial(&config)?; + = service::new_partial(&config, &cli)?; Ok((cmd.run(client, import_queue), task_manager)) }) }, @@ -83,7 +83,7 @@ pub fn run() -> sc_cli::Result<()> { let runner = cli.create_runner(cmd)?; runner.async_run(|config| { let PartialComponents { client, task_manager, ..} - = service::new_partial(&config)?; + = service::new_partial(&config, &cli)?; Ok((cmd.run(client, config.database), task_manager)) }) }, @@ -91,7 +91,7 @@ pub fn run() -> sc_cli::Result<()> { let runner = cli.create_runner(cmd)?; runner.async_run(|config| { let PartialComponents { client, task_manager, ..} - = service::new_partial(&config)?; + = service::new_partial(&config, &cli)?; Ok((cmd.run(client, config.chain_spec), task_manager)) }) }, @@ -99,7 +99,7 @@ pub fn run() -> sc_cli::Result<()> { let runner = cli.create_runner(cmd)?; runner.async_run(|config| { let PartialComponents { client, task_manager, import_queue, ..} - = service::new_partial(&config)?; + = service::new_partial(&config, &cli)?; Ok((cmd.run(client, import_queue), task_manager)) }) }, @@ -111,7 +111,7 @@ pub fn run() -> sc_cli::Result<()> { let runner = cli.create_runner(cmd)?; runner.async_run(|config| { let PartialComponents { client, task_manager, backend, ..} - = service::new_partial(&config)?; + = service::new_partial(&config, &cli)?; Ok((cmd.run(client, backend), task_manager)) }) }, @@ -130,7 +130,7 @@ pub fn run() -> sc_cli::Result<()> { runner.run_node_until_exit(|config| async move { match config.role { Role::Light => service::new_light(config), - _ => service::new_full(config), + _ => service::new_full(config, &cli), }.map_err(sc_cli::Error::Service) }) } diff --git a/node/src/lib.rs b/node/src/lib.rs deleted file mode 100644 index 777c4f0a77..0000000000 --- a/node/src/lib.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod chain_spec; -pub mod service; -pub mod rpc; diff --git a/node/src/main.rs b/node/src/main.rs index d9e11e72d8..e0e9bce9cb 100644 --- a/node/src/main.rs +++ b/node/src/main.rs @@ -14,5 +14,5 @@ mod command; mod rpc; fn main() -> sc_cli::Result<()> { - command::run() + command::run() } diff --git a/node/src/rpc.rs b/node/src/rpc.rs index eb8ddaa38b..499f914955 100644 --- a/node/src/rpc.rs +++ b/node/src/rpc.rs @@ -3,17 +3,38 @@ //! used by Substrate nodes. This file extends those RPC definitions with //! capabilities that are specific to this project's runtime configuration. -#![warn(missing_docs)] - use std::sync::Arc; -use nft_runtime::{opaque::Block, AccountId, Balance, Index, BlockNumber}; +use std::collections::BTreeMap; +use fc_rpc_core::types::{PendingTransactions, FilterPool}; +use nft_runtime::{Hash, AccountId, Index, opaque::Block, Balance}; use sp_api::ProvideRuntimeApi; use sp_blockchain::{Error as BlockChainError, HeaderMetadata, HeaderBackend}; +use sc_client_api::{ + backend::{StorageProvider, Backend, StateBackend, AuxStore}, + client::BlockchainEvents +}; +use sc_rpc::SubscriptionTaskExecutor; +use sp_runtime::traits::BlakeTwo256; use sp_block_builder::BlockBuilder; -pub use sc_rpc_api::DenyUnsafe; +use sc_rpc_api::DenyUnsafe; use sp_transaction_pool::TransactionPool; -use pallet_contracts_rpc::{Contracts, ContractsApi}; +use sc_network::NetworkService; +use jsonrpc_pubsub::manager::SubscriptionManager; +use pallet_ethereum::EthereumStorageSchema; +use fc_rpc::{StorageOverride, SchemaV1Override}; + +/// Light client extra dependencies. +pub struct LightDeps { + /// The client instance to use. + pub client: Arc, + /// Transaction pool instance. + pub pool: Arc

, + /// Remote access to the blockchain (async). + pub remote_blockchain: Arc>, + /// Fetcher instance. + pub fetcher: Arc, +} /// Full client dependencies. pub struct FullDeps { @@ -23,47 +44,155 @@ pub struct FullDeps { pub pool: Arc

, /// Whether to deny unsafe calls pub deny_unsafe: DenyUnsafe, + /// The Node authority flag + pub is_authority: bool, + /// Whether to enable dev signer + pub enable_dev_signer: bool, + /// Network service + pub network: Arc>, + /// Ethereum pending transactions. + pub pending_transactions: PendingTransactions, + /// EthFilterApi pool. + pub filter_pool: Option, + /// Backend. + pub backend: Arc>, } /// Instantiate all full RPC extensions. -pub fn create_full( +pub fn create_full( deps: FullDeps, + subscription_task_executor: SubscriptionTaskExecutor ) -> jsonrpc_core::IoHandler where - C: ProvideRuntimeApi, - C: HeaderBackend + HeaderMetadata + 'static, + BE: Backend + 'static, + BE::State: StateBackend, + C: ProvideRuntimeApi + StorageProvider + AuxStore, + C: BlockchainEvents, + C: HeaderBackend + HeaderMetadata, C: Send + Sync + 'static, C::Api: substrate_frame_rpc_system::AccountNonceApi, - C::Api: pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi, C::Api: BlockBuilder, - C::Api: pallet_contracts_rpc::ContractsRuntimeApi, - P: TransactionPool + 'static, + C::Api: pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi, + C::Api: fp_rpc::EthereumRuntimeRPCApi, + P: TransactionPool + 'static, { use substrate_frame_rpc_system::{FullSystem, SystemApi}; use pallet_transaction_payment_rpc::{TransactionPayment, TransactionPaymentApi}; + use fc_rpc::{ + EthApi, EthApiServer, EthFilterApi, EthFilterApiServer, NetApi, NetApiServer, + EthPubSubApi, EthPubSubApiServer, Web3Api, Web3ApiServer, EthDevSigner, EthSigner, + HexEncodedIdProvider, + }; let mut io = jsonrpc_core::IoHandler::default(); let FullDeps { client, pool, deny_unsafe, + is_authority, + network, + pending_transactions, + filter_pool, + backend, + enable_dev_signer, } = deps; io.extend_with( - SystemApi::to_delegate(FullSystem::new(client.clone(), pool, deny_unsafe)) + SystemApi::to_delegate(FullSystem::new(client.clone(), pool.clone(), deny_unsafe)) ); io.extend_with( TransactionPaymentApi::to_delegate(TransactionPayment::new(client.clone())) ); - io.extend_with( - ContractsApi::to_delegate(Contracts::new(client.clone())) + // io.extend_with( + // ContractsApi::to_delegate(Contracts::new(client.clone())) + // ); + + let mut signers = Vec::new(); + if enable_dev_signer { + signers.push(Box::new(EthDevSigner::new()) as Box); + } + let mut overrides = BTreeMap::new(); + overrides.insert( + EthereumStorageSchema::V1, + Box::new(SchemaV1Override::new(client.clone())) as Box + Send + Sync> + ); + io.extend_with( + EthApiServer::to_delegate(EthApi::new( + client.clone(), + pool.clone(), + nft_runtime::TransactionConverter, + network.clone(), + pending_transactions.clone(), + signers, + overrides, + backend, + is_authority, + )) + ); + + if let Some(filter_pool) = filter_pool { + io.extend_with( + EthFilterApiServer::to_delegate(EthFilterApi::new( + client.clone(), + filter_pool.clone(), + 500 as usize, // max stored filters + )) + ); + } + + io.extend_with( + NetApiServer::to_delegate(NetApi::new( + client.clone(), + network.clone(), + )) + ); + + io.extend_with( + Web3ApiServer::to_delegate(Web3Api::new( + client.clone(), + )) + ); + + io.extend_with( + EthPubSubApiServer::to_delegate(EthPubSubApi::new( + pool.clone(), + client.clone(), + network.clone(), + SubscriptionManager::::with_id_provider( + HexEncodedIdProvider::default(), + Arc::new(subscription_task_executor) + ), + )) + ); + + io +} + +/// Instantiate all Light RPC extensions. +pub fn create_light( + deps: LightDeps, +) -> jsonrpc_core::IoHandler where + C: sp_blockchain::HeaderBackend, + C: Send + Sync + 'static, + F: sc_client_api::light::Fetcher + 'static, + P: TransactionPool + 'static, + M: jsonrpc_core::Metadata + Default, +{ + use substrate_frame_rpc_system::{LightSystem, SystemApi}; + + let LightDeps { + client, + pool, + remote_blockchain, + fetcher + } = deps; + let mut io = jsonrpc_core::IoHandler::default(); + io.extend_with( + SystemApi::::to_delegate( + LightSystem::new(client, remote_blockchain, fetcher, pool) + ) ); - - // Extend this RPC with a custom API by using the following syntax. - // `YourRpcStruct` should have a reference to a client, which is needed - // to call into the runtime. - // `io.extend_with(YourRpcTrait::to_delegate(YourRpcStruct::new(ReferenceToClient, ...)));` io } diff --git a/node/src/service.rs b/node/src/service.rs index 05369ee510..58a972806a 100644 --- a/node/src/service.rs +++ b/node/src/service.rs @@ -5,17 +5,26 @@ // file 'LICENSE', which is part of this source code package. // -use std::sync::Arc; -use std::time::Duration; -use sc_client_api::{ExecutorProvider, RemoteBackend}; -use nft_runtime::{self, opaque::Block, RuntimeApi}; -use sc_service::{error::Error as ServiceError, Configuration, TaskManager}; -use sp_inherents::InherentDataProviders; +use std::{sync::{Arc, Mutex}, cell::RefCell, time::Duration, collections::{HashMap, BTreeMap}}; +use fc_rpc::EthTask; +use fc_rpc_core::types::{FilterPool, PendingTransactions}; +use sc_client_api::{ExecutorProvider, RemoteBackend, BlockchainEvents}; +use fc_consensus::FrontierBlockImport; +use fc_mapping_sync::MappingSyncWorker; +use nft_runtime::{self, opaque::Block, RuntimeApi, SLOT_DURATION}; +use sc_service::{error::Error as ServiceError, Configuration, TaskManager, BasePath}; +use sp_inherents::{InherentDataProviders, ProvideInherentData, InherentIdentifier, InherentData}; use sc_executor::native_executor_instance; pub use sc_executor::NativeExecutor; +use sc_consensus_aura::{ImportQueueParams, StartAuraParams, SlotProportion}; use sp_consensus_aura::sr25519::{AuthorityPair as AuraPair}; use sc_finality_grandpa::SharedVoterState; -use sc_keystore::LocalKeystore; +use sp_timestamp::InherentError; +use sc_telemetry::{Telemetry, TelemetryWorker}; +use sc_cli::SubstrateCli; +use futures::StreamExt; + +use crate::cli::Cli; // Our native executor instance. native_executor_instance!( @@ -29,30 +38,96 @@ type FullClient = sc_service::TFullClient; type FullBackend = sc_service::TFullBackend; type FullSelectChain = sc_consensus::LongestChain; -pub fn new_partial(config: &Configuration) -> Result, - sc_transaction_pool::FullPool, - ( - sc_consensus_aura::AuraBlockImport< +pub type ConsensusResult = ( + sc_consensus_aura::AuraBlockImport< + Block, + FullClient, + FrontierBlockImport< Block, - FullClient, sc_finality_grandpa::GrandpaBlockImport, - AuraPair + FullClient >, - sc_finality_grandpa::LinkHalf, - ) ->, ServiceError> { - if config.keystore_remote.is_some() { - return Err(ServiceError::Other( - format!("Remote Keystores are not supported."))) + AuraPair + >, + sc_finality_grandpa::LinkHalf +); + +/// Provide a mock duration starting at 0 in millisecond for timestamp inherent. +/// Each call will increment timestamp by slot_duration making Aura think time has passed. +pub struct MockTimestampInherentDataProvider; + +pub const INHERENT_IDENTIFIER: InherentIdentifier = *b"timstap0"; + +thread_local!(static TIMESTAMP: RefCell = RefCell::new(0)); + +impl ProvideInherentData for MockTimestampInherentDataProvider { + fn inherent_identifier(&self) -> &'static InherentIdentifier { + &INHERENT_IDENTIFIER } + + fn provide_inherent_data( + &self, + inherent_data: &mut InherentData, + ) -> Result<(), sp_inherents::Error> { + TIMESTAMP.with(|x| { + *x.borrow_mut() += SLOT_DURATION; + inherent_data.put_data(INHERENT_IDENTIFIER, &*x.borrow()) + }) + } + + fn error_to_string(&self, error: &[u8]) -> Option { + InherentError::try_from(&INHERENT_IDENTIFIER, error).map(|e| format!("{:?}", e)) + } +} + +pub fn open_frontier_backend(config: &Configuration) -> Result>, String> { + let config_dir = config.base_path.as_ref() + .map(|base_path| base_path.config_dir(config.chain_spec.id())) + .unwrap_or_else(|| { + BasePath::from_project("", "", &crate::cli::Cli::executable_name()) + .config_dir(config.chain_spec.id()) + }); + let database_dir = config_dir.join("frontier").join("db"); + + Ok(Arc::new(fc_db::Backend::::new(&fc_db::DatabaseSettings { + source: fc_db::DatabaseSettingsSrc::RocksDb { + path: database_dir, + cache_size: 0, + } + })?)) +} + +pub fn new_partial(config: &Configuration, #[allow(unused_variables)] cli: &Cli) -> Result< + sc_service::PartialComponents< + FullClient, FullBackend, FullSelectChain, + sp_consensus::import_queue::BasicQueue>, + sc_transaction_pool::FullPool, + (ConsensusResult, PendingTransactions, Option, Arc>, Option), +>, ServiceError> { let inherent_data_providers = sp_inherents::InherentDataProviders::new(); + let telemetry = config.telemetry_endpoints.clone() + .filter(|x| !x.is_empty()) + .map(|endpoints| -> Result<_, sc_telemetry::Error> { + let worker = TelemetryWorker::new(16)?; + let telemetry = worker.handle().new_telemetry(endpoints); + Ok((worker, telemetry)) + }) + .transpose()?; + let (client, backend, keystore_container, task_manager) = - sc_service::new_full_parts::(&config)?; + sc_service::new_full_parts::( + &config, + telemetry.as_ref().map(|(_, telemetry)| telemetry.handle()), + )?; let client = Arc::new(client); + let telemetry = telemetry + .map(|(worker, telemetry)| { + task_manager.spawn_handle().spawn("telemetry", worker.run()); + telemetry + }); + let select_chain = sc_consensus::LongestChain::new(backend.clone()); let transaction_pool = sc_transaction_pool::BasicPool::new_full( @@ -63,64 +138,77 @@ pub fn new_partial(config: &Configuration) -> Result + = Some(Arc::new(Mutex::new(BTreeMap::new()))); + + let frontier_backend = open_frontier_backend(config)?; + let (grandpa_block_import, grandpa_link) = sc_finality_grandpa::block_import( - client.clone(), &(client.clone() as Arc<_>), select_chain.clone(), + client.clone(), + &(client.clone() as Arc<_>), + select_chain.clone(), + telemetry.as_ref().map(|x| x.handle()), )?; + let frontier_block_import = FrontierBlockImport::new( + grandpa_block_import.clone(), + client.clone(), + frontier_backend.clone(), + ); + let aura_block_import = sc_consensus_aura::AuraBlockImport::<_, _, _, AuraPair>::new( - grandpa_block_import.clone(), client.clone(), + frontier_block_import, client.clone(), ); - let import_queue = sc_consensus_aura::import_queue::<_, _, _, AuraPair, _, _>( - sc_consensus_aura::slot_duration(&*client)?, - aura_block_import.clone(), - Some(Box::new(grandpa_block_import.clone())), - client.clone(), - inherent_data_providers.clone(), - &task_manager.spawn_handle(), - config.prometheus_registry(), - sp_consensus::CanAuthorWithNativeVersion::new(client.executor().clone()), + let import_queue = sc_consensus_aura::import_queue::( + ImportQueueParams { + slot_duration: sc_consensus_aura::slot_duration(&*client)?, + block_import: aura_block_import.clone(), + justification_import: Some(Box::new(grandpa_block_import.clone())), + client: client.clone(), + inherent_data_providers: inherent_data_providers.clone(), + spawner: &task_manager.spawn_essential_handle(), + registry: config.prometheus_registry(), + can_author_with: sp_consensus::CanAuthorWithNativeVersion::new(client.executor().clone()), + check_for_equivocation: Default::default(), + telemetry: telemetry.as_ref().map(|x| x.handle()), + } )?; Ok(sc_service::PartialComponents { - client, backend, task_manager, import_queue, keystore_container, select_chain, transaction_pool, - inherent_data_providers, - other: (aura_block_import, grandpa_link), + client, backend, task_manager, import_queue, keystore_container, + select_chain, transaction_pool, inherent_data_providers, + other: ( + (aura_block_import, grandpa_link), + pending_transactions, + filter_pool, + frontier_backend, + telemetry, + ) }) } -fn remote_keystore(_url: &String) -> Result, &'static str> { - // FIXME: here would the concrete keystore be built, - // must return a concrete type (NOT `LocalKeystore`) that - // implements `CryptoStore` and `SyncCryptoStore` - Err("Remote Keystore not supported.") -} - /// Builds a new service for a full client. -pub fn new_full(mut config: Configuration) -> Result { - let sc_service::PartialComponents { - client, backend, mut task_manager, import_queue, mut keystore_container, select_chain, transaction_pool, - inherent_data_providers, - other: (block_import, grandpa_link), - } = new_partial(&config)?; - - if let Some(url) = &config.keystore_remote { - match remote_keystore(url) { - Ok(k) => keystore_container.set_remote_keystore(k), - Err(e) => { - return Err(ServiceError::Other( - format!("Error hooking up remote keystore for {}: {}", url, e))) - } - }; - } +pub fn new_full( + config: Configuration, + cli: &Cli, +) -> Result { + let enable_dev_signer = cli.run.shared_params.dev; - config.network.extra_sets.push(sc_finality_grandpa::grandpa_peers_set_config()); + let sc_service::PartialComponents { + client, backend, mut task_manager, import_queue, keystore_container, + select_chain, transaction_pool, inherent_data_providers, + other: (consensus_result, pending_transactions, filter_pool, frontier_backend, mut telemetry), + } = new_partial(&config, cli)?; let (network, network_status_sinks, system_rpc_tx, network_starter) = sc_service::build_network(sc_service::BuildNetworkParams { config: &config, - client: client.clone(), - transaction_pool: transaction_pool.clone(), + client: Arc::clone(&client), + transaction_pool: Arc::clone(&transaction_pool), spawn_handle: task_manager.spawn_handle(), import_queue, on_demand: None, @@ -129,7 +217,7 @@ pub fn new_full(mut config: Configuration) -> Result if config.offchain_worker.enabled { sc_service::build_offchain_workers( - &config, backend.clone(), task_manager.spawn_handle(), client.clone(), network.clone(), + &config, task_manager.spawn_handle(), Arc::clone(&client), network.clone(), ); } @@ -139,121 +227,191 @@ pub fn new_full(mut config: Configuration) -> Result let name = config.network.node_name.clone(); let enable_grandpa = !config.disable_grandpa; let prometheus_registry = config.prometheus_registry().cloned(); + let is_authority = role.is_authority(); + let subscription_task_executor = sc_rpc::SubscriptionTaskExecutor::new(task_manager.spawn_handle()); let rpc_extensions_builder = { - let client = client.clone(); - let pool = transaction_pool.clone(); + let client = Arc::clone(&client); + let pool = Arc::clone(&transaction_pool); + let network = network.clone(); + let pending = pending_transactions.clone(); + let filter_pool = filter_pool.clone(); + let frontier_backend = frontier_backend.clone(); Box::new(move |deny_unsafe, _| { let deps = crate::rpc::FullDeps { - client: client.clone(), - pool: pool.clone(), + client: Arc::clone(&client), + pool: Arc::clone(&pool), deny_unsafe, + is_authority, + enable_dev_signer, + network: network.clone(), + pending_transactions: pending.clone(), + filter_pool: filter_pool.clone(), + backend: frontier_backend.clone(), }; - - crate::rpc::create_full(deps) + crate::rpc::create_full( + deps, + subscription_task_executor.clone() + ) }) }; - let (_rpc_handlers, telemetry_connection_notifier) = sc_service::spawn_tasks( - sc_service::SpawnTasksParams { - network: network.clone(), - client: client.clone(), - keystore: keystore_container.sync_keystore(), - task_manager: &mut task_manager, - transaction_pool: transaction_pool.clone(), - rpc_extensions_builder, - on_demand: None, - remote_blockchain: None, - backend, - network_status_sinks, - system_rpc_tx, - config, - }, - )?; + task_manager.spawn_essential_handle().spawn( + "frontier-mapping-sync-worker", + MappingSyncWorker::new( + client.import_notification_stream(), + Duration::new(6, 0), + Arc::clone(&client), + Arc::clone(&backend), + frontier_backend.clone(), + ).for_each(|()| futures::future::ready(())) + ); + + let _rpc_handlers = sc_service::spawn_tasks(sc_service::SpawnTasksParams { + network: network.clone(), + client: Arc::clone(&client), + keystore: keystore_container.sync_keystore(), + task_manager: &mut task_manager, + transaction_pool: Arc::clone(&transaction_pool), + rpc_extensions_builder: rpc_extensions_builder, + on_demand: None, + remote_blockchain: None, + backend, network_status_sinks, system_rpc_tx, config, telemetry: telemetry.as_mut(), + })?; + + // Spawn Frontier EthFilterApi maintenance task. + if let Some(filter_pool) = filter_pool { + // Each filter is allowed to stay in the pool for 100 blocks. + const FILTER_RETAIN_THRESHOLD: u64 = 100; + task_manager.spawn_essential_handle().spawn( + "frontier-filter-pool", + EthTask::filter_pool_task( + Arc::clone(&client), + filter_pool, + FILTER_RETAIN_THRESHOLD, + ) + ); + } + + // Spawn Frontier pending transactions maintenance task (as essential, otherwise we leak). + if let Some(pending_transactions) = pending_transactions { + const TRANSACTION_RETAIN_THRESHOLD: u64 = 5; + task_manager.spawn_essential_handle().spawn( + "frontier-pending-transactions", + EthTask::pending_transaction_task( + Arc::clone(&client), + pending_transactions, + TRANSACTION_RETAIN_THRESHOLD, + ) + ); + } + + let (aura_block_import, grandpa_link) = consensus_result; if role.is_authority() { let proposer = sc_basic_authorship::ProposerFactory::new( task_manager.spawn_handle(), - client.clone(), - transaction_pool, + Arc::clone(&client), + Arc::clone(&transaction_pool), prometheus_registry.as_ref(), + telemetry.as_ref().map(|x| x.handle()), ); let can_author_with = sp_consensus::CanAuthorWithNativeVersion::new(client.executor().clone()); - - let aura = sc_consensus_aura::start_aura::<_, _, _, _, _, AuraPair, _, _, _, _>( - sc_consensus_aura::slot_duration(&*client)?, - client.clone(), - select_chain, - block_import, - proposer, - network.clone(), - inherent_data_providers.clone(), - force_authoring, - backoff_authoring_blocks, - keystore_container.sync_keystore(), - can_author_with, + let aura = sc_consensus_aura::start_aura::( + StartAuraParams { + slot_duration: sc_consensus_aura::slot_duration(&*client)?, + client: Arc::clone(&client), + select_chain, + block_import: aura_block_import, + proposer_factory: proposer, + sync_oracle: network.clone(), + inherent_data_providers: inherent_data_providers.clone(), + force_authoring, + backoff_authoring_blocks, + keystore: keystore_container.sync_keystore(), + can_author_with, + block_proposal_slot_portion: SlotProportion::new(2f32 / 3f32), + telemetry: telemetry.as_ref().map(|x| x.handle()), + } )?; // the AURA authoring task is considered essential, i.e. if it // fails we take down the service with it. task_manager.spawn_essential_handle().spawn_blocking("aura", aura); - } - // if the node isn't actively participating in consensus then it doesn't - // need a keystore, regardless of which protocol we use below. - let keystore = if role.is_authority() { - Some(keystore_container.sync_keystore()) - } else { - None - }; - - let grandpa_config = sc_finality_grandpa::Config { - // FIXME #1578 make this available through chainspec - gossip_duration: Duration::from_millis(333), - justification_period: 512, - name: Some(name), - observer_enabled: false, - keystore, - is_authority: role.is_network_authority(), - }; + // if the node isn't actively participating in consensus then it doesn't + // need a keystore, regardless of which protocol we use below. + let keystore = if role.is_authority() { + Some(keystore_container.sync_keystore()) + } else { + None + }; - if enable_grandpa { - // start the full GRANDPA voter - // NOTE: non-authorities could run the GRANDPA observer protocol, but at - // this point the full voter should provide better guarantees of block - // and vote data availability than the observer. The observer has not - // been tested extensively yet and having most nodes in a network run it - // could lead to finality stalls. - let grandpa_config = sc_finality_grandpa::GrandpaParams { - config: grandpa_config, - link: grandpa_link, - network, - telemetry_on_connect: telemetry_connection_notifier.map(|x| x.on_connect_stream()), - voting_rule: sc_finality_grandpa::VotingRulesBuilder::default().build(), - prometheus_registry, - shared_voter_state: SharedVoterState::empty(), + let grandpa_config = sc_finality_grandpa::Config { + // FIXME #1578 make this available through chainspec + gossip_duration: Duration::from_millis(333), + justification_period: 512, + name: Some(name), + observer_enabled: false, + keystore, + is_authority: role.is_authority(), + telemetry: telemetry.as_ref().map(|x| x.handle()), }; - // the GRANDPA voter task is considered infallible, i.e. - // if it fails we take down the service with it. - task_manager.spawn_essential_handle().spawn_blocking( - "grandpa-voter", - sc_finality_grandpa::run_grandpa_voter(grandpa_config)? - ); + if enable_grandpa { + // start the full GRANDPA voter + // NOTE: non-authorities could run the GRANDPA observer protocol, but at + // this point the full voter should provide better guarantees of block + // and vote data availability than the observer. The observer has not + // been tested extensively yet and having most nodes in a network run it + // could lead to finality stalls. + let grandpa_config = sc_finality_grandpa::GrandpaParams { + config: grandpa_config, + link: grandpa_link, + network, + telemetry: telemetry.as_ref().map(|x| x.handle()), + voting_rule: sc_finality_grandpa::VotingRulesBuilder::default().build(), + prometheus_registry, + shared_voter_state: SharedVoterState::empty(), + }; + + // the GRANDPA voter task is considered infallible, i.e. + // if it fails we take down the service with it. + task_manager.spawn_essential_handle().spawn_blocking( + "grandpa-voter", + sc_finality_grandpa::run_grandpa_voter(grandpa_config)? + ); + } } network_starter.start_network(); Ok(task_manager) } /// Builds a new service for a light client. -pub fn new_light(mut config: Configuration) -> Result { +pub fn new_light(config: Configuration) -> Result { + let telemetry = config.telemetry_endpoints.clone() + .filter(|x| !x.is_empty()) + .map(|endpoints| -> Result<_, sc_telemetry::Error> { + let worker = TelemetryWorker::new(16)?; + let telemetry = worker.handle().new_telemetry(endpoints); + Ok((worker, telemetry)) + }) + .transpose()?; + let (client, backend, keystore_container, mut task_manager, on_demand) = - sc_service::new_light_parts::(&config)?; + sc_service::new_light_parts::( + &config, + telemetry.as_ref().map(|(_, telemetry)| telemetry.handle()), + )?; - config.network.extra_sets.push(sc_finality_grandpa::grandpa_peers_set_config()); + let mut telemetry = telemetry + .map(|(worker, telemetry)| { + task_manager.spawn_handle().spawn("telemetry", worker.run()); + telemetry + }); let select_chain = sc_consensus::LongestChain::new(backend.clone()); @@ -269,24 +427,33 @@ pub fn new_light(mut config: Configuration) -> Result client.clone(), &(client.clone() as Arc<_>), select_chain.clone(), + telemetry.as_ref().map(|x| x.handle()), )?; - let aura_block_import = sc_consensus_aura::AuraBlockImport::<_, _, _, AuraPair>::new( - grandpa_block_import.clone(), - client.clone(), - ); - - let import_queue = sc_consensus_aura::import_queue::<_, _, _, AuraPair, _, _>( - sc_consensus_aura::slot_duration(&*client)?, - aura_block_import, - Some(Box::new(grandpa_block_import)), - client.clone(), - InherentDataProviders::new(), - &task_manager.spawn_handle(), - config.prometheus_registry(), - sp_consensus::NeverCanAuthor, + let import_queue = sc_consensus_aura::import_queue::( + ImportQueueParams { + slot_duration: sc_consensus_aura::slot_duration(&*client)?, + block_import: grandpa_block_import.clone(), + justification_import: Some(Box::new(grandpa_block_import)), + client: client.clone(), + inherent_data_providers: InherentDataProviders::new(), + spawner: &task_manager.spawn_essential_handle(), + registry: config.prometheus_registry(), + can_author_with: sp_consensus::NeverCanAuthor, + check_for_equivocation: Default::default(), + telemetry: telemetry.as_ref().map(|x| x.handle()), + } )?; + let light_deps = crate::rpc::LightDeps { + remote_blockchain: backend.remote_blockchain(), + fetcher: on_demand.clone(), + client: client.clone(), + pool: transaction_pool.clone(), + }; + + let rpc_extensions = crate::rpc::create_light(light_deps); + let (network, network_status_sinks, system_rpc_tx, network_starter) = sc_service::build_network(sc_service::BuildNetworkParams { config: &config, @@ -300,7 +467,7 @@ pub fn new_light(mut config: Configuration) -> Result if config.offchain_worker.enabled { sc_service::build_offchain_workers( - &config, backend.clone(), task_manager.spawn_handle(), client.clone(), network.clone(), + &config, task_manager.spawn_handle(), client.clone(), network.clone(), ); } @@ -309,7 +476,7 @@ pub fn new_light(mut config: Configuration) -> Result transaction_pool, task_manager: &mut task_manager, on_demand: Some(on_demand), - rpc_extensions_builder: Box::new(|_, _| ()), + rpc_extensions_builder: Box::new(sc_service::NoopRpcExtensionBuilder(rpc_extensions)), config, client, keystore: keystore_container.sync_keystore(), @@ -317,6 +484,7 @@ pub fn new_light(mut config: Configuration) -> Result network, network_status_sinks, system_rpc_tx, + telemetry: telemetry.as_mut(), })?; network_starter.start_network(); From 9936e25c1d5076fbbc1ce53dd3ce7d745a6f7d62 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Tue, 6 Apr 2021 13:12:42 +0300 Subject: [PATCH 06/66] fix: missing unsigned validator import Signed-off-by: Yaroslav Bolyukin --- runtime/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 3c0700d90b..48bfeee6c3 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -595,7 +595,7 @@ construct_runtime!( Timestamp: pallet_timestamp::{Module, Call, Storage, Inherent}, Aura: pallet_aura::{Module, Config }, EVM: pallet_evm::{Module, Config, Call, Storage, Event}, - Ethereum: pallet_ethereum::{Module, Config, Call, Storage, Event}, + Ethereum: pallet_ethereum::{Module, Config, Call, Storage, Event, ValidateUnsigned}, Grandpa: pallet_grandpa::{Module, Call, Storage, Config, Event}, Balances: pallet_balances::{Module, Call, Storage, Config, Event}, TransactionPayment: pallet_transaction_payment::{Module, Storage}, From 415e3d612ac1a044b508986a6633cef157c79129 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 30 Apr 2021 18:15:31 +0300 Subject: [PATCH 07/66] feat: eth address mapping Signed-off-by: Yaroslav Bolyukin --- pallets/nft/src/eth/account.rs | 135 +++++++++++++++++++++++++++++++++ pallets/nft/src/eth/mod.rs | 2 + pallets/nft/src/lib.rs | 33 ++++---- runtime/src/lib.rs | 6 ++ runtime_types.json | 20 +++-- 5 files changed, 176 insertions(+), 20 deletions(-) create mode 100644 pallets/nft/src/eth/account.rs create mode 100644 pallets/nft/src/eth/mod.rs diff --git a/pallets/nft/src/eth/account.rs b/pallets/nft/src/eth/account.rs new file mode 100644 index 0000000000..67598ddfca --- /dev/null +++ b/pallets/nft/src/eth/account.rs @@ -0,0 +1,135 @@ +use crate::Config; +use codec::{Encode, EncodeLike, Decode}; +use sp_core::{H160, H256, crypto::AccountId32}; +use core::cmp::Ordering; +#[cfg(feature = "std")] +use serde::{Serialize, Deserialize}; +use pallet_evm::AddressMapping; +use sp_std::vec::Vec; +use sp_std::clone::Clone; + +pub trait CrossAccountId: + Encode + EncodeLike + Decode + + Clone + PartialEq + Ord + core::fmt::Debug // + + // Serialize + Deserialize<'static> +{ + fn as_sub(&self) -> &AccountId; + fn as_eth(&self) -> &H160; + + fn from_sub(account: AccountId) -> Self; + fn from_eth(account: H160) -> Self; +} + +#[derive(Eq)] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +pub struct BasicCrossAccountId { + /// If true - then ethereum is canonical encoding + from_ethereum: bool, + substrate: T::AccountId, + ethereum: H160, +} + +impl core::fmt::Debug for BasicCrossAccountId { + fn fmt(&self, fmt: &mut core::fmt::Formatter) -> core::fmt::Result { + if self.from_ethereum { + fmt.debug_tuple("CrossAccountId::Ethereum") + .field(&self.ethereum) + .finish() + } else { + fmt.debug_tuple("CrossAccountId::Substrate") + .field(&self.substrate) + .finish() + } + } +} + +impl PartialOrd for BasicCrossAccountId { + fn partial_cmp(&self, other: &Self) -> Option { + Some(self.substrate.cmp(&other.substrate)) + } +} + +impl Ord for BasicCrossAccountId { + fn cmp(&self, other: &Self) -> Ordering { + self.partial_cmp(other).expect("substrate account is total ordered") + } +} + +impl PartialEq for BasicCrossAccountId { + fn eq(&self, other: &Self) -> bool { + if self.from_ethereum == other.from_ethereum { + self.substrate == other.substrate && self.ethereum == other.ethereum + } else if self.from_ethereum { + // ethereum is canonical encoding, but we need to compare derived address + self.substrate == other.substrate + } else { + self.ethereum == other.ethereum + } + } +} +impl Clone for BasicCrossAccountId { + fn clone(&self) -> Self { + Self { + from_ethereum: self.from_ethereum, + substrate: self.substrate.clone(), + ethereum: self.ethereum, + } + } +} +impl Encode for BasicCrossAccountId { + fn encode(&self) -> Vec { + let as_result = if !self.from_ethereum { + Ok(self.substrate.clone()) + } else { + Err(self.ethereum) + }; + as_result.encode() + } +} +impl EncodeLike for BasicCrossAccountId {} +impl Decode for BasicCrossAccountId { + fn decode(input: &mut I) -> Result + where I: codec::Input + { + Ok(match >::decode(input)? { + Ok(s) => Self::from_sub(s), + Err(e) => Self::from_eth(e), + }) + } +} +impl CrossAccountId for BasicCrossAccountId { + fn as_sub(&self) -> &T::AccountId { + &self.substrate + } + fn as_eth(&self) -> &H160 { + &self.ethereum + } + fn from_sub(substrate: T::AccountId) -> Self { + Self { + ethereum: T::EvmBackwardsAddressMapping::from_account_id(substrate.clone()), + substrate, + from_ethereum: false, + } + } + fn from_eth(ethereum: H160) -> Self { + Self { + ethereum, + substrate: T::EvmAddressMapping::into_account_id(ethereum), + from_ethereum: true, + } + } +} + +pub trait EvmBackwardsAddressMapping { + fn from_account_id(account_id: AccountId) -> H160; +} + +/// Should have same mapping as EnsureAddressTruncated +pub struct MapBackwardsAddressTruncated; +impl EvmBackwardsAddressMapping for MapBackwardsAddressTruncated { + fn from_account_id(account_id: AccountId32) -> H160 { + let mut out = [0; 20]; + out.copy_from_slice(&(account_id.as_ref() as &[u8])[0..20]); + H160(out) + } +} \ No newline at end of file diff --git a/pallets/nft/src/eth/mod.rs b/pallets/nft/src/eth/mod.rs new file mode 100644 index 0000000000..2e0b9f7fca --- /dev/null +++ b/pallets/nft/src/eth/mod.rs @@ -0,0 +1,2 @@ +pub mod account; +use account::CrossAccountId; diff --git a/pallets/nft/src/lib.rs b/pallets/nft/src/lib.rs index 221285e764..889ba7347d 100644 --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -7,9 +7,6 @@ #![cfg_attr(not(feature = "std"), no_std)] -#[cfg(feature = "std")] -pub use std::*; - #[cfg(feature = "std")] pub use serde::*; @@ -33,6 +30,7 @@ pub use frame_support::{ }; use frame_system::{self as system, ensure_signed, ensure_root}; +use sp_core::{H160, H256}; use sp_runtime::sp_std::prelude::Vec; use sp_runtime::{ traits::{ @@ -45,6 +43,7 @@ use sp_runtime::{ }; use sp_runtime::traits::StaticLookup; use pallet_contracts::chain_extension::UncheckedFrom; +use pallet_evm::AddressMapping; use pallet_transaction_payment::OnChargeTransaction; #[cfg(test)] @@ -54,6 +53,9 @@ mod mock; mod tests; mod default_weights; +mod eth; + +pub use eth::account::*; pub const MAX_DECIMAL_POINTS: DecimalPoints = 30; pub const MAX_REFUNGIBLE_PIECES: u128 = 1_000_000_000_000_000_000_000; @@ -164,7 +166,7 @@ impl Default for SponsorshipState { #[derive(Encode, Decode, Clone, PartialEq)] #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] pub struct Collection { - pub owner: T::AccountId, + pub owner: T::CrossAccountId, pub mode: CollectionMode, pub access: AccessMode, pub decimal_points: DecimalPoints, @@ -174,7 +176,7 @@ pub struct Collection { pub mint_mode: bool, pub offchain_schema: Vec, pub schema_version: SchemaVersion, - pub sponsorship: SponsorshipState, + pub sponsorship: SponsorshipState, pub limits: CollectionLimits, // Collection private restrictions pub variable_on_chain_schema: Vec, // pub const_on_chain_schema: Vec, // @@ -461,6 +463,11 @@ pub trait Config: system::Config + Sized + pallet_transaction_payment::Config + /// Weight information for extrinsics in this pallet. type WeightInfo: WeightInfo; + type EvmAddressMapping: pallet_evm::AddressMapping; + type EvmBackwardsAddressMapping: EvmBackwardsAddressMapping; + type EvmWithdrawOrigin: pallet_evm::EnsureAddressOrigin; + + type CrossAccountId: CrossAccountId; type Currency: Currency; type CollectionCreationPrice: Get<<::Currency as Currency>::Balance>; type TreasuryAccountId: Get; @@ -525,7 +532,7 @@ decl_storage! { pub CollectionById get(fn collection_id) config(): map hasher(blake2_128_concat) CollectionId => Option> = None; /// List of collection admins /// Collection id (controlled?2) - pub AdminList get(fn admin_list_collection): map hasher(blake2_128_concat) CollectionId => Vec; + pub AdminList get(fn admin_list_collection): map hasher(blake2_128_concat) CollectionId => Vec; /// Whitelisted collection users /// Collection id (controlled?2), user id (controlled?3) pub WhiteList get(fn white_list): double_map hasher(blake2_128_concat) CollectionId, hasher(blake2_128_concat) T::AccountId => bool; @@ -542,11 +549,11 @@ decl_storage! { //#region Item collections /// Collection id (controlled?2), token id (controlled?1) - pub NftItemList get(fn nft_item_id) config(): double_map hasher(blake2_128_concat) CollectionId, hasher(blake2_128_concat) TokenId => Option>; + pub NftItemList get(fn nft_item_id) config(): double_map hasher(blake2_128_concat) CollectionId, hasher(blake2_128_concat) TokenId => Option>; /// Collection id (controlled?2), owner (controlled?2) pub FungibleItemList get(fn fungible_item_id) config(): double_map hasher(blake2_128_concat) CollectionId, hasher(blake2_128_concat) T::AccountId => FungibleItemType; /// Collection id (controlled?2), token id (controlled?1) - pub ReFungibleItemList get(fn refungible_item_id) config(): double_map hasher(blake2_128_concat) CollectionId, hasher(blake2_128_concat) TokenId => Option>; + pub ReFungibleItemList get(fn refungible_item_id) config(): double_map hasher(blake2_128_concat) CollectionId, hasher(blake2_128_concat) TokenId => Option>; //#endregion //#region Index list @@ -610,7 +617,7 @@ decl_storage! { decl_event!( pub enum Event where - AccountId = ::AccountId, + CrossAccountId = ::CrossAccountId, { /// New collection was created /// @@ -621,7 +628,7 @@ decl_event!( /// * mode: [CollectionMode] converted into u8. /// /// * account_id: Collection owner. - CollectionCreated(CollectionId, u8, AccountId), + CollectionCreated(CollectionId, u8, CrossAccountId), /// New item was created. /// @@ -632,7 +639,7 @@ decl_event!( /// * item_id: Id of an item. Unique within the collection. /// /// * recipient: Owner of newly created item - ItemCreated(CollectionId, TokenId, AccountId), + ItemCreated(CollectionId, TokenId, CrossAccountId), /// Collection item was burned. /// @@ -654,7 +661,7 @@ decl_event!( /// * recipient: New owner of item /// /// * amount: Always 1 for NFT - Transfer(CollectionId, TokenId, AccountId, AccountId, u128), + Transfer(CollectionId, TokenId, CrossAccountId, CrossAccountId, u128), /// * collection_id /// @@ -665,7 +672,7 @@ decl_event!( /// * spender /// /// * amount - Approved(CollectionId, TokenId, AccountId, AccountId, u128), + Approved(CollectionId, TokenId, CrossAccountId, CrossAccountId, u128), } ); diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 48bfeee6c3..88a544c75e 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -578,6 +578,12 @@ parameter_types! { impl pallet_nft::Config for Runtime { type Event = Event; type WeightInfo = nft_weights::WeightInfo; + + type EvmWithdrawOrigin = EnsureAddressTruncated; + type EvmBackwardsAddressMapping = pallet_nft::MapBackwardsAddressTruncated; + type EvmAddressMapping = HashedAddressMapping; + type CrossAccountId = pallet_nft::BasicCrossAccountId; + type Currency = Balances; type CollectionCreationPrice = CollectionCreationPrice; type TreasuryAccountId = TreasuryAccountId; diff --git a/runtime_types.json b/runtime_types.json index dd8303f3da..e1c7433100 100644 --- a/runtime_types.json +++ b/runtime_types.json @@ -1,4 +1,10 @@ { + "CrossAccountId": { + "_enum": { + "substrate": "AccountId", + "ethereum": "H160" + } + }, "AccessMode": { "_enum": [ "Normal", @@ -15,31 +21,31 @@ } }, "Ownership": { - "Owner": "AccountId", + "Owner": "CrossAccountId", "Fraction": "u128" }, "FungibleItemType": { "Value": "u128" }, "NftItemType": { - "Owner": "AccountId", + "Owner": "CrossAccountId", "ConstData": "Vec", "VariableData": "Vec" }, "ReFungibleItemType": { - "Owner": "Vec>", + "Owner": "Vec>", "ConstData": "Vec", "VariableData": "Vec" }, "SponsorshipState": { "_enum": { - "Disabled": null, - "Unconfirmed": "AccountId", - "Confirmed": "AccountId" + "disabled": null, + "unconfirmed": "CrossAccountId", + "confirmed": "CrossAccountId" } }, "Collection": { - "Owner": "AccountId", + "Owner": "CrossAccountId", "Mode": "CollectionMode", "Access": "AccessMode", "DecimalPoints": "DecimalPoints", From 733eebb466ef3ae65c00c67e8779280dc58a7616 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 30 Apr 2021 18:15:35 +0300 Subject: [PATCH 08/66] fix: reenable contracts api Signed-off-by: Yaroslav Bolyukin --- node/src/rpc.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/node/src/rpc.rs b/node/src/rpc.rs index 499f914955..16db194db6 100644 --- a/node/src/rpc.rs +++ b/node/src/rpc.rs @@ -7,7 +7,7 @@ use std::sync::Arc; use std::collections::BTreeMap; use fc_rpc_core::types::{PendingTransactions, FilterPool}; -use nft_runtime::{Hash, AccountId, Index, opaque::Block, Balance}; +use nft_runtime::{Hash, AccountId, Index, opaque::Block, BlockNumber, Balance}; use sp_api::ProvideRuntimeApi; use sp_blockchain::{Error as BlockChainError, HeaderMetadata, HeaderBackend}; use sc_client_api::{ @@ -71,6 +71,7 @@ pub fn create_full( C: Send + Sync + 'static, C::Api: substrate_frame_rpc_system::AccountNonceApi, C::Api: BlockBuilder, + C::Api: pallet_contracts_rpc::ContractsRuntimeApi, C::Api: pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi, C::Api: fp_rpc::EthereumRuntimeRPCApi, P: TransactionPool + 'static, @@ -104,9 +105,9 @@ pub fn create_full( TransactionPaymentApi::to_delegate(TransactionPayment::new(client.clone())) ); - // io.extend_with( - // ContractsApi::to_delegate(Contracts::new(client.clone())) - // ); + io.extend_with( + pallet_contracts_rpc::ContractsApi::to_delegate(pallet_contracts_rpc::Contracts::new(client.clone())) + ); let mut signers = Vec::new(); if enable_dev_signer { From 6e0419083caa3d87f3375981b75dafc2107b8d24 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 30 Apr 2021 18:15:41 +0300 Subject: [PATCH 09/66] build: upgrade frontier Signed-off-by: Yaroslav Bolyukin --- node/src/rpc.rs | 59 ++++++++++++++++++++++++++++++++++++++---- node/src/service.rs | 3 +++ pallets/nft/src/lib.rs | 9 ++++++- runtime/src/lib.rs | 16 +++++++++--- 4 files changed, 77 insertions(+), 10 deletions(-) diff --git a/node/src/rpc.rs b/node/src/rpc.rs index 16db194db6..3a1ad10506 100644 --- a/node/src/rpc.rs +++ b/node/src/rpc.rs @@ -4,10 +4,13 @@ //! capabilities that are specific to this project's runtime configuration. use std::sync::Arc; +use core::marker::PhantomData; use std::collections::BTreeMap; +use fc_rpc::RuntimeApiStorageOverride; +use fc_rpc::OverrideHandle; use fc_rpc_core::types::{PendingTransactions, FilterPool}; -use nft_runtime::{Hash, AccountId, Index, opaque::Block, BlockNumber, Balance}; +use nft_runtime::{Hash, AccountId, Index, opaque::Block, BlockNumber, Balance, NftApi}; use sp_api::ProvideRuntimeApi; use sp_blockchain::{Error as BlockChainError, HeaderMetadata, HeaderBackend}; use sc_client_api::{ @@ -56,6 +59,37 @@ pub struct FullDeps { pub filter_pool: Option, /// Backend. pub backend: Arc>, + /// Maximum number of logs in a query. + pub max_past_logs: u32, +} + +struct AccountCodes { + client: Arc, + _marker: PhantomData, +} + +impl AccountCodes +where + Block: sp_api::BlockT, + C: ProvideRuntimeApi, +{ + fn new(client: Arc) -> Self { + Self { + client, + _marker: PhantomData, + } + } +} + +impl fc_rpc::AccountCodeProvider for AccountCodes +where + Block: sp_api::BlockT, + C: ProvideRuntimeApi, + C::Api: pallet_nft::NftApi, +{ + fn code(&self, block: &sp_api::BlockId, account: sp_core::H160) -> Option> { + self.client.runtime_api().eth_contract_code(block, account).ok().flatten() + } } /// Instantiate all full RPC extensions. @@ -74,6 +108,7 @@ pub fn create_full( C::Api: pallet_contracts_rpc::ContractsRuntimeApi, C::Api: pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi, C::Api: fp_rpc::EthereumRuntimeRPCApi, + C::Api: pallet_nft::NftApi, P: TransactionPool + 'static, { use substrate_frame_rpc_system::{FullSystem, SystemApi}; @@ -95,6 +130,7 @@ pub fn create_full( filter_pool, backend, enable_dev_signer, + max_past_logs, } = deps; io.extend_with( @@ -113,11 +149,20 @@ pub fn create_full( if enable_dev_signer { signers.push(Box::new(EthDevSigner::new()) as Box); } - let mut overrides = BTreeMap::new(); - overrides.insert( + let mut overrides_map = BTreeMap::new(); + overrides_map.insert( EthereumStorageSchema::V1, - Box::new(SchemaV1Override::new(client.clone())) as Box + Send + Sync> + Box::new(SchemaV1Override::new_with_code_provider( + client.clone(), + Arc::new(AccountCodes::::new(client.clone())) + )) as Box + Send + Sync> ); + + let overrides = Arc::new(OverrideHandle { + schemas: overrides_map, + fallback: Box::new(RuntimeApiStorageOverride::new(client.clone())), + }); + io.extend_with( EthApiServer::to_delegate(EthApi::new( client.clone(), @@ -126,9 +171,10 @@ pub fn create_full( network.clone(), pending_transactions.clone(), signers, - overrides, + overrides.clone(), backend, is_authority, + max_past_logs, )) ); @@ -138,6 +184,8 @@ pub fn create_full( client.clone(), filter_pool.clone(), 500 as usize, // max stored filters + overrides.clone(), + max_past_logs, )) ); } @@ -164,6 +212,7 @@ pub fn create_full( HexEncodedIdProvider::default(), Arc::new(subscription_task_executor) ), + overrides, )) ); diff --git a/node/src/service.rs b/node/src/service.rs index 58a972806a..4a24e61c1c 100644 --- a/node/src/service.rs +++ b/node/src/service.rs @@ -237,6 +237,8 @@ pub fn new_full( let pending = pending_transactions.clone(); let filter_pool = filter_pool.clone(); let frontier_backend = frontier_backend.clone(); + // TODO: Tune + let max_past_logs = 10000; Box::new(move |deny_unsafe, _| { let deps = crate::rpc::FullDeps { @@ -249,6 +251,7 @@ pub fn new_full( pending_transactions: pending.clone(), filter_pool: filter_pool.clone(), backend: frontier_backend.clone(), + max_past_logs, }; crate::rpc::create_full( deps, diff --git a/pallets/nft/src/lib.rs b/pallets/nft/src/lib.rs index 889ba7347d..d291aa5b40 100644 --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -2889,4 +2889,11 @@ where } } -// #endregion \ No newline at end of file +// #endregion + +sp_api::decl_runtime_apis! { + pub trait NftApi { + /// Used for ethereum integration + fn eth_contract_code(account: H160) -> Option>; + } +} diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 88a544c75e..e952cd3373 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -64,7 +64,7 @@ use sp_std::{prelude::*, marker::PhantomData}; use sp_arithmetic::{traits::{BaseArithmetic, Unsigned}}; use smallvec::smallvec; use codec::{Encode, Decode}; -use pallet_evm::{Account as EVMAccount, FeeCalculator}; +use pallet_evm::{Account as EVMAccount, FeeCalculator, OnMethodCall}; use fp_rpc::TransactionStatus; use sp_core::H256; @@ -344,14 +344,16 @@ parameter_types! { } impl pallet_evm::Config for Runtime { + type BlockGasLimit = BlockGasLimit; type FeeCalculator = (); type GasWeightMapping = (); type CallOrigin = EnsureAddressTruncated; type WithdrawOrigin = EnsureAddressTruncated; - type AddressMapping = HashedAddressMapping; + type AddressMapping = HashedAddressMapping; + type Precompiles = (); type Currency = Balances; type Event = Event; - type Precompiles = (); + type OnMethodCall = pallet_nft::NftErcSupport; type ChainId = ChainId; type Runner = pallet_evm::runner::stack::Runner; type OnChargeTransaction = (); @@ -379,7 +381,6 @@ impl pallet_ethereum::Config for Runtime { type Event = Event; type FindAuthor = EthereumFindAuthor; type StateRoot = pallet_ethereum::IntermediateStateRoot; - type BlockGasLimit = BlockGasLimit; } impl pallet_grandpa::Config for Runtime { @@ -657,6 +658,13 @@ pub type Executive = frame_executive::Executive, Runtime, AllModules>; impl_runtime_apis! { + impl pallet_nft::NftApi + for Runtime + { + fn eth_contract_code(account: H160) -> Option> { + >::get_code(&account) + } + } impl pallet_contracts_rpc_runtime_api::ContractsApi for Runtime From c019326276d25fa184ffa7419a727cc421e84f0e Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 30 Apr 2021 18:15:45 +0300 Subject: [PATCH 10/66] feat: eth abi coder Signed-off-by: Yaroslav Bolyukin --- pallets/nft/src/eth/abi.rs | 204 +++++++++++++++++++++++++++++++++++++ pallets/nft/src/eth/mod.rs | 3 + 2 files changed, 207 insertions(+) create mode 100644 pallets/nft/src/eth/abi.rs diff --git a/pallets/nft/src/eth/abi.rs b/pallets/nft/src/eth/abi.rs new file mode 100644 index 0000000000..b546aed59c --- /dev/null +++ b/pallets/nft/src/eth/abi.rs @@ -0,0 +1,204 @@ +//! TODO: I misunterstood therminology, abi IS rlp encoded, so +//! this module should be replaced with rlp crate + +use sp_core::H160; + +#[cfg(feature = "std")] +use std; +#[cfg(not(feature = "std"))] +use sp_std as std; + +use std::vec::Vec; + +const ABI_ALIGNMENT: usize = 32; + +type Result = std::result::Result; + +pub struct AbiReader<'i> { + buf: &'i [u8], + offset: usize, +} +impl<'i> AbiReader<'i> { + pub fn new_call(buf: &'i [u8]) -> Result<(u32, Self)> { + if buf.len() < 4 { + return Err("missing method id") + } + let mut method_id = [0; 4]; + method_id.copy_from_slice(&buf[0..4]); + + Ok((u32::from_be_bytes(method_id), Self { + buf, + offset: 4, + })) + } + + fn read_padleft(&mut self) -> Result<[u8; S]> { + if self.buf.len() - self.offset < 32 { + return Err("missing padding") + } + let mut block = [0; S]; + // Verify padding is empty + if !self.buf[self.offset..self.offset + ABI_ALIGNMENT - S].iter().all(|&v| v == 0) { + return Err("non zero padding (wrong types?)") + } + block.copy_from_slice(&self.buf[self.offset + ABI_ALIGNMENT - S..self.offset + ABI_ALIGNMENT]); + self.offset += ABI_ALIGNMENT; + Ok(block) + } + + pub fn address(&mut self) -> Result { + Ok(H160(self.read_padleft()?)) + } + + pub fn uint32(&mut self) -> Result { + Ok(u32::from_be_bytes(self.read_padleft()?)) + } + + pub fn uint128(&mut self) -> Result { + Ok(u128::from_be_bytes(self.read_padleft()?)) + } + + pub fn uint256(&mut self) -> Result { + self.uint128() + } + + pub fn uint64(&mut self) -> Result { + Ok(usize::from_be_bytes(self.read_padleft()?)) + } + + fn subresult(&mut self) -> Result> { + let offset = self.uint64()?; + if offset > usize::MAX { + return Err("subresult overflow"); + } + Ok(AbiReader { + buf: &self.buf, + offset: offset + self.offset, + }) + } + + pub fn is_finished(&self) -> bool { + self.buf.len() == self.offset + } +} + +pub struct AbiWriter { + static_part: Vec, + dynamic_part: Vec<(usize, AbiWriter)>, +} +impl AbiWriter { + pub fn new() -> Self { + Self { + static_part: Vec::new(), + dynamic_part: Vec::new(), + } + } + pub fn new_call(method_id: u32) -> Self { + let mut val = Self::new(); + val.static_part.extend(&method_id.to_be_bytes()); + val + } + + fn write_padleft(&mut self, block: &[u8]) { + assert!(block.len() <= ABI_ALIGNMENT); + self.static_part.extend(&[0; ABI_ALIGNMENT][0..ABI_ALIGNMENT - block.len()]); + self.static_part.extend(block); + } + + fn write_padright(&mut self, bytes: &[u8]) { + assert!(bytes.len() <= ABI_ALIGNMENT); + self.static_part.extend(bytes); + self.static_part.extend(&[0; ABI_ALIGNMENT][0..ABI_ALIGNMENT - bytes.len()]); + } + + pub fn address(&mut self, address: H160) { + self.write_padleft(&address.0) + } + + pub fn bool(&mut self, value: bool) { + self.write_padleft(&[if value { 1 } else { 0 }]) + } + + pub fn uint8(&mut self, value: u8) { + self.write_padleft(&[value]) + } + + pub fn uint128(&mut self, value: u128) { + self.write_padleft(&u128::to_be_bytes(value)) + } + + /// This method writes u128, and exists only for convenience, because there is + /// no u256 support in rust + pub fn uint256(&mut self, value: u128) { + self.uint128(value) + } + + pub fn write_usize(&mut self, value: usize) { + self.write_padleft(&usize::to_be_bytes(value)) + } + + pub fn write_u8(&mut self, value: u8) { + self.write_padleft(&[value]) + } + + pub fn write_subresult(&mut self, result: Self) { + self.dynamic_part.push((self.static_part.len(), result)); + // Empty block, to be filled later + self.write_padleft(&[]); + } + + pub fn memory(&mut self, value: &[u8]) { + let mut sub = Self::new(); + sub.write_usize(value.len()); + for chunk in value.chunks(ABI_ALIGNMENT) { + sub.write_padright(chunk); + } + self.write_subresult(sub); + } + + pub fn string(&mut self, value: &str) { + self.memory(value.as_bytes()) + } + + pub fn finish(mut self) -> Vec { + for (static_offset, part) in self.dynamic_part { + let part_offset = self.static_part.len(); + + let encoded_dynamic_offset = usize::to_be_bytes(part_offset - static_offset); + self.static_part + [static_offset + ABI_ALIGNMENT - encoded_dynamic_offset.len()..static_offset + ABI_ALIGNMENT] + .copy_from_slice(&encoded_dynamic_offset); + self.static_part.extend(part.finish()) + } + self.static_part + } +} + +#[macro_export] +macro_rules! abi_decode { + ($reader:expr, $($name:ident: $typ:ident),+ $(,)?) => { + $( + let $name = $reader.$typ()?; + )+ + } +} + +#[macro_export] +macro_rules! abi_encode { + ($($typ:ident($value:expr)),* $(,)?) => {{ + #[allow(unused_mut)] + let mut writer = crate::eth::abi::AbiWriter::new(); + $( + writer.$typ($value); + )* + writer + }}; + (call $val:expr; $($typ:ident($value:expr)),* $(,)?) => {{ + #[allow(unused_mut)] + let mut writer = AbiWriter::new_call($val); + $( + writer.$typ($value); + )* + writer + }} +} \ No newline at end of file diff --git a/pallets/nft/src/eth/mod.rs b/pallets/nft/src/eth/mod.rs index 2e0b9f7fca..be3e301204 100644 --- a/pallets/nft/src/eth/mod.rs +++ b/pallets/nft/src/eth/mod.rs @@ -1,2 +1,5 @@ pub mod account; use account::CrossAccountId; +pub mod abi; +use abi::{AbiReader, AbiWriter}; + From c0388a3fec7445799b3e5ab44764972cc92015f4 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 30 Apr 2021 18:15:49 +0300 Subject: [PATCH 11/66] feat: eth logger Signed-off-by: Yaroslav Bolyukin --- pallets/nft/src/eth/log.rs | 38 ++++++++++++++++++++++++++++++++++++++ pallets/nft/src/eth/mod.rs | 1 + 2 files changed, 39 insertions(+) create mode 100644 pallets/nft/src/eth/log.rs diff --git a/pallets/nft/src/eth/log.rs b/pallets/nft/src/eth/log.rs new file mode 100644 index 0000000000..1ce2b87c86 --- /dev/null +++ b/pallets/nft/src/eth/log.rs @@ -0,0 +1,38 @@ +use pallet_evm::PrecompileLog; +use sp_std::cell::RefCell; +use sp_std::vec::Vec; +use sp_core::{H160, H256}; + +#[derive(Default)] +pub struct LogRecorder(RefCell, Vec)>>); + +impl LogRecorder { + pub fn log(&self, topics: Vec, data: super::abi::AbiWriter) { + self.0.borrow_mut().push((topics, data.finish())); + } + fn retrieve_logs(self) -> Vec<(Vec, Vec)> { + self.0.replace(Vec::new()) + } + pub fn retrieve_logs_for_contract(self, contract: H160) -> Vec { + // TODO: Remove reallocation + self.retrieve_logs().into_iter() + .map(|(topics, data)| PrecompileLog(contract.clone(), topics, data)) + .collect() + } +} +impl Drop for LogRecorder { + fn drop(&mut self) { + #[cfg(feature = "std")] + { + // In debug mode, log recorder panics if dropped with logs left + let logs = self.0.borrow(); + if !logs.is_empty() { + eprintln!("Logs lost:"); + for line in logs.iter() { + eprintln!("{:?} {:?}", line.0, line.1); + } + panic!(); + } + } + } +} diff --git a/pallets/nft/src/eth/mod.rs b/pallets/nft/src/eth/mod.rs index be3e301204..3c3acc3814 100644 --- a/pallets/nft/src/eth/mod.rs +++ b/pallets/nft/src/eth/mod.rs @@ -2,4 +2,5 @@ pub mod account; use account::CrossAccountId; pub mod abi; use abi::{AbiReader, AbiWriter}; +pub mod log; From aa96639ca75b7f4ba4fd36702af91e5ef42c1c1a Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 30 Apr 2021 18:15:52 +0300 Subject: [PATCH 12/66] feat: collection manipulation from evm Signed-off-by: Yaroslav Bolyukin --- pallets/nft/src/lib.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pallets/nft/src/lib.rs b/pallets/nft/src/lib.rs index d291aa5b40..83f9ff7e3e 100644 --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -713,7 +713,7 @@ decl_module! { mode: CollectionMode) -> DispatchResult { // Anyone can create a collection - let who = ensure_signed(origin)?; + let who = T::CrossAccountId::from_sub(ensure_signed(origin)?); // Take a (non-refundable) deposit of collection creation let mut imbalance = <<::Currency as Currency>::PositiveImbalance>::zero(); @@ -722,7 +722,7 @@ decl_module! { T::CollectionCreationPrice::get(), )); ::Currency::settle( - &who, + who.as_sub(), imbalance, WithdrawReasons::TRANSFER, ExistenceRequirement::KeepAlive, @@ -781,7 +781,7 @@ decl_module! { >::insert(next_id, new_collection); // call event - Self::deposit_event(RawEvent::CollectionCreated(next_id, mode.into(), who.clone())); + Self::deposit_event(RawEvent::CollectionCreated(next_id, mode.into(), who)); Ok(()) } @@ -799,7 +799,7 @@ decl_module! { #[transactional] pub fn destroy_collection(origin, collection_id: CollectionId) -> DispatchResult { - let sender = ensure_signed(origin)?; + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let collection = Self::get_collection(collection_id)?; Self::check_owner_permissions(&collection, sender)?; if !collection.limits.owner_can_destroy { From 2b03ee1d72b274e6fe77202a1712ec200c05316a Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 30 Apr 2021 18:16:26 +0300 Subject: [PATCH 13/66] feat: access control manipulation from evm Signed-off-by: Yaroslav Bolyukin --- pallets/nft/src/lib.rs | 39 ++++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/pallets/nft/src/lib.rs b/pallets/nft/src/lib.rs index 83f9ff7e3e..f4e2828ce0 100644 --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -176,7 +176,7 @@ pub struct Collection { pub mint_mode: bool, pub offchain_schema: Vec, pub schema_version: SchemaVersion, - pub sponsorship: SponsorshipState, + pub sponsorship: SponsorshipState, pub limits: CollectionLimits, // Collection private restrictions pub variable_on_chain_schema: Vec, // pub const_on_chain_schema: Vec, // @@ -845,13 +845,13 @@ decl_module! { /// * address. #[weight = ::WeightInfo::add_to_white_list()] #[transactional] - pub fn add_to_white_list(origin, collection_id: CollectionId, address: T::AccountId) -> DispatchResult{ + pub fn add_to_white_list(origin, collection_id: CollectionId, address: T::CrossAccountId) -> DispatchResult{ - let sender = ensure_signed(origin)?; + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let collection = Self::get_collection(collection_id)?; Self::check_owner_or_admin_permissions(&collection, sender)?; - >::insert(collection_id, address, true); + >::insert(collection_id, address.as_sub(), true); Ok(()) } @@ -870,13 +870,13 @@ decl_module! { /// * address. #[weight = ::WeightInfo::remove_from_white_list()] #[transactional] - pub fn remove_from_white_list(origin, collection_id: CollectionId, address: T::AccountId) -> DispatchResult{ + pub fn remove_from_white_list(origin, collection_id: CollectionId, address: T::CrossAccountId) -> DispatchResult{ - let sender = ensure_signed(origin)?; + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let collection = Self::get_collection(collection_id)?; Self::check_owner_or_admin_permissions(&collection, sender)?; - >::remove(collection_id, address); + >::remove(collection_id, address.as_sub()); Ok(()) } @@ -896,7 +896,7 @@ decl_module! { #[transactional] pub fn set_public_access_mode(origin, collection_id: CollectionId, mode: AccessMode) -> DispatchResult { - let sender = ensure_signed(origin)?; + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let mut target_collection = Self::get_collection(collection_id)?; Self::check_owner_permissions(&target_collection, sender)?; @@ -923,7 +923,7 @@ decl_module! { #[transactional] pub fn set_mint_permission(origin, collection_id: CollectionId, mint_permission: bool) -> DispatchResult { - let sender = ensure_signed(origin)?; + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let mut target_collection = Self::get_collection(collection_id)?; Self::check_owner_permissions(&target_collection, sender)?; @@ -946,9 +946,9 @@ decl_module! { /// * new_owner. #[weight = ::WeightInfo::change_collection_owner()] #[transactional] - pub fn change_collection_owner(origin, collection_id: CollectionId, new_owner: T::AccountId) -> DispatchResult { + pub fn change_collection_owner(origin, collection_id: CollectionId, new_owner: T::CrossAccountId) -> DispatchResult { - let sender = ensure_signed(origin)?; + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let mut target_collection = Self::get_collection(collection_id)?; Self::check_owner_permissions(&target_collection, sender)?; target_collection.owner = new_owner; @@ -972,9 +972,9 @@ decl_module! { /// * new_admin_id: Address of new admin to add. #[weight = ::WeightInfo::add_collection_admin()] #[transactional] - pub fn add_collection_admin(origin, collection_id: CollectionId, new_admin_id: T::AccountId) -> DispatchResult { + pub fn add_collection_admin(origin, collection_id: CollectionId, new_admin_id: T::CrossAccountId) -> DispatchResult { - let sender = ensure_signed(origin)?; + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let collection = Self::get_collection(collection_id)?; Self::check_owner_or_admin_permissions(&collection, sender)?; let mut admin_arr = >::get(collection_id); @@ -1005,9 +1005,9 @@ decl_module! { /// * account_id: Address of admin to remove. #[weight = ::WeightInfo::remove_collection_admin()] #[transactional] - pub fn remove_collection_admin(origin, collection_id: CollectionId, account_id: T::AccountId) -> DispatchResult { + pub fn remove_collection_admin(origin, collection_id: CollectionId, account_id: T::CrossAccountId) -> DispatchResult { - let sender = ensure_signed(origin)?; + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let collection = Self::get_collection(collection_id)?; Self::check_owner_or_admin_permissions(&collection, sender)?; let mut admin_arr = >::get(collection_id); @@ -1034,10 +1034,9 @@ decl_module! { #[weight = ::WeightInfo::set_collection_sponsor()] #[transactional] pub fn set_collection_sponsor(origin, collection_id: CollectionId, new_sponsor: T::AccountId) -> DispatchResult { - - let sender = ensure_signed(origin)?; + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let mut target_collection = Self::get_collection(collection_id)?; - Self::check_owner_permissions(&target_collection, sender)?; + Self::check_owner_permissions(&target_collection, &sender)?; target_collection.sponsorship = SponsorshipState::Unconfirmed(new_sponsor); Self::save_collection(target_collection); @@ -1055,7 +1054,6 @@ decl_module! { #[weight = ::WeightInfo::confirm_sponsorship()] #[transactional] pub fn confirm_sponsorship(origin, collection_id: CollectionId) -> DispatchResult { - let sender = ensure_signed(origin)?; let mut target_collection = Self::get_collection(collection_id)?; @@ -1082,7 +1080,6 @@ decl_module! { #[weight = ::WeightInfo::remove_collection_sponsor()] #[transactional] pub fn remove_collection_sponsor(origin, collection_id: CollectionId) -> DispatchResult { - let sender = ensure_signed(origin)?; let mut target_collection = Self::get_collection(collection_id)?; @@ -1739,7 +1736,7 @@ decl_module! { collection_id: u32, new_limits: CollectionLimits, ) -> DispatchResult { - let sender = ensure_signed(origin)?; + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let mut target_collection = Self::get_collection(collection_id)?; Self::check_owner_permissions(&target_collection, sender.clone())?; let old_limits = &target_collection.limits; From 24bc802b4d0c47a19c4e21ae0bf71188b81a9693 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 30 Apr 2021 18:17:47 +0300 Subject: [PATCH 14/66] feat: item creation from evm Signed-off-by: Yaroslav Bolyukin --- pallets/nft/src/lib.rs | 155 ++++++++++++++++++++++++++++++++++------- 1 file changed, 129 insertions(+), 26 deletions(-) diff --git a/pallets/nft/src/lib.rs b/pallets/nft/src/lib.rs index f4e2828ce0..ae14f20edc 100644 --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -1117,9 +1117,9 @@ decl_module! { #[weight = ::WeightInfo::create_item(data.len())] #[transactional] - pub fn create_item(origin, collection_id: CollectionId, owner: T::AccountId, data: CreateItemData) -> DispatchResult { + pub fn create_item(origin, collection_id: CollectionId, owner: T::CrossAccountId, data: CreateItemData) -> DispatchResult { - let sender = ensure_signed(origin)?; + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let target_collection = Self::get_collection(collection_id)?; @@ -1152,21 +1152,13 @@ decl_module! { .map(|data| { data.len() }) .sum())] #[transactional] - pub fn create_multiple_items(origin, collection_id: CollectionId, owner: T::AccountId, items_data: Vec) -> DispatchResult { + pub fn create_multiple_items(origin, collection_id: CollectionId, owner: T::CrossAccountId, items_data: Vec) -> DispatchResult { ensure!(items_data.len() > 0, Error::::EmptyArgument); - let sender = ensure_signed(origin)?; - - let target_collection = Self::get_collection(collection_id)?; - - Self::can_create_items_in_collection(&target_collection, &sender, &owner, items_data.len() as u32)?; + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); + let collection = Self::get_collection(collection_id)?; - for data in &items_data { - Self::validate_create_item_args(&target_collection, data)?; - } - for data in &items_data { - Self::create_item_no_validation(&target_collection, owner.clone(), data.clone())?; - } + Self::create_multiple_items_internal(sender, &collection, owner, items_data)?; Ok(()) } @@ -1795,6 +1787,117 @@ impl Module { Ok(()) } + pub fn approve_internal( + sender: T::AccountId, + spender: T::AccountId, + collection: &CollectionHandle, + item_id: TokenId, + amount: u128 + ) -> DispatchResult { + Self::token_exists(&collection, item_id)?; + + // Transfer permissions check + let bypasses_limits = collection.limits.owner_can_transfer && + Self::is_owner_or_admin_permissions( + &collection, + sender.clone(), + ); + + let allowance_limit = if bypasses_limits { + None + } else if let Some(amount) = Self::owned_amount( + sender.clone(), + &collection, + item_id, + ) { + Some(amount) + } else { + fail!(Error::::NoPermission); + }; + + if collection.access == AccessMode::WhiteList { + Self::check_white_list(&collection, &sender)?; + Self::check_white_list(&collection, &spender)?; + } + + let allowance: u128 = amount + .checked_add(>::get(collection.id, (item_id, &sender, &spender))) + .ok_or(Error::::NumOverflow)?; + if let Some(limit) = allowance_limit { + ensure!(limit >= allowance, Error::::TokenValueTooLow); + } + >::insert(collection.id, (item_id, sender.clone(), spender.clone()), allowance); + + Self::deposit_event(RawEvent::Approved(collection.id, item_id, sender, spender, allowance)); + Ok(()) + } + + pub fn transfer_from_internal( + sender: T::AccountId, + from: T::AccountId, + recipient: T::AccountId, + collection: &CollectionHandle, + item_id: TokenId, + amount: u128, + ) -> DispatchResult { + // Check approval + let approval: u128 = >::get(collection.id, (item_id, &from, &sender)); + + // Limits check + Self::is_correct_transfer(&collection, &recipient)?; + + // Transfer permissions check + ensure!( + approval >= amount || + ( + collection.limits.owner_can_transfer && + Self::is_owner_or_admin_permissions(&collection, sender.clone()) + ), + Error::::NoPermission + ); + + if collection.access == AccessMode::WhiteList { + Self::check_white_list(&collection, &sender)?; + Self::check_white_list(&collection, &recipient)?; + } + + // Reduce approval by transferred amount or remove if remaining approval drops to 0 + if approval.saturating_sub(amount) > 0 { + >::insert(collection.id, (item_id, &from, &sender), approval - amount); + } else { + >::remove(collection.id, (item_id, &from, &sender)); + } + + match collection.mode { + CollectionMode::NFT => { + Self::transfer_nft(&collection, item_id, from.clone(), recipient.clone())? + } + CollectionMode::Fungible(_) => { + Self::transfer_fungible(&collection, amount, &from, &recipient)? + } + CollectionMode::ReFungible => { + Self::transfer_refungible(&collection, item_id, amount, from.clone(), recipient.clone())? + } + _ => () + }; + + pub fn create_multiple_items_internal( + sender: T::CrossAccountId, + collection: &CollectionHandle, + owner: T::CrossAccountId, + items_data: Vec, + ) -> DispatchResult { + Self::can_create_items_in_collection(&collection, &sender, &owner, items_data.len() as u32)?; + + for data in &items_data { + Self::validate_create_item_args(&collection, data)?; + } + for data in &items_data { + Self::create_item_no_validation(&collection, owner.clone(), data.clone())?; + } + + Ok(()) + } fn is_correct_transfer(collection: &CollectionHandle, recipient: &T::AccountId) -> DispatchResult { let collection_id = collection.id; @@ -1866,7 +1969,7 @@ impl Module { Ok(()) } - fn create_item_no_validation(collection: &CollectionHandle, owner: T::AccountId, data: CreateItemData) -> DispatchResult { + fn create_item_no_validation(collection: &CollectionHandle, owner: T::CrossAccountId, data: CreateItemData) -> DispatchResult { match data { CreateItemData::NFT(data) => { @@ -1898,29 +2001,29 @@ impl Module { Ok(()) } - fn add_fungible_item(collection: &CollectionHandle, owner: &T::AccountId, value: u128) -> DispatchResult { + fn add_fungible_item(collection: &CollectionHandle, owner: &T::CrossAccountId, value: u128) -> DispatchResult { let collection_id = collection.id; // Does new owner already have an account? - let balance: u128 = >::get(collection_id, owner).value; + let balance: u128 = >::get(collection_id, owner.as_sub()).value; // Mint let item = FungibleItemType { value: balance.checked_add(value).ok_or(Error::::NumOverflow)?, }; - >::insert(collection_id, (*owner).clone(), item); + >::insert(collection_id, owner.as_sub(), item); // Update balance - let new_balance = >::get(collection_id, owner) + let new_balance = >::get(collection_id, owner.as_sub()) .checked_add(value) .ok_or(Error::::NumOverflow)?; - >::insert(collection_id, (*owner).clone(), new_balance); + >::insert(collection_id, owner.as_sub(), new_balance); Self::deposit_event(RawEvent::ItemCreated(collection_id, 0, owner.clone())); Ok(()) } - fn add_refungible_item(collection: &CollectionHandle, item: ReFungibleItemType) -> DispatchResult { + fn add_refungible_item(collection: &CollectionHandle, item: ReFungibleItemType) -> DispatchResult { let collection_id = collection.id; let current_index = ::get(collection_id) @@ -1943,16 +2046,16 @@ impl Module { >::insert(collection_id, current_index, itemcopy); // Update balance - let new_balance = >::get(collection_id, &owner) + let new_balance = >::get(collection_id, owner.as_sub()) .checked_add(value) .ok_or(Error::::NumOverflow)?; - >::insert(collection_id, owner.clone(), new_balance); + >::insert(collection_id, owner.as_sub(), new_balance); Self::deposit_event(RawEvent::ItemCreated(collection_id, current_index, owner)); Ok(()) } - fn add_nft_item(collection: &CollectionHandle, item: NftItemType) -> DispatchResult { + fn add_nft_item(collection: &CollectionHandle, item: NftItemType) -> DispatchResult { let collection_id = collection.id; let current_index = ::get(collection_id) @@ -1966,10 +2069,10 @@ impl Module { >::insert(collection_id, current_index, item); // Update balance - let new_balance = >::get(collection_id, item_owner.clone()) + let new_balance = >::get(collection_id, item_owner.as_sub()) .checked_add(1) .ok_or(Error::::NumOverflow)?; - >::insert(collection_id, item_owner.clone(), new_balance); + >::insert(collection_id, item_owner.as_sub(), new_balance); Self::deposit_event(RawEvent::ItemCreated(collection_id, current_index, item_owner)); Ok(()) From f2db9e8b9f5f0e10484257bba40b1c71dac5fc0e Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 30 Apr 2021 18:18:10 +0300 Subject: [PATCH 15/66] feat: support burning fro evm Signed-off-by: Yaroslav Bolyukin --- pallets/nft/src/lib.rs | 92 +++++++++++++++++++++++------------------- 1 file changed, 50 insertions(+), 42 deletions(-) diff --git a/pallets/nft/src/lib.rs b/pallets/nft/src/lib.rs index ae14f20edc..c820d1363a 100644 --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -1180,33 +1180,10 @@ decl_module! { #[transactional] pub fn burn_item(origin, collection_id: CollectionId, item_id: TokenId, value: u128) -> DispatchResult { - let sender = ensure_signed(origin)?; - - // Transfer permissions check + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let target_collection = Self::get_collection(collection_id)?; - ensure!( - Self::is_item_owner(sender.clone(), &target_collection, item_id) || - ( - target_collection.limits.owner_can_transfer && - Self::is_owner_or_admin_permissions(&target_collection, sender.clone()) - ), - Error::::NoPermission - ); - - if target_collection.access == AccessMode::WhiteList { - Self::check_white_list(&target_collection, &sender)?; - } - match target_collection.mode - { - CollectionMode::NFT => Self::burn_nft_item(&target_collection, item_id)?, - CollectionMode::Fungible(_) => Self::burn_fungible_item(&sender, &target_collection, value)?, - CollectionMode::ReFungible => Self::burn_refungible_item(&target_collection, item_id, &sender)?, - _ => () - }; - - // call event - Self::deposit_event(RawEvent::ItemDestroyed(target_collection.id, item_id)); + Self::burn_item_internal(&sender, &target_collection, item_id, value)?; Ok(()) } @@ -1477,9 +1454,9 @@ decl_module! { collection_id: CollectionId, schema: Vec ) -> DispatchResult { - let sender = ensure_signed(origin)?; + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let mut target_collection = Self::get_collection(collection_id)?; - Self::check_owner_or_admin_permissions(&target_collection, sender.clone())?; + Self::check_owner_or_admin_permissions(&target_collection, sender)?; // check schema limit ensure!(schema.len() as u32 <= ChainLimit::get().offchain_schema_limit, ""); @@ -1509,9 +1486,9 @@ decl_module! { collection_id: CollectionId, schema: Vec ) -> DispatchResult { - let sender = ensure_signed(origin)?; + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let mut target_collection = Self::get_collection(collection_id)?; - Self::check_owner_or_admin_permissions(&target_collection, sender.clone())?; + Self::check_owner_or_admin_permissions(&target_collection, sender)?; // check schema limit ensure!(schema.len() as u32 <= ChainLimit::get().const_on_chain_schema_limit, ""); @@ -1541,9 +1518,9 @@ decl_module! { collection_id: CollectionId, schema: Vec ) -> DispatchResult { - let sender = ensure_signed(origin)?; + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let mut target_collection = Self::get_collection(collection_id)?; - Self::check_owner_or_admin_permissions(&target_collection, sender.clone())?; + Self::check_owner_or_admin_permissions(&target_collection, sender)?; // check schema limit ensure!(schema.len() as u32 <= ChainLimit::get().variable_on_chain_schema_limit, ""); @@ -1899,6 +1876,36 @@ impl Module { Ok(()) } + pub fn burn_item_internal( + sender: &T::CrossAccountId, + collection: &CollectionHandle, + item_id: TokenId, + value: u128, + ) -> DispatchResult { + ensure!( + Self::is_item_owner(sender.clone(), &collection, item_id) || + ( + collection.limits.owner_can_transfer && + Self::is_owner_or_admin_permissions(&collection, sender.clone()) + ), + Error::::NoPermission + ); + + if collection.access == AccessMode::WhiteList { + Self::check_white_list(&collection, &sender)?; + } + + match collection.mode + { + CollectionMode::NFT => Self::burn_nft_item(&collection, item_id)?, + CollectionMode::Fungible(_) => Self::burn_fungible_item(&sender, &collection, value)?, + CollectionMode::ReFungible => Self::burn_refungible_item(&collection, item_id, &sender)?, + _ => () + }; + + Ok(()) + } + fn is_correct_transfer(collection: &CollectionHandle, recipient: &T::AccountId) -> DispatchResult { let collection_id = collection.id; @@ -2081,7 +2088,7 @@ impl Module { fn burn_refungible_item( collection: &CollectionHandle, item_id: TokenId, - owner: &T::AccountId, + owner: &T::CrossAccountId, ) -> DispatchResult { let collection_id = collection.id; @@ -2095,10 +2102,10 @@ impl Module { Self::remove_token_index(collection_id, item_id, owner)?; // update balance - let new_balance = >::get(collection_id, rft_balance.owner.clone()) + let new_balance = >::get(collection_id, rft_balance.owner.as_sub()) .checked_sub(rft_balance.fraction) .ok_or(Error::::NumOverflow)?; - >::insert(collection_id, rft_balance.owner.clone(), new_balance); + >::insert(collection_id, rft_balance.owner.as_sub(), new_balance); // Re-create owners list with sender removed let index = token @@ -2129,34 +2136,35 @@ impl Module { Self::remove_token_index(collection_id, item_id, &item.owner)?; // update balance - let new_balance = >::get(collection_id, &item.owner) + let new_balance = >::get(collection_id, item.owner.as_sub()) .checked_sub(1) .ok_or(Error::::NumOverflow)?; - >::insert(collection_id, item.owner.clone(), new_balance); + >::insert(collection_id, item.owner.as_sub(), new_balance); >::remove(collection_id, item_id); >::remove(collection_id, item_id); + Self::deposit_event(RawEvent::ItemDestroyed(collection.id, item_id)); Ok(()) } - fn burn_fungible_item(owner: &T::AccountId, collection: &CollectionHandle, value: u128) -> DispatchResult { + fn burn_fungible_item(owner: &T::CrossAccountId, collection: &CollectionHandle, value: u128) -> DispatchResult { let collection_id = collection.id; - let mut balance = >::get(collection_id, owner); + let mut balance = >::get(collection_id, owner.as_sub()); ensure!(balance.value >= value, Error::::TokenValueNotEnough); // update balance - let new_balance = >::get(collection_id, owner) + let new_balance = >::get(collection_id, owner.as_sub()) .checked_sub(value) .ok_or(Error::::NumOverflow)?; - >::insert(collection_id, (*owner).clone(), new_balance); + >::insert(collection_id, owner.as_sub(), new_balance); if balance.value - value > 0 { balance.value -= value; - >::insert(collection_id, (*owner).clone(), balance); + >::insert(collection_id, owner.as_sub(), balance); } else { - >::remove(collection_id, owner); + >::remove(collection_id, owner.as_sub()); } Ok(()) From 481e942f67c497463e44ab9208cd7c3fa28410a3 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 30 Apr 2021 18:18:37 +0300 Subject: [PATCH 16/66] feat: support transfers from evm Signed-off-by: Yaroslav Bolyukin --- pallets/nft/src/lib.rs | 56 ++++++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 24 deletions(-) diff --git a/pallets/nft/src/lib.rs b/pallets/nft/src/lib.rs index c820d1363a..07a77b8cbe 100644 --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -1213,11 +1213,13 @@ decl_module! { /// * Re-Fungible Mode: Must specify transferred portion (between 0 and 1) #[weight = ::WeightInfo::transfer()] #[transactional] - pub fn transfer(origin, recipient: T::AccountId, collection_id: CollectionId, item_id: TokenId, value: u128) -> DispatchResult { - let sender = ensure_signed(origin)?; + pub fn transfer(origin, recipient: T::CrossAccountId, collection_id: CollectionId, item_id: TokenId, value: u128) -> DispatchResult { + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let collection = Self::get_collection(collection_id)?; - Self::transfer_internal(sender, recipient, &collection, item_id, value) + Self::transfer_internal(sender, recipient, &collection, item_id, value)?; + + Ok(()) } /// Set, change, or remove approved address to transfer the ownership of the NFT. @@ -1737,7 +1739,7 @@ decl_module! { impl Module { - pub fn transfer_internal(sender: T::AccountId, recipient: T::AccountId, target_collection: &CollectionHandle, item_id: TokenId, value: u128) -> DispatchResult { + pub fn transfer_internal(sender: T::CrossAccountId, recipient: T::CrossAccountId, target_collection: &CollectionHandle, item_id: TokenId, value: u128) -> DispatchResult { // Limits check Self::is_correct_transfer(target_collection, &recipient)?; @@ -1906,11 +1908,11 @@ impl Module { Ok(()) } - fn is_correct_transfer(collection: &CollectionHandle, recipient: &T::AccountId) -> DispatchResult { + fn is_correct_transfer(collection: &CollectionHandle, recipient: &T::CrossAccountId) -> DispatchResult { let collection_id = collection.id; // check token limit and account token limit - let account_items: u32 = >::get(collection_id, recipient).len() as u32; + let account_items: u32 = >::get(collection_id, recipient.as_sub()).len() as u32; ensure!(collection.limits.account_token_ownership_limit > account_items, Error::::AccountTokenLimitExceeded); Ok(()) @@ -2264,29 +2266,31 @@ impl Module { fn transfer_fungible( collection: &CollectionHandle, value: u128, - owner: &T::AccountId, - recipient: &T::AccountId, + owner: &T::CrossAccountId, + recipient: &T::CrossAccountId, ) -> DispatchResult { let collection_id = collection.id; - let mut balance = >::get(collection_id, owner); + let mut balance = >::get(collection_id, owner.as_sub()); ensure!(balance.value >= value, Error::::TokenValueTooLow); // Send balance to recipient (updates balanceOf of recipient) Self::add_fungible_item(collection, recipient, value)?; // update balanceOf of sender - >::insert(collection_id, (*owner).clone(), balance.value - value); + >::insert(collection_id, owner.as_sub(), balance.value - value); // Reduce or remove sender if balance.value == value { - >::remove(collection_id, owner); + >::remove(collection_id, owner.as_sub()); } else { balance.value -= value; - >::insert(collection_id, (*owner).clone(), balance); + >::insert(collection_id, owner.as_sub(), balance); } + Self::deposit_event(RawEvent::Transfer(collection.id, 1, owner.clone(), recipient.clone(), value)); + Ok(()) } @@ -2294,8 +2298,8 @@ impl Module { collection: &CollectionHandle, item_id: TokenId, value: u128, - owner: T::AccountId, - new_owner: T::AccountId, + owner: T::CrossAccountId, + new_owner: T::CrossAccountId, ) -> DispatchResult { let collection_id = collection.id; let full_item = >::get(collection_id, item_id) @@ -2312,15 +2316,15 @@ impl Module { ensure!(amount >= value, Error::::TokenValueTooLow); // update balance - let balance_old_owner = >::get(collection_id, item.owner.clone()) + let balance_old_owner = >::get(collection_id, item.owner.as_sub()) .checked_sub(value) .ok_or(Error::::NumOverflow)?; - >::insert(collection_id, item.owner.clone(), balance_old_owner); + >::insert(collection_id, item.owner.as_sub(), balance_old_owner); - let balance_new_owner = >::get(collection_id, new_owner.clone()) + let balance_new_owner = >::get(collection_id, new_owner.as_sub()) .checked_add(value) .ok_or(Error::::NumOverflow)?; - >::insert(collection_id, new_owner.clone(), balance_new_owner); + >::insert(collection_id, new_owner.as_sub(), balance_new_owner); let old_owner = item.owner.clone(); let new_owner_has_account = full_item.owner.iter().any(|i| i.owner == new_owner); @@ -2370,14 +2374,16 @@ impl Module { >::insert(collection_id, item_id, new_full_item); } + Self::deposit_event(RawEvent::Transfer(collection.id, item_id, owner, new_owner, amount)); + Ok(()) } fn transfer_nft( collection: &CollectionHandle, item_id: TokenId, - sender: T::AccountId, - new_owner: T::AccountId, + sender: T::CrossAccountId, + new_owner: T::CrossAccountId, ) -> DispatchResult { let collection_id = collection.id; let mut item = >::get(collection_id, item_id) @@ -2389,15 +2395,15 @@ impl Module { ); // update balance - let balance_old_owner = >::get(collection_id, item.owner.clone()) + let balance_old_owner = >::get(collection_id, item.owner.as_sub()) .checked_sub(1) .ok_or(Error::::NumOverflow)?; - >::insert(collection_id, item.owner.clone(), balance_old_owner); + >::insert(collection_id, item.owner.as_sub(), balance_old_owner); - let balancenew_owner = >::get(collection_id, new_owner.clone()) + let balance_new_owner = >::get(collection_id, new_owner.as_sub()) .checked_add(1) .ok_or(Error::::NumOverflow)?; - >::insert(collection_id, new_owner.clone(), balancenew_owner); + >::insert(collection_id, new_owner.as_sub(), balance_new_owner); // change owner let old_owner = item.owner.clone(); @@ -2407,6 +2413,8 @@ impl Module { // update index collection Self::move_token_index(collection_id, item_id, &old_owner, &new_owner)?; + Self::deposit_event(RawEvent::Transfer(collection.id, item_id, sender, new_owner, 1)); + Ok(()) } From 9e3547bbeb4c0baf29cb2f3ee047cbc517f58ee2 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 30 Apr 2021 18:20:50 +0300 Subject: [PATCH 17/66] feat: support approve from evm Signed-off-by: Yaroslav Bolyukin --- pallets/nft/src/lib.rs | 112 +++++++++-------------------------------- 1 file changed, 24 insertions(+), 88 deletions(-) diff --git a/pallets/nft/src/lib.rs b/pallets/nft/src/lib.rs index 07a77b8cbe..9782069efa 100644 --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -1239,46 +1239,13 @@ decl_module! { /// * item_id: ID of the item. #[weight = ::WeightInfo::approve()] #[transactional] - pub fn approve(origin, spender: T::AccountId, collection_id: CollectionId, item_id: TokenId, amount: u128) -> DispatchResult { + pub fn approve(origin, spender: T::CrossAccountId, collection_id: CollectionId, item_id: TokenId, amount: u128) -> DispatchResult { - let sender = ensure_signed(origin)?; - let target_collection = Self::get_collection(collection_id)?; - - Self::token_exists(&target_collection, item_id)?; - - // Transfer permissions check - let bypasses_limits = target_collection.limits.owner_can_transfer && - Self::is_owner_or_admin_permissions( - &target_collection, - sender.clone(), - ); - - let allowance_limit = if bypasses_limits { - None - } else if let Some(amount) = Self::owned_amount( - sender.clone(), - &target_collection, - item_id, - ) { - Some(amount) - } else { - fail!(Error::::NoPermission); - }; + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); + let collection = Self::get_collection(collection_id)?; - if target_collection.access == AccessMode::WhiteList { - Self::check_white_list(&target_collection, &sender)?; - Self::check_white_list(&target_collection, &spender)?; - } + Self::approve_internal(sender, spender, &collection, item_id, amount)?; - let allowance: u128 = amount - .checked_add(>::get(collection_id, (item_id, &sender, &spender))) - .ok_or(Error::::NumOverflow)?; - if let Some(limit) = allowance_limit { - ensure!(limit >= allowance, Error::::TokenValueTooLow); - } - >::insert(collection_id, (item_id, sender.clone(), spender.clone()), allowance); - - Self::deposit_event(RawEvent::Approved(target_collection.id, item_id, sender, spender, allowance)); Ok(()) } @@ -1303,49 +1270,13 @@ decl_module! { /// * value: Amount to transfer. #[weight = ::WeightInfo::transfer_from()] #[transactional] - pub fn transfer_from(origin, from: T::AccountId, recipient: T::AccountId, collection_id: CollectionId, item_id: TokenId, value: u128 ) -> DispatchResult { - - let sender = ensure_signed(origin)?; - let target_collection = Self::get_collection(collection_id)?; - - // Check approval - let approval: u128 = >::get(collection_id, (item_id, &from, &sender)); - - // Limits check - Self::is_correct_transfer(&target_collection, &recipient)?; - - // Transfer permissions check - ensure!( - approval >= value || - ( - target_collection.limits.owner_can_transfer && - Self::is_owner_or_admin_permissions(&target_collection, sender.clone()) - ), - Error::::NoPermission - ); - - if target_collection.access == AccessMode::WhiteList { - Self::check_white_list(&target_collection, &sender)?; - Self::check_white_list(&target_collection, &recipient)?; - } + pub fn transfer_from(origin, from: T::CrossAccountId, recipient: T::CrossAccountId, collection_id: CollectionId, item_id: TokenId, value: u128 ) -> DispatchResult { - // Reduce approval by transferred amount or remove if remaining approval drops to 0 - if approval.saturating_sub(value) > 0 { - >::insert(collection_id, (item_id, &from, &sender), approval - value); - } - else { - >::remove(collection_id, (item_id, &from, &sender)); - } + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); + let collection = Self::get_collection(collection_id)?; - match target_collection.mode - { - CollectionMode::NFT => Self::transfer_nft(&target_collection, item_id, from.clone(), recipient.clone())?, - CollectionMode::Fungible(_) => Self::transfer_fungible(&target_collection, value, &from, &recipient)?, - CollectionMode::ReFungible => Self::transfer_refungible(&target_collection, item_id, value, from.clone(), recipient.clone())?, - _ => () - }; + Self::transfer_from_internal(sender, from, recipient, &collection, item_id, value)?; - Self::deposit_event(RawEvent::Transfer(target_collection.id, item_id, from, recipient, value)); Ok(()) } @@ -1767,8 +1698,8 @@ impl Module { } pub fn approve_internal( - sender: T::AccountId, - spender: T::AccountId, + sender: T::CrossAccountId, + spender: T::CrossAccountId, collection: &CollectionHandle, item_id: TokenId, amount: u128 @@ -1800,27 +1731,28 @@ impl Module { } let allowance: u128 = amount - .checked_add(>::get(collection.id, (item_id, &sender, &spender))) + .checked_add(>::get(collection.id, (item_id, sender.as_sub(), spender.as_sub()))) .ok_or(Error::::NumOverflow)?; if let Some(limit) = allowance_limit { ensure!(limit >= allowance, Error::::TokenValueTooLow); } - >::insert(collection.id, (item_id, sender.clone(), spender.clone()), allowance); + >::insert(collection.id, (item_id, sender.as_sub(), spender.as_sub()), allowance); + Self::deposit_event(RawEvent::Approved(collection.id, item_id, sender, spender, allowance)); Ok(()) } pub fn transfer_from_internal( - sender: T::AccountId, - from: T::AccountId, - recipient: T::AccountId, + sender: T::CrossAccountId, + from: T::CrossAccountId, + recipient: T::CrossAccountId, collection: &CollectionHandle, item_id: TokenId, amount: u128, ) -> DispatchResult { // Check approval - let approval: u128 = >::get(collection.id, (item_id, &from, &sender)); + let approval: u128 = >::get(collection.id, (item_id, from.as_sub(), sender.as_sub())); // Limits check Self::is_correct_transfer(&collection, &recipient)?; @@ -1841,10 +1773,11 @@ impl Module { } // Reduce approval by transferred amount or remove if remaining approval drops to 0 - if approval.saturating_sub(amount) > 0 { - >::insert(collection.id, (item_id, &from, &sender), approval - amount); + let allowance = approval.saturating_sub(amount); + if allowance > 0 { + >::insert(collection.id, (item_id, from.as_sub(), sender.as_sub()), allowance); } else { - >::remove(collection.id, (item_id, &from, &sender)); + >::remove(collection.id, (item_id, from.as_sub(), sender.as_sub())); } match collection.mode { @@ -1860,6 +1793,9 @@ impl Module { _ => () }; + Ok(()) + } + pub fn create_multiple_items_internal( sender: T::CrossAccountId, collection: &CollectionHandle, From bbe9a345e2a05a3a7c2db92a345b102c0771cc91 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 30 Apr 2021 18:20:53 +0300 Subject: [PATCH 18/66] feat: make guards support evm calls Signed-off-by: Yaroslav Bolyukin --- pallets/nft/src/lib.rs | 77 +++++++++++++++++++++--------------------- 1 file changed, 38 insertions(+), 39 deletions(-) diff --git a/pallets/nft/src/lib.rs b/pallets/nft/src/lib.rs index 9782069efa..3e01834c90 100644 --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -801,7 +801,7 @@ decl_module! { let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let collection = Self::get_collection(collection_id)?; - Self::check_owner_permissions(&collection, sender)?; + Self::check_owner_permissions(&collection, &sender)?; if !collection.limits.owner_can_destroy { fail!(Error::::NoPermission); } @@ -849,7 +849,7 @@ decl_module! { let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let collection = Self::get_collection(collection_id)?; - Self::check_owner_or_admin_permissions(&collection, sender)?; + Self::check_owner_or_admin_permissions(&collection, &sender)?; >::insert(collection_id, address.as_sub(), true); @@ -874,7 +874,7 @@ decl_module! { let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let collection = Self::get_collection(collection_id)?; - Self::check_owner_or_admin_permissions(&collection, sender)?; + Self::check_owner_or_admin_permissions(&collection, &sender)?; >::remove(collection_id, address.as_sub()); @@ -899,7 +899,7 @@ decl_module! { let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let mut target_collection = Self::get_collection(collection_id)?; - Self::check_owner_permissions(&target_collection, sender)?; + Self::check_owner_permissions(&target_collection, &sender)?; target_collection.access = mode; Self::save_collection(target_collection); @@ -926,7 +926,7 @@ decl_module! { let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let mut target_collection = Self::get_collection(collection_id)?; - Self::check_owner_permissions(&target_collection, sender)?; + Self::check_owner_permissions(&target_collection, &sender)?; target_collection.mint_mode = mint_permission; Self::save_collection(target_collection); @@ -950,7 +950,7 @@ decl_module! { let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let mut target_collection = Self::get_collection(collection_id)?; - Self::check_owner_permissions(&target_collection, sender)?; + Self::check_owner_permissions(&target_collection, &sender)?; target_collection.owner = new_owner; Self::save_collection(target_collection); @@ -973,10 +973,9 @@ decl_module! { #[weight = ::WeightInfo::add_collection_admin()] #[transactional] pub fn add_collection_admin(origin, collection_id: CollectionId, new_admin_id: T::CrossAccountId) -> DispatchResult { - let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let collection = Self::get_collection(collection_id)?; - Self::check_owner_or_admin_permissions(&collection, sender)?; + Self::check_owner_or_admin_permissions(&collection, &sender)?; let mut admin_arr = >::get(collection_id); match admin_arr.binary_search(&new_admin_id) { @@ -1006,10 +1005,9 @@ decl_module! { #[weight = ::WeightInfo::remove_collection_admin()] #[transactional] pub fn remove_collection_admin(origin, collection_id: CollectionId, account_id: T::CrossAccountId) -> DispatchResult { - let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let collection = Self::get_collection(collection_id)?; - Self::check_owner_or_admin_permissions(&collection, sender)?; + Self::check_owner_or_admin_permissions(&collection, &sender)?; let mut admin_arr = >::get(collection_id); match admin_arr.binary_search(&account_id) { @@ -1083,7 +1081,7 @@ decl_module! { let sender = ensure_signed(origin)?; let mut target_collection = Self::get_collection(collection_id)?; - Self::check_owner_permissions(&target_collection, sender)?; + Self::check_owner_permissions(&target_collection, &T::CrossAccountId::from_sub(sender))?; target_collection.sponsorship = SponsorshipState::Disabled; Self::save_collection(target_collection); @@ -1361,7 +1359,7 @@ decl_module! { ) -> DispatchResult { let sender = ensure_signed(origin)?; let mut target_collection = Self::get_collection(collection_id)?; - Self::check_owner_or_admin_permissions(&target_collection, sender.clone())?; + Self::check_owner_or_admin_permissions(&target_collection, &sender)?; target_collection.schema_version = version; Self::save_collection(target_collection); @@ -1389,7 +1387,7 @@ decl_module! { ) -> DispatchResult { let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let mut target_collection = Self::get_collection(collection_id)?; - Self::check_owner_or_admin_permissions(&target_collection, sender)?; + Self::check_owner_or_admin_permissions(&target_collection, &sender)?; // check schema limit ensure!(schema.len() as u32 <= ChainLimit::get().offchain_schema_limit, ""); @@ -1421,7 +1419,7 @@ decl_module! { ) -> DispatchResult { let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let mut target_collection = Self::get_collection(collection_id)?; - Self::check_owner_or_admin_permissions(&target_collection, sender)?; + Self::check_owner_or_admin_permissions(&target_collection, &sender)?; // check schema limit ensure!(schema.len() as u32 <= ChainLimit::get().const_on_chain_schema_limit, ""); @@ -1453,7 +1451,7 @@ decl_module! { ) -> DispatchResult { let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let mut target_collection = Self::get_collection(collection_id)?; - Self::check_owner_or_admin_permissions(&target_collection, sender)?; + Self::check_owner_or_admin_permissions(&target_collection, &sender)?; // check schema limit ensure!(schema.len() as u32 <= ChainLimit::get().variable_on_chain_schema_limit, ""); @@ -1640,7 +1638,7 @@ decl_module! { ) -> DispatchResult { let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let mut target_collection = Self::get_collection(collection_id)?; - Self::check_owner_permissions(&target_collection, sender.clone())?; + Self::check_owner_permissions(&target_collection, &sender)?; let old_limits = &target_collection.limits; let chain_limits = ChainLimit::get(); @@ -1675,8 +1673,8 @@ impl Module { Self::is_correct_transfer(target_collection, &recipient)?; // Transfer permissions check - ensure!(Self::is_item_owner(sender.clone(), target_collection, item_id) || - Self::is_owner_or_admin_permissions(target_collection, sender.clone()), + ensure!(Self::is_item_owner(&sender, target_collection, item_id) || + Self::is_owner_or_admin_permissions(target_collection, &sender), Error::::NoPermission); if target_collection.access == AccessMode::WhiteList { @@ -1710,13 +1708,13 @@ impl Module { let bypasses_limits = collection.limits.owner_can_transfer && Self::is_owner_or_admin_permissions( &collection, - sender.clone(), + &sender, ); let allowance_limit = if bypasses_limits { None } else if let Some(amount) = Self::owned_amount( - sender.clone(), + &sender, &collection, item_id, ) { @@ -1762,7 +1760,7 @@ impl Module { approval >= amount || ( collection.limits.owner_can_transfer && - Self::is_owner_or_admin_permissions(&collection, sender.clone()) + Self::is_owner_or_admin_permissions(&collection, &sender) ), Error::::NoPermission ); @@ -1821,10 +1819,10 @@ impl Module { value: u128, ) -> DispatchResult { ensure!( - Self::is_item_owner(sender.clone(), &collection, item_id) || + Self::is_item_owner(&sender, &collection, item_id) || ( collection.limits.owner_can_transfer && - Self::is_owner_or_admin_permissions(&collection, sender.clone()) + Self::is_owner_or_admin_permissions(&collection, &sender) ), Error::::NoPermission ); @@ -1854,20 +1852,20 @@ impl Module { Ok(()) } - fn can_create_items_in_collection(collection: &CollectionHandle, sender: &T::AccountId, owner: &T::AccountId, amount: u32) -> DispatchResult { + fn can_create_items_in_collection(collection: &CollectionHandle, sender: &T::CrossAccountId, owner: &T::CrossAccountId, amount: u32) -> DispatchResult { let collection_id = collection.id; // check token limit and account token limit let total_items: u32 = ItemListIndex::get(collection_id) .checked_add(amount) .ok_or(Error::::CollectionTokenLimitExceeded)?; - let account_items: u32 = (>::get(collection_id, owner).len() as u32) + let account_items: u32 = (>::get(collection_id, owner.as_sub()).len() as u32) .checked_add(amount) .ok_or(Error::::AccountTokenLimitExceeded)?; ensure!(collection.limits.token_limit >= total_items, Error::::CollectionTokenLimitExceeded); ensure!(collection.limits.account_token_ownership_limit >= account_items, Error::::AccountTokenLimitExceeded); - if !Self::is_owner_or_admin_permissions(collection, sender.clone()) { + if !Self::is_owner_or_admin_permissions(collection, &sender) { ensure!(collection.mint_mode == true, Error::::PublicMintingNotAllowed); Self::check_white_list(collection, owner)?; Self::check_white_list(collection, sender)?; @@ -2121,22 +2119,23 @@ impl Module { >::insert(collection.id, collection.collection); } - fn check_owner_permissions(target_collection: &CollectionHandle, subject: T::AccountId) -> DispatchResult { + + fn check_owner_permissions(target_collection: &CollectionHandle, subject: &T::CrossAccountId) -> DispatchResult { ensure!( - subject == target_collection.owner, + *subject == target_collection.owner, Error::::NoPermission ); Ok(()) } - fn is_owner_or_admin_permissions(collection: &CollectionHandle, subject: T::AccountId) -> bool { - subject == collection.owner || >::get(collection.id).contains(&subject) + fn is_owner_or_admin_permissions(collection: &CollectionHandle, subject: &T::CrossAccountId) -> bool { + *subject == collection.owner || >::get(collection.id).contains(&subject) } fn check_owner_or_admin_permissions( collection: &CollectionHandle, - subject: T::AccountId, + subject: &T::CrossAccountId, ) -> DispatchResult { ensure!(Self::is_owner_or_admin_permissions(collection, subject), Error::::NoPermission); @@ -2144,38 +2143,38 @@ impl Module { } fn owned_amount( - subject: T::AccountId, + subject: &T::CrossAccountId, target_collection: &CollectionHandle, item_id: TokenId, ) -> Option { let collection_id = target_collection.id; match target_collection.mode { - CollectionMode::NFT => (>::get(collection_id, item_id)?.owner == subject) + CollectionMode::NFT => (>::get(collection_id, item_id)?.owner == *subject) .then(|| 1), - CollectionMode::Fungible(_) => Some(>::get(collection_id, &subject) + CollectionMode::Fungible(_) => Some(>::get(collection_id, &subject.as_sub()) .value), CollectionMode::ReFungible => >::get(collection_id, item_id)? .owner .iter() - .find(|i| i.owner == subject) + .find(|i| i.owner == *subject) .map(|i| i.fraction), CollectionMode::Invalid => None, } } - fn is_item_owner(subject: T::AccountId, target_collection: &CollectionHandle, item_id: TokenId) -> bool { + fn is_item_owner(subject: &T::CrossAccountId, target_collection: &CollectionHandle, item_id: TokenId) -> bool { match target_collection.mode { CollectionMode::Fungible(_) => true, - _ => Self::owned_amount(subject, target_collection, item_id).is_some(), + _ => Self::owned_amount(&subject, target_collection, item_id).is_some(), } } - fn check_white_list(collection: &CollectionHandle, address: &T::AccountId) -> DispatchResult { + fn check_white_list(collection: &CollectionHandle, address: &T::CrossAccountId) -> DispatchResult { let collection_id = collection.id; let mes = Error::::AddresNotInWhiteList; - ensure!(>::contains_key(collection_id, address), mes); + ensure!(>::contains_key(collection_id, address.as_sub()), mes); Ok(()) } From ab6ae7620c9f2cb9d2eaf04c6bb2e2ba41940eb0 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 30 Apr 2021 18:20:57 +0300 Subject: [PATCH 19/66] feat: support evm accounts in chainspec Signed-off-by: Yaroslav Bolyukin --- node/src/chain_spec.rs | 20 +-------------- pallets/nft/src/lib.rs | 55 +++++++++++++++++++++--------------------- 2 files changed, 28 insertions(+), 47 deletions(-) diff --git a/node/src/chain_spec.rs b/node/src/chain_spec.rs index 12d803bc54..aea01b4573 100644 --- a/node/src/chain_spec.rs +++ b/node/src/chain_spec.rs @@ -179,25 +179,7 @@ fn testnet_genesis( .collect(), }, pallet_nft: NftConfig { - collection_id: vec![( - 1, - Collection { - owner: get_account_id_from_seed::("Alice"), - mode: CollectionMode::NFT, - access: AccessMode::Normal, - decimal_points: 0, - name: vec![], - description: vec![], - token_prefix: vec![], - mint_mode: false, - offchain_schema: vec![], - schema_version: SchemaVersion::default(), - sponsorship: SponsorshipState::Confirmed(get_account_id_from_seed::("Alice")), - const_on_chain_schema: vec![], - variable_on_chain_schema: vec![], - limits: CollectionLimits::default() - }, - )], + collection_id: vec![], nft_item_id: vec![], fungible_item_id: vec![], refungible_item_id: vec![], diff --git a/pallets/nft/src/lib.rs b/pallets/nft/src/lib.rs index 3e01834c90..b2d75ea391 100644 --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -604,7 +604,7 @@ decl_storage! { } for (collection_id, account_id, fungible_item) in &config.fungible_item_id { - >::init_fungible_token(*collection_id, account_id, fungible_item); + >::init_fungible_token(*collection_id, &T::CrossAccountId::from_sub(account_id.clone()), fungible_item); } for (_num, _c, _i) in &config.refungible_item_id { @@ -2412,24 +2412,23 @@ impl Module { CreatedCollectionCount::put(next_id); } - fn init_nft_token(collection_id: CollectionId, item: &NftItemType) { + fn init_nft_token(collection_id: CollectionId, item: &NftItemType) { let current_index = ::get(collection_id) .checked_add(1) .unwrap(); - let item_owner = item.owner.clone(); Self::add_token_index(collection_id, current_index, &item.owner).unwrap(); ::insert(collection_id, current_index); // Update balance - let new_balance = >::get(collection_id, &item_owner) + let new_balance = >::get(collection_id, item.owner.as_sub()) .checked_add(1) .unwrap(); - >::insert(collection_id, item_owner.clone(), new_balance); + >::insert(collection_id, item.owner.as_sub(), new_balance); } - fn init_fungible_token(collection_id: CollectionId, owner: &T::AccountId, item: &FungibleItemType) { + fn init_fungible_token(collection_id: CollectionId, owner: &T::CrossAccountId, item: &FungibleItemType) { let current_index = ::get(collection_id) .checked_add(1) .unwrap(); @@ -2439,13 +2438,13 @@ impl Module { ::insert(collection_id, current_index); // Update balance - let new_balance = >::get(collection_id, owner) + let new_balance = >::get(collection_id, owner.as_sub()) .checked_add(item.value) .unwrap(); - >::insert(collection_id, (*owner).clone(), new_balance); + >::insert(collection_id, owner.as_sub(), new_balance); } - fn init_refungible_token(collection_id: CollectionId, item: &ReFungibleItemType) { + fn init_refungible_token(collection_id: CollectionId, item: &ReFungibleItemType) { let current_index = ::get(collection_id) .checked_add(1) .unwrap(); @@ -2458,42 +2457,42 @@ impl Module { ::insert(collection_id, current_index); // Update balance - let new_balance = >::get(collection_id, &owner) + let new_balance = >::get(collection_id, &owner.as_sub()) .checked_add(value) .unwrap(); - >::insert(collection_id, owner.clone(), new_balance); + >::insert(collection_id, owner.as_sub(), new_balance); } - fn add_token_index(collection_id: CollectionId, item_index: TokenId, owner: &T::AccountId) -> DispatchResult { + fn add_token_index(collection_id: CollectionId, item_index: TokenId, owner: &T::CrossAccountId) -> DispatchResult { // add to account limit - if >::contains_key(owner) { + if >::contains_key(owner.as_sub()) { // bound Owned tokens by a single address - let count = >::get(owner); + let count = >::get(owner.as_sub()); ensure!(count < ChainLimit::get().account_token_ownership_limit, Error::::AddressOwnershipLimitExceeded); - >::insert(owner.clone(), count + >::insert(owner.as_sub(), count .checked_add(1) .ok_or(Error::::NumOverflow)?); } else { - >::insert(owner.clone(), 1); + >::insert(owner.as_sub(), 1); } - let list_exists = >::contains_key(collection_id, owner); + let list_exists = >::contains_key(collection_id, owner.as_sub()); if list_exists { - let mut list = >::get(collection_id, owner); + let mut list = >::get(collection_id, owner.as_sub()); let item_contains = list.contains(&item_index.clone()); if !item_contains { list.push(item_index.clone()); } - >::insert(collection_id, owner.clone(), list); + >::insert(collection_id, owner.as_sub(), list); } else { let mut itm = Vec::new(); itm.push(item_index.clone()); - >::insert(collection_id, owner.clone(), itm); + >::insert(collection_id, owner.as_sub(), itm); } Ok(()) @@ -2502,24 +2501,24 @@ impl Module { fn remove_token_index( collection_id: CollectionId, item_index: TokenId, - owner: &T::AccountId, + owner: &T::CrossAccountId, ) -> DispatchResult { // update counter - >::insert(owner.clone(), - >::get(owner) + >::insert(owner.as_sub(), + >::get(owner.as_sub()) .checked_sub(1) .ok_or(Error::::NumOverflow)?); - let list_exists = >::contains_key(collection_id, owner); + let list_exists = >::contains_key(collection_id, owner.as_sub()); if list_exists { - let mut list = >::get(collection_id, owner); + let mut list = >::get(collection_id, owner.as_sub()); let item_contains = list.contains(&item_index.clone()); if item_contains { list.retain(|&item| item != item_index); - >::insert(collection_id, owner.clone(), list); + >::insert(collection_id, owner.as_sub(), list); } } @@ -2529,8 +2528,8 @@ impl Module { fn move_token_index( collection_id: CollectionId, item_index: TokenId, - old_owner: &T::AccountId, - new_owner: &T::AccountId, + old_owner: &T::CrossAccountId, + new_owner: &T::CrossAccountId, ) -> DispatchResult { Self::remove_token_index(collection_id, item_index, old_owner)?; Self::add_token_index(collection_id, item_index, new_owner)?; From 683924f8b65f87bb1ed28e60980dc0f7c980a684 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 30 Apr 2021 18:21:26 +0300 Subject: [PATCH 20/66] feat: log recording Signed-off-by: Yaroslav Bolyukin --- pallets/nft/src/lib.rs | 108 ++++++++++++++++++++++++++++++++++++++--- runtime/src/lib.rs | 4 ++ 2 files changed, 105 insertions(+), 7 deletions(-) diff --git a/pallets/nft/src/lib.rs b/pallets/nft/src/lib.rs index b2d75ea391..4e0aba0524 100644 --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -43,7 +43,7 @@ use sp_runtime::{ }; use sp_runtime::traits::StaticLookup; use pallet_contracts::chain_extension::UncheckedFrom; -use pallet_evm::AddressMapping; +use pallet_ethereum::EthereumTransactionSender; use pallet_transaction_payment::OnChargeTransaction; #[cfg(test)] @@ -185,6 +185,23 @@ pub struct Collection { pub struct CollectionHandle { pub id: CollectionId, collection: Collection, + logs: eth::log::LogRecorder, +} +impl CollectionHandle { + pub fn get(id: CollectionId) -> Option { + >::get(id) + .map(|collection| Self { + id, + collection, + logs: eth::log::LogRecorder::default(), + }) + } + pub fn log(&self, topics: Vec, data: eth::abi::AbiWriter) { + self.logs.log(topics, data) + } + pub fn into_inner(self) -> Collection { + self.collection.clone() + } } impl Deref for CollectionHandle { @@ -471,6 +488,9 @@ pub trait Config: system::Config + Sized + pallet_transaction_payment::Config + type Currency: Currency; type CollectionCreationPrice: Get<<::Currency as Currency>::Balance>; type TreasuryAccountId: Get; + + type EthereumChainId: Get; + type EthereumTransactionSender: pallet_ethereum::EthereumTransactionSender; } #[cfg(feature = "runtime-benchmarks")] @@ -1125,6 +1145,7 @@ decl_module! { Self::validate_create_item_args(&target_collection, &data)?; Self::create_item_no_validation(&target_collection, owner, data)?; + Self::submit_logs(target_collection)?; Ok(()) } @@ -1158,6 +1179,7 @@ decl_module! { Self::create_multiple_items_internal(sender, &collection, owner, items_data)?; + Self::submit_logs(collection)?; Ok(()) } @@ -1183,6 +1205,7 @@ decl_module! { Self::burn_item_internal(&sender, &target_collection, item_id, value)?; + Self::submit_logs(target_collection)?; Ok(()) } @@ -1217,6 +1240,7 @@ decl_module! { Self::transfer_internal(sender, recipient, &collection, item_id, value)?; + Self::submit_logs(collection)?; Ok(()) } @@ -1244,6 +1268,7 @@ decl_module! { Self::approve_internal(sender, spender, &collection, item_id, amount)?; + Self::submit_logs(collection)?; Ok(()) } @@ -1275,6 +1300,7 @@ decl_module! { Self::transfer_from_internal(sender, from, recipient, &collection, item_id, value)?; + Self::submit_logs(collection)?; Ok(()) } @@ -1736,6 +1762,29 @@ impl Module { } >::insert(collection.id, (item_id, sender.as_sub(), spender.as_sub()), allowance); + if matches!(collection.mode, CollectionMode::NFT) { + // TODO: NFT: only one owner may exist for token in ERC721 + collection.log( + Vec::from([ + eth::APPROVAL_NFT_TOPIC, + eth::address_to_topic(sender.as_eth()), + eth::address_to_topic(spender.as_eth()), + ]), + abi_encode!(uint256(item_id.into())), + ); + } + + if matches!(collection.mode, CollectionMode::Fungible(_)) { + // TODO: NFT: only one owner may exist for token in ERC20 + collection.log( + Vec::from([ + eth::APPROVAL_FUNGIBLE_TOPIC, + eth::address_to_topic(sender.as_eth()), + eth::address_to_topic(spender.as_eth()), + ]), + abi_encode!(uint256(allowance.into())), + ); + } Self::deposit_event(RawEvent::Approved(collection.id, item_id, sender, spender, allowance)); Ok(()) @@ -1791,6 +1840,17 @@ impl Module { _ => () }; + if matches!(collection.mode, CollectionMode::Fungible(_)) { + collection.log( + Vec::from([ + eth::APPROVAL_FUNGIBLE_TOPIC, + eth::address_to_topic(from.as_eth()), + eth::address_to_topic(sender.as_eth()), + ]), + abi_encode!(uint256(allowance.into())), + ); + } + Ok(()) } @@ -2017,6 +2077,14 @@ impl Module { .ok_or(Error::::NumOverflow)?; >::insert(collection_id, item_owner.as_sub(), new_balance); + collection.log( + Vec::from([ + eth::TRANSFER_NFT_TOPIC, + eth::address_to_topic(&H160::default()), + eth::address_to_topic(item_owner.as_eth()), + ]), + abi_encode!(uint256(current_index.into())), + ); Self::deposit_event(RawEvent::ItemCreated(collection_id, current_index, item_owner)); Ok(()) } @@ -2103,22 +2171,32 @@ impl Module { >::remove(collection_id, owner.as_sub()); } + collection.log( + Vec::from([ + eth::TRANSFER_FUNGIBLE_TOPIC, + eth::address_to_topic(owner.as_eth()), + eth::address_to_topic(&H160::default()), + ]), + abi_encode!(uint256(value.into())), + ); Ok(()) } pub fn get_collection(collection_id: CollectionId) -> Result, sp_runtime::DispatchError> { - Ok(>::get(collection_id) - .map(|collection| CollectionHandle { - id: collection_id, - collection - }) + Ok(>::get(collection_id) .ok_or(Error::::CollectionNotFound)?) } fn save_collection(collection: CollectionHandle) { - >::insert(collection.id, collection.collection); + >::insert(collection.id, collection.into_inner()); } + fn submit_logs(collection: CollectionHandle) -> DispatchResult { + T::EthereumTransactionSender::submit_logs_transaction( + eth::generate_transaction(collection.id, T::EthereumChainId::get()), + collection.logs.retrieve_logs_for_contract(eth::collection_id_to_address(collection.id)), + ) + } fn check_owner_permissions(target_collection: &CollectionHandle, subject: &T::CrossAccountId) -> DispatchResult { ensure!( @@ -2224,6 +2302,14 @@ impl Module { >::insert(collection_id, owner.as_sub(), balance); } + collection.log( + Vec::from([ + eth::TRANSFER_FUNGIBLE_TOPIC, + eth::address_to_topic(owner.as_eth()), + eth::address_to_topic(recipient.as_eth()), + ]), + abi_encode!(uint256(value.into())), + ); Self::deposit_event(RawEvent::Transfer(collection.id, 1, owner.clone(), recipient.clone(), value)); Ok(()) @@ -2348,6 +2434,14 @@ impl Module { // update index collection Self::move_token_index(collection_id, item_id, &old_owner, &new_owner)?; + collection.log( + Vec::from([ + eth::TRANSFER_NFT_TOPIC, + eth::address_to_topic(sender.as_eth()), + eth::address_to_topic(new_owner.as_eth()), + ]), + abi_encode!(uint256(item_id.into())), + ); Self::deposit_event(RawEvent::Transfer(collection.id, item_id, sender, new_owner, 1)); Ok(()) diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index e952cd3373..35830a3e4b 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -381,6 +381,7 @@ impl pallet_ethereum::Config for Runtime { type Event = Event; type FindAuthor = EthereumFindAuthor; type StateRoot = pallet_ethereum::IntermediateStateRoot; + type EvmSubmitLog = pallet_evm::Module; } impl pallet_grandpa::Config for Runtime { @@ -588,6 +589,9 @@ impl pallet_nft::Config for Runtime { type Currency = Balances; type CollectionCreationPrice = CollectionCreationPrice; type TreasuryAccountId = TreasuryAccountId; + + type EthereumChainId = ChainId; + type EthereumTransactionSender = pallet_ethereum::Module; } construct_runtime!( From 651e1c77e229cd47d2ba5eac79dd46f8612fdb39 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 30 Apr 2021 18:21:29 +0300 Subject: [PATCH 21/66] feat: support evm calls of data Signed-off-by: Yaroslav Bolyukin --- pallets/nft/src/lib.rs | 47 ++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/pallets/nft/src/lib.rs b/pallets/nft/src/lib.rs index 4e0aba0524..0b9300eca9 100644 --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -1339,25 +1339,10 @@ decl_module! { item_id: TokenId, data: Vec ) -> DispatchResult { - let sender = ensure_signed(origin)?; + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let target_collection = Self::get_collection(collection_id)?; - Self::token_exists(&target_collection, item_id)?; - - ensure!(ChainLimit::get().custom_data_limit >= data.len() as u32, Error::::TokenVariableDataLimitExceeded); - - // Modify permissions check - ensure!(Self::is_item_owner(sender.clone(), &target_collection, item_id) || - Self::is_owner_or_admin_permissions(&target_collection, sender.clone()), - Error::::NoPermission); - - match target_collection.mode - { - CollectionMode::NFT => Self::set_nft_variable_data(&target_collection, item_id, data)?, - CollectionMode::ReFungible => Self::set_re_fungible_variable_data(&target_collection, item_id, data)?, - CollectionMode::Fungible(_) => fail!(Error::::CantStoreMetadataInFungibleTokens), - _ => fail!(Error::::UnexpectedCollectionType) - }; + Self::set_variable_meta_data_internal(sender, &target_collection, item_id, data)?; Ok(()) } @@ -1383,7 +1368,7 @@ decl_module! { collection_id: CollectionId, version: SchemaVersion ) -> DispatchResult { - let sender = ensure_signed(origin)?; + let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let mut target_collection = Self::get_collection(collection_id)?; Self::check_owner_or_admin_permissions(&target_collection, &sender)?; target_collection.schema_version = version; @@ -1854,6 +1839,32 @@ impl Module { Ok(()) } + pub fn set_variable_meta_data_internal( + sender: T::CrossAccountId, + collection: &CollectionHandle, + item_id: TokenId, + data: Vec, + ) -> DispatchResult { + Self::token_exists(&collection, item_id)?; + + ensure!(ChainLimit::get().custom_data_limit >= data.len() as u32, Error::::TokenVariableDataLimitExceeded); + + // Modify permissions check + ensure!(Self::is_item_owner(&sender, &collection, item_id) || + Self::is_owner_or_admin_permissions(&collection, &sender), + Error::::NoPermission); + + match collection.mode + { + CollectionMode::NFT => Self::set_nft_variable_data(&collection, item_id, data)?, + CollectionMode::ReFungible => Self::set_re_fungible_variable_data(&collection, item_id, data)?, + CollectionMode::Fungible(_) => fail!(Error::::CantStoreMetadataInFungibleTokens), + _ => fail!(Error::::UnexpectedCollectionType) + }; + + Ok(()) + } + pub fn create_multiple_items_internal( sender: T::CrossAccountId, collection: &CollectionHandle, From d0a0bc7b07214c5b9dae0e261175c1fbc6cd6808 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 30 Apr 2021 18:21:34 +0300 Subject: [PATCH 22/66] feat: ethereum method handling Signed-off-by: Yaroslav Bolyukin --- pallets/nft/src/eth/mod.rs | 301 ++++++++++++++++++++++++++ pallets/nft/src/eth/stubs/ERC1633.bin | 1 + pallets/nft/src/eth/stubs/ERC20.bin | Bin 0 -> 1190 bytes pallets/nft/src/eth/stubs/ERC20.sol | 69 ++++++ pallets/nft/src/eth/stubs/ERC721.bin | 1 + pallets/nft/src/eth/stubs/ERC721.sol | 163 ++++++++++++++ pallets/nft/src/eth/stubs/Invalid.bin | 1 + pallets/nft/src/lib.rs | 1 + 8 files changed, 537 insertions(+) create mode 100644 pallets/nft/src/eth/stubs/ERC1633.bin create mode 100644 pallets/nft/src/eth/stubs/ERC20.bin create mode 100644 pallets/nft/src/eth/stubs/ERC20.sol create mode 100644 pallets/nft/src/eth/stubs/ERC721.bin create mode 100644 pallets/nft/src/eth/stubs/ERC721.sol create mode 100644 pallets/nft/src/eth/stubs/Invalid.bin diff --git a/pallets/nft/src/eth/mod.rs b/pallets/nft/src/eth/mod.rs index 3c3acc3814..a2a170304b 100644 --- a/pallets/nft/src/eth/mod.rs +++ b/pallets/nft/src/eth/mod.rs @@ -4,3 +4,304 @@ pub mod abi; use abi::{AbiReader, AbiWriter}; pub mod log; +use sp_std::borrow::ToOwned; +use sp_std::vec::Vec; +use sp_std::convert::TryInto; + +use codec::{Decode, Encode}; +use pallet_evm::{AddressMapping, PrecompileLog, PrecompileOutput, ExitReason, ExitRevert, ExitSucceed}; +use sp_core::{H160, H256}; +use frame_support::storage::{StorageMap, StorageDoubleMap}; + +use crate::{Allowances, NftItemList, Module, Balance, Config, CollectionById, CollectionHandle, CollectionId, CollectionMode}; + +pub struct NftErcSupport(core::marker::PhantomData); + +// 0x17c4e6453Cc49AAAaEACA894e6D9683e00000001 - collection +// TODO: Unhardcode prefix +const ETH_ACCOUNT_PREFIX: [u8; 16] = [0x17, 0xc4, 0xe6, 0x45, 0x3c, 0xc4, 0x9a, 0xaa, 0xae, 0xac, 0xa8, 0x94, 0xe6, 0xd9, 0x68, 0x3e]; + +fn map_eth_to_id(eth: &H160) -> Option { + if ð[0..16] != ETH_ACCOUNT_PREFIX { + return None; + } + let mut id_bytes = [0; 4]; + id_bytes.copy_from_slice(ð[16..20]); + Some(u32::from_be_bytes(id_bytes)) +} +pub fn collection_id_to_address(id: u32) -> H160 { + let mut out = [0; 20]; + out[0..16].copy_from_slice(Ð_ACCOUNT_PREFIX); + out[16..20].copy_from_slice(&u32::to_be_bytes(id)); + H160(out) +} + +fn result_to_output(result: Result>, logs: Vec) -> PrecompileOutput { + sp_io::storage::start_transaction(); + match result { + Ok(result) => { + sp_io::storage::commit_transaction(); + // TODO: weight + PrecompileOutput(ExitReason::Succeed(ExitSucceed::Returned), result.finish(), 0, logs) + } + Err(Some(s)) => { + sp_io::storage::rollback_transaction(); + // Error(string) + let mut out = AbiWriter::new_call(0x08c379a0); + out.string(&s); + PrecompileOutput(ExitReason::Revert(ExitRevert::Reverted), out.finish(), 0, Vec::new()) + } + Err(None) => { + sp_io::storage::rollback_transaction(); + PrecompileOutput(ExitReason::Revert(ExitRevert::Reverted), Vec::new(), 0, Vec::new()) + } + } +} + +fn call_internal(sender: H160, collection: &CollectionHandle, method_id: u32, mut input: AbiReader) -> Result> { + let erc20 = matches!(collection.mode, CollectionMode::Fungible(_)); + let erc721 = matches!(collection.mode, CollectionMode::ReFungible); + + Ok(match method_id { + // function name() external view returns (string memory) + 0x06fdde03 => { + let name = collection.name.iter() + .map(|&e| e.try_into().ok() as Option) + .collect::>>() + .ok_or(Some("non-ascii name"))?; + + crate::abi_encode!(memory(&name)) + } + // function symbol() external view returns (string memory) + 0x95d89b41 => { + let name = collection.token_prefix.iter() + .map(|&e| e.is_ascii_uppercase().then(|| e)) + .collect::>>() + .ok_or(Some("non-uppercase prefix"))?; + + crate::abi_encode!(memory(&name)) + } + // function decimals() external view returns (uint8 decimals) + 0x313ce567 if erc20 => { + if let CollectionMode::Fungible(decimals) = &collection.mode { + crate::abi_encode!(uint8(*decimals)) + } else { + unreachable!() + } + } + // function totalSupply() external view returns (uint256) + 0x18160ddd if erc20 => { + // TODO: can't be implemented, as we don't track total amount of fungibles + crate::abi_encode!(uint256(0)) + } + // function balanceOf(address account) external view returns (uint256) + 0x70a08231 if erc20 || erc721 => { + crate::abi_decode!(input, account: address); + let account = T::EvmAddressMapping::into_account_id(account); + let balance = >::get(collection.id, account); + crate::abi_encode!(uint256(balance)) + } + // function ownerOf(uint256 tokenId) external view returns (address) + 0x6352211e if erc721 => { + crate::abi_decode!(input, token_id: uint256); + let token_id: u32 = token_id.try_into().map_err(|_| "bad token id")?; + + let token = >::get(collection.id, token_id).ok_or("unknown token")?; + + crate::abi_encode!(address(token.owner.as_eth().clone())) + } + // function transfer(address recipient, uint256 amount) external returns (bool) { + 0xa9059cbb if erc20 => { + crate::abi_decode!(input, recipient: address, amount: uint256); + let sender = T::CrossAccountId::from_eth(sender); + let recipient = T::CrossAccountId::from_eth(recipient); + + >::transfer_internal( + sender, + recipient, + &collection, + 1, + amount, + ).map_err(|_| "transfer error")?; + + crate::abi_encode!(bool(true)) + } + // function allowance(address owner, address spender) external view returns (uint256) + 0xdd62ed3e if erc20 => { + crate::abi_decode!(input, owner: address, spender: address); + let owner = T::EvmAddressMapping::into_account_id(owner); + let spender = T::EvmAddressMapping::into_account_id(spender); + let allowance = >::get(collection.id, (1, &owner, &spender)); + crate::abi_encode!(uint256(allowance)) + } + // function approve(address spender, uint256 amount) external returns (bool) + // FIXME: All current implementations resets amount to specified value, ours - adds it + // FIXME: Our implementation doesn't handle resets (approve with zero amount) + 0x095ea7b3 if erc20 => { + crate::abi_decode!(input, spender: address, amount: uint256); + let sender = T::CrossAccountId::from_eth(sender); + let spender = T::CrossAccountId::from_eth(spender); + + >::approve_internal( + sender, + spender, + &collection, + 1, + amount, + ).map_err(|_| "approve error")?; + + crate::abi_encode!(bool(true)) + } + // function approve(address approved, uint256 tokenId) external payable + 0x095ea7b3 if erc721 => { + crate::abi_decode!(input, approved: address, token_id: uint256); + let sender = T::CrossAccountId::from_eth(sender); + let approved = T::CrossAccountId::from_eth(approved); + let token_id = token_id.try_into().map_err(|_| "bad token id")?; + + >::approve_internal( + sender, + approved, + &collection, + token_id, + 1, + ).map_err(|_| "approve error")?; + crate::abi_encode!() + } + // function transferFrom(address sender, address recipient, uint256 amount) external returns (bool) + 0x23b872dd if erc20 => { + crate::abi_decode!(input, from: address, recipient: address, amount: uint256); + let sender = T::CrossAccountId::from_eth(sender); + let from = T::CrossAccountId::from_eth(from); + let recipient = T::CrossAccountId::from_eth(recipient); + + >::transfer_from_internal( + sender, + from, + recipient, + &collection, + 1, + amount, + ).map_err(|_| "transfer_from error")?; + + crate::abi_encode!(bool(true)) + } + // function transferFrom(address from, address to, uint256 tokenId) external payable + 0x23b872dd if erc721 => { + crate::abi_decode!(input, from: address, recipient: address, token_id: uint256); + let sender = T::CrossAccountId::from_eth(sender); + let from = T::CrossAccountId::from_eth(from); + let recipient = T::CrossAccountId::from_eth(recipient); + let token_id = token_id.try_into().map_err(|_| "bad token id")?; + + >::transfer_from_internal( + sender, + from, + recipient, + &collection, + token_id, + 1, + ).map_err(|_| "transfer_from error")?; + + crate::abi_encode!() + } + // function supportsInterface(bytes4 interfaceID) public pure returns (bool) + 0x01ffc9a7 => { + crate::abi_decode!(input, interface_id: uint32); + let supports = match interface_id { + // ERC165 + 0x01ffc9a7 => true, + // ERC20 + 0x36372b07 if erc20 => true, + // ERC721 + 0x80ac58cd if erc721 => true, + _ => false, + }; + crate::abi_encode!(bool(supports)) + } + _ => return Err(None) + }) +} + +impl pallet_evm::OnMethodCall for NftErcSupport { + fn is_reserved(target: &H160) -> bool { + map_eth_to_id(target).is_some() + } + fn is_used(target: &H160) -> bool { + map_eth_to_id(target) + .map(>::contains_key) + .unwrap_or(false) + } + fn get_code(target: &H160) -> Option> { + map_eth_to_id(&target) + .and_then(>::get) + .map(|collection| { + match collection.mode { + CollectionMode::NFT => include_bytes!("stubs/ERC721.bin") as &[u8], + CollectionMode::Fungible(_) => include_bytes!("stubs/ERC20.bin") as &[u8], + CollectionMode::ReFungible => include_bytes!("stubs/ERC1633.bin") as &[u8], + CollectionMode::Invalid => include_bytes!("stubs/Invalid.bin") as &[u8], + }.to_owned() + }) + } + fn call( + source: &H160, + target: &H160, + input: &[u8], + ) -> Option { + let collection = map_eth_to_id(&target) + .and_then(>::get)?; + let (method_id, input) = AbiReader::new_call(input).unwrap(); + let result = call_internal(*source, &collection, method_id, input); + Some(result_to_output(result, collection.logs.retrieve_logs_for_contract(*target))) + } +} + +/// event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); +pub const TRANSFER_NFT_TOPIC: H256 = H256(hex_literal::hex!("ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef")); +/// event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); +pub const APPROVAL_NFT_TOPIC: H256 = H256(hex_literal::hex!("8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925")); +// TODO: event ApprovalForAll(address indexed owner, address indexed operator, bool approved); + +/// event Transfer(address indexed from, address indexed to, uint256 indexed amount); +pub const TRANSFER_FUNGIBLE_TOPIC: H256 = H256(hex_literal::hex!("ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef")); +/// event Approval(address indexed owner, address indexed approved, uint256 indexed amount); +pub const APPROVAL_FUNGIBLE_TOPIC: H256 = H256(hex_literal::hex!("8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925")); + +pub fn address_to_topic(address: &H160) -> H256 { + let mut output = [0; 32]; + output[12..32].copy_from_slice(&address.0); + H256(output) +} + + +// TODO: This function is slow, and output can be memoized +pub fn generate_transaction(collection_id: u32, chain_id: u64) -> ethereum::Transaction { + let contract = collection_id_to_address(collection_id); + + // TODO: Make it work without native runtime by forking ethereum_tx_sign, and + // switching to pure-rust implementation of secp256k1 + #[cfg(feature = "std")] + { + let signed = ethereum_tx_sign::RawTransaction { + nonce: 0.into(), + to: Some(contract.0.into()), + value: 0.into(), + gas_price: 0.into(), + gas: 0.into(), + // zero selector, this transaction always have same sender, so all data should be acquired from logs + data: Vec::from([0, 0, 0, 0]), + }.sign( + // TODO: move to pallet config + // 0xF70631E55faff9f3FD3681545aa6c724226a3853 + // 9dbaef9b3ebc00e53f67c6a77bcfbf2c4f2aebe4d70d94af4f2df01744b7a91a + &hex_literal::hex!("9dbaef9b3ebc00e53f67c6a77bcfbf2c4f2aebe4d70d94af4f2df01744b7a91a").into(), + &chain_id + ); + rlp::decode::(&signed).expect("transaction is just created, it can't be broken") + } + #[cfg(not(feature = "std"))] + { + panic!("transaction generation not yet supported by wasm runtime") + } +} \ No newline at end of file diff --git a/pallets/nft/src/eth/stubs/ERC1633.bin b/pallets/nft/src/eth/stubs/ERC1633.bin new file mode 100644 index 0000000000..30404ce4c5 --- /dev/null +++ b/pallets/nft/src/eth/stubs/ERC1633.bin @@ -0,0 +1 @@ +TODO \ No newline at end of file diff --git a/pallets/nft/src/eth/stubs/ERC20.bin b/pallets/nft/src/eth/stubs/ERC20.bin new file mode 100644 index 0000000000000000000000000000000000000000..f634935c107b9b8461ceb26bcce9981b3d88e649 GIT binary patch literal 1190 zcmZ8gU1(fI6rOW;MSW1xxLFet=vWJaN+D<>MJx-7_$0Gy_FiE`&UAN67q;1$yAM?n zXXfrEmQt9ziB>@+idghPAAAW&@ud}85FhG`;zFgUR1hikbsNu}n+SCu_I`8E_s#jv z&qbz}aA&6M>IxWEYFI^WOwFlc9k&kas$%mgLWD;gMD#a4+ws4KQjY}`Mg*y%`Dv&4yp`}YDG5MWTZbpLjg zT9DT4^Vn8xojgG5h(LKhARCHZ7^d|99bp$rscpu+KzU4^Sc+W=C4wwr5h2YATohSG!!O!k^|7(Ju6C54=>j=TWBf21z zx&b?v&e7RY=U|9 zMZ%l^Uqm_~eG`!py;42;?CkgW+bpFnf`S)Pr-GVypE({&z2L9ink|^JDJhuGTTEhZ z`-MpwRX@^ZOtqY`3SJ83#!v_v5w!&?$-px{-DP~4cm^#7oJZcLbi{XJD2CZkGX+EJ zuX)YSyP9i#&l-~E2J%6!Nd;E=u;8U)cw4gIzQ|az6U^nwHj!_*4OrONb+u3@5=zPG09W4XQtiJzsR z&oTHSqE#=c;G0MV*U9Y8%v#yj)-Ajv@)zuMMt1y^Tr(3SxE7hEzJ;0_fI9^$xE#s^ z&I%#L=6ml_9r-W3^>MSkax8xFz$AaFee$(~=_e0#uK#l-nI8T0)}N)bfBf?Mz2jFe zcRoD+;}6Za+i5(_?kcdyddJ%_Z*-S?tE$oC&2B5^%iSJtoovUw_)&^9Tl`pel|ZM{ hYV_LO<(QMAePX54I?-D0wVGV@_==)vkH_t1>t8^^pBVrE literal 0 HcmV?d00001 diff --git a/pallets/nft/src/eth/stubs/ERC20.sol b/pallets/nft/src/eth/stubs/ERC20.sol new file mode 100644 index 0000000000..687d4cdbbf --- /dev/null +++ b/pallets/nft/src/eth/stubs/ERC20.sol @@ -0,0 +1,69 @@ +// SPDX-License-Identifier: OTHER + +pragma solidity >=0.8.0 <0.9.0; + +contract ERC20 { + uint8 _dummy = 0; + string stub_error = "this contract does not exists, code for collections is implemented at pallet side"; + + // 0x18160ddd + function totalSupply() external view returns (uint256) { + require(false, stub_error); + _dummy; + return 0; + } + + // 0x70a08231 + function balanceOf(address account) external view returns (uint256) { + require(false, stub_error); + account; + _dummy; + return 0; + } + + // 0xa9059cbb + function transfer(address recipient, uint256 amount) external returns (bool) { + require(false, stub_error); + recipient; + amount; + _dummy = 0; + return false; + } + + // 0xdd62ed3e + function allowance(address owner, address spender) external view returns (uint256) { + require(false, stub_error); + owner; + spender; + return _dummy; + } + + // 0x095ea7b3 + function approve(address spender, uint256 amount) external returns (bool) { + require(false, stub_error); + spender; + amount; + _dummy = 0; + return false; + } + + // 0x23b872dd + function transferFrom(address sender, address recipient, uint256 amount) external returns (bool) { + require(false, stub_error); + sender; + recipient; + amount; + _dummy = 0; + return false; + } + + // While ERC165 is not required by spec of ERC20, better implement it + // 0x01ffc9a7 + function supportsInterface(bytes4 interfaceID) public pure returns (bool) { + return + // ERC20 + interfaceID == 0x36372b07 || + // ERC165 + interfaceID == 0x01ffc9a7; + } +} \ No newline at end of file diff --git a/pallets/nft/src/eth/stubs/ERC721.bin b/pallets/nft/src/eth/stubs/ERC721.bin new file mode 100644 index 0000000000..1bc43f365b --- /dev/null +++ b/pallets/nft/src/eth/stubs/ERC721.bin @@ -0,0 +1 @@ +0x608060405260008060006101000a81548160ff021916908360ff16021790555060008060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180608001604052806051815260200162000cd6605191396001908051906020019061008f9291906100a2565b5034801561009c57600080fd5b506101a6565b8280546100ae90610145565b90600052602060002090601f0160209004810192826100d05760008555610117565b82601f106100e957805160ff1916838001178555610117565b82800160010185558215610117579182015b828111156101165782518255916020019190600101906100fb565b5b5090506101249190610128565b5090565b5b80821115610141576000816000905550600101610129565b5090565b6000600282049050600182168061015d57607f821691505b6020821081141561017157610170610177565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b610b2080620001b66000396000f3fe6080604052600436106100915760003560e01c80636352211e116100595780636352211e1461016457806370a08231146101a1578063a22cb465146101de578063b88d4fde14610207578063e985e9c51461022357610091565b806301ffc9a714610096578063081812fc146100d3578063095ea7b31461011057806323b872dd1461012c57806342842e0e14610148575b600080fd5b3480156100a257600080fd5b506100bd60048036038101906100b89190610821565b610260565b6040516100ca919061093b565b60405180910390f35b3480156100df57600080fd5b506100fa60048036038101906100f5919061084a565b6102c2565b6040516101079190610920565b60405180910390f35b61012a600480360381019061012591906107e5565b610333565b005b610146600480360381019061014191906106da565b61037d565b005b610162600480360381019061015d91906106da565b6103c8565b005b34801561017057600080fd5b5061018b6004803603810190610186919061084a565b610413565b6040516101989190610920565b60405180910390f35b3480156101ad57600080fd5b506101c860048036038101906101c39190610675565b610484565b6040516101d59190610978565b60405180910390f35b3480156101ea57600080fd5b50610205600480360381019061020091906107a9565b6104d4565b005b610221600480360381019061021c9190610729565b610539565b005b34801561022f57600080fd5b5061024a6004803603810190610245919061069e565b610586565b604051610257919061093b565b60405180910390f35b60006380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806102bb57506301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600080600190610308576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ff9190610956565b60405180910390fd5b50600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600190610378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036f9190610956565b60405180910390fd5b505050565b60006001906103c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103b99190610956565b60405180910390fd5b50505050565b600060019061040d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104049190610956565b60405180910390fd5b50505050565b600080600190610459576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104509190610956565b60405180910390fd5b50600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000806001906104ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104c19190610956565b60405180910390fd5b5060009050919050565b6000600190610519576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105109190610956565b60405180910390fd5b5060008060006101000a81548160ff021916908360ff1602179055505050565b600060019061057e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105759190610956565b60405180910390fd5b505050505050565b6000806001906105cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c39190610956565b60405180910390fd5b506000905092915050565b6000813590506105e681610a8e565b92915050565b6000813590506105fb81610aa5565b92915050565b60008135905061061081610abc565b92915050565b60008083601f84011261062857600080fd5b8235905067ffffffffffffffff81111561064157600080fd5b60208301915083600182028301111561065957600080fd5b9250929050565b60008135905061066f81610ad3565b92915050565b60006020828403121561068757600080fd5b6000610695848285016105d7565b91505092915050565b600080604083850312156106b157600080fd5b60006106bf858286016105d7565b92505060206106d0858286016105d7565b9150509250929050565b6000806000606084860312156106ef57600080fd5b60006106fd868287016105d7565b935050602061070e868287016105d7565b925050604061071f86828701610660565b9150509250925092565b60008060008060006080868803121561074157600080fd5b600061074f888289016105d7565b9550506020610760888289016105d7565b945050604061077188828901610660565b935050606086013567ffffffffffffffff81111561078e57600080fd5b61079a88828901610616565b92509250509295509295909350565b600080604083850312156107bc57600080fd5b60006107ca858286016105d7565b92505060206107db858286016105ec565b9150509250929050565b600080604083850312156107f857600080fd5b6000610806858286016105d7565b925050602061081785828601610660565b9150509250929050565b60006020828403121561083357600080fd5b600061084184828501610601565b91505092915050565b60006020828403121561085c57600080fd5b600061086a84828501610660565b91505092915050565b61087c816109b9565b82525050565b61088b816109cb565b82525050565b6000815461089e81610a2d565b6108a881866109a8565b945060018216600081146108c357600181146108d557610908565b60ff1983168652602086019350610908565b6108de85610993565b60005b83811015610900578154818901526001820191506020810190506108e1565b808801955050505b50505092915050565b61091a81610a23565b82525050565b60006020820190506109356000830184610873565b92915050565b60006020820190506109506000830184610882565b92915050565b600060208201905081810360008301526109708184610891565b905092915050565b600060208201905061098d6000830184610911565b92915050565b60008190508160005260206000209050919050565b600082825260208201905092915050565b60006109c482610a03565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006002820490506001821680610a4557607f821691505b60208210811415610a5957610a58610a5f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b610a97816109b9565b8114610aa257600080fd5b50565b610aae816109cb565b8114610ab957600080fd5b50565b610ac5816109d7565b8114610ad057600080fd5b50565b610adc81610a23565b8114610ae757600080fd5b5056fea26469706673582212206e53fcc41e6b23f5bd49a262462ecf5ff647f480649658ee8b67c91a8f733ba864736f6c634300080100337468697320636f6e747261637420646f6573206e6f74206578697374732c20636f646520666f7220636f6c6c656374696f6e7320697320696d706c656d656e7465642061742070616c6c65742073696465 \ No newline at end of file diff --git a/pallets/nft/src/eth/stubs/ERC721.sol b/pallets/nft/src/eth/stubs/ERC721.sol new file mode 100644 index 0000000000..4136cf5544 --- /dev/null +++ b/pallets/nft/src/eth/stubs/ERC721.sol @@ -0,0 +1,163 @@ +// SPDX-License-Identifier: OTHER + +pragma solidity >=0.8.0 <0.9.0; + +contract ERC721 { + uint8 _dummy = 0; + address _dummy_addr = 0x0000000000000000000000000000000000000000; + string _dummy_string = ""; + string stub_error = + "this contract does not exists, code for collections is implemented at pallet side"; + + event Transfer( + address indexed from, + address indexed to, + uint256 indexed tokenId + ); + + event Approval( + address indexed owner, + address indexed approved, + uint256 indexed tokenId + ); + + event ApprovalForAll( + address indexed owner, + address indexed operator, + bool approved + ); + + // 0x18160ddd + function totalSupply() external view returns (uint256) { + require(false, stub_error); + return 0; + } + + function name() external view returns (string memory res_name) { + require(false, stub_error); + res_name = _dummy_string; + } + + function symbol() external view returns (string memory res_symbol) { + require(false, stub_error); + res_symbol = _dummy_string; + } + + function tokenURI(uint256 tokenId) external view returns (string memory) { + require(false, stub_error); + tokenId; + return _dummy_string; + } + + function tokenByIndex(uint256 index) external view returns (uint256) { + require(false, stub_error); + index; + return 0; + } + + function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256) { + require(false, stub_error); + owner; + index; + return 0; + } + + // 0x70a08231 + function balanceOf(address owner) external view returns (uint256) { + require(false, stub_error); + owner; + return 0; + } + + // 0x6352211e + function ownerOf(uint256 tokenId) external view returns (address) { + require(false, stub_error); + tokenId; + return _dummy_addr; + } + + // 0xb88d4fde + function safeTransferFrom( + address from, + address to, + uint256 tokenId, + bytes calldata data + ) external payable { + require(false, stub_error); + from; + to; + tokenId; + data; + } + + // 0x42842e0e + function safeTransferFrom( + address from, + address to, + uint256 tokenId + ) external payable { + require(false, stub_error); + from; + to; + tokenId; + } + + // 0x23b872dd + function transferFrom( + address from, + address to, + uint256 tokenId + ) external payable { + require(false, stub_error); + from; + to; + tokenId; + } + + // 0x095ea7b3 + function approve(address approved, uint256 tokenId) external payable { + require(false, stub_error); + approved; + tokenId; + } + + // 0xa22cb465 + function setApprovalForAll(address operator, bool approved) external { + require(false, stub_error); + operator; + approved; + _dummy = 0; + } + + // 0x081812fc + function getApproved(uint256 tokenId) external view returns (address) { + require(false, stub_error); + tokenId; + return _dummy_addr; + } + + // 0xe985e9c5 + function isApprovedForAll(address owner, address operator) + external + view + returns (bool) + { + require(false, stub_error); + owner; + operator; + return false; + } + + // 0x01ffc9a7 + function supportsInterface(bytes4 interfaceID) public pure returns (bool) { + return + // ERC721 + interfaceID == 0x80ac58cd || + // ERC721Metadata + interfaceID == 0x5b5e139f || + // ERC721Enumerable + interfaceID == 0x780e9d63 || + // ERC165 + interfaceID == 0x01ffc9a7; + } +} diff --git a/pallets/nft/src/eth/stubs/Invalid.bin b/pallets/nft/src/eth/stubs/Invalid.bin new file mode 100644 index 0000000000..30404ce4c5 --- /dev/null +++ b/pallets/nft/src/eth/stubs/Invalid.bin @@ -0,0 +1 @@ +TODO \ No newline at end of file diff --git a/pallets/nft/src/lib.rs b/pallets/nft/src/lib.rs index 0b9300eca9..d1de02f8c1 100644 --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -55,6 +55,7 @@ mod tests; mod default_weights; mod eth; +pub use eth::NftErcSupport; pub use eth::account::*; pub const MAX_DECIMAL_POINTS: DecimalPoints = 30; From e5bc882ab8baeae9f978a2981c3e99f9ed10f4c2 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 30 Apr 2021 18:21:44 +0300 Subject: [PATCH 23/66] build: upgrade dependencies Signed-off-by: Yaroslav Bolyukin (cherry picked from commit fa7165616a5499e708f260a521e00381db5175f7) --- Cargo.lock | 503 +++++++++++++++++++++++++++-------------- node/Cargo.toml | 15 +- pallets/nft/Cargo.toml | 16 ++ runtime/Cargo.toml | 8 +- 4 files changed, 364 insertions(+), 178 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b8d95c0591..dfb2928e98 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -445,6 +445,16 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" +[[package]] +name = "bitvec" +version = "0.17.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41262f11d771fd4a61aa3ce019fca363b4b6c282fca9da2a31186d3965a47a5c" +dependencies = [ + "either", + "radium 0.3.0", +] + [[package]] name = "bitvec" version = "0.20.2" @@ -452,7 +462,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f682656975d3a682daff957be4ddeb65d6ad656737cd821f2d00685ae466af1" dependencies = [ "funty", - "radium", + "radium 0.6.2", "tap", "wyz", ] @@ -605,6 +615,12 @@ version = "3.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "099e596ef14349721d9016f6b80dd3419ea1bf289ab9b44df8e4dfd3a005d5d9" +[[package]] +name = "byte-slice-cast" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0a5e3906bcbf133e33c1d4d95afc664ad37fbdb9f6568d8043e7ea8c27d93d3" + [[package]] name = "byte-slice-cast" version = "1.0.0" @@ -1358,6 +1374,19 @@ dependencies = [ "libc", ] +[[package]] +name = "ethbloom" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71a6567e6fd35589fea0c63b94b4cf2e55573e413901bdbe60ab15cf0e25e5df" +dependencies = [ + "crunchy", + "fixed-hash 0.6.1", + "impl-rlp 0.2.1", + "impl-serde", + "tiny-keccak", +] + [[package]] name = "ethbloom" version = "0.11.0" @@ -1365,9 +1394,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "779864b9c7f7ead1f092972c3257496c6a84b46dba2ce131dd8a282cb2cc5972" dependencies = [ "crunchy", - "fixed-hash", - "impl-codec", - "impl-rlp", + "fixed-hash 0.7.0", + "impl-codec 0.5.0", + "impl-rlp 0.3.0", "impl-serde", "tiny-keccak", ] @@ -1378,31 +1407,61 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "567ce064a8232c16e2b2c2173a936b91fbe35c2f2c5278871f5a1a31688b42e9" dependencies = [ - "ethereum-types", + "ethereum-types 0.11.0", "funty", "hash-db", "hash256-std-hasher", - "parity-scale-codec", - "rlp", + "parity-scale-codec 2.0.1", + "rlp 0.5.0", "rlp-derive", "serde", "sha3 0.9.1", "triehash", ] +[[package]] +name = "ethereum-tx-sign" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdcbb5f48282fa71ba2864818a442d0ee0ca04ebc9ef9eb1837c48298c3b8cbf" +dependencies = [ + "ethereum-types 0.9.2", + "num-traits", + "rlp 0.4.6", + "secp256k1", + "serde", + "serde_derive", + "serde_json", + "tiny-keccak", +] + +[[package]] +name = "ethereum-types" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "473aecff686bd8e7b9db0165cbbb53562376b39bf35b427f0c60446a9e1634b0" +dependencies = [ + "ethbloom 0.9.2", + "fixed-hash 0.6.1", + "impl-rlp 0.2.1", + "impl-serde", + "primitive-types 0.7.3", + "uint 0.8.5", +] + [[package]] name = "ethereum-types" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f64b5df66a228d85e4b17e5d6c6aa43b0310898ffe8a85988c4c032357aaabfd" dependencies = [ - "ethbloom", - "fixed-hash", - "impl-codec", - "impl-rlp", + "ethbloom 0.11.0", + "fixed-hash 0.7.0", + "impl-codec 0.5.0", + "impl-rlp 0.3.0", "impl-serde", - "primitive-types", - "uint", + "primitive-types 0.9.0", + "uint 0.9.0", ] [[package]] @@ -1413,53 +1472,49 @@ checksum = "f7531096570974c3a9dcf9e4b8e1cede1ec26cf5046219fb3b9d897503b9be59" [[package]] name = "evm" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b4bd1fb06a4962a243c8be285d8a9b2493ffa79acb32633ad07a0bc523b1acd" +version = "0.26.0" +source = "git+https://github.com/usetech-llc/evm.git?branch=precompile-output#e667bc507590bc67024e5d12c65241d4aef2a1b9" dependencies = [ "ethereum", "evm-core", "evm-gasometer", "evm-runtime", "log", - "parity-scale-codec", - "primitive-types", - "rlp", + "parity-scale-codec 2.0.1", + "primitive-types 0.9.0", + "rlp 0.5.0", "serde", "sha3 0.8.2", ] [[package]] name = "evm-core" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b4eea3882c798813a6f92e8855ec1fc3f5ababd8b274cb81d4bedee701b478e" +version = "0.26.0" +source = "git+https://github.com/usetech-llc/evm.git?branch=precompile-output#e667bc507590bc67024e5d12c65241d4aef2a1b9" dependencies = [ "funty", - "parity-scale-codec", - "primitive-types", + "parity-scale-codec 2.0.1", + "primitive-types 0.9.0", "serde", ] [[package]] name = "evm-gasometer" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a8f04dcc8b0296652eabfa443a08ebed6071a1178e0f42a7f7b63a612bddf0b" +version = "0.26.0" +source = "git+https://github.com/usetech-llc/evm.git?branch=precompile-output#e667bc507590bc67024e5d12c65241d4aef2a1b9" dependencies = [ "evm-core", "evm-runtime", - "primitive-types", + "primitive-types 0.9.0", ] [[package]] name = "evm-runtime" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54c302f29ca8bba82a382aa52d427869964179e4f24eae57bde70958ce9b7607" +version = "0.26.0" +source = "git+https://github.com/usetech-llc/evm.git?branch=precompile-output#e667bc507590bc67024e5d12c65241d4aef2a1b9" dependencies = [ "evm-core", - "primitive-types", + "primitive-types 0.9.0", "sha3 0.8.2", ] @@ -1517,8 +1572,8 @@ dependencies = [ [[package]] name = "fc-consensus" -version = "0.1.0" -source = "git+https://github.com/PureStake/frontier.git?branch=notlesh-substrate-8b3e5bc#1f8de106db767ad957193ca4bc5b398a4191c778" +version = "1.0.0" +source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#bd8cd6db44be646a059698371497de64128940af" dependencies = [ "derive_more", "fc-db", @@ -1526,7 +1581,7 @@ dependencies = [ "fp-rpc", "futures 0.3.12", "log", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "sc-client-api", "sp-api", "sp-block-builder", @@ -1541,12 +1596,12 @@ dependencies = [ [[package]] name = "fc-db" -version = "0.1.0" -source = "git+https://github.com/PureStake/frontier.git?branch=notlesh-substrate-8b3e5bc#1f8de106db767ad957193ca4bc5b398a4191c778" +version = "1.0.0" +source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#bd8cd6db44be646a059698371497de64128940af" dependencies = [ "kvdb", "kvdb-rocksdb", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "parking_lot 0.11.1", "sp-core", "sp-database", @@ -1555,8 +1610,8 @@ dependencies = [ [[package]] name = "fc-mapping-sync" -version = "0.1.0" -source = "git+https://github.com/PureStake/frontier.git?branch=notlesh-substrate-8b3e5bc#1f8de106db767ad957193ca4bc5b398a4191c778" +version = "1.1.0-dev" +source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#bd8cd6db44be646a059698371497de64128940af" dependencies = [ "fc-consensus", "fc-db", @@ -1573,11 +1628,12 @@ dependencies = [ [[package]] name = "fc-rpc" -version = "0.1.0" -source = "git+https://github.com/PureStake/frontier.git?branch=notlesh-substrate-8b3e5bc#1f8de106db767ad957193ca4bc5b398a4191c778" +version = "2.0.0-dev" +source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#bd8cd6db44be646a059698371497de64128940af" dependencies = [ "ethereum", - "ethereum-types", + "ethereum-types 0.11.0", + "evm", "fc-consensus", "fc-db", "fc-rpc-core", @@ -1594,9 +1650,9 @@ dependencies = [ "log", "pallet-ethereum", "pallet-evm", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "rand 0.7.3", - "rlp", + "rlp 0.5.0", "rustc-hex", "sc-client-api", "sc-network", @@ -1613,10 +1669,10 @@ dependencies = [ [[package]] name = "fc-rpc-core" -version = "0.1.0" -source = "git+https://github.com/PureStake/frontier.git?branch=notlesh-substrate-8b3e5bc#1f8de106db767ad957193ca4bc5b398a4191c778" +version = "1.1.0-dev" +source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#bd8cd6db44be646a059698371497de64128940af" dependencies = [ - "ethereum-types", + "ethereum-types 0.11.0", "jsonrpc-core 15.1.0", "jsonrpc-core-client 14.2.0", "jsonrpc-derive 14.2.2", @@ -1656,10 +1712,22 @@ dependencies = [ "futures-timer 3.0.2", "log", "num-traits", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "parking_lot 0.11.1", ] +[[package]] +name = "fixed-hash" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11498d382790b7a8f2fd211780bec78619bba81cdad3a283997c0c41f836759c" +dependencies = [ + "byteorder", + "rand 0.7.3", + "rustc-hex", + "static_assertions", +] + [[package]] name = "fixed-hash" version = "0.7.0" @@ -1718,7 +1786,7 @@ name = "fork-tree" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec", + "parity-scale-codec 2.0.1", ] [[package]] @@ -1733,12 +1801,12 @@ dependencies = [ [[package]] name = "fp-consensus" -version = "0.1.0" -source = "git+https://github.com/PureStake/frontier.git?branch=notlesh-substrate-8b3e5bc#1f8de106db767ad957193ca4bc5b398a4191c778" +version = "1.0.0" +source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#bd8cd6db44be646a059698371497de64128940af" dependencies = [ "ethereum", - "parity-scale-codec", - "rlp", + "parity-scale-codec 2.0.1", + "rlp 0.5.0", "sha3 0.8.2", "sp-core", "sp-runtime", @@ -1747,12 +1815,12 @@ dependencies = [ [[package]] name = "fp-evm" -version = "0.8.0" -source = "git+https://github.com/PureStake/frontier.git?branch=notlesh-substrate-8b3e5bc#1f8de106db767ad957193ca4bc5b398a4191c778" +version = "1.0.0" +source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#bd8cd6db44be646a059698371497de64128940af" dependencies = [ "evm", "impl-trait-for-tuples 0.1.3", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "serde", "sp-core", "sp-std", @@ -1760,13 +1828,13 @@ dependencies = [ [[package]] name = "fp-rpc" -version = "0.1.0" -source = "git+https://github.com/PureStake/frontier.git?branch=notlesh-substrate-8b3e5bc#1f8de106db767ad957193ca4bc5b398a4191c778" +version = "1.0.0" +source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#bd8cd6db44be646a059698371497de64128940af" dependencies = [ "ethereum", - "ethereum-types", + "ethereum-types 0.11.0", "fp-evm", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "sp-api", "sp-core", "sp-io", @@ -1776,13 +1844,13 @@ dependencies = [ [[package]] name = "fp-storage" -version = "0.1.0" -source = "git+https://github.com/PureStake/frontier.git?branch=notlesh-substrate-8b3e5bc#1f8de106db767ad957193ca4bc5b398a4191c778" +version = "1.0.0" +source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#bd8cd6db44be646a059698371497de64128940af" dependencies = [ "ethereum", - "ethereum-types", + "ethereum-types 0.11.0", "fp-evm", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "sp-api", "sp-core", "sp-runtime", @@ -1798,7 +1866,7 @@ dependencies = [ "frame-system", "linregress", "log", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "paste 1.0.4", "sp-api", "sp-io", @@ -1817,7 +1885,7 @@ dependencies = [ "chrono", "frame-benchmarking", "handlebars", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "sc-cli", "sc-client-db", "sc-executor", @@ -1838,7 +1906,7 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "frame-support", "frame-system", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "serde", "sp-core", "sp-io", @@ -1852,7 +1920,7 @@ name = "frame-metadata" version = "13.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec", + "parity-scale-codec 2.0.1", "serde", "sp-core", "sp-std", @@ -1869,7 +1937,7 @@ dependencies = [ "impl-trait-for-tuples 0.2.1", "log", "once_cell", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "paste 1.0.4", "serde", "smallvec 1.6.1", @@ -1926,7 +1994,7 @@ dependencies = [ "frame-support", "impl-trait-for-tuples 0.2.1", "log", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "serde", "sp-core", "sp-io", @@ -1943,7 +2011,7 @@ dependencies = [ "frame-benchmarking", "frame-support", "frame-system", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "sp-core", "sp-runtime", "sp-std", @@ -1954,7 +2022,7 @@ name = "frame-system-rpc-runtime-api" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec", + "parity-scale-codec 2.0.1", "sp-api", ] @@ -2636,13 +2704,31 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "impl-codec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1be51a921b067b0eaca2fad532d9400041561aa922221cc65f95a85641c6bf53" +dependencies = [ + "parity-scale-codec 1.3.7", +] + [[package]] name = "impl-codec" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df170efa359aebdd5cb7fe78edcc67107748e4737bdca8a8fb40d15ea7a877ed" dependencies = [ - "parity-scale-codec", + "parity-scale-codec 2.0.1", +] + +[[package]] +name = "impl-rlp" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f7a72f11830b52333f36e3b09a288333888bf54380fd0ac0790a3c31ab0f3c5" +dependencies = [ + "rlp 0.4.6", ] [[package]] @@ -2651,7 +2737,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f28220f89297a075ddc7245cd538076ee98b01f2a9c23a53a4f1105d5a322808" dependencies = [ - "rlp", + "rlp 0.5.0", ] [[package]] @@ -3241,7 +3327,7 @@ dependencies = [ "rand 0.7.3", "sha2 0.9.3", "smallvec 1.6.1", - "uint", + "uint 0.9.0", "unsigned-varint 0.7.0", "void", "wasm-timer", @@ -3935,6 +4021,7 @@ dependencies = [ "nft-runtime", "pallet-contracts-rpc", "pallet-ethereum", + "pallet-nft", "pallet-transaction-payment-rpc", "parking_lot 0.10.2", "sc-basic-authorship", @@ -3997,7 +4084,7 @@ dependencies = [ "pallet-transaction-payment-rpc-runtime-api", "pallet-treasury", "pallet-vesting", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "serde", "smallvec 1.6.1", "sp-api", @@ -4161,7 +4248,7 @@ dependencies = [ "frame-system", "pallet-session", "pallet-timestamp", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "serde", "sp-application-crypto", "sp-consensus-aura", @@ -4177,7 +4264,7 @@ dependencies = [ "frame-support", "frame-system", "impl-trait-for-tuples 0.2.1", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "sp-authorship", "sp-inherents", "sp-runtime", @@ -4193,7 +4280,7 @@ dependencies = [ "frame-support", "frame-system", "log", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "serde", "sp-runtime", "sp-std", @@ -4209,7 +4296,7 @@ dependencies = [ "log", "pallet-contracts-primitives", "pallet-contracts-proc-macro", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "parity-wasm 0.41.0", "pwasm-utils 0.16.0", "serde", @@ -4227,7 +4314,7 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "bitflags", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "sp-runtime", "sp-std", ] @@ -4252,7 +4339,7 @@ dependencies = [ "jsonrpc-derive 15.1.0", "pallet-contracts-primitives", "pallet-contracts-rpc-runtime-api", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "serde", "sp-api", "sp-blockchain", @@ -4267,7 +4354,7 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "pallet-contracts-primitives", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "sp-api", "sp-runtime", "sp-std", @@ -4275,11 +4362,11 @@ dependencies = [ [[package]] name = "pallet-ethereum" -version = "0.1.0" -source = "git+https://github.com/PureStake/frontier.git?branch=notlesh-substrate-8b3e5bc#1f8de106db767ad957193ca4bc5b398a4191c778" +version = "1.0.1-dev" +source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#bd8cd6db44be646a059698371497de64128940af" dependencies = [ "ethereum", - "ethereum-types", + "ethereum-types 0.11.0", "evm", "fp-consensus", "fp-evm", @@ -4291,8 +4378,8 @@ dependencies = [ "pallet-balances", "pallet-evm", "pallet-timestamp", - "parity-scale-codec", - "rlp", + "parity-scale-codec 2.0.1", + "rlp 0.5.0", "rustc-hex", "serde", "sha3 0.8.2", @@ -4304,7 +4391,7 @@ dependencies = [ [[package]] name = "pallet-evm" version = "3.0.0" -source = "git+https://github.com/PureStake/frontier.git?branch=notlesh-substrate-8b3e5bc#1f8de106db767ad957193ca4bc5b398a4191c778" +source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#bd8cd6db44be646a059698371497de64128940af" dependencies = [ "evm", "evm-gasometer", @@ -4312,11 +4399,13 @@ dependencies = [ "fp-evm", "frame-support", "frame-system", + "impl-trait-for-tuples 0.2.1", + "log", "pallet-balances", "pallet-timestamp", - "parity-scale-codec", - "primitive-types", - "rlp", + "parity-scale-codec 2.0.1", + "primitive-types 0.9.0", + "rlp 0.5.0", "serde", "sha3 0.8.2", "sp-core", @@ -4336,7 +4425,7 @@ dependencies = [ "log", "pallet-authorship", "pallet-session", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "serde", "sp-application-crypto", "sp-core", @@ -4351,16 +4440,24 @@ dependencies = [ name = "pallet-nft" version = "3.0.0" dependencies = [ + "ethereum", + "ethereum-tx-sign", + "fp-evm", "frame-benchmarking", "frame-support", "frame-system", + "hex-literal", "pallet-balances", "pallet-contracts", + "pallet-ethereum", + "pallet-evm", "pallet-randomness-collective-flip", "pallet-timestamp", "pallet-transaction-payment", - "parity-scale-codec", + "parity-scale-codec 2.0.1", + "rlp 0.5.0", "serde", + "sp-api", "sp-core", "sp-io", "sp-runtime", @@ -4374,7 +4471,7 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "frame-support", "frame-system", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "safe-mix", "sp-runtime", "sp-std", @@ -4389,7 +4486,7 @@ dependencies = [ "frame-system", "impl-trait-for-tuples 0.2.1", "pallet-timestamp", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "serde", "sp-core", "sp-io", @@ -4407,7 +4504,7 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "frame-support", "frame-system", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "serde", "sp-io", "sp-runtime", @@ -4424,7 +4521,7 @@ dependencies = [ "frame-system", "impl-trait-for-tuples 0.2.1", "log", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "serde", "sp-inherents", "sp-io", @@ -4440,7 +4537,7 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "frame-support", "frame-system", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "serde", "smallvec 1.6.1", "sp-core", @@ -4458,7 +4555,7 @@ dependencies = [ "jsonrpc-core-client 15.1.0", "jsonrpc-derive 15.1.0", "pallet-transaction-payment-rpc-runtime-api", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "sp-api", "sp-blockchain", "sp-core", @@ -4472,7 +4569,7 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "pallet-transaction-payment", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "sp-api", "sp-runtime", ] @@ -4486,7 +4583,7 @@ dependencies = [ "frame-system", "impl-trait-for-tuples 0.2.1", "pallet-balances", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "serde", "sp-runtime", "sp-std", @@ -4500,7 +4597,7 @@ dependencies = [ "enumflags2", "frame-support", "frame-system", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "serde", "sp-runtime", "sp-std", @@ -4541,6 +4638,18 @@ dependencies = [ "url 2.2.0", ] +[[package]] +name = "parity-scale-codec" +version = "1.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4b26b16c7687c3075982af47719e481815df30bc544f7a6690763a25ca16e9d" +dependencies = [ + "arrayvec 0.5.2", + "bitvec 0.17.4", + "byte-slice-cast 0.3.5", + "serde", +] + [[package]] name = "parity-scale-codec" version = "2.0.1" @@ -4548,8 +4657,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cd3dab59b5cf4bc81069ade0fc470341a1ef3ad5fa73e5a8943bed2ec12b2e8" dependencies = [ "arrayvec 0.5.2", - "bitvec", - "byte-slice-cast", + "bitvec 0.20.2", + "byte-slice-cast 1.0.0", "parity-scale-codec-derive", "serde", ] @@ -4602,7 +4711,7 @@ dependencies = [ "impl-trait-for-tuples 0.2.1", "parity-util-mem-derive", "parking_lot 0.11.1", - "primitive-types", + "primitive-types 0.9.0", "smallvec 1.6.1", "winapi 0.3.9", ] @@ -4963,17 +5072,30 @@ version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" +[[package]] +name = "primitive-types" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd39dcacf71411ba488570da7bbc89b717225e46478b30ba99b92db6b149809" +dependencies = [ + "fixed-hash 0.6.1", + "impl-codec 0.4.2", + "impl-rlp 0.2.1", + "impl-serde", + "uint 0.8.5", +] + [[package]] name = "primitive-types" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2415937401cb030a2a0a4d922483f945fa068f52a7dbb22ce0fe5f2b6f6adace" dependencies = [ - "fixed-hash", - "impl-codec", - "impl-rlp", + "fixed-hash 0.7.0", + "impl-codec 0.5.0", + "impl-rlp 0.3.0", "impl-serde", - "uint", + "uint 0.9.0", ] [[package]] @@ -5168,6 +5290,12 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "radium" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "def50a86306165861203e7f84ecffbbdfdea79f0e51039b33de1e952358c47ac" + [[package]] name = "radium" version = "0.6.2" @@ -5500,6 +5628,15 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "rlp" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1190dcc8c3a512f1eef5d09bb8c84c7f39e1054e174d1795482e18f5272f2e73" +dependencies = [ + "rustc-hex", +] + [[package]] name = "rlp" version = "0.5.0" @@ -5676,7 +5813,7 @@ dependencies = [ "futures 0.3.12", "futures-timer 3.0.2", "log", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "sc-block-builder", "sc-client-api", "sc-proposer-metrics", @@ -5696,7 +5833,7 @@ name = "sc-block-builder" version = "0.9.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec", + "parity-scale-codec 2.0.1", "sc-client-api", "sp-api", "sp-block-builder", @@ -5713,7 +5850,7 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "impl-trait-for-tuples 0.2.1", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "sc-chain-spec-derive", "sc-consensus-babe", "sc-consensus-epochs", @@ -5751,7 +5888,7 @@ dependencies = [ "libp2p", "log", "names", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "rand 0.7.3", "regex", "rpassword", @@ -5789,7 +5926,7 @@ dependencies = [ "kvdb", "lazy_static", "log", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "parking_lot 0.11.1", "sc-executor", "sp-api", @@ -5824,7 +5961,7 @@ dependencies = [ "linked-hash-map", "log", "parity-db", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "parity-util-mem", "parking_lot 0.11.1", "sc-client-api", @@ -5861,7 +5998,7 @@ dependencies = [ "futures 0.3.12", "futures-timer 3.0.2", "log", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "parking_lot 0.11.1", "sc-block-builder", "sc-client-api", @@ -5898,7 +6035,7 @@ dependencies = [ "num-bigint", "num-rational", "num-traits", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "parking_lot 0.11.1", "pdqselect", "rand 0.7.3", @@ -5936,7 +6073,7 @@ version = "0.9.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "fork-tree", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "parking_lot 0.11.1", "sc-client-api", "sp-blockchain", @@ -5951,7 +6088,7 @@ dependencies = [ "futures 0.3.12", "futures-timer 3.0.2", "log", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "parking_lot 0.11.1", "sc-client-api", "sc-telemetry", @@ -5992,7 +6129,7 @@ dependencies = [ "lazy_static", "libsecp256k1", "log", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "parity-wasm 0.41.0", "parking_lot 0.11.1", "sc-executor-common", @@ -6018,7 +6155,7 @@ version = "0.9.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "derive_more", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "parity-wasm 0.41.0", "sp-allocator", "sp-core", @@ -6034,7 +6171,7 @@ version = "0.9.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "log", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "sc-executor-common", "sp-allocator", "sp-core", @@ -6049,7 +6186,7 @@ version = "0.9.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "log", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "parity-wasm 0.41.0", "pwasm-utils 0.14.0", "sc-executor-common", @@ -6074,7 +6211,7 @@ dependencies = [ "futures-timer 3.0.2", "linked-hash-map", "log", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "parking_lot 0.11.1", "pin-project 1.0.5", "rand 0.7.3", @@ -6145,7 +6282,7 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "hash-db", "lazy_static", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "parking_lot 0.11.1", "sc-client-api", "sc-executor", @@ -6184,7 +6321,7 @@ dependencies = [ "log", "lru", "nohash-hasher", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "parking_lot 0.11.1", "pin-project 1.0.5", "prost", @@ -6240,7 +6377,7 @@ dependencies = [ "hyper-rustls", "log", "num_cpus", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "parking_lot 0.11.1", "rand 0.7.3", "sc-client-api", @@ -6286,7 +6423,7 @@ dependencies = [ "jsonrpc-core 15.1.0", "jsonrpc-pubsub 15.1.0", "log", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "parking_lot 0.11.1", "sc-block-builder", "sc-client-api", @@ -6322,7 +6459,7 @@ dependencies = [ "jsonrpc-derive 15.1.0", "jsonrpc-pubsub 15.1.0", "log", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "parking_lot 0.11.1", "serde", "serde_json", @@ -6367,7 +6504,7 @@ dependencies = [ "jsonrpc-pubsub 15.1.0", "lazy_static", "log", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "parity-util-mem", "parking_lot 0.11.1", "pin-project 1.0.5", @@ -6421,7 +6558,7 @@ version = "0.9.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "log", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "parity-util-mem", "parity-util-mem-derive", "parking_lot 0.11.1", @@ -6519,7 +6656,7 @@ dependencies = [ "futures-diagnose", "intervalier", "log", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "parity-util-mem", "parking_lot 0.11.1", "sc-client-api", @@ -6607,6 +6744,24 @@ dependencies = [ "untrusted", ] +[[package]] +name = "secp256k1" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6179428c22c73ac0fbb7b5579a56353ce78ba29759b3b8575183336ea74cdfb" +dependencies = [ + "secp256k1-sys", +] + +[[package]] +name = "secp256k1-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11553d210db090930f4432bea123b31f70bbf693ace14504ea2a35e796c28dd2" +dependencies = [ + "cc", +] + [[package]] name = "secrecy" version = "0.7.0" @@ -6925,7 +7080,7 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "hash-db", "log", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "sp-api-proc-macro", "sp-core", "sp-runtime", @@ -6952,7 +7107,7 @@ name = "sp-application-crypto" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec", + "parity-scale-codec 2.0.1", "serde", "sp-core", "sp-io", @@ -6966,7 +7121,7 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "integer-sqrt", "num-traits", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "serde", "sp-debug-derive", "sp-std", @@ -6977,7 +7132,7 @@ name = "sp-authorship" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec", + "parity-scale-codec 2.0.1", "sp-inherents", "sp-runtime", "sp-std", @@ -6988,7 +7143,7 @@ name = "sp-block-builder" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec", + "parity-scale-codec 2.0.1", "sp-api", "sp-inherents", "sp-runtime", @@ -7003,7 +7158,7 @@ dependencies = [ "futures 0.3.12", "log", "lru", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "parking_lot 0.11.1", "sp-api", "sp-consensus", @@ -7031,7 +7186,7 @@ dependencies = [ "futures-timer 3.0.2", "libp2p", "log", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "parking_lot 0.11.1", "serde", "sp-api", @@ -7053,7 +7208,7 @@ name = "sp-consensus-aura" version = "0.9.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec", + "parity-scale-codec 2.0.1", "sp-api", "sp-application-crypto", "sp-consensus-slots", @@ -7069,7 +7224,7 @@ version = "0.9.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "merlin", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "serde", "sp-api", "sp-application-crypto", @@ -7089,7 +7244,7 @@ name = "sp-consensus-slots" version = "0.9.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec", + "parity-scale-codec 2.0.1", "sp-arithmetic", "sp-runtime", ] @@ -7099,7 +7254,7 @@ name = "sp-consensus-vrf" version = "0.9.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec", + "parity-scale-codec 2.0.1", "schnorrkel", "sp-core", "sp-runtime", @@ -7126,10 +7281,10 @@ dependencies = [ "log", "merlin", "num-traits", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "parity-util-mem", "parking_lot 0.11.1", - "primitive-types", + "primitive-types 0.9.0", "rand 0.7.3", "regex", "schnorrkel", @@ -7175,7 +7330,7 @@ version = "0.9.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "environmental", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "sp-std", "sp-storage", ] @@ -7187,7 +7342,7 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "finality-grandpa", "log", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "serde", "sp-api", "sp-application-crypto", @@ -7202,7 +7357,7 @@ name = "sp-inherents" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec", + "parity-scale-codec 2.0.1", "parking_lot 0.11.1", "sp-core", "sp-std", @@ -7218,7 +7373,7 @@ dependencies = [ "hash-db", "libsecp256k1", "log", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "parking_lot 0.11.1", "sp-core", "sp-externalities", @@ -7253,7 +7408,7 @@ dependencies = [ "derive_more", "futures 0.3.12", "merlin", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "parking_lot 0.11.1", "schnorrkel", "serde", @@ -7297,7 +7452,7 @@ dependencies = [ "hash256-std-hasher", "impl-trait-for-tuples 0.2.1", "log", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "parity-util-mem", "paste 1.0.4", "rand 0.7.3", @@ -7315,8 +7470,8 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "impl-trait-for-tuples 0.2.1", - "parity-scale-codec", - "primitive-types", + "parity-scale-codec 2.0.1", + "primitive-types 0.9.0", "sp-externalities", "sp-runtime-interface-proc-macro", "sp-std", @@ -7343,7 +7498,7 @@ name = "sp-sandbox" version = "0.9.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec", + "parity-scale-codec 2.0.1", "sp-core", "sp-io", "sp-std", @@ -7365,7 +7520,7 @@ name = "sp-session" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec", + "parity-scale-codec 2.0.1", "sp-api", "sp-core", "sp-runtime", @@ -7378,7 +7533,7 @@ name = "sp-staking" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec", + "parity-scale-codec 2.0.1", "sp-runtime", "sp-std", ] @@ -7391,7 +7546,7 @@ dependencies = [ "hash-db", "log", "num-traits", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "parking_lot 0.11.1", "rand 0.7.3", "smallvec 1.6.1", @@ -7416,7 +7571,7 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "impl-serde", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "ref-cast", "serde", "sp-debug-derive", @@ -7441,7 +7596,7 @@ name = "sp-timestamp" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec", + "parity-scale-codec 2.0.1", "sp-api", "sp-inherents", "sp-runtime", @@ -7455,7 +7610,7 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "log", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "sp-std", "tracing", "tracing-core", @@ -7470,7 +7625,7 @@ dependencies = [ "derive_more", "futures 0.3.12", "log", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "serde", "sp-api", "sp-blockchain", @@ -7485,7 +7640,7 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "hash-db", "memory-db", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "sp-core", "sp-std", "trie-db", @@ -7510,7 +7665,7 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "impl-serde", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "serde", "sp-runtime", "sp-std", @@ -7522,7 +7677,7 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "impl-trait-for-tuples 0.2.1", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "sp-std", "wasmi", ] @@ -7657,7 +7812,7 @@ dependencies = [ "jsonrpc-core-client 15.1.0", "jsonrpc-derive 15.1.0", "log", - "parity-scale-codec", + "parity-scale-codec 2.0.1", "sc-client-api", "sc-rpc-api", "serde", @@ -8268,7 +8423,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1631b201eb031b563d2e85ca18ec8092508e262a3196ce9bd10a67ec87b9f5c" dependencies = [ "hash-db", - "rlp", + "rlp 0.5.0", ] [[package]] @@ -8300,6 +8455,18 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" +[[package]] +name = "uint" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9db035e67dfaf7edd9aebfe8676afcd63eed53c8a4044fed514c8cccf1835177" +dependencies = [ + "byteorder", + "crunchy", + "rustc-hex", + "static_assertions", +] + [[package]] name = "uint" version = "0.9.0" diff --git a/node/Cargo.toml b/node/Cargo.toml index 930d2dbfbb..9e289ef367 100644 --- a/node/Cargo.toml +++ b/node/Cargo.toml @@ -28,16 +28,17 @@ jsonrpc-core = '15.0.0' jsonrpc-pubsub = "15.0.0" # Substrate dependencies +pallet-nft = { path = '../pallets/nft', version = '3.0.0' } nft-runtime = { path = '../runtime', version = '3.0.0' } frame-benchmarking = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } frame-benchmarking-cli = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } pallet-transaction-payment-rpc = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } -fc-rpc-core = { version = "0.1.0", git = "https://github.com/PureStake/frontier.git", branch = "notlesh-substrate-8b3e5bc" } -fc-consensus = { version = "0.1.0", git = "https://github.com/PureStake/frontier.git", branch = "notlesh-substrate-8b3e5bc" } -fc-mapping-sync = { version = "0.1.0", git = "https://github.com/PureStake/frontier.git", branch = "notlesh-substrate-8b3e5bc" } -fc-rpc = { version = "0.1.0", git = "https://github.com/PureStake/frontier.git", branch = "notlesh-substrate-8b3e5bc" } -fc-db = { version = "0.1.0", git = "https://github.com/PureStake/frontier.git", branch = "notlesh-substrate-8b3e5bc" } -fp-rpc = { version = "0.1.0", git = "https://github.com/PureStake/frontier.git", branch = "notlesh-substrate-8b3e5bc" } +fc-rpc-core = { version = "1.1.0-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } +fc-consensus = { version = "1.0.0", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } +fc-mapping-sync = { version = "1.1.0-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } +fc-rpc = { version = "2.0.0-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } +fc-db = { version = "1.0.0", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } +fp-rpc = { version = "1.0.0", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } sc-basic-authorship = { version = '0.9.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } sc-cli = { version = '0.9.0', features = ['wasmtime'], git = "https://github.com/paritytech/substrate.git", branch = "frontier" } sc-client-api = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } @@ -65,7 +66,7 @@ sp-transaction-pool = { version = '3.0.0', git = "https://github.com/paritytech/ substrate-frame-rpc-system = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } sc-network = { version = '0.9.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } pallet-contracts-rpc = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } -pallet-ethereum = { version = "0.1.0", git = "https://github.com/PureStake/frontier.git", branch = "notlesh-substrate-8b3e5bc" } +pallet-ethereum = { version = "1.0.1-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } sc-telemetry = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } serde = { version = "1.0.102", features = ["derive"] } diff --git a/pallets/nft/Cargo.toml b/pallets/nft/Cargo.toml index 299e13a573..92e94d4791 100644 --- a/pallets/nft/Cargo.toml +++ b/pallets/nft/Cargo.toml @@ -23,16 +23,26 @@ serde = { version = "1.0.119" } frame-support = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } frame-system = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } pallet-balances = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-evm = { default-features = false, version = "3.0.0", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } +pallet-ethereum = { default-features = false, version = "1.0.1-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } pallet-timestamp = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } pallet-randomness-collective-flip = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } sp-std = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } frame-benchmarking = { default-features = false, version = '3.0.0', optional = true, git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +fp-evm = { default-features = false, version = '1.0.0', git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } sp-core = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } sp-io = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-api = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } sp-runtime = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } pallet-contracts = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } pallet-transaction-payment = { default-features = false, version = "3.0.0", git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +ethereum-tx-sign = { version = "3.0.4", optional = true } +ethereum = { default-features = false, version = "0.7.1" } +rlp = { default-features = false, version = "0.5.0" } + +hex-literal = "0.3.1" + [features] default = ['std'] std = [ @@ -41,12 +51,18 @@ std = [ 'frame-support/std', 'frame-system/std', 'pallet-balances/std', + 'pallet-evm/std', 'pallet-timestamp/std', 'pallet-contracts/std', 'pallet-randomness-collective-flip/std', 'pallet-transaction-payment/std', + 'fp-evm/std', 'sp-std/std', 'sp-runtime/std', 'frame-benchmarking/std', + 'ethereum/std', + 'rlp/std', + + 'ethereum-tx-sign', ] runtime-benchmarks = ["frame-benchmarking"] diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 13100c8dfc..61e1f1afba 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -39,8 +39,8 @@ pallet-balances = { default-features = false, version = '3.0.0', git = "https:// pallet-contracts = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } pallet-contracts-primitives = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } pallet-contracts-rpc-runtime-api = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } -pallet-evm = { default-features = false, version = "3.0.0", git = "https://github.com/PureStake/frontier.git", branch = "notlesh-substrate-8b3e5bc" } -pallet-ethereum = { default-features = false, version = "0.1.0", git = "https://github.com/PureStake/frontier.git", branch = "notlesh-substrate-8b3e5bc" } +pallet-evm = { default-features = false, version = "3.0.0", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } +pallet-ethereum = { default-features = false, version = "1.0.1-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } pallet-grandpa = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } pallet-randomness-collective-flip = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } pallet-sudo = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } @@ -49,7 +49,7 @@ pallet-transaction-payment = { default-features = false, version = '3.0.0', git pallet-transaction-payment-rpc-runtime-api = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } pallet-treasury = { default-features = false, version = "3.0.0", git = "https://github.com/paritytech/substrate.git", branch = "frontier" } pallet-vesting = { default-features = false, version = "3.0.0", git = "https://github.com/paritytech/substrate.git", branch = "frontier" } -fp-rpc = { default-features = false, version = "0.1.0", git = "https://github.com/PureStake/frontier.git", branch = "notlesh-substrate-8b3e5bc" } +fp-rpc = { default-features = false, version = "1.0.0", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } sp-arithmetic = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } sp-api = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } sp-block-builder = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } @@ -98,8 +98,10 @@ std = [ 'pallet-treasury/std', 'pallet-vesting/std', 'pallet-evm/std', + 'pallet-ethereum/std', 'pallet-nft/std', + 'fp-rpc/std', 'sp-api/std', 'sp-block-builder/std', 'sp-consensus-aura/std', From 7994dd0dea2f7640b5db6a58e3a9d39657ac8974 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Tue, 4 May 2021 12:23:44 +0300 Subject: [PATCH 24/66] fix: convert address in chain extensions Signed-off-by: Yaroslav Bolyukin --- runtime/src/chain_extension.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/runtime/src/chain_extension.rs b/runtime/src/chain_extension.rs index 039a111a76..03d7d51036 100644 --- a/runtime/src/chain_extension.rs +++ b/runtime/src/chain_extension.rs @@ -62,7 +62,13 @@ impl ChainExtension for NFTExtension { let collection = pallet_nft::Module::::get_collection(input.collection_id)?; - match pallet_nft::Module::::transfer_internal(sender, recipient, &collection, input.token_id, input.amount) { + match pallet_nft::Module::::transfer_internal( + ::CrossAccountId::from_sub(sender), + ::CrossAccountId::from_sub(recipient), + &collection, + input.token_id, + input.amount, + ) { Ok(_) => Ok(RetVal::Converging(func_id)), _ => Err(DispatchError::Other("Transfer error")) } From 41df7418f56bfb61a40e682681f7d2b96afa1d20 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Tue, 4 May 2021 12:24:26 +0300 Subject: [PATCH 25/66] perf: do not submit eth transactions with no logs Signed-off-by: Yaroslav Bolyukin --- pallets/nft/src/eth/log.rs | 3 +++ pallets/nft/src/lib.rs | 3 +++ 2 files changed, 6 insertions(+) diff --git a/pallets/nft/src/eth/log.rs b/pallets/nft/src/eth/log.rs index 1ce2b87c86..2a292843a2 100644 --- a/pallets/nft/src/eth/log.rs +++ b/pallets/nft/src/eth/log.rs @@ -7,6 +7,9 @@ use sp_core::{H160, H256}; pub struct LogRecorder(RefCell, Vec)>>); impl LogRecorder { + pub fn is_empty(&self) -> bool { + self.0.borrow().is_empty() + } pub fn log(&self, topics: Vec, data: super::abi::AbiWriter) { self.0.borrow_mut().push((topics, data.finish())); } diff --git a/pallets/nft/src/lib.rs b/pallets/nft/src/lib.rs index d1de02f8c1..e35076e1a1 100644 --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -2204,6 +2204,9 @@ impl Module { } fn submit_logs(collection: CollectionHandle) -> DispatchResult { + if collection.logs.is_empty() { + return Ok(()) + } T::EthereumTransactionSender::submit_logs_transaction( eth::generate_transaction(collection.id, T::EthereumChainId::get()), collection.logs.retrieve_logs_for_contract(eth::collection_id_to_address(collection.id)), From 1f943aea2676a0708152e4ab16724fc6300c5805 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Tue, 4 May 2021 12:29:51 +0300 Subject: [PATCH 26/66] fix: deprecation warning for from_rational Signed-off-by: Yaroslav Bolyukin --- runtime/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 35830a3e4b..11c8b719ab 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -450,7 +450,7 @@ parameter_types! { pub const DepositPerContract: Balance = TombstoneDeposit::get(); pub const DepositPerStorageByte: Balance = deposit(0, 1); pub const DepositPerStorageItem: Balance = deposit(1, 0); - pub RentFraction: Perbill = Perbill::from_rational_approximation(1u32, 30 * DAYS); + pub RentFraction: Perbill = Perbill::from_rational(1u32, 30 * DAYS); pub const SurchargeReward: Balance = 150 * MILLIUNIQUE; pub const SignedClaimHandicap: u32 = 2; pub const MaxDepth: u32 = 32; From cf66146e123e91f0bc58845532ba0925c9856550 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Tue, 4 May 2021 13:55:37 +0300 Subject: [PATCH 27/66] build: switch pallet-inflation to frontier branch Signed-off-by: Yaroslav Bolyukin --- Cargo.lock | 1484 +++++++++++----------------------- pallets/inflation/Cargo.toml | 20 +- 2 files changed, 490 insertions(+), 1014 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 42154074e9..536e36c564 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1583,14 +1583,14 @@ dependencies = [ "log", "parity-scale-codec 2.0.1", "sc-client-api", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", "sp-block-builder", "sp-blockchain", "sp-consensus", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-inherents 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-timestamp 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", + "sp-inherents", + "sp-runtime", + "sp-timestamp", "substrate-prometheus-endpoint", ] @@ -1603,9 +1603,9 @@ dependencies = [ "kvdb-rocksdb", "parity-scale-codec 2.0.1", "parking_lot 0.11.1", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", "sp-database", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-runtime", ] [[package]] @@ -1621,9 +1621,9 @@ dependencies = [ "futures-timer 3.0.2", "log", "sc-client-api", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", "sp-blockchain", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-runtime", ] [[package]] @@ -1659,11 +1659,11 @@ dependencies = [ "sc-rpc", "sc-service", "sha3 0.8.2", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", "sp-blockchain", - "sp-io 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-storage 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-io", + "sp-runtime", + "sp-storage", "sp-transaction-pool", ] @@ -1808,9 +1808,9 @@ dependencies = [ "parity-scale-codec 2.0.1", "rlp 0.5.0", "sha3 0.8.2", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", + "sp-runtime", + "sp-std", ] [[package]] @@ -1822,8 +1822,8 @@ dependencies = [ "impl-trait-for-tuples 0.1.3", "parity-scale-codec 2.0.1", "serde", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", + "sp-std", ] [[package]] @@ -1835,11 +1835,11 @@ dependencies = [ "ethereum-types 0.11.0", "fp-evm", "parity-scale-codec 2.0.1", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-io 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] @@ -1851,10 +1851,10 @@ dependencies = [ "ethereum-types 0.11.0", "fp-evm", "parity-scale-codec 2.0.1", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", + "sp-core", + "sp-runtime", + "sp-std", ] [[package]] @@ -1862,37 +1862,18 @@ name = "frame-benchmarking" version = "3.1.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "frame-support 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "frame-system 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "frame-support", + "frame-system", "linregress", "log", "parity-scale-codec 2.0.1", "paste 1.0.4", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-io 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime-interface 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-storage 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", -] - -[[package]] -name = "frame-benchmarking" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70fe99487f84579a3f2c4ba52650fec875492eea41be0e4eea8019187f105052" -dependencies = [ - "frame-support 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "frame-system 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "linregress", - "parity-scale-codec 2.0.1", - "paste 1.0.4", - "sp-api 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-io 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-runtime 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-runtime-interface 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-storage 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-api", + "sp-io", + "sp-runtime", + "sp-runtime-interface", + "sp-std", + "sp-storage", ] [[package]] @@ -1902,7 +1883,7 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "Inflector", "chrono", - "frame-benchmarking 3.1.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "frame-benchmarking", "handlebars", "parity-scale-codec 2.0.1", "sc-cli", @@ -1910,11 +1891,11 @@ dependencies = [ "sc-executor", "sc-service", "serde", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-externalities 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-keystore 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-state-machine 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", + "sp-externalities", + "sp-keystore", + "sp-runtime", + "sp-state-machine", "structopt", ] @@ -1923,15 +1904,15 @@ name = "frame-executive" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "frame-support 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "frame-system 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "frame-support", + "frame-system", "parity-scale-codec 2.0.1", "serde", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-io 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-tracing 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "sp-tracing", ] [[package]] @@ -1941,20 +1922,8 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "parity-scale-codec 2.0.1", "serde", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", -] - -[[package]] -name = "frame-metadata" -version = "13.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "073f7bef18421362441a1708f8528e442234954611f95bdc554b313fb321948e" -dependencies = [ - "parity-scale-codec 2.0.1", - "serde", - "sp-core 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-core", + "sp-std", ] [[package]] @@ -1963,8 +1932,8 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "bitflags", - "frame-metadata 13.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "frame-support-procedural 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "frame-metadata", + "frame-support-procedural", "impl-trait-for-tuples 0.2.1", "log", "once_cell", @@ -1972,42 +1941,15 @@ dependencies = [ "paste 1.0.4", "serde", "smallvec 1.6.1", - "sp-arithmetic 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-inherents 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-io 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-staking 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-state-machine 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-tracing 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", -] - -[[package]] -name = "frame-support" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04e521e6214615bd82ba6b5fc7fd40a9cc14fdeb40f83da5eba12aa2f8179fb8" -dependencies = [ - "bitflags", - "frame-metadata 13.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "frame-support-procedural 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "impl-trait-for-tuples 0.2.1", - "log", - "once_cell", - "parity-scale-codec 2.0.1", - "paste 1.0.4", - "serde", - "smallvec 1.6.1", - "sp-arithmetic 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-core 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-inherents 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-io 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-runtime 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-staking 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-state-machine 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-tracing 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-arithmetic", + "sp-core", + "sp-inherents", + "sp-io", + "sp-runtime", + "sp-staking", + "sp-state-machine", + "sp-std", + "sp-tracing", ] [[package]] @@ -2016,20 +1958,7 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "Inflector", - "frame-support-procedural-tools 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "frame-support-procedural" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2668e24cbaba7f0e91d0c92a94bd1ae425a942608ad0b775db32477f5df4da9e" -dependencies = [ - "Inflector", - "frame-support-procedural-tools 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "frame-support-procedural-tools", "proc-macro2", "quote", "syn", @@ -2040,26 +1969,13 @@ name = "frame-support-procedural-tools" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "frame-support-procedural-tools-derive 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "frame-support-procedural-tools-derive", "proc-macro-crate 1.0.0", "proc-macro2", "quote", "syn", ] -[[package]] -name = "frame-support-procedural-tools" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4f88cfd111e004590f4542b75e6d3302137b9067d7e7219e4ac47a535c3b5c1" -dependencies = [ - "frame-support-procedural-tools-derive 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro-crate 0.1.5", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" @@ -2070,49 +1986,21 @@ dependencies = [ "syn", ] -[[package]] -name = "frame-support-procedural-tools-derive" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79285388b120ac96c15a791c56b26b9264f7231324fbe0fd05026acd92bf2e6a" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "frame-system" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "frame-support 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "frame-support", "impl-trait-for-tuples 0.2.1", "log", "parity-scale-codec 2.0.1", "serde", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-io 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-version 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", -] - -[[package]] -name = "frame-system" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5fedbff05d665c00bf4e089b4377fcb15b8bd37ebc3e5fc06665474cf6e25d7" -dependencies = [ - "frame-support 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "impl-trait-for-tuples 0.2.1", - "parity-scale-codec 2.0.1", - "serde", - "sp-core 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-io 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-runtime 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-version 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "sp-version", ] [[package]] @@ -2120,13 +2008,13 @@ name = "frame-system-benchmarking" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "frame-benchmarking 3.1.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "frame-support 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "frame-system 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "frame-benchmarking", + "frame-support", + "frame-system", "parity-scale-codec 2.0.1", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", + "sp-runtime", + "sp-std", ] [[package]] @@ -2135,7 +2023,7 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "parity-scale-codec 2.0.1", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", ] [[package]] @@ -4124,7 +4012,7 @@ dependencies = [ "fc-rpc-core", "flexi_logger", "fp-rpc", - "frame-benchmarking 3.1.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "frame-benchmarking", "frame-benchmarking-cli", "futures 0.3.12", "jsonrpc-core 15.1.0", @@ -4152,16 +4040,16 @@ dependencies = [ "sc-transaction-pool", "serde", "serde_json", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", "sp-block-builder", "sp-blockchain", "sp-consensus", "sp-consensus-aura", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", "sp-finality-grandpa", - "sp-inherents 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-timestamp 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-inherents", + "sp-runtime", + "sp-timestamp", "sp-transaction-pool", "structopt", "substrate-build-script-utils", @@ -4173,15 +4061,15 @@ name = "nft-runtime" version = "3.0.0" dependencies = [ "fp-rpc", - "frame-benchmarking 3.1.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "frame-benchmarking", "frame-executive", - "frame-support 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "frame-system 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "frame-support", + "frame-system", "frame-system-benchmarking", "frame-system-rpc-runtime-api", "hex-literal", "pallet-aura", - "pallet-balances 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "pallet-balances", "pallet-contracts", "pallet-contracts-primitives", "pallet-contracts-rpc-runtime-api", @@ -4190,9 +4078,9 @@ dependencies = [ "pallet-grandpa", "pallet-inflation", "pallet-nft", - "pallet-randomness-collective-flip 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "pallet-randomness-collective-flip", "pallet-sudo", - "pallet-timestamp 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "pallet-timestamp", "pallet-transaction-payment", "pallet-transaction-payment-rpc-runtime-api", "pallet-treasury", @@ -4200,18 +4088,18 @@ dependencies = [ "parity-scale-codec 2.0.1", "serde", "smallvec 1.6.1", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-arithmetic 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", + "sp-arithmetic", "sp-block-builder", "sp-consensus-aura", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-inherents 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", + "sp-inherents", "sp-offchain", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-runtime", "sp-session", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-std", "sp-transaction-pool", - "sp-version 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-version", "substrate-wasm-builder", ] @@ -4357,16 +4245,16 @@ name = "pallet-aura" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "frame-support 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "frame-system 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "frame-support", + "frame-system", "pallet-session", - "pallet-timestamp 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "pallet-timestamp", "parity-scale-codec 2.0.1", "serde", - "sp-application-crypto 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-application-crypto", "sp-consensus-aura", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-runtime", + "sp-std", ] [[package]] @@ -4374,14 +4262,14 @@ name = "pallet-authorship" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "frame-support 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "frame-system 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "frame-support", + "frame-system", "impl-trait-for-tuples 0.2.1", "parity-scale-codec 2.0.1", "sp-authorship", - "sp-inherents 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-inherents", + "sp-runtime", + "sp-std", ] [[package]] @@ -4389,29 +4277,14 @@ name = "pallet-balances" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "frame-benchmarking 3.1.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "frame-support 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "frame-system 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "frame-benchmarking", + "frame-support", + "frame-system", "log", "parity-scale-codec 2.0.1", "serde", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", -] - -[[package]] -name = "pallet-balances" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41aaeaf084e594273f82bcbf96416ef1fcab602e15dd1df04b9930eceb2eb518" -dependencies = [ - "frame-benchmarking 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "frame-support 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "frame-system 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-scale-codec 2.0.1", - "serde", - "sp-runtime 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-runtime", + "sp-std", ] [[package]] @@ -4419,8 +4292,8 @@ name = "pallet-contracts" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "frame-support 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "frame-system 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "frame-support", + "frame-system", "log", "pallet-contracts-primitives", "pallet-contracts-proc-macro", @@ -4428,11 +4301,11 @@ dependencies = [ "parity-wasm 0.41.0", "pwasm-utils 0.16.0", "serde", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-io 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", + "sp-io", + "sp-runtime", "sp-sandbox", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-std", "wasmi-validation", ] @@ -4443,8 +4316,8 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "bitflags", "parity-scale-codec 2.0.1", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-runtime", + "sp-std", ] [[package]] @@ -4469,11 +4342,11 @@ dependencies = [ "pallet-contracts-rpc-runtime-api", "parity-scale-codec 2.0.1", "serde", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", "sp-blockchain", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", "sp-rpc", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-runtime", ] [[package]] @@ -4483,9 +4356,9 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "pallet-contracts-primitives", "parity-scale-codec 2.0.1", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", + "sp-runtime", + "sp-std", ] [[package]] @@ -4500,20 +4373,20 @@ dependencies = [ "fp-evm", "fp-rpc", "fp-storage", - "frame-support 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "frame-system 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "frame-support", + "frame-system", "libsecp256k1", - "pallet-balances 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "pallet-balances", "pallet-evm", - "pallet-timestamp 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "pallet-timestamp", "parity-scale-codec 2.0.1", "rlp 0.5.0", "rustc-hex", "serde", "sha3 0.8.2", - "sp-io 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] @@ -4525,21 +4398,21 @@ dependencies = [ "evm-gasometer", "evm-runtime", "fp-evm", - "frame-support 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "frame-system 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "frame-support", + "frame-system", "impl-trait-for-tuples 0.2.1", "log", - "pallet-balances 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "pallet-timestamp 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "pallet-balances", + "pallet-timestamp", "parity-scale-codec 2.0.1", "primitive-types 0.9.0", "rlp 0.5.0", "serde", "sha3 0.8.2", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-io 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] @@ -4547,39 +4420,39 @@ name = "pallet-grandpa" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "frame-benchmarking 3.1.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "frame-support 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "frame-system 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "frame-benchmarking", + "frame-support", + "frame-system", "log", "pallet-authorship", "pallet-session", "parity-scale-codec 2.0.1", "serde", - "sp-application-crypto 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-application-crypto", + "sp-core", "sp-finality-grandpa", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-runtime", "sp-session", - "sp-staking 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-staking", + "sp-std", ] [[package]] name = "pallet-inflation" version = "3.0.0" dependencies = [ - "frame-benchmarking 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "frame-support 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "frame-system 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "pallet-balances 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "pallet-randomness-collective-flip 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "pallet-timestamp 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-balances", + "pallet-randomness-collective-flip", + "pallet-timestamp", "parity-scale-codec 2.0.1", "serde", - "sp-core 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-io 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-runtime 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] @@ -4589,25 +4462,25 @@ dependencies = [ "ethereum", "ethereum-tx-sign", "fp-evm", - "frame-benchmarking 3.1.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "frame-support 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "frame-system 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "frame-benchmarking", + "frame-support", + "frame-system", "hex-literal", - "pallet-balances 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "pallet-balances", "pallet-contracts", "pallet-ethereum", "pallet-evm", - "pallet-randomness-collective-flip 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "pallet-timestamp 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "pallet-randomness-collective-flip", + "pallet-timestamp", "pallet-transaction-payment", "parity-scale-codec 2.0.1", "rlp 0.5.0", "serde", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-io 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] @@ -4615,26 +4488,12 @@ name = "pallet-randomness-collective-flip" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "frame-support 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "frame-system 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "frame-support", + "frame-system", "parity-scale-codec 2.0.1", "safe-mix", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", -] - -[[package]] -name = "pallet-randomness-collective-flip" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3ea6fa9aa36735ec11d7ec4d97dd6472650c0656fdc6d4adaca2578bd71134" -dependencies = [ - "frame-support 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "frame-system 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-scale-codec 2.0.1", - "safe-mix", - "sp-runtime 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-runtime", + "sp-std", ] [[package]] @@ -4642,19 +4501,19 @@ name = "pallet-session" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "frame-support 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "frame-system 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "frame-support", + "frame-system", "impl-trait-for-tuples 0.2.1", - "pallet-timestamp 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "pallet-timestamp", "parity-scale-codec 2.0.1", "serde", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-io 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", + "sp-io", + "sp-runtime", "sp-session", - "sp-staking 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-trie 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-staking", + "sp-std", + "sp-trie", ] [[package]] @@ -4662,13 +4521,13 @@ name = "pallet-sudo" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "frame-support 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "frame-system 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "frame-support", + "frame-system", "parity-scale-codec 2.0.1", "serde", - "sp-io 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] @@ -4676,36 +4535,18 @@ name = "pallet-timestamp" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "frame-benchmarking 3.1.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "frame-support 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "frame-system 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "frame-benchmarking", + "frame-support", + "frame-system", "impl-trait-for-tuples 0.2.1", "log", "parity-scale-codec 2.0.1", "serde", - "sp-inherents 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-io 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-timestamp 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", -] - -[[package]] -name = "pallet-timestamp" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b17dd274716a55a2c3e34d9c0ed66aaac3d7e0393ec9fd985e2b8532d697a7f3" -dependencies = [ - "frame-benchmarking 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "frame-support 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "frame-system 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "impl-trait-for-tuples 0.2.1", - "parity-scale-codec 2.0.1", - "serde", - "sp-inherents 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-runtime 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-timestamp 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-inherents", + "sp-io", + "sp-runtime", + "sp-std", + "sp-timestamp", ] [[package]] @@ -4713,15 +4554,15 @@ name = "pallet-transaction-payment" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "frame-support 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "frame-system 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "frame-support", + "frame-system", "parity-scale-codec 2.0.1", "serde", "smallvec 1.6.1", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-io 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] @@ -4734,11 +4575,11 @@ dependencies = [ "jsonrpc-derive 15.1.0", "pallet-transaction-payment-rpc-runtime-api", "parity-scale-codec 2.0.1", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", "sp-blockchain", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", "sp-rpc", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-runtime", ] [[package]] @@ -4748,8 +4589,8 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "pallet-transaction-payment", "parity-scale-codec 2.0.1", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", + "sp-runtime", ] [[package]] @@ -4757,14 +4598,14 @@ name = "pallet-treasury" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "frame-support 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "frame-system 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "frame-support", + "frame-system", "impl-trait-for-tuples 0.2.1", - "pallet-balances 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "pallet-balances", "parity-scale-codec 2.0.1", "serde", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-runtime", + "sp-std", ] [[package]] @@ -4773,12 +4614,12 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "enumflags2", - "frame-support 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "frame-system 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "frame-support", + "frame-system", "parity-scale-codec 2.0.1", "serde", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-runtime", + "sp-std", ] [[package]] @@ -5996,12 +5837,12 @@ dependencies = [ "sc-client-api", "sc-proposer-metrics", "sc-telemetry", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", "sp-blockchain", "sp-consensus", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-inherents 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", + "sp-inherents", + "sp-runtime", "sp-transaction-pool", "substrate-prometheus-endpoint", ] @@ -6013,13 +5854,13 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "parity-scale-codec 2.0.1", "sc-client-api", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", "sp-block-builder", "sp-blockchain", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-inherents 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-state-machine 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", + "sp-inherents", + "sp-runtime", + "sp-state-machine", ] [[package]] @@ -6039,8 +5880,8 @@ dependencies = [ "serde_json", "sp-chain-spec", "sp-consensus-babe", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", + "sp-runtime", ] [[package]] @@ -6079,13 +5920,13 @@ dependencies = [ "serde", "serde_json", "sp-blockchain", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", "sp-keyring", - "sp-keystore 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-panic-handler 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-keystore", + "sp-panic-handler", + "sp-runtime", "sp-utils", - "sp-version 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-version", "structopt", "thiserror", "tiny-bip39", @@ -6107,22 +5948,22 @@ dependencies = [ "parity-scale-codec 2.0.1", "parking_lot 0.11.1", "sc-executor", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", "sp-blockchain", "sp-consensus", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", "sp-database", - "sp-externalities 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-inherents 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-keystore 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-state-machine 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-storage 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-externalities", + "sp-inherents", + "sp-keystore", + "sp-runtime", + "sp-state-machine", + "sp-std", + "sp-storage", "sp-transaction-pool", - "sp-trie 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-trie", "sp-utils", - "sp-version 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-version", "substrate-prometheus-endpoint", ] @@ -6145,14 +5986,14 @@ dependencies = [ "sc-client-api", "sc-executor", "sc-state-db", - "sp-arithmetic 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-arithmetic", "sp-blockchain", "sp-consensus", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", "sp-database", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-state-machine 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-trie 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-runtime", + "sp-state-machine", + "sp-trie", "substrate-prometheus-endpoint", ] @@ -6164,7 +6005,7 @@ dependencies = [ "sc-client-api", "sp-blockchain", "sp-consensus", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-runtime", ] [[package]] @@ -6182,20 +6023,20 @@ dependencies = [ "sc-client-api", "sc-consensus-slots", "sc-telemetry", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-application-crypto 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", + "sp-application-crypto", "sp-block-builder", "sp-blockchain", "sp-consensus", "sp-consensus-aura", "sp-consensus-slots", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-inherents 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-io 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-keystore 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-timestamp 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-version 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", + "sp-inherents", + "sp-io", + "sp-keystore", + "sp-runtime", + "sp-timestamp", + "sp-version", "substrate-prometheus-endpoint", ] @@ -6226,22 +6067,22 @@ dependencies = [ "sc-telemetry", "schnorrkel", "serde", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-application-crypto 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", + "sp-application-crypto", "sp-block-builder", "sp-blockchain", "sp-consensus", "sp-consensus-babe", "sp-consensus-slots", "sp-consensus-vrf", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-inherents 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-io 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-keystore 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-timestamp 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", + "sp-inherents", + "sp-io", + "sp-keystore", + "sp-runtime", + "sp-timestamp", "sp-utils", - "sp-version 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-version", "substrate-prometheus-endpoint", ] @@ -6255,7 +6096,7 @@ dependencies = [ "parking_lot 0.11.1", "sc-client-api", "sp-blockchain", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-runtime", ] [[package]] @@ -6270,17 +6111,17 @@ dependencies = [ "parking_lot 0.11.1", "sc-client-api", "sc-telemetry", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-application-crypto 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-arithmetic 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", + "sp-application-crypto", + "sp-arithmetic", "sp-blockchain", "sp-consensus", "sp-consensus-slots", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-inherents 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-state-machine 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-trie 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", + "sp-inherents", + "sp-runtime", + "sp-state-machine", + "sp-trie", "thiserror", ] @@ -6293,9 +6134,9 @@ dependencies = [ "sc-client-api", "sp-authorship", "sp-consensus", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-inherents 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", + "sp-inherents", + "sp-runtime", ] [[package]] @@ -6313,17 +6154,17 @@ dependencies = [ "sc-executor-common", "sc-executor-wasmi", "sc-executor-wasmtime", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-externalities 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-io 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-panic-handler 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime-interface 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", + "sp-core", + "sp-externalities", + "sp-io", + "sp-panic-handler", + "sp-runtime-interface", "sp-serializer", "sp-tasks", - "sp-trie 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-version 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-wasm-interface 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-trie", + "sp-version", + "sp-wasm-interface", "wasmi", ] @@ -6336,9 +6177,9 @@ dependencies = [ "parity-scale-codec 2.0.1", "parity-wasm 0.41.0", "sp-allocator", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", "sp-serializer", - "sp-wasm-interface 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-wasm-interface", "thiserror", "wasmi", ] @@ -6352,9 +6193,9 @@ dependencies = [ "parity-scale-codec 2.0.1", "sc-executor-common", "sp-allocator", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime-interface 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-wasm-interface 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", + "sp-runtime-interface", + "sp-wasm-interface", "wasmi", ] @@ -6370,9 +6211,9 @@ dependencies = [ "sc-executor-common", "scoped-tls", "sp-allocator", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime-interface 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-wasm-interface 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", + "sp-runtime-interface", + "sp-wasm-interface", "wasmtime", ] @@ -6401,16 +6242,16 @@ dependencies = [ "sc-network-gossip", "sc-telemetry", "serde_json", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-application-crypto 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-arithmetic 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", + "sp-application-crypto", + "sp-arithmetic", "sp-blockchain", "sp-consensus", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", "sp-finality-grandpa", - "sp-inherents 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-keystore 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-inherents", + "sp-keystore", + "sp-runtime", "sp-utils", "substrate-prometheus-endpoint", ] @@ -6427,7 +6268,7 @@ dependencies = [ "sc-client-api", "sc-network", "sp-blockchain", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-runtime", "sp-transaction-pool", "sp-utils", "wasm-timer", @@ -6447,9 +6288,9 @@ dependencies = [ "parking_lot 0.11.1", "rand 0.7.3", "serde_json", - "sp-application-crypto 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-keystore 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-application-crypto", + "sp-core", + "sp-keystore", "subtle 2.4.0", ] @@ -6464,12 +6305,12 @@ dependencies = [ "parking_lot 0.11.1", "sc-client-api", "sc-executor", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", "sp-blockchain", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-externalities 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-state-machine 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", + "sp-externalities", + "sp-runtime", + "sp-state-machine", ] [[package]] @@ -6511,11 +6352,11 @@ dependencies = [ "serde", "serde_json", "smallvec 1.6.1", - "sp-arithmetic 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-arithmetic", "sp-blockchain", "sp-consensus", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", + "sp-runtime", "sp-utils", "substrate-prometheus-endpoint", "thiserror", @@ -6536,7 +6377,7 @@ dependencies = [ "log", "lru", "sc-network", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-runtime", "substrate-prometheus-endpoint", "wasm-timer", ] @@ -6561,10 +6402,10 @@ dependencies = [ "sc-client-api", "sc-keystore", "sc-network", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", + "sp-core", "sp-offchain", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-runtime", "sp-utils", "threadpool", ] @@ -6610,19 +6451,19 @@ dependencies = [ "sc-rpc-api", "sc-tracing", "serde_json", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", "sp-blockchain", "sp-chain-spec", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-keystore 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", + "sp-keystore", "sp-offchain", "sp-rpc", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-runtime", "sp-session", - "sp-state-machine 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-state-machine", "sp-transaction-pool", "sp-utils", - "sp-version 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-version", ] [[package]] @@ -6642,11 +6483,11 @@ dependencies = [ "serde", "serde_json", "sp-chain-spec", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", "sp-rpc", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-runtime", "sp-transaction-pool", - "sp-version 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-version", ] [[package]] @@ -6663,7 +6504,7 @@ dependencies = [ "log", "serde", "serde_json", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-runtime", "substrate-prometheus-endpoint", ] @@ -6704,24 +6545,24 @@ dependencies = [ "sc-transaction-pool", "serde", "serde_json", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-application-crypto 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", + "sp-application-crypto", "sp-block-builder", "sp-blockchain", "sp-consensus", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-externalities 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-inherents 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-io 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-keystore 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", + "sp-externalities", + "sp-inherents", + "sp-io", + "sp-keystore", + "sp-runtime", "sp-session", - "sp-state-machine 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-tracing 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-state-machine", + "sp-tracing", "sp-transaction-pool", - "sp-trie 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-trie", "sp-utils", - "sp-version 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-version", "substrate-prometheus-endpoint", "tempfile", "thiserror", @@ -6741,7 +6582,7 @@ dependencies = [ "parity-util-mem-derive", "parking_lot 0.11.1", "sc-client-api", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", "thiserror", ] @@ -6782,7 +6623,7 @@ dependencies = [ "sc-tracing-proc-macro", "serde", "serde_json", - "sp-tracing 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-tracing", "thiserror", "tracing", "tracing-core", @@ -6817,8 +6658,8 @@ dependencies = [ "retain_mut", "serde", "sp-blockchain", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", + "sp-runtime", "sp-transaction-pool", "sp-utils", "thiserror", @@ -6839,11 +6680,11 @@ dependencies = [ "parking_lot 0.11.1", "sc-client-api", "sc-transaction-graph", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", "sp-blockchain", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-tracing 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", + "sp-runtime", + "sp-tracing", "sp-transaction-pool", "sp-utils", "substrate-prometheus-endpoint", @@ -7245,9 +7086,9 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "log", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-wasm-interface 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", + "sp-std", + "sp-wasm-interface", "thiserror", ] @@ -7259,29 +7100,12 @@ dependencies = [ "hash-db", "log", "parity-scale-codec 2.0.1", - "sp-api-proc-macro 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-state-machine 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-version 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "thiserror", -] - -[[package]] -name = "sp-api" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e63c3460d5daecf67df542c34c2bbd636214a5a200d4bddcfa2ffb9e72c346af" -dependencies = [ - "hash-db", - "parity-scale-codec 2.0.1", - "sp-api-proc-macro 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-core 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-runtime 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-state-machine 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-version 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-api-proc-macro", + "sp-core", + "sp-runtime", + "sp-state-machine", + "sp-std", + "sp-version", "thiserror", ] @@ -7297,19 +7121,6 @@ dependencies = [ "syn", ] -[[package]] -name = "sp-api-proc-macro" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "289624f4fe0f61e63a5019ed26c3bc732b5145eb52796ac6053cd72656d947a1" -dependencies = [ - "blake2-rfc", - "proc-macro-crate 0.1.5", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "sp-application-crypto" version = "3.0.0" @@ -7317,22 +7128,9 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "parity-scale-codec 2.0.1", "serde", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-io 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", -] - -[[package]] -name = "sp-application-crypto" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c52e2e6d43036b97c4fce1ed87c5262c1ffdc78c655ada4d3024a3f8094bdd2c" -dependencies = [ - "parity-scale-codec 2.0.1", - "serde", - "sp-core 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-io 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-core", + "sp-io", + "sp-std", ] [[package]] @@ -7344,22 +7142,8 @@ dependencies = [ "num-traits", "parity-scale-codec 2.0.1", "serde", - "sp-debug-derive 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", -] - -[[package]] -name = "sp-arithmetic" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0f1c69966c192d1dee8521f0b29ece2b14db07b9b44d801a94e295234761645" -dependencies = [ - "integer-sqrt", - "num-traits", - "parity-scale-codec 2.0.1", - "serde", - "sp-debug-derive 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-debug-derive", + "sp-std", ] [[package]] @@ -7368,9 +7152,9 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "parity-scale-codec 2.0.1", - "sp-inherents 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-inherents", + "sp-runtime", + "sp-std", ] [[package]] @@ -7379,10 +7163,10 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "parity-scale-codec 2.0.1", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-inherents 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", + "sp-inherents", + "sp-runtime", + "sp-std", ] [[package]] @@ -7395,11 +7179,11 @@ dependencies = [ "lru", "parity-scale-codec 2.0.1", "parking_lot 0.11.1", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", "sp-consensus", "sp-database", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-state-machine 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-runtime", + "sp-state-machine", "thiserror", ] @@ -7424,15 +7208,15 @@ dependencies = [ "parity-scale-codec 2.0.1", "parking_lot 0.11.1", "serde", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-inherents 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-state-machine 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-trie 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", + "sp-core", + "sp-inherents", + "sp-runtime", + "sp-state-machine", + "sp-std", + "sp-trie", "sp-utils", - "sp-version 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-version", "substrate-prometheus-endpoint", "thiserror", "wasm-timer", @@ -7444,13 +7228,13 @@ version = "0.9.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "parity-scale-codec 2.0.1", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-application-crypto 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", + "sp-application-crypto", "sp-consensus-slots", - "sp-inherents 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-timestamp 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-inherents", + "sp-runtime", + "sp-std", + "sp-timestamp", ] [[package]] @@ -7461,17 +7245,17 @@ dependencies = [ "merlin", "parity-scale-codec 2.0.1", "serde", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-application-crypto 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", + "sp-application-crypto", "sp-consensus", "sp-consensus-slots", "sp-consensus-vrf", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-inherents 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-keystore 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-timestamp 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", + "sp-inherents", + "sp-keystore", + "sp-runtime", + "sp-std", + "sp-timestamp", ] [[package]] @@ -7480,8 +7264,8 @@ version = "0.9.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "parity-scale-codec 2.0.1", - "sp-arithmetic 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-arithmetic", + "sp-runtime", ] [[package]] @@ -7491,9 +7275,9 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "parity-scale-codec 2.0.1", "schnorrkel", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", + "sp-runtime", + "sp-std", ] [[package]] @@ -7526,56 +7310,11 @@ dependencies = [ "secrecy", "serde", "sha2 0.9.3", - "sp-debug-derive 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-externalities 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime-interface 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-storage 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "substrate-bip39", - "thiserror", - "tiny-bip39", - "tiny-keccak", - "twox-hash", - "wasmi", - "zeroize", -] - -[[package]] -name = "sp-core" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abbc8d4e9b8a7d5819ed26f1374017bb32833ef4890e4ff065e1da30669876bc" -dependencies = [ - "base58", - "blake2-rfc", - "byteorder", - "dyn-clonable", - "ed25519-dalek", - "futures 0.3.12", - "hash-db", - "hash256-std-hasher", - "hex", - "impl-serde", - "lazy_static", - "libsecp256k1", - "log", - "merlin", - "num-traits", - "parity-scale-codec 2.0.1", - "parity-util-mem", - "parking_lot 0.11.1", - "primitive-types 0.9.0", - "rand 0.7.3", - "regex", - "schnorrkel", - "secrecy", - "serde", - "sha2 0.9.3", - "sp-debug-derive 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-externalities 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-runtime-interface 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-storage 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-debug-derive", + "sp-externalities", + "sp-runtime-interface", + "sp-std", + "sp-storage", "substrate-bip39", "thiserror", "tiny-bip39", @@ -7604,17 +7343,6 @@ dependencies = [ "syn", ] -[[package]] -name = "sp-debug-derive" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e80275f23b4e7ba8f54dec5f90f016530e7307d2ee9445f617ab986cbe97f31e" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "sp-externalities" version = "0.9.0" @@ -7622,20 +7350,8 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "environmental", "parity-scale-codec 2.0.1", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-storage 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", -] - -[[package]] -name = "sp-externalities" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fdc625f8c7b13b9a136d334888b21b5743d2081cb666cb03efca1dc9b8f74d1" -dependencies = [ - "environmental", - "parity-scale-codec 2.0.1", - "sp-std 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-storage 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-std", + "sp-storage", ] [[package]] @@ -7647,12 +7363,12 @@ dependencies = [ "log", "parity-scale-codec 2.0.1", "serde", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-application-crypto 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-keystore 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", + "sp-application-crypto", + "sp-core", + "sp-keystore", + "sp-runtime", + "sp-std", ] [[package]] @@ -7662,21 +7378,8 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "parity-scale-codec 2.0.1", "parking_lot 0.11.1", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "thiserror", -] - -[[package]] -name = "sp-inherents" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2542380b535c6941502a0a3069a657eb5abb70fd67b11afa164d4a4b038ba73a" -dependencies = [ - "parity-scale-codec 2.0.1", - "parking_lot 0.11.1", - "sp-core 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-core", + "sp-std", "thiserror", ] @@ -7691,40 +7394,15 @@ dependencies = [ "log", "parity-scale-codec 2.0.1", "parking_lot 0.11.1", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-externalities 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-keystore 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime-interface 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-state-machine 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-tracing 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-trie 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-wasm-interface 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "tracing", - "tracing-core", -] - -[[package]] -name = "sp-io" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33fd69f0a6e91bedc2fb1c5cc3689c212474b6c918274cb4cb14dbbe3c428c14" -dependencies = [ - "futures 0.3.12", - "hash-db", - "libsecp256k1", - "log", - "parity-scale-codec 2.0.1", - "parking_lot 0.11.1", - "sp-core 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-externalities 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-keystore 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-runtime-interface 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-state-machine 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-tracing 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-trie 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-wasm-interface 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-core", + "sp-externalities", + "sp-keystore", + "sp-runtime-interface", + "sp-state-machine", + "sp-std", + "sp-tracing", + "sp-trie", + "sp-wasm-interface", "tracing", "tracing-core", ] @@ -7735,8 +7413,8 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "lazy_static", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", + "sp-runtime", "strum", ] @@ -7753,25 +7431,8 @@ dependencies = [ "parking_lot 0.11.1", "schnorrkel", "serde", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-externalities 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", -] - -[[package]] -name = "sp-keystore" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db6ccd2baf189112355338e8b224dc513cd239b974dbd717f12b3dc7a7248c3b" -dependencies = [ - "async-trait", - "derive_more", - "futures 0.3.12", - "merlin", - "parity-scale-codec 2.0.1", - "parking_lot 0.11.1", - "schnorrkel", - "sp-core 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-externalities 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-core", + "sp-externalities", ] [[package]] @@ -7779,9 +7440,9 @@ name = "sp-offchain" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", + "sp-core", + "sp-runtime", ] [[package]] @@ -7792,22 +7453,13 @@ dependencies = [ "backtrace", ] -[[package]] -name = "sp-panic-handler" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54702e109f1c8a870dd4065a497d2612d42cec5817126e96cc0658c5ea975784" -dependencies = [ - "backtrace", -] - [[package]] name = "sp-rpc" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "serde", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", ] [[package]] @@ -7824,33 +7476,11 @@ dependencies = [ "paste 1.0.4", "rand 0.7.3", "serde", - "sp-application-crypto 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-arithmetic 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-io 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", -] - -[[package]] -name = "sp-runtime" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfa4b353b76f04616dbdb8d269d58dcac47acb31c006d3b70e7b64233e68695e" -dependencies = [ - "either", - "hash256-std-hasher", - "impl-trait-for-tuples 0.2.1", - "log", - "parity-scale-codec 2.0.1", - "parity-util-mem", - "paste 1.0.4", - "rand 0.7.3", - "serde", - "sp-application-crypto 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-arithmetic 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-core 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-io 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-application-crypto", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-std", ] [[package]] @@ -7861,30 +7491,12 @@ dependencies = [ "impl-trait-for-tuples 0.2.1", "parity-scale-codec 2.0.1", "primitive-types 0.9.0", - "sp-externalities 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime-interface-proc-macro 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-storage 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-tracing 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-wasm-interface 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "static_assertions", -] - -[[package]] -name = "sp-runtime-interface" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2e5c88b4bc8d607e4e2ff767a85db58cf7101f3dd6064f06929342ea67fe8fb" -dependencies = [ - "impl-trait-for-tuples 0.2.1", - "parity-scale-codec 2.0.1", - "primitive-types 0.9.0", - "sp-externalities 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-runtime-interface-proc-macro 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-storage 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-tracing 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-wasm-interface 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-externalities", + "sp-runtime-interface-proc-macro", + "sp-std", + "sp-storage", + "sp-tracing", + "sp-wasm-interface", "static_assertions", ] @@ -7900,29 +7512,16 @@ dependencies = [ "syn", ] -[[package]] -name = "sp-runtime-interface-proc-macro" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19a6c7c2251512c9e533d15db8a863b06ece1cbee778130dd9adbe44b6b39aa9" -dependencies = [ - "Inflector", - "proc-macro-crate 0.1.5", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "sp-sandbox" version = "0.9.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "parity-scale-codec 2.0.1", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-io 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-wasm-interface 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", + "sp-io", + "sp-std", + "sp-wasm-interface", "wasmi", ] @@ -7941,11 +7540,11 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "parity-scale-codec 2.0.1", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-staking 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", + "sp-core", + "sp-runtime", + "sp-staking", + "sp-std", ] [[package]] @@ -7954,19 +7553,8 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "parity-scale-codec 2.0.1", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", -] - -[[package]] -name = "sp-staking" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc729eb10f8809c61a1fe439ac118a4413de004aaf863003ee8752ac0b596e73" -dependencies = [ - "parity-scale-codec 2.0.1", - "sp-runtime 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-runtime", + "sp-std", ] [[package]] @@ -7981,34 +7569,11 @@ dependencies = [ "parking_lot 0.11.1", "rand 0.7.3", "smallvec 1.6.1", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-externalities 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-panic-handler 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-trie 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "thiserror", - "trie-db", - "trie-root", -] - -[[package]] -name = "sp-state-machine" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46fa4143e58e9130f726d4e8a9b86f3530a8bd19a2eedcdcf4af205f4b5a6d4f" -dependencies = [ - "hash-db", - "log", - "num-traits", - "parity-scale-codec 2.0.1", - "parking_lot 0.11.1", - "rand 0.7.3", - "smallvec 1.6.1", - "sp-core 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-externalities 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-panic-handler 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-trie 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-core", + "sp-externalities", + "sp-panic-handler", + "sp-std", + "sp-trie", "thiserror", "trie-db", "trie-root", @@ -8019,12 +7584,6 @@ name = "sp-std" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" -[[package]] -name = "sp-std" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35391ea974fa5ee869cb094d5b437688fbf3d8127d64d1b9fed5822a1ed39b12" - [[package]] name = "sp-storage" version = "3.0.0" @@ -8034,22 +7593,8 @@ dependencies = [ "parity-scale-codec 2.0.1", "ref-cast", "serde", - "sp-debug-derive 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", -] - -[[package]] -name = "sp-storage" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86af458d4a0251c490cdde9dcaaccb88d398f3b97ac6694cdd49ed9337e6b961" -dependencies = [ - "impl-serde", - "parity-scale-codec 2.0.1", - "ref-cast", - "serde", - "sp-debug-derive 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-debug-derive", + "sp-std", ] [[package]] @@ -8058,11 +7603,11 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "log", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-externalities 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-io 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime-interface 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", + "sp-externalities", + "sp-io", + "sp-runtime-interface", + "sp-std", ] [[package]] @@ -8071,25 +7616,10 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "parity-scale-codec 2.0.1", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-inherents 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "wasm-timer", -] - -[[package]] -name = "sp-timestamp" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27387c541197b9f47f3d9ddcab5649a3ecdca582d2f2ea2b511af24a3d3cbf83" -dependencies = [ - "impl-trait-for-tuples 0.2.1", - "parity-scale-codec 2.0.1", - "sp-api 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-inherents 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-runtime 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-api", + "sp-inherents", + "sp-runtime", + "sp-std", "wasm-timer", ] @@ -8100,21 +7630,7 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "log", "parity-scale-codec 2.0.1", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "tracing", - "tracing-core", - "tracing-subscriber", -] - -[[package]] -name = "sp-tracing" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567382d8d4e14fb572752863b5cd57a78f9e9a6583332b590b726f061f3ea957" -dependencies = [ - "log", - "parity-scale-codec 2.0.1", - "sp-std 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-std", "tracing", "tracing-core", "tracing-subscriber", @@ -8130,9 +7646,9 @@ dependencies = [ "log", "parity-scale-codec 2.0.1", "serde", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", "sp-blockchain", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-runtime", "thiserror", ] @@ -8144,23 +7660,8 @@ dependencies = [ "hash-db", "memory-db", "parity-scale-codec 2.0.1", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "trie-db", - "trie-root", -] - -[[package]] -name = "sp-trie" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b85b7f745da41ef825c6f7b93f1fdc897b03df94a4884adfbb70fbcd0aed1298" -dependencies = [ - "hash-db", - "memory-db", - "parity-scale-codec 2.0.1", - "sp-core 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-core", + "sp-std", "trie-db", "trie-root", ] @@ -8185,21 +7686,8 @@ dependencies = [ "impl-serde", "parity-scale-codec 2.0.1", "serde", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", -] - -[[package]] -name = "sp-version" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbeffa538a13d715d30e01d57a2636ba32845b737a29a3ea32403576588222e7" -dependencies = [ - "impl-serde", - "parity-scale-codec 2.0.1", - "serde", - "sp-runtime 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", - "sp-std 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-runtime", + "sp-std", ] [[package]] @@ -8209,19 +7697,7 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "impl-trait-for-tuples 0.2.1", "parity-scale-codec 2.0.1", - "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "wasmi", -] - -[[package]] -name = "sp-wasm-interface" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b214e125666a6416cf30a70cc6a5dacd34a4e5197f8a3d479f714af7e1dc7a47" -dependencies = [ - "impl-trait-for-tuples 0.2.1", - "parity-scale-codec 2.0.1", - "sp-std 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sp-std", "wasmi", ] @@ -8359,11 +7835,11 @@ dependencies = [ "sc-client-api", "sc-rpc-api", "serde", - "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-api", "sp-block-builder", "sp-blockchain", - "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", - "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", + "sp-core", + "sp-runtime", "sp-transaction-pool", ] diff --git a/pallets/inflation/Cargo.toml b/pallets/inflation/Cargo.toml index 1c053b5bdd..4c01a63fcf 100644 --- a/pallets/inflation/Cargo.toml +++ b/pallets/inflation/Cargo.toml @@ -20,16 +20,16 @@ version = '2.0.0' [dependencies] serde = { version = "1.0.119" } -frame-support = { default-features = false, version = '3.0.0' } -frame-system = { default-features = false, version = '3.0.0' } -pallet-balances = { default-features = false, version = '3.0.0' } -pallet-timestamp = { default-features = false, version = '3.0.0' } -pallet-randomness-collective-flip = { default-features = false, version = '3.0.0' } -sp-std = { default-features = false, version = '3.0.0' } -frame-benchmarking = { default-features = false, version = "3.0.0", optional = true } -sp-core = { default-features = false, version = '3.0.0' } -sp-io = { default-features = false, version = '3.0.0' } -sp-runtime = { default-features = false, version = '3.0.0' } +frame-support = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +frame-system = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-balances = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-timestamp = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +pallet-randomness-collective-flip = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-std = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +frame-benchmarking = { default-features = false, version = "3.0.0", optional = true, git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-core = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-io = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } +sp-runtime = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } [features] default = ['std'] From f60077612324b60e1eae31dc08e1abaacf07e8c8 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Thu, 6 May 2021 16:34:48 +0300 Subject: [PATCH 28/66] feat: create_multiple_items chain extension Signed-off-by: Yaroslav Bolyukin --- pallets/nft/src/lib.rs | 17 +++++++++++++++++ runtime/src/chain_extension.rs | 26 ++++++++++++++++++++++++-- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/pallets/nft/src/lib.rs b/pallets/nft/src/lib.rs index 4d8e8a22fc..542a0bc647 100644 --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -1792,6 +1792,23 @@ impl Module { Ok(()) } + pub fn create_multiple_items_internal( + sender: T::AccountId, + collection: &CollectionHandle, + owner: T::AccountId, + items_data: Vec, + ) -> DispatchResult { + Self::can_create_items_in_collection(&collection, &sender, &owner, items_data.len() as u32)?; + + for data in &items_data { + Self::validate_create_item_args(&collection, data)?; + } + for data in &items_data { + Self::create_item_no_validation(&collection, owner.clone(), data.clone())?; + } + + Ok(()) + } fn is_correct_transfer(collection: &CollectionHandle, recipient: &T::AccountId) -> DispatchResult { let collection_id = collection.id; diff --git a/runtime/src/chain_extension.rs b/runtime/src/chain_extension.rs index a84adbcc6a..a8abce2efa 100644 --- a/runtime/src/chain_extension.rs +++ b/runtime/src/chain_extension.rs @@ -17,8 +17,6 @@ use frame_support::dispatch::DispatchError; extern crate pallet_nft; pub use pallet_nft::*; -use crate::Runtime; -use sp_runtime::AccountId32; use crate::Vec; /// Create item parameters @@ -38,6 +36,13 @@ pub struct NFTExtTransfer { pub amount: u128, } +#[derive(Debug, PartialEq, Encode, Decode)] +pub struct NFTExtCreateMultipleItems { + pub owner: ::AccountId, + pub collection_id: u32, + pub data: Vec, +} + /// The chain Extension of NFT pallet pub struct NFTExtension; @@ -81,6 +86,23 @@ impl ChainExtension for NFTExtension { _ => Err(DispatchError::Other("CreateItem error")) } }, + 2 => { + // Create multiple items + let mut env = env.buf_in_buf_out(); + let input: NFTExtCreateMultipleItems = env.read_as()?; + + let collection = pallet_nft::Module::::get_collection(input.collection_id)?; + + match pallet_nft::Module::::create_multiple_items_internal( + env.ext().address().clone(), + &collection, + input.owner, + input.data, + ) { + Ok(_) => Ok(RetVal::Converging(func_id)), + _ => Err(DispatchError::Other("CreateMultipleItems error")) + } + }, _ => { panic!("Passed unknown func_id to test chain extension: {}", func_id); } From 3c083fe1053980e63551457aaf1d72636d3137ee Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Thu, 6 May 2021 16:35:01 +0300 Subject: [PATCH 29/66] feat: approval chain extensions Signed-off-by: Yaroslav Bolyukin --- pallets/nft/src/lib.rs | 175 +++++++++++++++++++-------------- runtime/src/chain_extension.rs | 50 ++++++++++ 2 files changed, 152 insertions(+), 73 deletions(-) diff --git a/pallets/nft/src/lib.rs b/pallets/nft/src/lib.rs index 542a0bc647..4a81965bc0 100644 --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -1259,43 +1259,10 @@ decl_module! { pub fn approve(origin, spender: T::AccountId, collection_id: CollectionId, item_id: TokenId, amount: u128) -> DispatchResult { let sender = ensure_signed(origin)?; - let target_collection = Self::get_collection(collection_id)?; - - Self::token_exists(&target_collection, item_id)?; - - // Transfer permissions check - let bypasses_limits = target_collection.limits.owner_can_transfer && - Self::is_owner_or_admin_permissions( - &target_collection, - sender.clone(), - ); - - let allowance_limit = if bypasses_limits { - None - } else if let Some(amount) = Self::owned_amount( - sender.clone(), - &target_collection, - item_id, - ) { - Some(amount) - } else { - fail!(Error::::NoPermission); - }; - - if target_collection.access == AccessMode::WhiteList { - Self::check_white_list(&target_collection, &sender)?; - Self::check_white_list(&target_collection, &spender)?; - } + let collection = Self::get_collection(collection_id)?; - let allowance: u128 = amount - .checked_add(>::get(collection_id, (item_id, &sender, &spender))) - .ok_or(Error::::NumOverflow)?; - if let Some(limit) = allowance_limit { - ensure!(limit >= allowance, Error::::TokenValueTooLow); - } - >::insert(collection_id, (item_id, sender.clone(), spender.clone()), allowance); + Self::approve_internal(sender, spender, &collection, item_id, amount)?; - Self::deposit_event(RawEvent::Approved(target_collection.id, item_id, sender, spender, allowance)); Ok(()) } @@ -1323,46 +1290,10 @@ decl_module! { pub fn transfer_from(origin, from: T::AccountId, recipient: T::AccountId, collection_id: CollectionId, item_id: TokenId, value: u128 ) -> DispatchResult { let sender = ensure_signed(origin)?; - let target_collection = Self::get_collection(collection_id)?; - - // Check approval - let approval: u128 = >::get(collection_id, (item_id, &from, &sender)); - - // Limits check - Self::is_correct_transfer(&target_collection, &recipient)?; - - // Transfer permissions check - ensure!( - approval >= value || - ( - target_collection.limits.owner_can_transfer && - Self::is_owner_or_admin_permissions(&target_collection, sender.clone()) - ), - Error::::NoPermission - ); - - if target_collection.access == AccessMode::WhiteList { - Self::check_white_list(&target_collection, &sender)?; - Self::check_white_list(&target_collection, &recipient)?; - } + let collection = Self::get_collection(collection_id)?; - // Reduce approval by transferred amount or remove if remaining approval drops to 0 - if approval.saturating_sub(value) > 0 { - >::insert(collection_id, (item_id, &from, &sender), approval - value); - } - else { - >::remove(collection_id, (item_id, &from, &sender)); - } + Self::transfer_from_internal(sender, from, recipient, &collection, item_id, value)?; - match target_collection.mode - { - CollectionMode::NFT => Self::transfer_nft(&target_collection, item_id, from.clone(), recipient.clone())?, - CollectionMode::Fungible(_) => Self::transfer_fungible(&target_collection, value, &from, &recipient)?, - CollectionMode::ReFungible => Self::transfer_refungible(&target_collection, item_id, value, from.clone(), recipient.clone())?, - _ => () - }; - - Self::deposit_event(RawEvent::Transfer(target_collection.id, item_id, from, recipient, value)); Ok(()) } @@ -1792,6 +1723,104 @@ impl Module { Ok(()) } + pub fn approve_internal( + sender: T::AccountId, + spender: T::AccountId, + collection: &CollectionHandle, + item_id: TokenId, + amount: u128, + ) -> DispatchResult { + Self::token_exists(&collection, item_id)?; + + // Transfer permissions check + let bypasses_limits = collection.limits.owner_can_transfer && + Self::is_owner_or_admin_permissions( + &collection, + sender.clone(), + ); + + let allowance_limit = if bypasses_limits { + None + } else if let Some(amount) = Self::owned_amount( + sender.clone(), + &collection, + item_id, + ) { + Some(amount) + } else { + fail!(Error::::NoPermission); + }; + + if collection.access == AccessMode::WhiteList { + Self::check_white_list(&collection, &sender)?; + Self::check_white_list(&collection, &spender)?; + } + + let allowance: u128 = amount + .checked_add(>::get(collection.id, (item_id, &sender, &spender))) + .ok_or(Error::::NumOverflow)?; + if let Some(limit) = allowance_limit { + ensure!(limit >= allowance, Error::::TokenValueTooLow); + } + >::insert(collection.id, (item_id, &sender, &spender), allowance); + + Self::deposit_event(RawEvent::Approved(collection.id, item_id, sender, spender, allowance)); + Ok(()) + } + + pub fn transfer_from_internal( + sender: T::AccountId, + from: T::AccountId, + recipient: T::AccountId, + collection: &CollectionHandle, + item_id: TokenId, + amount: u128, + ) -> DispatchResult { + // Check approval + let approval: u128 = >::get(collection.id, (item_id, &from, &sender)); + + // Limits check + Self::is_correct_transfer(&collection, &recipient)?; + + // Transfer permissions check + ensure!( + approval >= amount || + ( + collection.limits.owner_can_transfer && + Self::is_owner_or_admin_permissions(&collection, sender.clone()) + ), + Error::::NoPermission + ); + + if collection.access == AccessMode::WhiteList { + Self::check_white_list(&collection, &sender)?; + Self::check_white_list(&collection, &recipient)?; + } + + // Reduce approval by transferred amount or remove if remaining approval drops to 0 + let allowance = approval.saturating_sub(amount); + if allowance > 0 { + >::insert(collection.id, (item_id, &from, &sender), allowance); + } else { + >::remove(collection.id, (item_id, &from, &sender)); + } + + match collection.mode { + CollectionMode::NFT => { + Self::transfer_nft(&collection, item_id, from.clone(), recipient.clone())? + } + CollectionMode::Fungible(_) => { + Self::transfer_fungible(&collection, amount, &from, &recipient)? + } + CollectionMode::ReFungible => { + Self::transfer_refungible(&collection, item_id, amount, from.clone(), recipient.clone())? + } + _ => () + }; + + Ok(()) + } + pub fn create_multiple_items_internal( sender: T::AccountId, collection: &CollectionHandle, diff --git a/runtime/src/chain_extension.rs b/runtime/src/chain_extension.rs index a8abce2efa..8c15e29e1b 100644 --- a/runtime/src/chain_extension.rs +++ b/runtime/src/chain_extension.rs @@ -43,6 +43,23 @@ pub struct NFTExtCreateMultipleItems { pub data: Vec, } +#[derive(Debug, PartialEq, Encode, Decode)] +pub struct NFTExtApprove { + pub spender: ::AccountId, + pub collection_id: u32, + pub item_id: u32, + pub amount: u128, +} + +#[derive(Debug, PartialEq, Encode, Decode)] +pub struct NFTExtTransferFrom { + pub owner: ::AccountId, + pub recipient: ::AccountId, + pub collection_id: u32, + pub item_id: u32, + pub amount: u128, +} + /// The chain Extension of NFT pallet pub struct NFTExtension; @@ -103,6 +120,39 @@ impl ChainExtension for NFTExtension { _ => Err(DispatchError::Other("CreateMultipleItems error")) } }, + 3 => { + // Approve + let mut env = env.buf_in_buf_out(); + let input: NFTExtApprove = env.read_as()?; + + let collection = pallet_nft::Module::::get_collection(input.collection_id)?; + + pallet_nft::Module::::approve_internal( + env.ext().address().clone(), + input.spender, + &collection, + input.item_id, + input.amount, + )?; + Ok(RetVal::Converging(func_id)) + }, + 4 => { + // Transfer from + let mut env = env.buf_in_buf_out(); + let input: NFTExtTransferFrom = env.read_as()?; + + let collection = pallet_nft::Module::::get_collection(input.collection_id)?; + + pallet_nft::Module::::transfer_from_internal( + env.ext().address().clone(), + input.owner, + input.recipient, + &collection, + input.item_id, + input.amount + )?; + Ok(RetVal::Converging(func_id)) + }, _ => { panic!("Passed unknown func_id to test chain extension: {}", func_id); } From 13a0a851fa9670342af61a044c1141e768913397 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Thu, 6 May 2021 16:35:05 +0300 Subject: [PATCH 30/66] feat: set_variable_meta_data chain extension Signed-off-by: Yaroslav Bolyukin --- pallets/nft/src/lib.rs | 44 +++++++++++++++++++++------------- runtime/src/chain_extension.rs | 22 +++++++++++++++++ 2 files changed, 50 insertions(+), 16 deletions(-) diff --git a/pallets/nft/src/lib.rs b/pallets/nft/src/lib.rs index 4a81965bc0..a236a210fd 100644 --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -1334,23 +1334,9 @@ decl_module! { ) -> DispatchResult { let sender = ensure_signed(origin)?; - let target_collection = Self::get_collection(collection_id)?; - Self::token_exists(&target_collection, item_id)?; - - ensure!(ChainLimit::get().custom_data_limit >= data.len() as u32, Error::::TokenVariableDataLimitExceeded); - - // Modify permissions check - ensure!(Self::is_item_owner(sender.clone(), &target_collection, item_id) || - Self::is_owner_or_admin_permissions(&target_collection, sender.clone()), - Error::::NoPermission); + let collection = Self::get_collection(collection_id)?; - match target_collection.mode - { - CollectionMode::NFT => Self::set_nft_variable_data(&target_collection, item_id, data)?, - CollectionMode::ReFungible => Self::set_re_fungible_variable_data(&target_collection, item_id, data)?, - CollectionMode::Fungible(_) => fail!(Error::::CantStoreMetadataInFungibleTokens), - _ => fail!(Error::::UnexpectedCollectionType) - }; + Self::set_variable_meta_data_internal(sender, &collection, item_id, data)?; Ok(()) } @@ -1821,6 +1807,32 @@ impl Module { Ok(()) } + pub fn set_variable_meta_data_internal( + sender: T::AccountId, + collection: &CollectionHandle, + item_id: TokenId, + data: Vec, + ) -> DispatchResult { + Self::token_exists(&collection, item_id)?; + + ensure!(ChainLimit::get().custom_data_limit >= data.len() as u32, Error::::TokenVariableDataLimitExceeded); + + // Modify permissions check + ensure!(Self::is_item_owner(sender.clone(), &collection, item_id) || + Self::is_owner_or_admin_permissions(&collection, sender.clone()), + Error::::NoPermission); + + match collection.mode + { + CollectionMode::NFT => Self::set_nft_variable_data(&collection, item_id, data)?, + CollectionMode::ReFungible => Self::set_re_fungible_variable_data(&collection, item_id, data)?, + CollectionMode::Fungible(_) => fail!(Error::::CantStoreMetadataInFungibleTokens), + _ => fail!(Error::::UnexpectedCollectionType) + }; + + Ok(()) + } + pub fn create_multiple_items_internal( sender: T::AccountId, collection: &CollectionHandle, diff --git a/runtime/src/chain_extension.rs b/runtime/src/chain_extension.rs index 8c15e29e1b..6c4a700a49 100644 --- a/runtime/src/chain_extension.rs +++ b/runtime/src/chain_extension.rs @@ -60,6 +60,13 @@ pub struct NFTExtTransferFrom { pub amount: u128, } +#[derive(Debug, PartialEq, Encode, Decode)] +pub struct NFTExtSetVariableMetaData { + pub collection_id: u32, + pub item_id: u32, + pub data: Vec, +} + /// The chain Extension of NFT pallet pub struct NFTExtension; @@ -153,6 +160,21 @@ impl ChainExtension for NFTExtension { )?; Ok(RetVal::Converging(func_id)) }, + 5 => { + // Set variable metadata + let mut env = env.buf_in_buf_out(); + let input: NFTExtSetVariableMetaData = env.read_as()?; + + let collection = pallet_nft::Module::::get_collection(input.collection_id)?; + + pallet_nft::Module::::set_variable_meta_data_internal( + env.ext().address().clone(), + &collection, + input.item_id, + input.data, + )?; + Ok(RetVal::Converging(func_id)) + }, _ => { panic!("Passed unknown func_id to test chain extension: {}", func_id); } From b3fda41c65ef3d5198749d60622f0184af244734 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Thu, 6 May 2021 16:35:08 +0300 Subject: [PATCH 31/66] feat: add/remove from white list chain extension Signed-off-by: Yaroslav Bolyukin --- pallets/nft/src/lib.rs | 35 +++++++++++++++++++++++++++++----- runtime/src/chain_extension.rs | 22 +++++++++++++++++++++ 2 files changed, 52 insertions(+), 5 deletions(-) diff --git a/pallets/nft/src/lib.rs b/pallets/nft/src/lib.rs index a236a210fd..fb95107878 100644 --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -842,10 +842,14 @@ decl_module! { let sender = ensure_signed(origin)?; let collection = Self::get_collection(collection_id)?; - Self::check_owner_or_admin_permissions(&collection, sender)?; - >::insert(collection_id, address, true); - + Self::toggle_white_list_internal( + &sender, + &collection, + &address, + true, + )?; + Ok(()) } @@ -867,9 +871,13 @@ decl_module! { let sender = ensure_signed(origin)?; let collection = Self::get_collection(collection_id)?; - Self::check_owner_or_admin_permissions(&collection, sender)?; - >::remove(collection_id, address); + Self::toggle_white_list_internal( + &sender, + &collection, + &address, + false, + )?; Ok(()) } @@ -1851,6 +1859,23 @@ impl Module { Ok(()) } + pub fn toggle_white_list_internal( + sender: &T::AccountId, + collection: &CollectionHandle, + address: &T::AccountId, + whitelisted: bool, + ) -> DispatchResult { + Self::check_owner_or_admin_permissions(&collection, sender.clone())?; + + if whitelisted { + >::insert(collection.id, address, true); + } else { + >::remove(collection.id, address); + } + + Ok(()) + } + fn is_correct_transfer(collection: &CollectionHandle, recipient: &T::AccountId) -> DispatchResult { let collection_id = collection.id; diff --git a/runtime/src/chain_extension.rs b/runtime/src/chain_extension.rs index 6c4a700a49..52024a86a8 100644 --- a/runtime/src/chain_extension.rs +++ b/runtime/src/chain_extension.rs @@ -67,6 +67,13 @@ pub struct NFTExtSetVariableMetaData { pub data: Vec, } +#[derive(Debug, PartialEq, Encode, Decode)] +pub struct NFTExtToggleWhiteList { + pub collection_id: u32, + pub address: ::AccountId, + pub whitelisted: bool, +} + /// The chain Extension of NFT pallet pub struct NFTExtension; @@ -175,6 +182,21 @@ impl ChainExtension for NFTExtension { )?; Ok(RetVal::Converging(func_id)) }, + 6 => { + // Toggle whitelist + let mut env = env.buf_in_buf_out(); + let input: NFTExtToggleWhiteList = env.read_as()?; + + let collection = pallet_nft::Module::::get_collection(input.collection_id)?; + + pallet_nft::Module::::toggle_white_list_internal( + &env.ext().address().clone(), + &collection, + &input.address, + input.whitelisted, + )?; + Ok(RetVal::Converging(func_id)) + } _ => { panic!("Passed unknown func_id to test chain extension: {}", func_id); } From ba80c8caeee36631758afc417bae6e9a9d9e0c26 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 30 Apr 2021 18:21:37 +0300 Subject: [PATCH 32/66] test: CrossAccountId support Signed-off-by: Yaroslav Bolyukin (cherry picked from commit 170ccd08eb45e7d485e047a32109dc123abffcee) Signed-off-by: Yaroslav Bolyukin --- runtime_types.json | 4 +- tests/package.json | 34 +- tests/src/addCollectionAdmin.test.ts | 34 +- tests/src/addToContractWhiteList.test.ts | 2 +- tests/src/addToWhiteList.test.ts | 7 +- tests/src/burnItem.test.ts | 13 +- tests/src/change-collection-owner.test.ts | 14 +- tests/src/confirmSponsorship.test.ts | 17 +- tests/src/contracts.test.ts | 9 +- tests/src/createMultipleItems.test.ts | 63 +- tests/src/pallet-presence.test.ts | 2 +- tests/src/removeCollectionAdmin.test.ts | 23 +- tests/src/removeCollectionSponsor.test.ts | 3 +- tests/src/removeFromContractWhiteList.test.ts | 18 +- tests/src/setConstOnChainSchema.test.ts | 5 +- tests/src/setPublicAccessMode.test.ts | 3 +- tests/src/setVariableOnChainSchema.test.ts | 5 +- tests/src/util/helpers.ts | 207 +- tests/yarn.lock | 4458 +++++++++++------ 19 files changed, 3290 insertions(+), 1631 deletions(-) diff --git a/runtime_types.json b/runtime_types.json index e1c7433100..41a8dc37b1 100644 --- a/runtime_types.json +++ b/runtime_types.json @@ -40,8 +40,8 @@ "SponsorshipState": { "_enum": { "disabled": null, - "unconfirmed": "CrossAccountId", - "confirmed": "CrossAccountId" + "unconfirmed": "AccountId", + "confirmed": "AccountId" } }, "Collection": { diff --git a/tests/package.json b/tests/package.json index 7255d17aaf..bd46a21aa8 100644 --- a/tests/package.json +++ b/tests/package.json @@ -4,21 +4,22 @@ "description": "Substrate Nft tests", "main": "", "devDependencies": { - "@polkadot/dev": "^0.61.24", - "@polkadot/ts": "^0.3.59", - "@polkadot/typegen": "^3.6.4", - "@polkadot/util-crypto": "^5.4.4", - "@types/chai": "^4.2.12", + "@polkadot/dev": "^0.62.10", + "@polkadot/ts": "^0.3.63", + "@polkadot/typegen": "^4.7.2", + "@polkadot/util-crypto": "^6.3.1", + "@types/chai": "^4.2.17", "@types/chai-as-promised": "^7.1.3", - "@types/mocha": "^8.0.3", - "chai": "^4.2.0", - "mocha": "^8.1.1", - "ts-node": "^9.0.0", - "tslint": "^5.20.1", - "typescript": "^3.9.7" + "@types/mocha": "^8.2.2", + "chai": "^4.3.4", + "mocha": "^8.3.2", + "ts-node": "^9.1.1", + "tslint": "^6.1.3", + "typescript": "^4.2.4" }, "scripts": { "test": "mocha --timeout 9999999 -r ts-node/register ./**/*.test.ts", + "testEth": "mocha --timeout 9999999 -r ts-node/register ./**/eth/**/*.test.ts", "load": "mocha --timeout 9999999 -r ts-node/register ./**/*.load.ts", "loadTransfer": "ts-node src/transfer.nload.ts", "testCollision": "mocha --timeout 9999999 -r ts-node/register ./src/collision-tests/*.test.ts", @@ -58,11 +59,12 @@ "license": "SEE LICENSE IN ../LICENSE", "homepage": "", "dependencies": { - "@polkadot/api": "3.8.1", - "@polkadot/api-contract": "3.8.1", - "@polkadot/util": "5.6.2", - "bignumber.js": "^9.0.0", - "chai-as-promised": "^7.1.1" + "@polkadot/api": "4.7.2", + "@polkadot/api-contract": "4.7.2", + "@polkadot/util": "6.3.1", + "bignumber.js": "^9.0.1", + "chai-as-promised": "^7.1.1", + "web3": "^1.3.5" }, "standard": { "globals": [ diff --git a/tests/src/addCollectionAdmin.test.ts b/tests/src/addCollectionAdmin.test.ts index b76d0eb0b7..2fe29182da 100644 --- a/tests/src/addCollectionAdmin.test.ts +++ b/tests/src/addCollectionAdmin.test.ts @@ -9,7 +9,7 @@ import chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; import privateKey from './substrate/privateKey'; import { default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync } from './substrate/substrate-api'; -import {createCollectionExpectSuccess, destroyCollectionExpectSuccess} from './util/helpers'; +import {createCollectionExpectSuccess, destroyCollectionExpectSuccess, normalizeAccountId} from './util/helpers'; chai.use(chaiAsPromised); const expect = chai.expect; @@ -22,13 +22,13 @@ describe('Integration Test addCollectionAdmin(collection_id, new_admin_id):', () const bob = privateKey('//Bob'); const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON(); - expect(collection.Owner.toString()).to.be.eq(alice.address); + expect(collection.Owner).to.be.deep.eq(normalizeAccountId(alice.address)); - const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, bob.address); + const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(bob.address)); await submitTransactionAsync(alice, changeAdminTx); const adminListAfterAddAdmin: any = (await api.query.nft.adminList(collectionId)); - expect(adminListAfterAddAdmin).to.be.contains(bob.address); + expect(adminListAfterAddAdmin).to.be.contains(normalizeAccountId(bob.address)); }); }); @@ -40,19 +40,19 @@ describe('Integration Test addCollectionAdmin(collection_id, new_admin_id):', () const Charlie = privateKey('//CHARLIE'); const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON(); - expect(collection.Owner.toString()).to.be.eq(Alice.address); + expect(collection.Owner).to.be.deep.eq(normalizeAccountId(Alice.address)); - const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, Bob.address); + const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Bob.address)); await submitTransactionAsync(Alice, changeAdminTx); const adminListAfterAddAdmin: any = (await api.query.nft.adminList(collectionId)); - expect(adminListAfterAddAdmin).to.be.contains(Bob.address); + expect(adminListAfterAddAdmin).to.be.contains(normalizeAccountId(Bob.address)); - const changeAdminTxCharlie = api.tx.nft.addCollectionAdmin(collectionId, Charlie.address); + const changeAdminTxCharlie = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Charlie.address)); await submitTransactionAsync(Bob, changeAdminTxCharlie); const adminListAfterAddNewAdmin: any = (await api.query.nft.adminList(collectionId)); - expect(adminListAfterAddNewAdmin).to.be.contains(Bob.address); - expect(adminListAfterAddNewAdmin).to.be.contains(Charlie.address); + expect(adminListAfterAddNewAdmin).to.be.contains(normalizeAccountId(Bob.address)); + expect(adminListAfterAddNewAdmin).to.be.contains(normalizeAccountId(Charlie.address)); }); }); }); @@ -64,11 +64,11 @@ describe('Negative Integration Test addCollectionAdmin(collection_id, new_admin_ const alice = privateKey('//Alice'); const nonOwner = privateKey('//Bob_stash'); - const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, alice.address); + const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(alice.address)); await expect(submitTransactionExpectFailAsync(nonOwner, changeAdminTx)).to.be.rejected; const adminListAfterAddAdmin: any = (await api.query.nft.adminList(collectionId)); - expect(adminListAfterAddAdmin).not.to.be.contains(alice.address); + expect(adminListAfterAddAdmin).not.to.be.contains(normalizeAccountId(alice.address)); // Verifying that nothing bad happened (network is live, new collections can be created, etc.) await createCollectionExpectSuccess(); @@ -81,7 +81,7 @@ describe('Negative Integration Test addCollectionAdmin(collection_id, new_admin_ const alice = privateKey('//Alice'); const bob = privateKey('//Bob'); - const changeOwnerTx = api.tx.nft.addCollectionAdmin(collectionId, bob.address); + const changeOwnerTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(bob.address)); await expect(submitTransactionExpectFailAsync(alice, changeOwnerTx)).to.be.rejected; // Verifying that nothing bad happened (network is live, new collections can be created, etc.) @@ -95,7 +95,7 @@ describe('Negative Integration Test addCollectionAdmin(collection_id, new_admin_ const Alice = privateKey('//Alice'); const Bob = privateKey('//Bob'); await destroyCollectionExpectSuccess(collectionId); - const changeOwnerTx = api.tx.nft.addCollectionAdmin(collectionId, Bob.address); + const changeOwnerTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Bob.address)); await expect(submitTransactionExpectFailAsync(Alice, changeOwnerTx)).to.be.rejected; // Verifying that nothing bad happened (network is live, new collections can be created, etc.) @@ -122,13 +122,13 @@ describe('Negative Integration Test addCollectionAdmin(collection_id, new_admin_ expect(chainAdminLimit).to.be.equal(5); for (let i = 0; i < chainAdminLimit; i++) { - const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, accounts[i]); + const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(accounts[i])); await submitTransactionAsync(Alice, changeAdminTx); const adminListAfterAddAdmin: any = (await api.query.nft.adminList(collectionId)); - expect(adminListAfterAddAdmin).to.be.contains(accounts[i]); + expect(adminListAfterAddAdmin).to.be.contains(normalizeAccountId(accounts[i])); } - const tx = api.tx.nft.addCollectionAdmin(collectionId, accounts[chainAdminLimit]); + const tx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(accounts[chainAdminLimit])); await expect(submitTransactionExpectFailAsync(Alice, tx)).to.be.rejected; }); }); diff --git a/tests/src/addToContractWhiteList.test.ts b/tests/src/addToContractWhiteList.test.ts index b17bfdad50..2847375666 100644 --- a/tests/src/addToContractWhiteList.test.ts +++ b/tests/src/addToContractWhiteList.test.ts @@ -11,7 +11,7 @@ import { deployFlipper } from "./util/contracthelpers"; import { - getGenericResult + getGenericResult, normalizeAccountId } from "./util/helpers" chai.use(chaiAsPromised); diff --git a/tests/src/addToWhiteList.test.ts b/tests/src/addToWhiteList.test.ts index 472d93bedb..6bab6577e3 100644 --- a/tests/src/addToWhiteList.test.ts +++ b/tests/src/addToWhiteList.test.ts @@ -15,6 +15,7 @@ import { destroyCollectionExpectSuccess, enablePublicMintingExpectSuccess, enableWhiteListExpectSuccess, + normalizeAccountId, } from './util/helpers'; chai.use(chaiAsPromised); @@ -54,7 +55,7 @@ describe('Negative Integration Test ext. addToWhiteList()', () => { const collectionId = parseInt((await api.query.nft.createdCollectionCount()).toString()) + 1; const Bob = privateKey('//Bob'); - const tx = api.tx.nft.addToWhiteList(collectionId, Bob.address); + const tx = api.tx.nft.addToWhiteList(collectionId, normalizeAccountId(Bob.address)); await expect(submitTransactionExpectFailAsync(Alice, tx)).to.be.rejected; }); }); @@ -66,7 +67,7 @@ describe('Negative Integration Test ext. addToWhiteList()', () => { // tslint:disable-next-line: no-bitwise const collectionId = await createCollectionExpectSuccess(); await destroyCollectionExpectSuccess(collectionId); - const tx = api.tx.nft.addToWhiteList(collectionId, Bob.address); + const tx = api.tx.nft.addToWhiteList(collectionId, normalizeAccountId(Bob.address)); await expect(submitTransactionExpectFailAsync(Alice, tx)).to.be.rejected; }); }); @@ -78,7 +79,7 @@ describe('Negative Integration Test ext. addToWhiteList()', () => { const collectionId = await createCollectionExpectSuccess(); await enableWhiteListExpectSuccess(Alice, collectionId); await enablePublicMintingExpectSuccess(Alice, collectionId); - const tx = api.tx.nft.createItem(collectionId, Ferdie.address, 'NFT'); + const tx = api.tx.nft.createItem(collectionId, normalizeAccountId(Ferdie.address), 'NFT'); await expect(submitTransactionExpectFailAsync(Ferdie, tx)).to.be.rejected; }); }); diff --git a/tests/src/burnItem.test.ts b/tests/src/burnItem.test.ts index 4ffa8cf14e..816288396f 100644 --- a/tests/src/burnItem.test.ts +++ b/tests/src/burnItem.test.ts @@ -10,7 +10,8 @@ import { createCollectionExpectSuccess, createItemExpectSuccess, getGenericResult, - destroyCollectionExpectSuccess + destroyCollectionExpectSuccess, + normalizeAccountId } from './util/helpers'; import { nullPublicKey } from "./accounts"; @@ -99,7 +100,7 @@ describe('integration test: ext. burnItem():', () => { await usingApi(async (api) => { // Transfer 1/100 of the token to Bob - const transfertx = api.tx.nft.transfer(bob.address, collectionId, tokenId, 1); + const transfertx = api.tx.nft.transfer(normalizeAccountId(bob.address), collectionId, tokenId, 1); const events1 = await submitTransactionAsync(alice, transfertx); const result1 = getGenericResult(events1); @@ -119,9 +120,9 @@ describe('integration test: ext. burnItem():', () => { expect(result1.success).to.be.true; expect(balanceBefore).to.be.not.null; expect(balanceBefore.Owner.length).to.be.equal(2); - expect(balanceBefore.Owner[0].Owner).to.be.equal(alice.address); + expect(balanceBefore.Owner[0].Owner).to.be.deep.equal(normalizeAccountId(alice.address)); expect(balanceBefore.Owner[0].Fraction).to.be.equal(99); - expect(balanceBefore.Owner[1].Owner).to.be.equal(bob.address); + expect(balanceBefore.Owner[1].Owner).to.be.deep.equal(normalizeAccountId(bob.address)); expect(balanceBefore.Owner[1].Fraction).to.be.equal(1); // What to expect after burning @@ -129,7 +130,7 @@ describe('integration test: ext. burnItem():', () => { expect(balance).to.be.not.null; expect(balance.Owner.length).to.be.equal(1); expect(balance.Owner[0].Fraction).to.be.equal(99); - expect(balance.Owner[0].Owner).to.be.equal(alice.address); + expect(balance.Owner[0].Owner).to.be.deep.equal(normalizeAccountId(alice.address)); }); }); @@ -203,7 +204,7 @@ describe('Negative integration test: ext. burnItem():', () => { const result1 = getGenericResult(events1); expect(result1.success).to.be.true; - const tx = api.tx.nft.transfer(bob.address, collectionId, tokenId, 0); + const tx = api.tx.nft.transfer(normalizeAccountId(bob.address), collectionId, tokenId, 0); const badTransaction = async function () { await submitTransactionExpectFailAsync(alice, tx); }; diff --git a/tests/src/change-collection-owner.test.ts b/tests/src/change-collection-owner.test.ts index 4c74393690..5814f83830 100644 --- a/tests/src/change-collection-owner.test.ts +++ b/tests/src/change-collection-owner.test.ts @@ -7,7 +7,7 @@ import chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; import privateKey from './substrate/privateKey'; import { default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync } from "./substrate/substrate-api"; -import { createCollectionExpectSuccess, createCollectionExpectFailure } from "./util/helpers"; +import { createCollectionExpectSuccess, createCollectionExpectFailure, normalizeAccountId } from "./util/helpers"; chai.use(chaiAsPromised); const expect = chai.expect; @@ -20,13 +20,13 @@ describe('Integration Test changeCollectionOwner(collection_id, new_owner):', () const bob = privateKey('//Bob'); const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON(); - expect(collection.Owner.toString()).to.be.eq(alice.address); + expect(collection.Owner).to.be.deep.eq(normalizeAccountId(alice.address)); - const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address); + const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, normalizeAccountId(bob.address)); await submitTransactionAsync(alice, changeOwnerTx); const collectionAfterOwnerChange: any = (await api.query.nft.collectionById(collectionId)).toJSON(); - expect(collectionAfterOwnerChange.Owner.toString()).to.be.eq(bob.address); + expect(collectionAfterOwnerChange.Owner).to.be.deep.eq(normalizeAccountId(bob.address)); }); }); }); @@ -38,11 +38,11 @@ describe('Negative Integration Test changeCollectionOwner(collection_id, new_own const alice = privateKey('//Alice'); const bob = privateKey('//Bob'); - const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address); + const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, normalizeAccountId(bob.address)); await expect(submitTransactionExpectFailAsync(bob, changeOwnerTx)).to.be.rejected; const collectionAfterOwnerChange: any = (await api.query.nft.collectionById(collectionId)).toJSON(); - expect(collectionAfterOwnerChange.Owner.toString()).to.be.eq(alice.address); + expect(collectionAfterOwnerChange.Owner).to.be.deep.eq(normalizeAccountId(alice.address)); // Verifying that nothing bad happened (network is live, new collections can be created, etc.) await createCollectionExpectSuccess(); @@ -54,7 +54,7 @@ describe('Negative Integration Test changeCollectionOwner(collection_id, new_own const alice = privateKey('//Alice'); const bob = privateKey('//Bob'); - const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address); + const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, normalizeAccountId(bob.address)); await expect(submitTransactionExpectFailAsync(alice, changeOwnerTx)).to.be.rejected; // Verifying that nothing bad happened (network is live, new collections can be created, etc.) diff --git a/tests/src/confirmSponsorship.test.ts b/tests/src/confirmSponsorship.test.ts index d034710fad..3bfe740e6a 100644 --- a/tests/src/confirmSponsorship.test.ts +++ b/tests/src/confirmSponsorship.test.ts @@ -19,6 +19,7 @@ import { enableWhiteListExpectSuccess, enablePublicMintingExpectSuccess, addToWhiteListExpectSuccess, + normalizeAccountId, } from "./util/helpers"; import { Keyring } from "@polkadot/api"; import { IKeyringPair } from "@polkadot/types/types"; @@ -76,7 +77,7 @@ describe('integration test: ext. confirmSponsorship():', () => { const itemId = await createItemExpectSuccess(alice, collectionId, 'NFT', zeroBalance.address); // Transfer this tokens from unused address to Alice - const zeroToAlice = api.tx.nft.transfer(zeroBalance.address, collectionId, itemId, 0); + const zeroToAlice = api.tx.nft.transfer(normalizeAccountId(zeroBalance.address), collectionId, itemId, 0); const events = await submitTransactionAsync(zeroBalance, zeroToAlice); const result = getGenericResult(events); @@ -103,7 +104,7 @@ describe('integration test: ext. confirmSponsorship():', () => { const itemId = await createItemExpectSuccess(alice, collectionId, 'Fungible', zeroBalance.address); // Transfer this tokens from unused address to Alice - const zeroToAlice = api.tx.nft.transfer(zeroBalance.address, collectionId, itemId, 1); + const zeroToAlice = api.tx.nft.transfer(normalizeAccountId(zeroBalance.address), collectionId, itemId, 1); const events1 = await submitTransactionAsync(zeroBalance, zeroToAlice); const result1 = getGenericResult(events1); @@ -129,7 +130,7 @@ describe('integration test: ext. confirmSponsorship():', () => { const itemId = await createItemExpectSuccess(alice, collectionId, 'ReFungible', zeroBalance.address); // Transfer this tokens from unused address to Alice - const zeroToAlice = api.tx.nft.transfer(zeroBalance.address, collectionId, itemId, 1); + const zeroToAlice = api.tx.nft.transfer(normalizeAccountId(zeroBalance.address), collectionId, itemId, 1); const events1 = await submitTransactionAsync(zeroBalance, zeroToAlice); const result1 = getGenericResult(events1); @@ -184,13 +185,13 @@ describe('integration test: ext. confirmSponsorship():', () => { // Transfer this token from Alice to unused address and back // Alice to Zero gets sponsored - const aliceToZero = api.tx.nft.transfer(zeroBalance.address, collectionId, itemId, 0); + const aliceToZero = api.tx.nft.transfer(normalizeAccountId(zeroBalance.address), collectionId, itemId, 0); const events1 = await submitTransactionAsync(alice, aliceToZero); const result1 = getGenericResult(events1); // Second transfer should fail const AsponsorBalance = new BigNumber((await api.query.system.account(bob.address)).data.free.toString()); - const zeroToAlice = api.tx.nft.transfer(alice.address, collectionId, itemId, 0); + const zeroToAlice = api.tx.nft.transfer(normalizeAccountId(alice.address), collectionId, itemId, 0); const badTransaction = async function () { await submitTransactionExpectFailAsync(zeroBalance, zeroToAlice); }; @@ -222,7 +223,7 @@ describe('integration test: ext. confirmSponsorship():', () => { const itemId = await createItemExpectSuccess(alice, collectionId, 'Fungible', zeroBalance.address); // Transfer this tokens in parts from unused address to Alice - const zeroToAlice = api.tx.nft.transfer(zeroBalance.address, collectionId, itemId, 1); + const zeroToAlice = api.tx.nft.transfer(normalizeAccountId(zeroBalance.address), collectionId, itemId, 1); const events1 = await submitTransactionAsync(zeroBalance, zeroToAlice); const result1 = getGenericResult(events1); @@ -260,13 +261,13 @@ describe('integration test: ext. confirmSponsorship():', () => { // Transfer this token from Alice to unused address and back // Alice to Zero gets sponsored - const aliceToZero = api.tx.nft.transfer(zeroBalance.address, collectionId, itemId, 1); + const aliceToZero = api.tx.nft.transfer(normalizeAccountId(zeroBalance.address), collectionId, itemId, 1); const events1 = await submitTransactionAsync(alice, aliceToZero); const result1 = getGenericResult(events1); // Second transfer should fail const AsponsorBalance = new BigNumber((await api.query.system.account(bob.address)).data.free.toString()); - const zeroToAlice = api.tx.nft.transfer(alice.address, collectionId, itemId, 1); + const zeroToAlice = api.tx.nft.transfer(normalizeAccountId(alice.address), collectionId, itemId, 1); const badTransaction = async function () { await submitTransactionExpectFailAsync(zeroBalance, zeroToAlice); }; diff --git a/tests/src/contracts.test.ts b/tests/src/contracts.test.ts index a1c6398ca0..72df3e44e9 100644 --- a/tests/src/contracts.test.ts +++ b/tests/src/contracts.test.ts @@ -18,7 +18,8 @@ import { import { createCollectionExpectSuccess, createItemExpectSuccess, - getGenericResult + getGenericResult, + normalizeAccountId } from "./util/helpers"; @@ -66,15 +67,17 @@ describe('Contracts', () => { const tokenBefore: any = (await api.query.nft.nftItemList(collectionId, tokenId) as any).unwrap(); // Transfer + console.log('transfer using contract'); const transferTx = contract.tx.transfer(value, gasLimit, bob.address, collectionId, tokenId, 1); const events = await submitTransactionAsync(alice, transferTx); + console.log('done'); const result = getGenericResult(events); const tokenAfter: any = (await api.query.nft.nftItemList(collectionId, tokenId) as any).unwrap(); // tslint:disable-next-line:no-unused-expression expect(result.success).to.be.true; - expect(tokenBefore.Owner.toString()).to.be.equal(alice.address); - expect(tokenAfter.Owner.toString()).to.be.equal(bob.address); + expect(tokenBefore.Owner).to.be.deep.equal(normalizeAccountId(alice.address)); + expect(tokenAfter.Owner).to.be.deep.equal(normalizeAccountId(bob.address)); }); }); }); diff --git a/tests/src/createMultipleItems.test.ts b/tests/src/createMultipleItems.test.ts index bcd5752dee..1edd066681 100644 --- a/tests/src/createMultipleItems.test.ts +++ b/tests/src/createMultipleItems.test.ts @@ -13,6 +13,7 @@ import { destroyCollectionExpectSuccess, getGenericResult, IReFungibleTokenDataType, + normalizeAccountId, setCollectionLimitsExpectSuccess, } from './util/helpers'; @@ -33,8 +34,8 @@ describe('Integration Test createMultipleItems(collection_id, owner, items_data) expect(itemsListIndexBefore.toNumber()).to.be.equal(0); const Alice = privateKey('//Alice'); const args = [{ nft: ['0x31', '0x31'] }, { nft: ['0x32', '0x32'] }, { nft: ['0x33', '0x33'] }]; - const createMultipleItemsTx = await api.tx.nft - .createMultipleItems(collectionId, Alice.address, args); + const createMultipleItemsTx = api.tx.nft + .createMultipleItems(collectionId, normalizeAccountId(Alice.address), args); await submitTransactionAsync(Alice, createMultipleItemsTx); const itemsListIndexAfter = await api.query.nft.itemListIndex(collectionId) as unknown as BN; expect(itemsListIndexAfter.toNumber()).to.be.equal(3); @@ -42,9 +43,9 @@ describe('Integration Test createMultipleItems(collection_id, owner, items_data) const token2Data = (await api.query.nft.nftItemList(collectionId, 2)).toJSON() as unknown as ITokenDataType; const token3Data = (await api.query.nft.nftItemList(collectionId, 3)).toJSON() as unknown as ITokenDataType; - expect(token1Data.Owner.toString()).to.be.equal(Alice.address); - expect(token2Data.Owner.toString()).to.be.equal(Alice.address); - expect(token3Data.Owner.toString()).to.be.equal(Alice.address); + expect(token1Data.Owner).to.be.deep.equal(normalizeAccountId(Alice.address)); + expect(token2Data.Owner).to.be.deep.equal(normalizeAccountId(Alice.address)); + expect(token3Data.Owner).to.be.deep.equal(normalizeAccountId(Alice.address)); expect(token1Data.ConstData.toString()).to.be.equal('0x31'); expect(token2Data.ConstData.toString()).to.be.equal('0x32'); @@ -67,23 +68,23 @@ describe('Integration Test createMultipleItems(collection_id, owner, items_data) {refungible: {const_data: [0x32], variable_data: [0x32], pieces: 1}}, {refungible: {const_data: [0x33], variable_data: [0x33], pieces: 1}}, ]; - const createMultipleItemsTx = await api.tx.nft - .createMultipleItems(collectionId, Alice.address, args); + const createMultipleItemsTx = api.tx.nft + .createMultipleItems(collectionId, normalizeAccountId(Alice.address), args); await submitTransactionAsync(Alice, createMultipleItemsTx); const itemsListIndexAfter = await api.query.nft.itemListIndex(collectionId) as unknown as BN; expect(itemsListIndexAfter.toNumber()).to.be.equal(3); - const token1Data = (await api.query.nft.reFungibleItemList(collectionId, 1) as any).unwrap() as unknown as IReFungibleTokenDataType; - const token2Data = (await api.query.nft.reFungibleItemList(collectionId, 2) as any).unwrap() as unknown as IReFungibleTokenDataType; - const token3Data = (await api.query.nft.reFungibleItemList(collectionId, 3) as any).unwrap() as unknown as IReFungibleTokenDataType; + const token1Data = (await api.query.nft.reFungibleItemList(collectionId, 1) as any).toJSON() as unknown as IReFungibleTokenDataType; + const token2Data = (await api.query.nft.reFungibleItemList(collectionId, 2) as any).toJSON() as unknown as IReFungibleTokenDataType; + const token3Data = (await api.query.nft.reFungibleItemList(collectionId, 3) as any).toJSON() as unknown as IReFungibleTokenDataType; - expect(token1Data.Owner[0].Owner.toString()).to.be.equal(Alice.address); - expect(token1Data.Owner[0].Fraction.toNumber()).to.be.equal(1); + expect(token1Data.Owner[0].Owner).to.be.deep.equal(normalizeAccountId(Alice.address)); + expect(token1Data.Owner[0].Fraction).to.be.equal(1); - expect(token2Data.Owner[0].Owner.toString()).to.be.equal(Alice.address); - expect(token2Data.Owner[0].Fraction.toNumber()).to.be.equal(1); + expect(token2Data.Owner[0].Owner).to.be.deep.equal(normalizeAccountId(Alice.address)); + expect(token2Data.Owner[0].Fraction).to.be.equal(1); - expect(token3Data.Owner[0].Owner.toString()).to.be.equal(Alice.address); - expect(token3Data.Owner[0].Fraction.toNumber()).to.be.equal(1); + expect(token3Data.Owner[0].Owner).to.be.deep.equal(normalizeAccountId(Alice.address)); + expect(token3Data.Owner[0].Fraction).to.be.equal(1); expect(token1Data.ConstData.toString()).to.be.equal('0x31'); expect(token2Data.ConstData.toString()).to.be.equal('0x32'); @@ -107,7 +108,7 @@ describe('Integration Test createMultipleItems(collection_id, owner, items_data) { nft: ['A', 'A'] }, { nft: ['B', 'B'] }, ]; - const createMultipleItemsTx = api.tx.nft.createMultipleItems(collectionId, alice.address, args); + const createMultipleItemsTx = api.tx.nft.createMultipleItems(collectionId, normalizeAccountId(alice.address), args); const events = await submitTransactionAsync(alice, createMultipleItemsTx); const result = getGenericResult(events); expect(result.success).to.be.true; @@ -123,7 +124,7 @@ describe('Negative Integration Test createMultipleItems(collection_id, owner, it try { const args = [{ invalid: null }, { invalid: null }, { invalid: null }]; const createMultipleItemsTx = await api.tx.nft - .createMultipleItems(collectionId, Alice.address, args); + .createMultipleItems(collectionId, normalizeAccountId(Alice.address), args); await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTx)).to.be.rejected; } catch (e) { // tslint:disable-next-line:no-unused-expression @@ -136,8 +137,8 @@ describe('Negative Integration Test createMultipleItems(collection_id, owner, it await usingApi(async (api: ApiPromise) => { const collectionId = parseInt((await api.query.nft.createdCollectionCount()).toString()) + 1; const Alice = privateKey('//Alice'); - const createMultipleItemsTx = await api.tx.nft - .createMultipleItems(collectionId, Alice.address, ['NFT', 'NFT', 'NFT']); + const createMultipleItemsTx = api.tx.nft + .createMultipleItems(collectionId, normalizeAccountId(Alice.address), ['NFT', 'NFT', 'NFT']); await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTx)).to.be.rejected; }); }); @@ -152,20 +153,20 @@ describe('Negative Integration Test createMultipleItems(collection_id, owner, it { nft: ['B'.repeat(2049), 'B'.repeat(2049)] }, { nft: ['C'.repeat(2049), 'C'.repeat(2049)] }, ]; - const createMultipleItemsTx = await api.tx.nft - .createMultipleItems(collectionId, Alice.address, args); + const createMultipleItemsTx = api.tx.nft + .createMultipleItems(collectionId, normalizeAccountId(Alice.address), args); await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTx)).to.be.rejected; // ReFungible const collectionIdReFungible = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}}); const argsReFungible = [ - { ReFungible: ['1'.repeat(2049), '1'.repeat(2049)] }, - { ReFungible: ['2'.repeat(2049), '2'.repeat(2049)] }, - { ReFungible: ['3'.repeat(2049), '3'.repeat(2049)] }, + { ReFungible: ['1'.repeat(2049), '1'.repeat(2049), 10] }, + { ReFungible: ['2'.repeat(2049), '2'.repeat(2049), 10] }, + { ReFungible: ['3'.repeat(2049), '3'.repeat(2049), 10] }, ]; - const createMultipleItemsTxFungible = await api.tx.nft - .createMultipleItems(collectionIdReFungible, Alice.address, argsReFungible); + const createMultipleItemsTxFungible = api.tx.nft + .createMultipleItems(collectionIdReFungible, normalizeAccountId(Alice.address), argsReFungible); await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTxFungible)).to.be.rejected; }); }); @@ -174,8 +175,8 @@ describe('Negative Integration Test createMultipleItems(collection_id, owner, it await usingApi(async (api: ApiPromise) => { const collectionId = await createCollectionExpectSuccess(); const Alice = privateKey('//Alice'); - const createMultipleItemsTx = await api.tx.nft - .createMultipleItems(collectionId, Alice.address, ['NFT', 'Fungible', 'ReFungible']); + const createMultipleItemsTx = api.tx.nft + .createMultipleItems(collectionId, normalizeAccountId(Alice.address), ['NFT', 'Fungible', 'ReFungible']); await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTx)).to.be.rejected; // garbage collection :-D await destroyCollectionExpectSuccess(collectionId); @@ -192,7 +193,7 @@ describe('Negative Integration Test createMultipleItems(collection_id, owner, it { nft: ['C'.repeat(2049), 'C'] }, ]; const createMultipleItemsTx = await api.tx.nft - .createMultipleItems(collectionId, Alice.address, args); + .createMultipleItems(collectionId, normalizeAccountId(Alice.address), args); await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTx)).to.be.rejected; }); }); @@ -209,7 +210,7 @@ describe('Negative Integration Test createMultipleItems(collection_id, owner, it { nft: ['A', 'A'] }, { nft: ['B', 'B'] }, ]; - const createMultipleItemsTx = api.tx.nft.createMultipleItems(collectionId, alice.address, args); + const createMultipleItemsTx = api.tx.nft.createMultipleItems(collectionId, normalizeAccountId(alice.address), args); await expect(submitTransactionExpectFailAsync(alice, createMultipleItemsTx)).to.be.rejected; }); }); diff --git a/tests/src/pallet-presence.test.ts b/tests/src/pallet-presence.test.ts index 13bc8f4174..09bf0e4c73 100644 --- a/tests/src/pallet-presence.test.ts +++ b/tests/src/pallet-presence.test.ts @@ -13,7 +13,7 @@ function getModuleNames(api: ApiPromise): string[] { // Pallets that must always be present const requiredPallets = [ - 'nft', 'inflation', 'balances', 'contracts', 'randomnesscollectiveflip', 'system', 'timestamp', 'transactionpayment', 'treasury', 'vesting' + 'nft', 'inflation', 'balances', 'contracts', 'randomnesscollectiveflip', 'system', 'timestamp', 'transactionpayment', 'treasury', 'vesting', 'nft', 'ethereum' ]; // Pallets that depend on consensus and governance configuration diff --git a/tests/src/removeCollectionAdmin.test.ts b/tests/src/removeCollectionAdmin.test.ts index a5466639d7..ef05461523 100644 --- a/tests/src/removeCollectionAdmin.test.ts +++ b/tests/src/removeCollectionAdmin.test.ts @@ -8,7 +8,7 @@ import chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; import privateKey from './substrate/privateKey'; import { default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync } from './substrate/substrate-api'; -import {createCollectionExpectSuccess, destroyCollectionExpectSuccess} from './util/helpers'; +import {createCollectionExpectSuccess, destroyCollectionExpectSuccess, normalizeAccountId} from './util/helpers'; chai.use(chaiAsPromised); const expect = chai.expect; @@ -20,20 +20,21 @@ describe('Integration Test removeCollectionAdmin(collection_id, account_id):', ( const Alice = privateKey('//Alice'); const Bob = privateKey('//Bob'); const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON(); - expect(collection.Owner.toString()).to.be.eq(Alice.address); + expect(collection.Owner).to.be.deep.eq(normalizeAccountId(Alice.address)); // first - add collection admin Bob - const addAdminTx = api.tx.nft.addCollectionAdmin(collectionId, Bob.address); + const addAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Bob.address)); await submitTransactionAsync(Alice, addAdminTx); - const adminListAfterAddAdmin: any = (await api.query.nft.adminList(collectionId)); - expect(adminListAfterAddAdmin).to.be.contains(Bob.address); + const adminListAfterAddAdmin: any = (await api.query.nft.adminList(collectionId)).toJSON(); + console.log(adminListAfterAddAdmin); + expect(adminListAfterAddAdmin).to.be.deep.contains(normalizeAccountId(Bob.address)); // then remove bob from admins of collection - const removeAdminTx = api.tx.nft.removeCollectionAdmin(collectionId, Bob.address); + const removeAdminTx = api.tx.nft.removeCollectionAdmin(collectionId, normalizeAccountId(Bob.address)); await submitTransactionAsync(Alice, removeAdminTx); - const adminListAfterRemoveAdmin: any = (await api.query.nft.adminList(collectionId)); - expect(adminListAfterRemoveAdmin).not.to.be.contains(Bob.address); + const adminListAfterRemoveAdmin: any = (await api.query.nft.adminList(collectionId)).toJSON; + expect(adminListAfterRemoveAdmin).not.to.be.deep.contains(normalizeAccountId(Bob.address)); }); }); @@ -45,7 +46,7 @@ describe('Integration Test removeCollectionAdmin(collection_id, account_id):', ( const adminListBeforeAddAdmin: any = (await api.query.nft.adminList(collectionId)); expect(adminListBeforeAddAdmin).to.have.lengthOf(0); - const tx = api.tx.nft.removeCollectionAdmin(collectionId, Alice.address); + const tx = api.tx.nft.removeCollectionAdmin(collectionId, normalizeAccountId(Alice.address)); await submitTransactionAsync(Alice, tx); }); }); @@ -59,7 +60,7 @@ describe('Negative Integration Test removeCollectionAdmin(collection_id, account const alice = privateKey('//Alice'); const bob = privateKey('//Bob'); - const changeOwnerTx = api.tx.nft.removeCollectionAdmin(collectionId, bob.address); + const changeOwnerTx = api.tx.nft.removeCollectionAdmin(collectionId, normalizeAccountId(bob.address)); await expect(submitTransactionExpectFailAsync(alice, changeOwnerTx)).to.be.rejected; // Verifying that nothing bad happened (network is live, new collections can be created, etc.) @@ -76,7 +77,7 @@ describe('Negative Integration Test removeCollectionAdmin(collection_id, account await destroyCollectionExpectSuccess(collectionId); - const changeOwnerTx = api.tx.nft.removeCollectionAdmin(collectionId, Bob.address); + const changeOwnerTx = api.tx.nft.removeCollectionAdmin(collectionId, normalizeAccountId(Bob.address)); await expect(submitTransactionExpectFailAsync(Alice, changeOwnerTx)).to.be.rejected; // Verifying that nothing bad happened (network is live, new collections can be created, etc.) diff --git a/tests/src/removeCollectionSponsor.test.ts b/tests/src/removeCollectionSponsor.test.ts index f83860e442..e18c68a1ee 100644 --- a/tests/src/removeCollectionSponsor.test.ts +++ b/tests/src/removeCollectionSponsor.test.ts @@ -21,6 +21,7 @@ import { addToWhiteListExpectSuccess, removeCollectionSponsorExpectSuccess, removeCollectionSponsorExpectFailure, + normalizeAccountId, } from "./util/helpers"; import { Keyring } from "@polkadot/api"; import { IKeyringPair } from "@polkadot/types/types"; @@ -60,7 +61,7 @@ describe('integration test: ext. removeCollectionSponsor():', () => { // Transfer this tokens from unused address to Alice - should fail const AsponsorBalance = new BigNumber((await api.query.system.account(bob.address)).data.free.toString()); - const zeroToAlice = api.tx.nft.transfer(alice.address, collectionId, itemId, 0); + const zeroToAlice = api.tx.nft.transfer(normalizeAccountId(alice.address), collectionId, itemId, 0); const badTransaction = async function () { await submitTransactionExpectFailAsync(zeroBalance, zeroToAlice); }; diff --git a/tests/src/removeFromContractWhiteList.test.ts b/tests/src/removeFromContractWhiteList.test.ts index d198b55a8e..5c3b1032d3 100644 --- a/tests/src/removeFromContractWhiteList.test.ts +++ b/tests/src/removeFromContractWhiteList.test.ts @@ -23,8 +23,8 @@ describe('Integration Test removeFromContractWhiteList', () => { await usingApi(async (api) => { const [flipper, deployer] = await deployFlipper(api); - await addToContractWhiteListExpectSuccess(deployer, flipper.address, bob.address); - await removeFromContractWhiteListExpectSuccess(deployer, flipper.address, bob.address); + await addToContractWhiteListExpectSuccess(deployer, flipper.address.toString(), bob.address); + await removeFromContractWhiteListExpectSuccess(deployer, flipper.address.toString(), bob.address); expect(await isWhitelistedInContract(flipper.address, bob.address)).to.be.false; }); @@ -33,12 +33,12 @@ describe('Integration Test removeFromContractWhiteList', () => { it('user can\'t execute contract after removal', async () => { await usingApi(async (api) => { const [flipper, deployer] = await deployFlipper(api); - await toggleContractWhitelistExpectSuccess(deployer, flipper.address, true); + await toggleContractWhitelistExpectSuccess(deployer, flipper.address.toString(), true); - await addToContractWhiteListExpectSuccess(deployer, flipper.address, bob.address); + await addToContractWhiteListExpectSuccess(deployer, flipper.address.toString(), bob.address); await toggleFlipValueExpectSuccess(bob, flipper); - await removeFromContractWhiteListExpectSuccess(deployer, flipper.address, bob.address); + await removeFromContractWhiteListExpectSuccess(deployer, flipper.address.toString(), bob.address); await toggleFlipValueExpectFailure(bob, flipper); }); }); @@ -47,9 +47,9 @@ describe('Integration Test removeFromContractWhiteList', () => { await usingApi(async (api) => { const [flipper, deployer] = await deployFlipper(api); - await addToContractWhiteListExpectSuccess(deployer, flipper.address, bob.address); - await removeFromContractWhiteListExpectSuccess(deployer, flipper.address, bob.address); - await removeFromContractWhiteListExpectSuccess(deployer, flipper.address, bob.address); + await addToContractWhiteListExpectSuccess(deployer, flipper.address.toString(), bob.address); + await removeFromContractWhiteListExpectSuccess(deployer, flipper.address.toString(), bob.address); + await removeFromContractWhiteListExpectSuccess(deployer, flipper.address.toString(), bob.address); }); }); }); @@ -75,7 +75,7 @@ describe('Negative Integration Test removeFromContractWhiteList', () => { await usingApi(async (api) => { const [flipper, _] = await deployFlipper(api); - await removeFromContractWhiteListExpectFailure(alice, flipper.address, bob.address); + await removeFromContractWhiteListExpectFailure(alice, flipper.address.toString(), bob.address); }); }); }); diff --git a/tests/src/setConstOnChainSchema.test.ts b/tests/src/setConstOnChainSchema.test.ts index dd2cfb978f..b2defd5d97 100644 --- a/tests/src/setConstOnChainSchema.test.ts +++ b/tests/src/setConstOnChainSchema.test.ts @@ -11,6 +11,7 @@ import { default as usingApi, submitTransactionAsync, submitTransactionExpectFai import { createCollectionExpectSuccess, destroyCollectionExpectSuccess, + normalizeAccountId, } from './util/helpers'; chai.use(chaiAsPromised); @@ -37,7 +38,7 @@ describe('Integration Test ext. setConstOnChainSchema()', () => { await usingApi(async (api) => { const collectionId = await createCollectionExpectSuccess(); const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON(); - expect(collection.Owner.toString()).to.be.eq(Alice.address); + expect(collection.Owner).to.be.deep.eq(normalizeAccountId(Alice.address)); const setShema = api.tx.nft.setConstOnChainSchema(collectionId, Shema); await submitTransactionAsync(Alice, setShema); }); @@ -87,7 +88,7 @@ describe('Negative Integration Test ext. setConstOnChainSchema()', () => { await usingApi(async (api) => { const collectionId = await createCollectionExpectSuccess(); const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON(); - expect(collection.Owner.toString()).to.be.eq(Alice.address); + expect(collection.Owner).to.be.deep.eq(normalizeAccountId(Alice.address)); const setShema = api.tx.nft.setConstOnChainSchema(collectionId, Shema); await expect(submitTransactionExpectFailAsync(Bob, setShema)).to.be.rejected; }); diff --git a/tests/src/setPublicAccessMode.test.ts b/tests/src/setPublicAccessMode.test.ts index 3203eb967a..955a423758 100644 --- a/tests/src/setPublicAccessMode.test.ts +++ b/tests/src/setPublicAccessMode.test.ts @@ -17,6 +17,7 @@ import { destroyCollectionExpectSuccess, enablePublicMintingExpectSuccess, enableWhiteListExpectSuccess, + normalizeAccountId, } from './util/helpers'; import { utf16ToStr } from './util/util'; @@ -49,7 +50,7 @@ describe('Integration Test setPublicAccessMode(): ', () => { const collectionId = await createCollectionExpectSuccess(); await enableWhiteListExpectSuccess(Alice, collectionId); await enablePublicMintingExpectSuccess(Alice, collectionId); - const tx = api.tx.nft.createItem(collectionId, Bob.address, 'NFT'); + const tx = api.tx.nft.createItem(collectionId, normalizeAccountId(Bob.address), 'NFT'); await expect(submitTransactionExpectFailAsync(Bob, tx)).to.be.rejected; }); }); diff --git a/tests/src/setVariableOnChainSchema.test.ts b/tests/src/setVariableOnChainSchema.test.ts index edc7295528..96cb42e5d4 100644 --- a/tests/src/setVariableOnChainSchema.test.ts +++ b/tests/src/setVariableOnChainSchema.test.ts @@ -11,6 +11,7 @@ import { default as usingApi, submitTransactionAsync, submitTransactionExpectFai import { createCollectionExpectSuccess, destroyCollectionExpectSuccess, + normalizeAccountId, } from './util/helpers'; chai.use(chaiAsPromised); @@ -37,7 +38,7 @@ describe('Integration Test ext. setVariableOnChainSchema()', () => { await usingApi(async (api) => { const collectionId = await createCollectionExpectSuccess(); const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON(); - expect(collection.Owner.toString()).to.be.eq(Alice.address); + expect(collection.Owner).to.be.deep.eq(normalizeAccountId(Alice.address)); const setSchema = api.tx.nft.setVariableOnChainSchema(collectionId, Schema); await submitTransactionAsync(Alice, setSchema); }); @@ -87,7 +88,7 @@ describe('Negative Integration Test ext. setVariableOnChainSchema()', () => { await usingApi(async (api) => { const collectionId = await createCollectionExpectSuccess(); const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON(); - expect(collection.Owner.toString()).to.be.eq(Alice.address); + expect(collection.Owner).to.be.deep.eq(normalizeAccountId(Alice.address)); const setSchema = api.tx.nft.setVariableOnChainSchema(collectionId, Schema); await expect(submitTransactionExpectFailAsync(Bob, setSchema)).to.be.rejected; }); diff --git a/tests/src/util/helpers.ts b/tests/src/util/helpers.ts index bb5281eaa6..4be81f912a 100644 --- a/tests/src/util/helpers.ts +++ b/tests/src/util/helpers.ts @@ -21,6 +21,17 @@ import { hexToStr, strToUTF16, utf16ToStr } from './util'; chai.use(chaiAsPromised); const expect = chai.expect; +export type CrossAccountId = string | { + substrate: string, +} | { + ethereum: string, +}; +export function normalizeAccountId(input: CrossAccountId): CrossAccountId { + if (typeof input === 'string') + return { substrate: input }; + return input; +} + export const U128_MAX = (1n << 128n) - 1n; type GenericResult = { @@ -36,15 +47,15 @@ interface CreateItemResult { success: boolean; collectionId: number; itemId: number; - recipient: string; + recipient?: CrossAccountId; } interface TransferResult { success: boolean; collectionId: number; itemId: number; - sender: string; - recipient: string; + sender?: CrossAccountId; + recipient?: CrossAccountId; value: bigint; } @@ -118,7 +129,7 @@ export function getCreateCollectionResult(events: EventRecord[]): CreateCollecti // console.log(` ${phase}: ${section}.${method}:: ${data}`); if (method == 'ExtrinsicSuccess') { success = true; - } else if ((section == 'nft') && (method == 'CollectionCreated')) { + } else if ((section == 'nft') && (method == 'CollectionCreated')) { collectionId = parseInt(data[0].toString()); } }); @@ -133,7 +144,7 @@ export function getCreateItemResult(events: EventRecord[]): CreateItemResult { let success = false; let collectionId: number = 0; let itemId: number = 0; - let recipient: string = ''; + let recipient; events.forEach(({ phase, event: { data, method, section } }) => { // console.log(` ${phase}: ${section}.${method}:: ${data}`); if (method == 'ExtrinsicSuccess') { @@ -141,7 +152,7 @@ export function getCreateItemResult(events: EventRecord[]): CreateItemResult { } else if ((section == 'nft') && (method == 'ItemCreated')) { collectionId = parseInt(data[0].toString()); itemId = parseInt(data[1].toString()); - recipient = data[2].toString(); + recipient = data[2].toJSON(); } }); const result: CreateItemResult = { @@ -158,19 +169,17 @@ export function getTransferResult(events: EventRecord[]): TransferResult { success: false, collectionId: 0, itemId: 0, - sender: '', - recipient: '', value: 0n, }; - events.forEach(({event: {data, method, section}}) => { + events.forEach(({ event: { data, method, section } }) => { if (method === 'ExtrinsicSuccess') { result.success = true; } else if (section === 'nft' && method === 'Transfer') { result.collectionId = +data[0].toString(); result.itemId = +data[1].toString(); - result.sender = data[2].toString(); - result.recipient = data[3].toString(); + result.sender = data[2].toJSON() as CrossAccountId; + result.recipient = data[3].toJSON() as CrossAccountId; result.value = BigInt(data[4].toString()); } }); @@ -212,7 +221,7 @@ const defaultCreateCollectionParams: CreateCollectionParams = { } export async function createCollectionExpectSuccess(params: Partial = {}): Promise { - const {name, description, mode, tokenPrefix } = {...defaultCreateCollectionParams, ...params}; + const { name, description, mode, tokenPrefix } = { ...defaultCreateCollectionParams, ...params }; let collectionId: number = 0; await usingApi(async (api) => { @@ -224,13 +233,13 @@ export async function createCollectionExpectSuccess(params: Partial = {}) { - const {name, description, mode, tokenPrefix } = {...defaultCreateCollectionParams, ...params}; + const { name, description, mode, tokenPrefix } = { ...defaultCreateCollectionParams, ...params }; let modeprm = {}; if (mode.type === 'NFT') { - modeprm = {nft: null}; + modeprm = { nft: null }; } else if (mode.type === 'Fungible') { - modeprm = {fungible: mode.decimalPoints}; + modeprm = { fungible: mode.decimalPoints }; } else if (mode.type === 'ReFungible') { - modeprm = {refungible: null}; + modeprm = { refungible: null }; } else if (mode.type === 'Invalid') { - modeprm = {invalid: null}; + modeprm = { invalid: null }; } await usingApi(async (api) => { @@ -299,7 +308,7 @@ export async function findUnusedAddress(api: ApiPromise, seedAddition = ''): Pro let bal = new BigNumber(0); let unused; do { - const randomSeed = 'seed' + Math.floor(Math.random() * Math.floor(10000)) + seedAddition; + const randomSeed = 'seed' + Math.floor(Math.random() * Math.floor(10000)) + seedAddition; const keyring = new Keyring({ type: 'sr25519' }); unused = keyring.addFromUri(`//${randomSeed}`); bal = new BigNumber((await api.query.system.account(unused.address)).data.free.toString()); @@ -406,7 +415,7 @@ export async function setCollectionSponsorExpectSuccess(collectionId: number, sp // What to expect expect(result.success).to.be.true; expect(collection.Sponsorship).to.deep.equal({ - Unconfirmed: sponsor.toString(), + unconfirmed: sponsor, }); }); } @@ -425,7 +434,7 @@ export async function removeCollectionSponsorExpectSuccess(collectionId: number) // What to expect expect(result.success).to.be.true; - expect(collection.Sponsorship).to.be.deep.equal({ Disabled: null }); + expect(collection.Sponsorship).to.be.deep.equal({ disabled: null }); }); } @@ -464,7 +473,7 @@ export async function confirmSponsorshipExpectSuccess(collectionId: number, send // What to expect expect(result.success).to.be.true; expect(collection.Sponsorship).to.be.deep.equal({ - Confirmed: sender.address, + confirmed: sender.address, }); }); } @@ -538,9 +547,9 @@ export async function isWhitelistedInContract(contractAddress: AccountId | strin return whitelisted; } -export async function addToContractWhiteListExpectSuccess(sender: IKeyringPair, contractAddress: AccountId | string, user: string) { +export async function addToContractWhiteListExpectSuccess(sender: IKeyringPair, contractAddress: AccountId | string, user: AccountId | string) { await usingApi(async (api) => { - const tx = api.tx.nft.addToContractWhiteList(contractAddress, user); + const tx = api.tx.nft.addToContractWhiteList(contractAddress.toString(), user.toString()); const events = await submitTransactionAsync(sender, tx); const result = getGenericResult(events); @@ -548,9 +557,9 @@ export async function addToContractWhiteListExpectSuccess(sender: IKeyringPair, }); } -export async function removeFromContractWhiteListExpectSuccess(sender: IKeyringPair, contractAddress: AccountId | string, user: string) { +export async function removeFromContractWhiteListExpectSuccess(sender: IKeyringPair, contractAddress: AccountId | string, user: AccountId | string) { await usingApi(async (api) => { - const tx = api.tx.nft.removeFromContractWhiteList(contractAddress, user); + const tx = api.tx.nft.removeFromContractWhiteList(contractAddress.toString(), user.toString()); const events = await submitTransactionAsync(sender, tx); const result = getGenericResult(events); @@ -558,9 +567,9 @@ export async function removeFromContractWhiteListExpectSuccess(sender: IKeyringP }); } -export async function removeFromContractWhiteListExpectFailure(sender: IKeyringPair, contractAddress: AccountId | string, user: string) { +export async function removeFromContractWhiteListExpectFailure(sender: IKeyringPair, contractAddress: AccountId | string, user: AccountId | string) { await usingApi(async (api) => { - const tx = api.tx.nft.removeFromContractWhiteList(contractAddress, user); + const tx = api.tx.nft.removeFromContractWhiteList(contractAddress.toString(), user.toString()); const events = await expect(submitTransactionExpectFailAsync(sender, tx)).to.be.rejected; const result = getGenericResult(events); @@ -633,12 +642,12 @@ export async function burnItemExpectSuccess(owner: IKeyringPair, collectionId: n } export async function -approveExpectSuccess(collectionId: number, - tokenId: number, owner: IKeyringPair, approved: IKeyringPair, amount: number | bigint = 1) { + approveExpectSuccess(collectionId: number, + tokenId: number, owner: IKeyringPair, approved: IKeyringPair, amount: number | bigint = 1) { await usingApi(async (api: ApiPromise) => { const allowanceBefore = await api.query.nft.allowances(collectionId, [tokenId, owner.address, approved.address]) as unknown as BN; - const approveNftTx = await api.tx.nft.approve(approved.address, collectionId, tokenId, amount); + const approveNftTx = api.tx.nft.approve(normalizeAccountId(approved.address), collectionId, tokenId, amount); const events = await submitTransactionAsync(owner, approveNftTx); const result = getCreateItemResult(events); // tslint:disable-next-line:no-unused-expression @@ -650,27 +659,27 @@ approveExpectSuccess(collectionId: number, } export async function -transferFromExpectSuccess(collectionId: number, - tokenId: number, - accountApproved: IKeyringPair, - accountFrom: IKeyringPair, - accountTo: IKeyringPair, - value: number | bigint = 1, - type: string = 'NFT') { + transferFromExpectSuccess(collectionId: number, + tokenId: number, + accountApproved: IKeyringPair, + accountFrom: IKeyringPair, + accountTo: IKeyringPair, + value: number | bigint = 1, + type: string = 'NFT') { await usingApi(async (api: ApiPromise) => { let balanceBefore = new BN(0); if (type === 'Fungible') { balanceBefore = await api.query.nft.balance(collectionId, accountTo.address) as unknown as BN; } - const transferFromTx = await api.tx.nft.transferFrom( - accountFrom.address, accountTo.address, collectionId, tokenId, value); + const transferFromTx = api.tx.nft.transferFrom( + normalizeAccountId(accountFrom.address), normalizeAccountId(accountTo.address), collectionId, tokenId, value); const events = await submitTransactionAsync(accountApproved, transferFromTx); const result = getCreateItemResult(events); // tslint:disable-next-line:no-unused-expression expect(result.success).to.be.true; if (type === 'NFT') { - const nftItemData = (await api.query.nft.nftItemList(collectionId, tokenId) as any).unwrap() as ITokenDataType; - expect(nftItemData.Owner.toString()).to.be.equal(accountTo.address); + const nftItemData = (await api.query.nft.nftItemList(collectionId, tokenId) as any).toJSON() as ITokenDataType; + expect(nftItemData.Owner).to.be.deep.equal(normalizeAccountId(accountTo.address)); } if (type === 'Fungible') { const balanceAfter = (await api.query.nft.fungibleItemList(collectionId, accountTo.address) as any).Value as unknown as BN; @@ -678,23 +687,23 @@ transferFromExpectSuccess(collectionId: number, } if (type === 'ReFungible') { const nftItemData = - (await api.query.nft.reFungibleItemList(collectionId, tokenId) as any).unwrap() as IReFungibleTokenDataType; - expect(nftItemData.Owner[0].Owner.toString()).to.be.equal(accountTo.address); - expect(nftItemData.Owner[0].Fraction.toNumber()).to.be.equal(value); + (await api.query.nft.reFungibleItemList(collectionId, tokenId) as any).toJSON() as IReFungibleTokenDataType; + expect(nftItemData.Owner[0].Owner).to.be.deep.equal(normalizeAccountId(accountTo.address)); + expect(nftItemData.Owner[0].Fraction).to.be.equal(value); } }); } export async function -transferFromExpectFail(collectionId: number, - tokenId: number, - accountApproved: IKeyringPair, - accountFrom: IKeyringPair, - accountTo: IKeyringPair, - value: number | bigint = 1) { + transferFromExpectFail(collectionId: number, + tokenId: number, + accountApproved: IKeyringPair, + accountFrom: IKeyringPair, + accountTo: IKeyringPair, + value: number | bigint = 1) { await usingApi(async (api: ApiPromise) => { - const transferFromTx = await api.tx.nft.transferFrom( - accountFrom.address, accountTo.address, collectionId, tokenId, value); + const transferFromTx = api.tx.nft.transferFrom( + normalizeAccountId(accountFrom.address), normalizeAccountId(accountTo.address), collectionId, tokenId, value); const events = await expect(submitTransactionExpectFailAsync(accountApproved, transferFromTx)).to.be.rejected; const result = getCreateCollectionResult(events); // tslint:disable-next-line:no-unused-expression @@ -703,30 +712,30 @@ transferFromExpectFail(collectionId: number, } export async function -transferExpectSuccess(collectionId: number, - tokenId: number, - sender: IKeyringPair, - recipient: IKeyringPair, - value: number | bigint = 1, - type: string = 'NFT') { + transferExpectSuccess(collectionId: number, + tokenId: number, + sender: IKeyringPair, + recipient: IKeyringPair, + value: number | bigint = 1, + type: string = 'NFT') { await usingApi(async (api: ApiPromise) => { let balanceBefore = new BN(0); if (type === 'Fungible') { balanceBefore = await api.query.nft.balance(collectionId, recipient.address) as unknown as BN; } - const transferTx = await api.tx.nft.transfer(recipient.address, collectionId, tokenId, value); + const transferTx = api.tx.nft.transfer(normalizeAccountId(recipient.address), collectionId, tokenId, value); const events = await submitTransactionAsync(sender, transferTx); const result = getTransferResult(events); // tslint:disable-next-line:no-unused-expression expect(result.success).to.be.true; expect(result.collectionId).to.be.equal(collectionId); expect(result.itemId).to.be.equal(tokenId); - expect(result.sender).to.be.equal(sender.address); - expect(result.recipient).to.be.equal(recipient.address); + expect(result.sender).to.be.deep.equal(normalizeAccountId(sender.address)); + expect(result.recipient).to.be.deep.equal(normalizeAccountId(recipient.address)); expect(result.value.toString()).to.be.equal(value.toString()); if (type === 'NFT') { const nftItemData = (await api.query.nft.nftItemList(collectionId, tokenId)).toJSON() as unknown as ITokenDataType; - expect(nftItemData.Owner.toString()).to.be.equal(recipient.address); + expect(nftItemData.Owner).to.be.deep.equal(normalizeAccountId(recipient.address)); } if (type === 'Fungible') { const balanceAfter = (await api.query.nft.fungibleItemList(collectionId, recipient.address) as any).Value as unknown as BN; @@ -735,21 +744,21 @@ transferExpectSuccess(collectionId: number, if (type === 'ReFungible') { const nftItemData = (await api.query.nft.reFungibleItemList(collectionId, tokenId)).toJSON() as unknown as IReFungibleTokenDataType; - expect(nftItemData.Owner[0].Owner.toString()).to.be.equal(recipient.address); + expect(nftItemData.Owner[0].Owner).to.be.deep.equal(normalizeAccountId(recipient.address)); expect(nftItemData.Owner[0].Fraction.toString()).to.be.equal(value.toString()); } }); } export async function -transferExpectFail(collectionId: number, - tokenId: number, - sender: IKeyringPair, - recipient: IKeyringPair, - value: number | bigint = 1, - type: string = 'NFT') { + transferExpectFail(collectionId: number, + tokenId: number, + sender: IKeyringPair, + recipient: IKeyringPair, + value: number | bigint = 1, + type: string = 'NFT') { await usingApi(async (api: ApiPromise) => { - const transferTx = await api.tx.nft.transfer(recipient.address, collectionId, tokenId, value); + const transferTx = api.tx.nft.transfer(normalizeAccountId(recipient.address), collectionId, tokenId, value); const events = await expect(submitTransactionExpectFailAsync(sender, transferTx)).to.be.rejected; if (events && Array.isArray(events)) { const result = getCreateCollectionResult(events); @@ -760,10 +769,10 @@ transferExpectFail(collectionId: number, } export async function -approveExpectFail(collectionId: number, - tokenId: number, owner: IKeyringPair, approved: IKeyringPair, amount: number | bigint = 1) { + approveExpectFail(collectionId: number, + tokenId: number, owner: IKeyringPair, approved: IKeyringPair, amount: number | bigint = 1) { await usingApi(async (api: ApiPromise) => { - const approveNftTx = await api.tx.nft.approve(approved.address, collectionId, tokenId, amount); + const approveNftTx = api.tx.nft.approve(normalizeAccountId(approved.address), collectionId, tokenId, amount); const events = await expect(submitTransactionExpectFailAsync(owner, approveNftTx)).to.be.rejected; const result = getCreateCollectionResult(events); // tslint:disable-next-line:no-unused-expression @@ -776,7 +785,7 @@ export async function getFungibleBalance( owner: string, ) { return await usingApi(async (api) => { - const response = (await api.query.nft.fungibleItemList(collectionId, owner)).toJSON() as unknown as {Value: string}; + const response = (await api.query.nft.fungibleItemList(collectionId, owner)).toJSON() as unknown as { Value: string }; return BigInt(response.Value); }); } @@ -785,10 +794,10 @@ export async function createFungibleItemExpectSuccess( sender: IKeyringPair, collectionId: number, data: CreateFungibleData, - owner: string = sender.address, + owner: CrossAccountId = sender.address, ) { return await usingApi(async (api) => { - const tx = api.tx.nft.createItem(collectionId, owner, { Fungible: data }); + const tx = api.tx.nft.createItem(collectionId, normalizeAccountId(owner), { Fungible: data }); const events = await submitTransactionAsync(sender, tx); const result = getCreateItemResult(events); @@ -799,27 +808,24 @@ export async function createFungibleItemExpectSuccess( } export async function createItemExpectSuccess( - sender: IKeyringPair, collectionId: number, createMode: string, owner: string = '') { + sender: IKeyringPair, collectionId: number, createMode: string, owner: string = sender.address) { let newItemId: number = 0; await usingApi(async (api) => { const AItemCount = parseInt((await api.query.nft.itemListIndex(collectionId)).toString(), 10); const Aitem: any = (await api.query.nft.fungibleItemList(collectionId, owner)).toJSON(); const AItemBalance = new BigNumber(Aitem.Value); - if (owner === '') { - owner = sender.address; - } - let tx; if (createMode === 'Fungible') { - const createData = {fungible: {value: 10}}; - tx = api.tx.nft.createItem(collectionId, owner, createData); + const createData = { fungible: { value: 10 } }; + tx = api.tx.nft.createItem(collectionId, normalizeAccountId(owner), createData); } else if (createMode === 'ReFungible') { - const createData = {refungible: {const_data: [], variable_data: [], pieces: 100}}; - tx = api.tx.nft.createItem(collectionId, owner, createData); + const createData = { refungible: { const_data: [], variable_data: [], pieces: 100 } }; + tx = api.tx.nft.createItem(collectionId, normalizeAccountId(owner), createData); } else { - tx = api.tx.nft.createItem(collectionId, owner, createMode); + tx = api.tx.nft.createItem(collectionId, normalizeAccountId(owner), createMode); } + const events = await submitTransactionAsync(sender, tx); const result = getCreateItemResult(events); @@ -836,8 +842,8 @@ export async function createItemExpectSuccess( expect(BItemCount).to.be.equal(AItemCount + 1); } expect(collectionId).to.be.equal(result.collectionId); - expect(BItemCount).to.be.equal(result.itemId); - expect(owner).to.be.equal(result.recipient); + expect(BItemCount.toString()).to.be.equal(result.itemId.toString()); + expect(normalizeAccountId(owner)).to.be.deep.equal(result.recipient); newItemId = result.itemId; }); return newItemId; @@ -846,7 +852,8 @@ export async function createItemExpectSuccess( export async function createItemExpectFailure( sender: IKeyringPair, collectionId: number, createMode: string, owner: string = sender.address) { await usingApi(async (api) => { - const tx = api.tx.nft.createItem(collectionId, owner, createMode); + const tx = api.tx.nft.createItem(collectionId, normalizeAccountId(owner), createMode); + const events = await expect(submitTransactionExpectFailAsync(sender, tx)).to.be.rejected; const result = getCreateItemResult(events); @@ -930,7 +937,7 @@ export async function addToWhiteListExpectSuccess(sender: IKeyringPair, collecti const whiteListedBefore = (await api.query.nft.whiteList(collectionId, address)).toJSON(); // Run the transaction - const tx = api.tx.nft.addToWhiteList(collectionId, address); + const tx = api.tx.nft.addToWhiteList(collectionId, normalizeAccountId(address)); const events = await submitTransactionAsync(sender, tx); const result = getGenericResult(events); @@ -946,10 +953,10 @@ export async function addToWhiteListExpectSuccess(sender: IKeyringPair, collecti }); } -export async function removeFromWhiteListExpectSuccess(sender: IKeyringPair, collectionId: number, address: string) { +export async function removeFromWhiteListExpectSuccess(sender: IKeyringPair, collectionId: number, address: CrossAccountId) { await usingApi(async (api) => { // Run the transaction - const tx = api.tx.nft.removeFromWhiteList(collectionId, address); + const tx = api.tx.nft.removeFromWhiteList(collectionId, normalizeAccountId(address)); const events = await submitTransactionAsync(sender, tx); const result = getGenericResult(events); @@ -959,10 +966,10 @@ export async function removeFromWhiteListExpectSuccess(sender: IKeyringPair, col }); } -export async function removeFromWhiteListExpectFailure(sender: IKeyringPair, collectionId: number, address: string) { +export async function removeFromWhiteListExpectFailure(sender: IKeyringPair, collectionId: number, address: CrossAccountId) { await usingApi(async (api) => { // Run the transaction - const tx = api.tx.nft.removeFromWhiteList(collectionId, address); + const tx = api.tx.nft.removeFromWhiteList(collectionId, normalizeAccountId(address)); const events = await expect(submitTransactionExpectFailAsync(sender, tx)).to.be.rejected; const result = getGenericResult(events); diff --git a/tests/yarn.lock b/tests/yarn.lock index df85b0acdb..a7de5c4587 100644 --- a/tests/yarn.lock +++ b/tests/yarn.lock @@ -2,16 +2,15 @@ # yarn lockfile v1 -"@babel/cli@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.12.13.tgz#ae2c6a75fa43f3db4bca0659799b0dfca3f5212b" - integrity sha512-Zto3HPeE0GRmaxobUl7NvFTo97NKe1zdAuWqTO8oka7nE0IIqZ4CFvuRZe1qf+ZMd7eHMhwqrecjwc10mjXo/g== +"@babel/cli@^7.13.16": + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.13.16.tgz#9d372e943ced0cc291f068204a9b010fd9cfadbc" + integrity sha512-cL9tllhqvsQ6r1+d9Invf7nNXg/3BlfL1vvvL/AdH9fZ2l5j0CeBcoq6UjsqHpvyN1v5nXSZgqJZoGeK+ZOAbw== dependencies: commander "^4.0.1" convert-source-map "^1.1.0" fs-readdir-recursive "^1.1.0" glob "^7.0.0" - lodash "^4.17.19" make-dir "^2.1.0" slash "^2.0.0" source-map "^0.5.0" @@ -19,6 +18,13 @@ "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents" chokidar "^3.4.0" +"@babel/code-frame@7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + dependencies: + "@babel/highlight" "^7.10.4" + "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" @@ -26,38 +32,38 @@ dependencies: "@babel/highlight" "^7.12.13" -"@babel/compat-data@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.12.13.tgz#27e19e0ed3726ccf54067ced4109501765e7e2e8" - integrity sha512-U/hshG5R+SIoW7HVWIdmy1cB7s3ki+r3FpyEZiCgpi4tFgPnX/vynY80ZGSASOIrUM6O7VxOgCZgdt7h97bUGg== +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.13.15", "@babel/compat-data@^7.13.8": + version "7.13.15" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.15.tgz#7e8eea42d0b64fda2b375b22d06c605222e848f4" + integrity sha512-ltnibHKR1VnrU4ymHyQ/CXtNXI6yZC0oJThyW78Hft8XndANwi+9H+UIklBDraIjFEJzw8wmcM427oDd9KS5wA== -"@babel/core@^7.1.0", "@babel/core@^7.12.13", "@babel/core@^7.7.5": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.13.tgz#b73a87a3a3e7d142a66248bf6ad88b9ceb093425" - integrity sha512-BQKE9kXkPlXHPeqissfxo0lySWJcYdEP0hdtJOH/iJfDdhOCcgtNCjftCJg3qqauB4h+lz2N6ixM++b9DN1Tcw== +"@babel/core@^7.1.0", "@babel/core@^7.13.16", "@babel/core@^7.7.5": + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.16.tgz#7756ab24396cc9675f1c3fcd5b79fcce192ea96a" + integrity sha512-sXHpixBiWWFti0AV2Zq7avpTasr6sIAu7Y396c608541qAU2ui4a193m0KSQmfPSKFZLnQ3cvlKDOm3XkuXm3Q== dependencies: "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.12.13" - "@babel/helper-module-transforms" "^7.12.13" - "@babel/helpers" "^7.12.13" - "@babel/parser" "^7.12.13" + "@babel/generator" "^7.13.16" + "@babel/helper-compilation-targets" "^7.13.16" + "@babel/helper-module-transforms" "^7.13.14" + "@babel/helpers" "^7.13.16" + "@babel/parser" "^7.13.16" "@babel/template" "^7.12.13" - "@babel/traverse" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/traverse" "^7.13.15" + "@babel/types" "^7.13.16" convert-source-map "^1.7.0" debug "^4.1.0" - gensync "^1.0.0-beta.1" + gensync "^1.0.0-beta.2" json5 "^2.1.2" - lodash "^4.17.19" - semver "^5.4.1" + semver "^6.3.0" source-map "^0.5.0" -"@babel/generator@^7.12.13": - version "7.12.15" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.15.tgz#4617b5d0b25cc572474cc1aafee1edeaf9b5368f" - integrity sha512-6F2xHxBiFXWNSGb7vyCUTBF8RCLY66rS0zEPcP8t/nQyXjha5EuK4z7H5o7fWG8B4M7y6mqVWq1J+1PuwRhecQ== +"@babel/generator@^7.13.16": + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.16.tgz#0befc287031a201d84cdfc173b46b320ae472d14" + integrity sha512-grBBR75UnKOcUWMp8WoDxNsWCFl//XCK6HWTrBQKTr5SV9f5g0pNOjdyzi/DTBv12S9GnYPInIXQBTky7OXEMg== dependencies: - "@babel/types" "^7.12.13" + "@babel/types" "^7.13.16" jsesc "^2.5.1" source-map "^0.5.0" @@ -76,41 +82,55 @@ "@babel/helper-explode-assignable-expression" "^7.12.13" "@babel/types" "^7.12.13" -"@babel/helper-compilation-targets@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.13.tgz#d689cdef88810aa74e15a7a94186f26a3d773c98" - integrity sha512-dXof20y/6wB5HnLOGyLh/gobsMvDNoekcC+8MCV2iaTd5JemhFkPD73QB+tK3iFC9P0xJC73B6MvKkyUfS9cCw== +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.13", "@babel/helper-compilation-targets@^7.13.16", "@babel/helper-compilation-targets@^7.13.8": + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz#6e91dccf15e3f43e5556dffe32d860109887563c" + integrity sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA== dependencies: - "@babel/compat-data" "^7.12.13" - "@babel/helper-validator-option" "^7.12.11" + "@babel/compat-data" "^7.13.15" + "@babel/helper-validator-option" "^7.12.17" browserslist "^4.14.5" - semver "^5.5.0" + semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.13.tgz#0f1707c2eec1a4604f2a22a6fb209854ef2a399a" - integrity sha512-Vs/e9wv7rakKYeywsmEBSRC9KtmE7Px+YBlESekLeJOF0zbGUicGfXSNi3o+tfXSNS48U/7K9mIOOCR79Cl3+Q== +"@babel/helper-create-class-features-plugin@^7.13.0": + version "7.13.11" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz#30d30a005bca2c953f5653fc25091a492177f4f6" + integrity sha512-ays0I7XYq9xbjCSvT+EvysLgfc3tOkwCULHjrnscGT3A9qD4sk3wXnJ3of0MAWsWGjdinFvajHU2smYuqXKMrw== dependencies: "@babel/helper-function-name" "^7.12.13" - "@babel/helper-member-expression-to-functions" "^7.12.13" + "@babel/helper-member-expression-to-functions" "^7.13.0" "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/helper-replace-supers" "^7.12.13" + "@babel/helper-replace-supers" "^7.13.0" "@babel/helper-split-export-declaration" "^7.12.13" "@babel/helper-create-regexp-features-plugin@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.13.tgz#0996d370a92896c612ae41a4215544bd152579c0" - integrity sha512-XC+kiA0J3at6E85dL5UnCYfVOcIZ834QcAY0TIpgUVnz0zDzg+0TtvZTnJ4g9L1dPRGe30Qi03XCIS4tYCLtqw== + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz#a2ac87e9e319269ac655b8d4415e94d38d663cb7" + integrity sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg== dependencies: "@babel/helper-annotate-as-pure" "^7.12.13" regexpu-core "^4.7.1" +"@babel/helper-define-polyfill-provider@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz#a640051772045fedaaecc6f0c6c69f02bdd34bf1" + integrity sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw== + dependencies: + "@babel/helper-compilation-targets" "^7.13.0" + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/traverse" "^7.13.0" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + "@babel/helper-explode-assignable-expression@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.13.tgz#0e46990da9e271502f77507efa4c9918d3d8634a" - integrity sha512-5loeRNvMo9mx1dA/d6yNi+YiKziJZFylZnCo1nmFF4qPU4yJ14abhWESuSMQSlQxWdxdOFzxXjk/PpfudTtYyw== + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz#17b5c59ff473d9f956f40ef570cf3a76ca12657f" + integrity sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA== dependencies: - "@babel/types" "^7.12.13" + "@babel/types" "^7.13.0" "@babel/helper-function-name@^7.12.13": version "7.12.13" @@ -128,41 +148,41 @@ dependencies: "@babel/types" "^7.12.13" -"@babel/helper-hoist-variables@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.12.13.tgz#13aba58b7480b502362316ea02f52cca0e9796cd" - integrity sha512-KSC5XSj5HreRhYQtZ3cnSnQwDzgnbdUDEFsxkN0m6Q3WrCRt72xrnZ8+h+pX7YxM7hr87zIO3a/v5p/H3TrnVw== +"@babel/helper-hoist-variables@^7.13.0": + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz#1b1651249e94b51f8f0d33439843e33e39775b30" + integrity sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg== dependencies: - "@babel/types" "^7.12.13" + "@babel/traverse" "^7.13.15" + "@babel/types" "^7.13.16" -"@babel/helper-member-expression-to-functions@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.13.tgz#c5715695b4f8bab32660dbdcdc2341dec7e3df40" - integrity sha512-B+7nN0gIL8FZ8SvMcF+EPyB21KnCcZHQZFczCxbiNGV/O0rsrSBlWGLzmtBJ3GMjSVMIm4lpFhR+VdVBuIsUcQ== +"@babel/helper-member-expression-to-functions@^7.13.0", "@babel/helper-member-expression-to-functions@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72" + integrity sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw== dependencies: - "@babel/types" "^7.12.13" + "@babel/types" "^7.13.12" -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz#ec67e4404f41750463e455cc3203f6a32e93fcb0" - integrity sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g== +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977" + integrity sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA== dependencies: - "@babel/types" "^7.12.13" + "@babel/types" "^7.13.12" -"@babel/helper-module-transforms@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.13.tgz#01afb052dcad2044289b7b20beb3fa8bd0265bea" - integrity sha512-acKF7EjqOR67ASIlDTupwkKM1eUisNAjaSduo5Cz+793ikfnpe7p4Q7B7EWU2PCoSTPWsQkR7hRUWEIZPiVLGA== +"@babel/helper-module-transforms@^7.13.0", "@babel/helper-module-transforms@^7.13.14": + version "7.13.14" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz#e600652ba48ccb1641775413cb32cfa4e8b495ef" + integrity sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g== dependencies: - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-replace-supers" "^7.12.13" - "@babel/helper-simple-access" "^7.12.13" + "@babel/helper-module-imports" "^7.13.12" + "@babel/helper-replace-supers" "^7.13.12" + "@babel/helper-simple-access" "^7.13.12" "@babel/helper-split-export-declaration" "^7.12.13" "@babel/helper-validator-identifier" "^7.12.11" "@babel/template" "^7.12.13" - "@babel/traverse" "^7.12.13" - "@babel/types" "^7.12.13" - lodash "^4.17.19" + "@babel/traverse" "^7.13.13" + "@babel/types" "^7.13.14" "@babel/helper-optimise-call-expression@^7.12.13": version "7.12.13" @@ -171,36 +191,36 @@ dependencies: "@babel/types" "^7.12.13" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.12.13.tgz#174254d0f2424d8aefb4dd48057511247b0a9eeb" - integrity sha512-C+10MXCXJLiR6IeG9+Wiejt9jmtFpxUc3MQqCmPY8hfCjyUGl9kT+B2okzEZrtykiwrc4dbCPdDoz0A/HQbDaA== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" + integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ== -"@babel/helper-remap-async-to-generator@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.13.tgz#170365f4140e2d20e5c88f8ba23c24468c296878" - integrity sha512-Qa6PU9vNcj1NZacZZI1Mvwt+gXDH6CTfgAkSjeRMLE8HxtDK76+YDId6NQR+z7Rgd5arhD2cIbS74r0SxD6PDA== +"@babel/helper-remap-async-to-generator@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz#376a760d9f7b4b2077a9dd05aa9c3927cadb2209" + integrity sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg== dependencies: "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-wrap-function" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/helper-wrap-function" "^7.13.0" + "@babel/types" "^7.13.0" -"@babel/helper-replace-supers@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.13.tgz#00ec4fb6862546bd3d0aff9aac56074277173121" - integrity sha512-pctAOIAMVStI2TMLhozPKbf5yTEXc0OJa0eENheb4w09SrgOWEs+P4nTOZYJQCqs8JlErGLDPDJTiGIp3ygbLg== +"@babel/helper-replace-supers@^7.12.13", "@babel/helper-replace-supers@^7.13.0", "@babel/helper-replace-supers@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz#6442f4c1ad912502481a564a7386de0c77ff3804" + integrity sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw== dependencies: - "@babel/helper-member-expression-to-functions" "^7.12.13" + "@babel/helper-member-expression-to-functions" "^7.13.12" "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/traverse" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.12" -"@babel/helper-simple-access@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz#8478bcc5cacf6aa1672b251c1d2dde5ccd61a6c4" - integrity sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA== +"@babel/helper-simple-access@^7.12.13", "@babel/helper-simple-access@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz#dd6c538afb61819d205a012c31792a39c7a5eaf6" + integrity sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA== dependencies: - "@babel/types" "^7.12.13" + "@babel/types" "^7.13.12" "@babel/helper-skip-transparent-expression-wrappers@^7.12.1": version "7.12.1" @@ -221,68 +241,77 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== -"@babel/helper-validator-option@^7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz#d66cb8b7a3e7fe4c6962b32020a131ecf0847f4f" - integrity sha512-TBFCyj939mFSdeX7U7DDj32WtzYY7fDcalgq8v3fBZMNOJQNn7nOYzMaUCiPxPYfCup69mtIpqlKgMZLvQ8Xhw== +"@babel/helper-validator-option@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" + integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== -"@babel/helper-wrap-function@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.12.13.tgz#e3ea8cb3ee0a16911f9c1b50d9e99fe8fe30f9ff" - integrity sha512-t0aZFEmBJ1LojdtJnhOaQEVejnzYhyjWHSsNSNo8vOYRbAJNh6r6GQF7pd36SqG7OKGbn+AewVQ/0IfYfIuGdw== +"@babel/helper-wrap-function@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz#bdb5c66fda8526ec235ab894ad53a1235c79fcc4" + integrity sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA== dependencies: "@babel/helper-function-name" "^7.12.13" "@babel/template" "^7.12.13" - "@babel/traverse" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" -"@babel/helpers@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.13.tgz#3c75e993632e4dadc0274eae219c73eb7645ba47" - integrity sha512-oohVzLRZ3GQEk4Cjhfs9YkJA4TdIDTObdBEZGrd6F/T0GPSnuV6l22eMcxlvcvzVIPH3VTtxbseudM1zIE+rPQ== +"@babel/helpers@^7.13.16": + version "7.13.17" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.13.17.tgz#b497c7a00e9719d5b613b8982bda6ed3ee94caf6" + integrity sha512-Eal4Gce4kGijo1/TGJdqp3WuhllaMLSrW6XcL0ulyUAQOuxHcCafZE8KHg9857gcTehsm/v7RcOx2+jp0Ryjsg== dependencies: "@babel/template" "^7.12.13" - "@babel/traverse" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/traverse" "^7.13.17" + "@babel/types" "^7.13.17" -"@babel/highlight@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.12.13.tgz#8ab538393e00370b26271b01fa08f7f27f2e795c" - integrity sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww== +"@babel/highlight@^7.10.4", "@babel/highlight@^7.12.13": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" + integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg== dependencies: "@babel/helper-validator-identifier" "^7.12.11" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.12.13": - version "7.12.15" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.15.tgz#2b20de7f0b4b332d9b119dd9c33409c538b8aacf" - integrity sha512-AQBOU2Z9kWwSZMd6lNjCX0GUgFonL1wAM1db8L8PMk9UDaGsRCArBkU4Sc+UCM3AE4hjbXx+h58Lb3QT4oRmrA== +"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.13.16": + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.16.tgz#0f18179b0448e6939b1f3f5c4c355a3a9bcdfd37" + integrity sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw== -"@babel/plugin-proposal-async-generator-functions@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.13.tgz#d1c6d841802ffb88c64a2413e311f7345b9e66b5" - integrity sha512-1KH46Hx4WqP77f978+5Ye/VUbuwQld2hph70yaw2hXS2v7ER2f3nlpNMu909HO2rbvP0NKLlMVDPh9KXklVMhA== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz#a3484d84d0b549f3fc916b99ee4783f26fabad2a" + integrity sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-remap-async-to-generator" "^7.12.13" - "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/plugin-proposal-optional-chaining" "^7.13.12" -"@babel/plugin-proposal-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.13.tgz#3d2ce350367058033c93c098e348161d6dc0d8c8" - integrity sha512-8SCJ0Ddrpwv4T7Gwb33EmW1V9PY5lggTO+A8WjyIwxrSHDUyBw4MtF96ifn1n8H806YlxbVCoKXbbmzD6RD+cA== +"@babel/plugin-proposal-async-generator-functions@^7.13.15": + version "7.13.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.15.tgz#80e549df273a3b3050431b148c892491df1bcc5b" + integrity sha512-VapibkWzFeoa6ubXy/NgV5U2U4MVnUlvnx6wo1XhlsaTrLYWE0UFpDQsVrmn22q5CzeloqJ8gEMHSKxuee6ZdA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-remap-async-to-generator" "^7.13.0" + "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-dynamic-import@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz#43eb5c2a3487ecd98c5c8ea8b5fdb69a2749b2dc" - integrity sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ== +"@babel/plugin-proposal-class-properties@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz#146376000b94efd001e57a40a88a525afaab9f37" + integrity sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/helper-create-class-features-plugin" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-proposal-dynamic-import@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz#876a1f6966e1dec332e8c9451afda3bebcdf2e1d" + integrity sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-proposal-export-namespace-from@^7.12.13": version "7.12.13" @@ -292,29 +321,29 @@ "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.13.tgz#ced7888a2db92a3d520a2e35eb421fdb7fcc9b5d" - integrity sha512-v9eEi4GiORDg8x+Dmi5r8ibOe0VXoKDeNPYcTTxdGN4eOWikrJfDJCJrr1l5gKGvsNyGJbrfMftC2dTL6oz7pg== +"@babel/plugin-proposal-json-strings@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz#bf1fb362547075afda3634ed31571c5901afef7b" + integrity sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-logical-assignment-operators@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.13.tgz#575b5d9a08d8299eeb4db6430da6e16e5cf14350" - integrity sha512-fqmiD3Lz7jVdK6kabeSr1PZlWSUVqSitmHEe3Z00dtGTKieWnX9beafvavc32kjORa5Bai4QNHgFDwWJP+WtSQ== +"@babel/plugin-proposal-logical-assignment-operators@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz#93fa78d63857c40ce3c8c3315220fd00bfbb4e1a" + integrity sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.13.tgz#24867307285cee4e1031170efd8a7ac807deefde" - integrity sha512-Qoxpy+OxhDBI5kRqliJFAl4uWXk3Bn24WeFstPH0iLymFehSAUR8MHpqU7njyXv/qbo7oN6yTy5bfCmXdKpo1Q== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz#3730a31dafd3c10d8ccd10648ed80a2ac5472ef3" + integrity sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" "@babel/plugin-proposal-numeric-separator@^7.12.13": version "7.12.13" @@ -324,39 +353,41 @@ "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.13.tgz#f93f3116381ff94bc676fdcb29d71045cd1ec011" - integrity sha512-WvA1okB/0OS/N3Ldb3sziSrXg6sRphsBgqiccfcQq7woEn5wQLNX82Oc4PlaFcdwcWHuQXAtb8ftbS8Fbsg/sg== +"@babel/plugin-proposal-object-rest-spread@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz#5d210a4d727d6ce3b18f9de82cc99a3964eed60a" + integrity sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-transform-parameters" "^7.12.13" + "@babel/compat-data" "^7.13.8" + "@babel/helper-compilation-targets" "^7.13.8" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.13.0" -"@babel/plugin-proposal-optional-catch-binding@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.13.tgz#4640520afe57728af14b4d1574ba844f263bcae5" - integrity sha512-9+MIm6msl9sHWg58NvqpNpLtuFbmpFYk37x8kgnGzAHvX35E1FyAwSUt5hIkSoWJFSAH+iwU8bJ4fcD1zKXOzg== +"@babel/plugin-proposal-optional-catch-binding@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz#3ad6bd5901506ea996fc31bdcf3ccfa2bed71107" + integrity sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.13.tgz#63a7d805bc8ce626f3234ee5421a2a7fb23f66d9" - integrity sha512-0ZwjGfTcnZqyV3y9DSD1Yk3ebp+sIUpT2YDqP8hovzaNZnQq2Kd7PEqa6iOIUDBXBt7Jl3P7YAcEIL5Pz8u09Q== +"@babel/plugin-proposal-optional-chaining@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz#ba9feb601d422e0adea6760c2bd6bbb7bfec4866" + integrity sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-private-methods@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.13.tgz#ea78a12554d784ecf7fc55950b752d469d9c4a71" - integrity sha512-sV0V57uUwpauixvR7s2o75LmwJI6JECwm5oPUY5beZB1nBl2i37hc7CJGqB5G+58fur5Y6ugvl3LRONk5x34rg== +"@babel/plugin-proposal-private-methods@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz#04bd4c6d40f6e6bbfa2f57e2d8094bad900ef787" + integrity sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q== dependencies: - "@babel/helper-create-class-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-create-class-features-plugin" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-proposal-unicode-property-regex@^7.12.13", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": version "7.12.13" @@ -366,7 +397,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.12.13" "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": +"@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== @@ -387,7 +418,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": +"@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== @@ -408,7 +439,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3": +"@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== @@ -429,7 +460,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== @@ -443,21 +474,21 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": +"@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-optional-catch-binding@^7.8.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3": +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-optional-chaining@^7.8.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": +"@babel/plugin-syntax-optional-chaining@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== @@ -478,21 +509,21 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-arrow-functions@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.13.tgz#eda5670b282952100c229f8a3bd49e0f6a72e9fe" - integrity sha512-tBtuN6qtCTd+iHzVZVOMNp+L04iIJBpqkdY42tWbmjIT5wvR2kx7gxMBsyhQtFzHwBbyGi9h8J8r9HgnOpQHxg== +"@babel/plugin-transform-arrow-functions@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz#10a59bebad52d637a027afa692e8d5ceff5e3dae" + integrity sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" -"@babel/plugin-transform-async-to-generator@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.13.tgz#fed8c69eebf187a535bfa4ee97a614009b24f7ae" - integrity sha512-psM9QHcHaDr+HZpRuJcE1PXESuGWSCcbiGFFhhwfzdbTxaGDVzuVtdNYliAwcRo3GFg0Bc8MmI+AvIGYIJG04A== +"@babel/plugin-transform-async-to-generator@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz#8e112bf6771b82bf1e974e5e26806c5c99aa516f" + integrity sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg== dependencies: "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-remap-async-to-generator" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-remap-async-to-generator" "^7.13.0" "@babel/plugin-transform-block-scoped-functions@^7.12.13": version "7.12.13" @@ -502,38 +533,38 @@ "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-transform-block-scoping@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz#f36e55076d06f41dfd78557ea039c1b581642e61" - integrity sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ== + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.13.16.tgz#a9c0f10794855c63b1d629914c7dcfeddd185892" + integrity sha512-ad3PHUxGnfWF4Efd3qFuznEtZKoBp0spS+DgqzVzRPV7urEBvPLue3y2j80w4Jf2YLzZHj8TOv/Lmvdmh3b2xg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" -"@babel/plugin-transform-classes@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.13.tgz#9728edc1838b5d62fc93ad830bd523b1fcb0e1f6" - integrity sha512-cqZlMlhCC1rVnxE5ZGMtIb896ijL90xppMiuWXcwcOAuFczynpd3KYemb91XFFPi3wJSe/OcrX9lXoowatkkxA== +"@babel/plugin-transform-classes@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz#0265155075c42918bf4d3a4053134176ad9b533b" + integrity sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g== dependencies: "@babel/helper-annotate-as-pure" "^7.12.13" "@babel/helper-function-name" "^7.12.13" "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-replace-supers" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-replace-supers" "^7.13.0" "@babel/helper-split-export-declaration" "^7.12.13" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.13.tgz#6a210647a3d67f21f699cfd2a01333803b27339d" - integrity sha512-dDfuROUPGK1mTtLKyDPUavmj2b6kFu82SmgpztBFEO974KMjJT+Ytj3/oWsTUMBmgPcp9J5Pc1SlcAYRpJ2hRA== +"@babel/plugin-transform-computed-properties@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz#845c6e8b9bb55376b1fa0b92ef0bdc8ea06644ed" + integrity sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" -"@babel/plugin-transform-destructuring@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.13.tgz#fc56c5176940c5b41735c677124d1d20cecc9aeb" - integrity sha512-Dn83KykIFzjhA3FDPA1z4N+yfF3btDGhjnJwxIj0T43tP0flCujnU8fKgEkf0C1biIpSv9NZegPBQ1J6jYkwvQ== +"@babel/plugin-transform-destructuring@^7.13.0": + version "7.13.17" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz#678d96576638c19d5b36b332504d3fd6e06dea27" + integrity sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-transform-dotall-regex@^7.12.13", "@babel/plugin-transform-dotall-regex@^7.4.4": version "7.12.13" @@ -558,12 +589,12 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.12.13" "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-for-of@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.13.tgz#561ff6d74d9e1c8879cb12dbaf4a14cd29d15cf6" - integrity sha512-xCbdgSzXYmHGyVX3+BsQjcd4hv4vA/FDy7Kc8eOpzKmBBPEOTurt0w5fCRQaGl+GSBORKgJdstQ1rHl4jbNseQ== +"@babel/plugin-transform-for-of@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz#c799f881a8091ac26b54867a845c3e97d2696062" + integrity sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-transform-function-name@^7.12.13": version "7.12.13" @@ -587,43 +618,43 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-modules-amd@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.13.tgz#43db16249b274ee2e551e2422090aa1c47692d56" - integrity sha512-JHLOU0o81m5UqG0Ulz/fPC68/v+UTuGTWaZBUwpEk1fYQ1D9LfKV6MPn4ttJKqRo5Lm460fkzjLTL4EHvCprvA== +"@babel/plugin-transform-modules-amd@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz#19f511d60e3d8753cc5a6d4e775d3a5184866cc3" + integrity sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ== dependencies: - "@babel/helper-module-transforms" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-module-transforms" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.13.tgz#5043b870a784a8421fa1fd9136a24f294da13e50" - integrity sha512-OGQoeVXVi1259HjuoDnsQMlMkT9UkZT9TpXAsqWplS/M0N1g3TJAn/ByOCeQu7mfjc5WpSsRU+jV1Hd89ts0kQ== +"@babel/plugin-transform-modules-commonjs@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz#7b01ad7c2dcf2275b06fa1781e00d13d420b3e1b" + integrity sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw== dependencies: - "@babel/helper-module-transforms" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-module-transforms" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" "@babel/helper-simple-access" "^7.12.13" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.13.tgz#351937f392c7f07493fc79b2118201d50404a3c5" - integrity sha512-aHfVjhZ8QekaNF/5aNdStCGzwTbU7SI5hUybBKlMzqIMC7w7Ho8hx5a4R/DkTHfRfLwHGGxSpFt9BfxKCoXKoA== +"@babel/plugin-transform-modules-systemjs@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz#6d066ee2bff3c7b3d60bf28dec169ad993831ae3" + integrity sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A== dependencies: - "@babel/helper-hoist-variables" "^7.12.13" - "@babel/helper-module-transforms" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-hoist-variables" "^7.13.0" + "@babel/helper-module-transforms" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" "@babel/helper-validator-identifier" "^7.12.11" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.13.tgz#26c66f161d3456674e344b4b1255de4d530cfb37" - integrity sha512-BgZndyABRML4z6ibpi7Z98m4EVLFI9tVsZDADC14AElFaNHHBcJIovflJ6wtCqFxwy2YJ1tJhGRsr0yLPKoN+w== +"@babel/plugin-transform-modules-umd@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz#8a3d96a97d199705b9fd021580082af81c06e70b" + integrity sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw== dependencies: - "@babel/helper-module-transforms" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-module-transforms" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-transform-named-capturing-groups-regex@^7.12.13": version "7.12.13" @@ -647,12 +678,12 @@ "@babel/helper-plugin-utils" "^7.12.13" "@babel/helper-replace-supers" "^7.12.13" -"@babel/plugin-transform-parameters@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.13.tgz#461e76dfb63c2dfd327b8a008a9e802818ce9853" - integrity sha512-e7QqwZalNiBRHCpJg/P8s/VJeSRYgmtWySs1JwvfwPqhBbiWfOcHDKdeAi6oAyIimoKWBlwc8oTgbZHdhCoVZA== +"@babel/plugin-transform-parameters@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz#8fa7603e3097f9c0b7ca1a4821bc2fb52e9e5007" + integrity sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-transform-property-literals@^7.12.13": version "7.12.13" @@ -668,23 +699,23 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-react-jsx-development@^7.12.12": - version "7.12.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.12.tgz#bccca33108fe99d95d7f9e82046bfe762e71f4e7" - integrity sha512-i1AxnKxHeMxUaWVXQOSIco4tvVvvCxMSfeBMnMM06mpaJt3g+MpxYQQrDfojUQldP1xxraPSJYSMEljoWM/dCg== +"@babel/plugin-transform-react-jsx-development@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.17.tgz#f510c0fa7cd7234153539f9a362ced41a5ca1447" + integrity sha512-BPjYV86SVuOaudFhsJR1zjgxxOhJDt6JHNoD48DxWEIxUCAMjV1ys6DYw4SDYZh0b1QsS2vfIA9t/ZsQGsDOUQ== dependencies: - "@babel/plugin-transform-react-jsx" "^7.12.12" + "@babel/plugin-transform-react-jsx" "^7.12.17" -"@babel/plugin-transform-react-jsx@^7.12.12", "@babel/plugin-transform-react-jsx@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.13.tgz#6c9f993b9f6fb6f0e32a4821ed59349748576a3e" - integrity sha512-hhXZMYR8t9RvduN2uW4sjl6MRtUhzNE726JvoJhpjhxKgRUVkZqTsA0xc49ALZxQM7H26pZ/lLvB2Yrea9dllA== +"@babel/plugin-transform-react-jsx@^7.12.17", "@babel/plugin-transform-react-jsx@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.13.12.tgz#1df5dfaf0f4b784b43e96da6f28d630e775f68b3" + integrity sha512-jcEI2UqIcpCqB5U5DRxIl0tQEProI2gcu+g8VTIqxLO5Iidojb4d77q+fwGseCvd8af/lJ9masp4QWzBXFE2xA== dependencies: "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-module-imports" "^7.13.12" + "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-syntax-jsx" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/types" "^7.13.12" "@babel/plugin-transform-react-pure-annotations@^7.12.1": version "7.12.1" @@ -694,10 +725,10 @@ "@babel/helper-annotate-as-pure" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-regenerator@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz#b628bcc9c85260ac1aeb05b45bde25210194a2f5" - integrity sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA== +"@babel/plugin-transform-regenerator@^7.13.15": + version "7.13.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz#e5eb28945bf8b6563e7f818945f966a8d2997f39" + integrity sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ== dependencies: regenerator-transform "^0.14.2" @@ -708,14 +739,17 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-runtime@^7.12.15": - version "7.12.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.15.tgz#4337b2507288007c2b197059301aa0af8d90c085" - integrity sha512-OwptMSRnRWJo+tJ9v9wgAf72ydXWfYSXWhnQjZing8nGZSDFqU1MBleKM3+DriKkcbv7RagA8gVeB0A1PNlNow== +"@babel/plugin-transform-runtime@^7.13.15": + version "7.13.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.13.15.tgz#2eddf585dd066b84102517e10a577f24f76a9cd7" + integrity sha512-d+ezl76gx6Jal08XngJUkXM4lFXK/5Ikl9Mh4HKDxSfGJXmZ9xG64XT2oivBzfxb/eQ62VfvoMkaCZUKJMVrBA== dependencies: - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - semver "^5.5.1" + "@babel/helper-module-imports" "^7.13.12" + "@babel/helper-plugin-utils" "^7.13.0" + babel-plugin-polyfill-corejs2 "^0.2.0" + babel-plugin-polyfill-corejs3 "^0.2.0" + babel-plugin-polyfill-regenerator "^0.2.0" + semver "^6.3.0" "@babel/plugin-transform-shorthand-properties@^7.12.13": version "7.12.13" @@ -724,12 +758,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-spread@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.13.tgz#ca0d5645abbd560719c354451b849f14df4a7949" - integrity sha512-dUCrqPIowjqk5pXsx1zPftSq4sT0aCeZVAxhdgs3AMgyaDmoUT0G+5h3Dzja27t76aUEIJWlFgPJqJ/d4dbTtg== +"@babel/plugin-transform-spread@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz#84887710e273c1815ace7ae459f6f42a5d31d5fd" + integrity sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" "@babel/plugin-transform-sticky-regex@^7.12.13": @@ -739,12 +773,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-template-literals@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.13.tgz#655037b07ebbddaf3b7752f55d15c2fd6f5aa865" - integrity sha512-arIKlWYUgmNsF28EyfmiQHJLJFlAJNYkuQO10jL46ggjBpeb2re1P9K9YGxNJB45BqTbaslVysXDYm/g3sN/Qg== +"@babel/plugin-transform-template-literals@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz#a36049127977ad94438dee7443598d1cefdf409d" + integrity sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-transform-typeof-symbol@^7.12.13": version "7.12.13" @@ -753,13 +787,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-typescript@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.13.tgz#8bcb5dd79cb8bba690d6920e19992d9228dfed48" - integrity sha512-z1VWskPJxK9tfxoYvePWvzSJC+4pxXr8ArmRm5ofqgi+mwpKg6lvtomkIngBYMJVnKhsFYVysCQLDn//v2RHcg== +"@babel/plugin-transform-typescript@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.13.0.tgz#4a498e1f3600342d2a9e61f60131018f55774853" + integrity sha512-elQEwluzaU8R8dbVuW2Q2Y8Nznf7hnjM7+DSCd14Lo5fF63C9qNLbwZYbmZrtV9/ySpSUpkRpQXvJb6xyu4hCQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-create-class-features-plugin" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-syntax-typescript" "^7.12.13" "@babel/plugin-transform-unicode-escapes@^7.12.13": @@ -777,79 +811,82 @@ "@babel/helper-create-regexp-features-plugin" "^7.12.13" "@babel/helper-plugin-utils" "^7.12.13" -"@babel/preset-env@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.13.tgz#3aa2d09cf7d255177538dff292ac9af29ad46525" - integrity sha512-JUVlizG8SoFTz4LmVUL8++aVwzwxcvey3N0j1tRbMAXVEy95uQ/cnEkmEKHN00Bwq4voAV3imQGnQvpkLAxsrw== - dependencies: - "@babel/compat-data" "^7.12.13" - "@babel/helper-compilation-targets" "^7.12.13" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-validator-option" "^7.12.11" - "@babel/plugin-proposal-async-generator-functions" "^7.12.13" - "@babel/plugin-proposal-class-properties" "^7.12.13" - "@babel/plugin-proposal-dynamic-import" "^7.12.1" +"@babel/preset-env@^7.13.15": + version "7.13.15" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.13.15.tgz#c8a6eb584f96ecba183d3d414a83553a599f478f" + integrity sha512-D4JAPMXcxk69PKe81jRJ21/fP/uYdcTZ3hJDF5QX2HSI9bBxxYw/dumdR6dGumhjxlprHPE4XWoPaqzZUVy2MA== + dependencies: + "@babel/compat-data" "^7.13.15" + "@babel/helper-compilation-targets" "^7.13.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-validator-option" "^7.12.17" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.13.12" + "@babel/plugin-proposal-async-generator-functions" "^7.13.15" + "@babel/plugin-proposal-class-properties" "^7.13.0" + "@babel/plugin-proposal-dynamic-import" "^7.13.8" "@babel/plugin-proposal-export-namespace-from" "^7.12.13" - "@babel/plugin-proposal-json-strings" "^7.12.13" - "@babel/plugin-proposal-logical-assignment-operators" "^7.12.13" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.13" + "@babel/plugin-proposal-json-strings" "^7.13.8" + "@babel/plugin-proposal-logical-assignment-operators" "^7.13.8" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.13.8" "@babel/plugin-proposal-numeric-separator" "^7.12.13" - "@babel/plugin-proposal-object-rest-spread" "^7.12.13" - "@babel/plugin-proposal-optional-catch-binding" "^7.12.13" - "@babel/plugin-proposal-optional-chaining" "^7.12.13" - "@babel/plugin-proposal-private-methods" "^7.12.13" + "@babel/plugin-proposal-object-rest-spread" "^7.13.8" + "@babel/plugin-proposal-optional-catch-binding" "^7.13.8" + "@babel/plugin-proposal-optional-chaining" "^7.13.12" + "@babel/plugin-proposal-private-methods" "^7.13.0" "@babel/plugin-proposal-unicode-property-regex" "^7.12.13" - "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.12.13" - "@babel/plugin-transform-arrow-functions" "^7.12.13" - "@babel/plugin-transform-async-to-generator" "^7.12.13" + "@babel/plugin-transform-arrow-functions" "^7.13.0" + "@babel/plugin-transform-async-to-generator" "^7.13.0" "@babel/plugin-transform-block-scoped-functions" "^7.12.13" "@babel/plugin-transform-block-scoping" "^7.12.13" - "@babel/plugin-transform-classes" "^7.12.13" - "@babel/plugin-transform-computed-properties" "^7.12.13" - "@babel/plugin-transform-destructuring" "^7.12.13" + "@babel/plugin-transform-classes" "^7.13.0" + "@babel/plugin-transform-computed-properties" "^7.13.0" + "@babel/plugin-transform-destructuring" "^7.13.0" "@babel/plugin-transform-dotall-regex" "^7.12.13" "@babel/plugin-transform-duplicate-keys" "^7.12.13" "@babel/plugin-transform-exponentiation-operator" "^7.12.13" - "@babel/plugin-transform-for-of" "^7.12.13" + "@babel/plugin-transform-for-of" "^7.13.0" "@babel/plugin-transform-function-name" "^7.12.13" "@babel/plugin-transform-literals" "^7.12.13" "@babel/plugin-transform-member-expression-literals" "^7.12.13" - "@babel/plugin-transform-modules-amd" "^7.12.13" - "@babel/plugin-transform-modules-commonjs" "^7.12.13" - "@babel/plugin-transform-modules-systemjs" "^7.12.13" - "@babel/plugin-transform-modules-umd" "^7.12.13" + "@babel/plugin-transform-modules-amd" "^7.13.0" + "@babel/plugin-transform-modules-commonjs" "^7.13.8" + "@babel/plugin-transform-modules-systemjs" "^7.13.8" + "@babel/plugin-transform-modules-umd" "^7.13.0" "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.13" "@babel/plugin-transform-new-target" "^7.12.13" "@babel/plugin-transform-object-super" "^7.12.13" - "@babel/plugin-transform-parameters" "^7.12.13" + "@babel/plugin-transform-parameters" "^7.13.0" "@babel/plugin-transform-property-literals" "^7.12.13" - "@babel/plugin-transform-regenerator" "^7.12.13" + "@babel/plugin-transform-regenerator" "^7.13.15" "@babel/plugin-transform-reserved-words" "^7.12.13" "@babel/plugin-transform-shorthand-properties" "^7.12.13" - "@babel/plugin-transform-spread" "^7.12.13" + "@babel/plugin-transform-spread" "^7.13.0" "@babel/plugin-transform-sticky-regex" "^7.12.13" - "@babel/plugin-transform-template-literals" "^7.12.13" + "@babel/plugin-transform-template-literals" "^7.13.0" "@babel/plugin-transform-typeof-symbol" "^7.12.13" "@babel/plugin-transform-unicode-escapes" "^7.12.13" "@babel/plugin-transform-unicode-regex" "^7.12.13" - "@babel/preset-modules" "^0.1.3" - "@babel/types" "^7.12.13" - core-js-compat "^3.8.0" - semver "^5.5.0" + "@babel/preset-modules" "^0.1.4" + "@babel/types" "^7.13.14" + babel-plugin-polyfill-corejs2 "^0.2.0" + babel-plugin-polyfill-corejs3 "^0.2.0" + babel-plugin-polyfill-regenerator "^0.2.0" + core-js-compat "^3.9.0" + semver "^6.3.0" -"@babel/preset-modules@^0.1.3": +"@babel/preset-modules@^0.1.4": version "0.1.4" resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== @@ -860,41 +897,42 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-react@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.13.tgz#5f911b2eb24277fa686820d5bd81cad9a0602a0a" - integrity sha512-TYM0V9z6Abb6dj1K7i5NrEhA13oS5ujUYQYDfqIBXYHOc2c2VkFgc+q9kyssIyUfy4/hEwqrgSlJ/Qgv8zJLsA== +"@babel/preset-react@^7.13.13": + version "7.13.13" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.13.13.tgz#fa6895a96c50763fe693f9148568458d5a839761" + integrity sha512-gx+tDLIE06sRjKJkVtpZ/t3mzCDOnPG+ggHZG9lffUbX8+wC739x20YQc9V35Do6ZAxaUc/HhVHIiOzz5MvDmA== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-validator-option" "^7.12.17" "@babel/plugin-transform-react-display-name" "^7.12.13" - "@babel/plugin-transform-react-jsx" "^7.12.13" - "@babel/plugin-transform-react-jsx-development" "^7.12.12" + "@babel/plugin-transform-react-jsx" "^7.13.12" + "@babel/plugin-transform-react-jsx-development" "^7.12.17" "@babel/plugin-transform-react-pure-annotations" "^7.12.1" -"@babel/preset-typescript@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.12.13.tgz#c859c7c075c531d2cc34c2516b214e5d884efe5c" - integrity sha512-gYry7CeXwD2wtw5qHzrtzKaShEhOfTmKb4i0ZxeYBcBosN5VuAudsNbjX7Oj5EAfQ3K4s4HsVMQRRcqGsPvs2A== +"@babel/preset-typescript@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.13.0.tgz#ab107e5f050609d806fbb039bec553b33462c60a" + integrity sha512-LXJwxrHy0N3f6gIJlYbLta1D9BDtHpQeqwzM0LIfjDlr6UE/D5Mc7W4iDiQzaE+ks0sTjT26ArcHWnJVt0QiHw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-validator-option" "^7.12.11" - "@babel/plugin-transform-typescript" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-validator-option" "^7.12.17" + "@babel/plugin-transform-typescript" "^7.13.0" -"@babel/register@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.12.13.tgz#e9cb57618264f2944634da941ba9755088ef9ec5" - integrity sha512-fnCeRXj970S9seY+973oPALQg61TRvAaW0nRDe1f4ytKqM3fZgsNXewTZWmqZedg74LFIRpg/11dsrPZZvYs2g== +"@babel/register@^7.13.16": + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.13.16.tgz#ae3ab0b55c8ec28763877383c454f01521d9a53d" + integrity sha512-dh2t11ysujTwByQjXNgJ48QZ2zcXKQVdV8s0TbeMI0flmtGWCdTwK9tJiACHXPLmncm5+ktNn/diojA45JE4jg== dependencies: + clone-deep "^4.0.1" find-cache-dir "^2.0.0" - lodash "^4.17.19" make-dir "^2.1.0" pirates "^4.0.0" source-map-support "^0.5.16" -"@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.8.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.13.tgz#0a21452352b02542db0ffb928ac2d3ca7cb6d66d" - integrity sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw== +"@babel/runtime@^7.13.17", "@babel/runtime@^7.13.9", "@babel/runtime@^7.8.4": + version "7.13.17" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.17.tgz#8966d1fc9593bf848602f0662d6b4d0069e3a7ec" + integrity sha512-NCdgJEelPTSh+FEFylhnP1ylq848l1z9t9N0j1Lfbcw0+KXGjsTvUmkxy+voLLXB5SOKMbLLx4jxYliGrYQseA== dependencies: regenerator-runtime "^0.13.4" @@ -907,28 +945,26 @@ "@babel/parser" "^7.12.13" "@babel/types" "^7.12.13" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.13.tgz#689f0e4b4c08587ad26622832632735fb8c4e0c0" - integrity sha512-3Zb4w7eE/OslI0fTp8c7b286/cQps3+vdLW3UcwC8VSJC6GbKn55aeVVu2QJNuCDoeKyptLOFrPq8WqZZBodyA== +"@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.13.13", "@babel/traverse@^7.13.15", "@babel/traverse@^7.13.17": + version "7.13.17" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.17.tgz#c85415e0c7d50ac053d758baec98b28b2ecfeea3" + integrity sha512-BMnZn0R+X6ayqm3C3To7o1j7Q020gWdqdyP50KEoVqaCO2c/Im7sYZSmVgvefp8TTMQ+9CtwuBp0Z1CZ8V3Pvg== dependencies: "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.12.13" + "@babel/generator" "^7.13.16" "@babel/helper-function-name" "^7.12.13" "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/parser" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/parser" "^7.13.16" + "@babel/types" "^7.13.17" debug "^4.1.0" globals "^11.1.0" - lodash "^4.17.19" -"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.13.tgz#8be1aa8f2c876da11a9cf650c0ecf656913ad611" - integrity sha512-oKrdZTld2im1z8bDwTOQvUbxKwE+854zc16qWZQlcTqMN00pWxHQ4ZeOq0yDMnisOpRykH2/5Qqcrk/OlbAjiQ== +"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.14", "@babel/types@^7.13.16", "@babel/types@^7.13.17", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.13.17" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.17.tgz#48010a115c9fba7588b4437dd68c9469012b38b4" + integrity sha512-RawydLgxbOPDlTLJNtoIypwdmAy//uQIzlKt2+iBiJaRlVuI6QLUxVAyWGNfOzp8Yu4L4lLIacoCyTNtpb4wiA== dependencies: "@babel/helper-validator-identifier" "^7.12.11" - lodash "^4.17.19" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -944,10 +980,10 @@ exec-sh "^0.3.2" minimist "^1.2.0" -"@eslint/eslintrc@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.3.0.tgz#d736d6963d7003b6514e6324bec9c602ac340318" - integrity sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg== +"@eslint/eslintrc@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.0.tgz#99cc0a0584d72f1df38b900fb062ba995f395547" + integrity sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog== dependencies: ajv "^6.12.4" debug "^4.1.1" @@ -956,10 +992,184 @@ ignore "^4.0.6" import-fresh "^3.2.1" js-yaml "^3.13.1" - lodash "^4.17.20" minimatch "^3.0.4" strip-json-comments "^3.1.1" +"@ethersproject/abi@5.0.7": + version "5.0.7" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.7.tgz#79e52452bd3ca2956d0e1c964207a58ad1a0ee7b" + integrity sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw== + dependencies: + "@ethersproject/address" "^5.0.4" + "@ethersproject/bignumber" "^5.0.7" + "@ethersproject/bytes" "^5.0.4" + "@ethersproject/constants" "^5.0.4" + "@ethersproject/hash" "^5.0.4" + "@ethersproject/keccak256" "^5.0.3" + "@ethersproject/logger" "^5.0.5" + "@ethersproject/properties" "^5.0.3" + "@ethersproject/strings" "^5.0.4" + +"@ethersproject/abstract-provider@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.1.0.tgz#1f24c56cda5524ef4ed3cfc562a01d6b6f8eeb0b" + integrity sha512-8dJUnT8VNvPwWhYIau4dwp7qe1g+KgdRm4XTWvjkI9gAT2zZa90WF5ApdZ3vl1r6NDmnn6vUVvyphClRZRteTQ== + dependencies: + "@ethersproject/bignumber" "^5.1.0" + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + "@ethersproject/networks" "^5.1.0" + "@ethersproject/properties" "^5.1.0" + "@ethersproject/transactions" "^5.1.0" + "@ethersproject/web" "^5.1.0" + +"@ethersproject/abstract-signer@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.1.0.tgz#744c7a2d0ebe3cc0bc38294d0f53d5ca3f4e49e3" + integrity sha512-qQDMkjGZSSJSKl6AnfTgmz9FSnzq3iEoEbHTYwjDlEAv+LNP7zd4ixCcVWlWyk+2siud856M5CRhAmPdupeN9w== + dependencies: + "@ethersproject/abstract-provider" "^5.1.0" + "@ethersproject/bignumber" "^5.1.0" + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + "@ethersproject/properties" "^5.1.0" + +"@ethersproject/address@^5.0.4", "@ethersproject/address@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.1.0.tgz#3854fd7ebcb6af7597de66f847c3345dae735b58" + integrity sha512-rfWQR12eHn2cpstCFS4RF7oGjfbkZb0oqep+BfrT+gWEGWG2IowJvIsacPOvzyS1jhNF4MQ4BS59B04Mbovteg== + dependencies: + "@ethersproject/bignumber" "^5.1.0" + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/keccak256" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + "@ethersproject/rlp" "^5.1.0" + +"@ethersproject/base64@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.1.0.tgz#27240c174d0a4e13f6eae87416fd876caf7f42b6" + integrity sha512-npD1bLvK4Bcxz+m4EMkx+F8Rd7CnqS9DYnhNu0/GlQBXhWjvfoAZzk5HJ0f1qeyp8d+A86PTuzLOGOXf4/CN8g== + dependencies: + "@ethersproject/bytes" "^5.1.0" + +"@ethersproject/bignumber@^5.0.7", "@ethersproject/bignumber@^5.1.0": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.1.1.tgz#84812695253ccbc639117f7ac49ee1529b68e637" + integrity sha512-AVz5iqz7+70RIqoQTznsdJ6DOVBYciNlvO+AlQmPTB6ofCvoihI9bQdr6wljsX+d5W7Yc4nyvQvP4JMzg0Agig== + dependencies: + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + bn.js "^4.4.0" + +"@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.1.0.tgz#55dfa9c4c21df1b1b538be3accb50fb76d5facfd" + integrity sha512-sGTxb+LVjFxJcJeUswAIK6ncgOrh3D8c192iEJd7mLr95V6du119rRfYT/b87WPkZ5I3gRBUYIYXtdgCWACe8g== + dependencies: + "@ethersproject/logger" "^5.1.0" + +"@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.1.0.tgz#4e7da6367ea0e9be87585d8b09f3fccf384b1452" + integrity sha512-0/SuHrxc8R8k+JiLmJymxHJbojUDWBQqO+b+XFdwaP0jGzqC09YDy/CAlSZB6qHsBifY8X3I89HcK/oMqxRdBw== + dependencies: + "@ethersproject/bignumber" "^5.1.0" + +"@ethersproject/hash@^5.0.4": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.1.0.tgz#40961d64837d57f580b7b055e0d74174876d891e" + integrity sha512-fNwry20yLLPpnRRwm3fBL+2ksgO+KMadxM44WJmRIoTKzy4269+rbq9KFoe2LTqq2CXJM2CE70beGaNrpuqflQ== + dependencies: + "@ethersproject/abstract-signer" "^5.1.0" + "@ethersproject/address" "^5.1.0" + "@ethersproject/bignumber" "^5.1.0" + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/keccak256" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + "@ethersproject/properties" "^5.1.0" + "@ethersproject/strings" "^5.1.0" + +"@ethersproject/keccak256@^5.0.3", "@ethersproject/keccak256@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.1.0.tgz#fdcd88fb13bfef4271b225cdd8dec4d315c8e60e" + integrity sha512-vrTB1W6AEYoadww5c9UyVJ2YcSiyIUTNDRccZIgwTmFFoSHwBtcvG1hqy9RzJ1T0bMdATbM9Hfx2mJ6H0i7Hig== + dependencies: + "@ethersproject/bytes" "^5.1.0" + js-sha3 "0.5.7" + +"@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.1.0.tgz#4cdeeefac029373349d5818f39c31b82cc6d9bbf" + integrity sha512-wtUaD1lBX10HBXjjKV9VHCBnTdUaKQnQ2XSET1ezglqLdPdllNOIlLfhyCRqXm5xwcjExVI5ETokOYfjPtaAlw== + +"@ethersproject/networks@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.1.0.tgz#f537290cb05aa6dc5e81e910926c04cfd5814bca" + integrity sha512-A/NIrIED/G/IgU1XUukOA3WcFRxn2I4O5GxsYGA5nFlIi+UZWdGojs85I1VXkR1gX9eFnDXzjE6OtbgZHjFhIA== + dependencies: + "@ethersproject/logger" "^5.1.0" + +"@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.1.0.tgz#9484bd6def16595fc6e4bdc26f29dff4d3f6ac42" + integrity sha512-519KKTwgmH42AQL3+GFV3SX6khYEfHsvI6v8HYejlkigSDuqttdgVygFTDsGlofNFchhDwuclrxQnD5B0YLNMg== + dependencies: + "@ethersproject/logger" "^5.1.0" + +"@ethersproject/rlp@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.1.0.tgz#700f4f071c27fa298d3c1d637485fefe919dd084" + integrity sha512-vDTyHIwNPrecy55gKGZ47eJZhBm8LLBxihzi5ou+zrSvYTpkSTWRcKUlXFDFQVwfWB+P5PGyERAdiDEI76clxw== + dependencies: + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + +"@ethersproject/signing-key@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.1.0.tgz#6eddfbddb6826b597b9650e01acf817bf8991b9c" + integrity sha512-tE5LFlbmdObG8bY04NpuwPWSRPgEswfxweAI1sH7TbP0ml1elNfqcq7ii/3AvIN05i5U0Pkm3Tf8bramt8MmLw== + dependencies: + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + "@ethersproject/properties" "^5.1.0" + bn.js "^4.4.0" + elliptic "6.5.4" + +"@ethersproject/strings@^5.0.4", "@ethersproject/strings@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.1.0.tgz#0f95a56c3c8c9d5510a06c241d818779750e2da5" + integrity sha512-perBZy0RrmmL0ejiFGUOlBVjMsUceqLut3OBP3zP96LhiJWWbS8u1NqQVgN4/Gyrbziuda66DxiQocXhsvx+Sw== + dependencies: + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/constants" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + +"@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.1.0": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.1.1.tgz#5a6bbb25fb062c3cc75eb0db12faefcdd3870813" + integrity sha512-Nwgbp09ttIVN0OoUBatCXaHxR7grWPHbozJN8v7AXDLrl6nnOIBEMDh+yJTnosSQlFhcyjfTGGN+Mx6R8HdvMw== + dependencies: + "@ethersproject/address" "^5.1.0" + "@ethersproject/bignumber" "^5.1.0" + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/constants" "^5.1.0" + "@ethersproject/keccak256" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + "@ethersproject/properties" "^5.1.0" + "@ethersproject/rlp" "^5.1.0" + "@ethersproject/signing-key" "^5.1.0" + +"@ethersproject/web@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.1.0.tgz#ed56bbe4e3d9a8ffe3b2ed882da5c62d3551381b" + integrity sha512-LTeluWgTq04+RNqAkVhpydPcRZK/kKxD2Vy7PYGrAD27ABO9kTqTBKwiOuzTyAHKUQHfnvZbXmxBXJAGViSDcA== + dependencies: + "@ethersproject/base64" "^5.1.0" + "@ethersproject/bytes" "^5.1.0" + "@ethersproject/logger" "^5.1.0" + "@ethersproject/properties" "^5.1.0" + "@ethersproject/strings" "^5.1.0" + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -972,9 +1182,9 @@ resolve-from "^5.0.0" "@istanbuljs/schema@^0.1.2": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" - integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== "@jest/console@^26.6.2": version "26.6.2" @@ -1193,15 +1403,16 @@ "@octokit/types" "^6.0.3" "@octokit/core@^3.2.3": - version "3.2.5" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.2.5.tgz#57becbd5fd789b0592b915840855f3a5f233d554" - integrity sha512-+DCtPykGnvXKWWQI0E1XD+CCeWSBhB6kwItXqfFmNBlIlhczuDPbg+P6BtLnVBaRJDAjv+1mrUJuRsFSjktopg== + version "3.4.0" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.4.0.tgz#b48aa27d755b339fe7550548b340dcc2b513b742" + integrity sha512-6/vlKPP8NF17cgYXqucdshWqmMZGXkuvtcrWCgU5NOI0Pl2GjlmZyWgBMrU8zJ3v2MJlM6++CiB45VKYmhiWWg== dependencies: "@octokit/auth-token" "^2.4.4" "@octokit/graphql" "^4.5.8" "@octokit/request" "^5.4.12" + "@octokit/request-error" "^2.0.5" "@octokit/types" "^6.0.3" - before-after-hook "^2.1.0" + before-after-hook "^2.2.0" universal-user-agent "^6.0.0" "@octokit/endpoint@^6.0.1": @@ -1214,40 +1425,40 @@ universal-user-agent "^6.0.0" "@octokit/graphql@^4.5.8": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.6.0.tgz#f9abca55f82183964a33439d5264674c701c3327" - integrity sha512-CJ6n7izLFXLvPZaWzCQDjU/RP+vHiZmWdOunaCS87v+2jxMsW9FB5ktfIxybRBxZjxuJGRnxk7xJecWTVxFUYQ== + version "4.6.1" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.6.1.tgz#f975486a46c94b7dbe58a0ca751935edc7e32cc9" + integrity sha512-2lYlvf4YTDgZCTXTW4+OX+9WTLFtEUc6hGm4qM1nlZjzxj+arizM4aHWzBVBCxY9glh7GIs0WEuiSgbVzv8cmA== dependencies: "@octokit/request" "^5.3.0" "@octokit/types" "^6.0.3" universal-user-agent "^6.0.0" -"@octokit/openapi-types@^4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-4.0.2.tgz#4b2bb553a16ab9e0fdeb29bd453b1c88cf129929" - integrity sha512-quqmeGTjcVks8YaatVGCpt7QpUTs2PK0D3mW5aEQqmFKOuIZ/CxwWrgnggPjqP3CNp6eALdQRgf0jUpcG8X1/Q== +"@octokit/openapi-types@^6.2.0": + version "6.2.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-6.2.0.tgz#6ea796b20c7111b9e422a4d607f796c1179622cd" + integrity sha512-V2vFYuawjpP5KUb8CPYsq20bXT4qnE8sH1QKpYqUlcNOntBiRr/VzGVvY0s+YXGgrVbFUVO4EI0VnHYSVBWfBg== "@octokit/plugin-paginate-rest@^2.6.2": - version "2.9.1" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.9.1.tgz#e9bb34a89b7ed5b801f1c976feeb9b0078ecd201" - integrity sha512-8wnuWGjwDIEobbBet2xAjZwgiMVTgIer5wBsnGXzV3lJ4yqphLU2FEMpkhSrDx7y+WkZDfZ+V+1cFMZ1mAaFag== + version "2.13.3" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.13.3.tgz#f0f1792230805108762d87906fb02d573b9e070a" + integrity sha512-46lptzM9lTeSmIBt/sVP/FLSTPGx6DCzAdSX3PfeJ3mTf4h9sGC26WpaQzMEq/Z44cOcmx8VsOhO+uEgE3cjYg== dependencies: - "@octokit/types" "^6.8.0" + "@octokit/types" "^6.11.0" "@octokit/plugin-request-log@^1.0.2": version "1.0.3" resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.3.tgz#70a62be213e1edc04bb8897ee48c311482f9700d" integrity sha512-4RFU4li238jMJAzLgAwkBAw+4Loile5haQMQr+uhFq27BmyJXcXSKvoQKqh0agsZEiUlW6iSv3FAgvmGkur7OQ== -"@octokit/plugin-rest-endpoint-methods@4.10.1": - version "4.10.1" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-4.10.1.tgz#b7a9181d1f52fef70a13945c5b49cffa51862da1" - integrity sha512-YGMiEidTORzgUmYZu0eH4q2k8kgQSHQMuBOBYiKxUYs/nXea4q/Ze6tDzjcRAPmHNJYXrENs1bEMlcdGKT+8ug== +"@octokit/plugin-rest-endpoint-methods@5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.0.1.tgz#631b8d4edc6798b03489911252a25f2a4e58c594" + integrity sha512-vvWbPtPqLyIzJ7A4IPdTl+8IeuKAwMJ4LjvmqWOOdfSuqWQYZXq2CEd0hsnkidff2YfKlguzujHs/reBdAx8Sg== dependencies: - "@octokit/types" "^6.8.2" + "@octokit/types" "^6.13.1" deprecation "^2.3.1" -"@octokit/request-error@^2.0.0": +"@octokit/request-error@^2.0.0", "@octokit/request-error@^2.0.5": version "2.0.5" resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.0.5.tgz#72cc91edc870281ad583a42619256b380c600143" integrity sha512-T/2wcCFyM7SkXzNoyVNWjyVlUwBvW3igM3Btr/eKYiPmucXTtkxt2RBsf6gn3LTzaLSLTQtNmvg+dGsOxQrjZg== @@ -1257,125 +1468,122 @@ once "^1.4.0" "@octokit/request@^5.3.0", "@octokit/request@^5.4.12": - version "5.4.14" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.4.14.tgz#ec5f96f78333bb2af390afa5ff66f114b063bc96" - integrity sha512-VkmtacOIQp9daSnBmDI92xNIeLuSRDOIuplp/CJomkvzt7M18NXgG044Cx/LFKLgjKt9T2tZR6AtJayba9GTSA== + version "5.4.15" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.4.15.tgz#829da413dc7dd3aa5e2cdbb1c7d0ebe1f146a128" + integrity sha512-6UnZfZzLwNhdLRreOtTkT9n57ZwulCve8q3IT/Z477vThu6snfdkBuhxnChpOKNGxcQ71ow561Qoa6uqLdPtag== dependencies: "@octokit/endpoint" "^6.0.1" "@octokit/request-error" "^2.0.0" "@octokit/types" "^6.7.1" - deprecation "^2.0.0" is-plain-object "^5.0.0" node-fetch "^2.6.1" - once "^1.4.0" universal-user-agent "^6.0.0" "@octokit/rest@^18.0.9": - version "18.1.0" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.1.0.tgz#9bf72604911a3433165bcc924263c9a706d32804" - integrity sha512-YQfpTzWV3jdzDPyXQVO54f5I2t1zxk/S53Vbe+Aa5vQj6MdTx6sNEWzmUzUO8lSVowbGOnjcQHzW1A8ATr+/7g== + version "18.5.3" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.5.3.tgz#6a2e6006a87ebbc34079c419258dd29ec9ff659d" + integrity sha512-KPAsUCr1DOdLVbZJgGNuE/QVLWEaVBpFQwDAz/2Cnya6uW2wJ/P5RVGk0itx7yyN1aGa8uXm2pri4umEqG1JBA== dependencies: "@octokit/core" "^3.2.3" "@octokit/plugin-paginate-rest" "^2.6.2" "@octokit/plugin-request-log" "^1.0.2" - "@octokit/plugin-rest-endpoint-methods" "4.10.1" - -"@octokit/types@^6.0.3", "@octokit/types@^6.7.1", "@octokit/types@^6.8.0", "@octokit/types@^6.8.2": - version "6.8.3" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.8.3.tgz#1960951103c836ab2e55fe47a8da2bf76402824f" - integrity sha512-ZNAy8z77ewKZ5LCX0KaUm4tWdgloWQ6FWJCh06qgahq/MH13sQefIPKSo0dBdPU3bcioltyZUcC0k8oHHfjvnQ== - dependencies: - "@octokit/openapi-types" "^4.0.2" - "@types/node" ">= 8" - -"@polkadot/api-contract@3.8.1": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@polkadot/api-contract/-/api-contract-3.8.1.tgz#63fe75a221793a9ab5708b3a452a2ae8f28f908f" - integrity sha512-vHEgKa8HcmMgHgmpgZZBCmhhc50PY0NvS1bXng8hmjh4gmvak63unpWBrSRn3hWLUvAO4SpBJ+zBrxrjewdsIg== - dependencies: - "@babel/runtime" "^7.12.13" - "@polkadot/api" "3.8.1" - "@polkadot/types" "3.8.1" - "@polkadot/util" "^5.6.1" - "@polkadot/x-rxjs" "^5.6.1" + "@octokit/plugin-rest-endpoint-methods" "5.0.1" + +"@octokit/types@^6.0.3", "@octokit/types@^6.11.0", "@octokit/types@^6.13.1", "@octokit/types@^6.7.1": + version "6.14.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.14.0.tgz#587529b4a461d8b7621b99845718dc5c79281f52" + integrity sha512-43qHvDsPsKgNt4W4al3dyU6s2XZ7ZMsiiIw8rQcM9CyEo7g9W8/6m1W4xHuRqmEjTfG1U4qsE/E4Jftw1/Ak1g== + dependencies: + "@octokit/openapi-types" "^6.2.0" + +"@polkadot/api-contract@4.7.2": + version "4.7.2" + resolved "https://registry.yarnpkg.com/@polkadot/api-contract/-/api-contract-4.7.2.tgz#9db4c16e78c182e0a51c4abb1e3286d3152dd361" + integrity sha512-AxQvORHn/cTZj/6njKsuGc+9ECd+ghC3ESdeJKg419Bh7MpoUcf4f0NyYa4POZY9lzT5160K7d+dYz7j9Jy/8g== + dependencies: + "@babel/runtime" "^7.13.17" + "@polkadot/api" "4.7.2" + "@polkadot/types" "4.7.2" + "@polkadot/util" "^6.3.1" + "@polkadot/x-rxjs" "^6.3.1" bn.js "^4.11.9" -"@polkadot/api-derive@3.8.1": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-3.8.1.tgz#24dbbed16e016d8d6cc58b6e16495dd4c1f6871a" - integrity sha512-F9HAPNz7MtK5EPhn/2nI3Gu4xQuLDX0rnv+v5K6LZybCPxh9ei3na56PCeCkG5kruoILtSnXecTuSrPyE1EWJA== - dependencies: - "@babel/runtime" "^7.12.13" - "@polkadot/api" "3.8.1" - "@polkadot/rpc-core" "3.8.1" - "@polkadot/types" "3.8.1" - "@polkadot/util" "^5.6.1" - "@polkadot/util-crypto" "^5.6.1" - "@polkadot/x-rxjs" "^5.6.1" +"@polkadot/api-derive@4.7.2": + version "4.7.2" + resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-4.7.2.tgz#94ca16f2e61d1739489da6030cbe5137beee336a" + integrity sha512-TRctRtGFvsso5R/dGwna2QiaQy14NFhrthu/sLh3oYIMNwQ6BeGHhbfjAi0pidc+ID2ia6LDLRw7vl/LVSuHIA== + dependencies: + "@babel/runtime" "^7.13.17" + "@polkadot/api" "4.7.2" + "@polkadot/rpc-core" "4.7.2" + "@polkadot/types" "4.7.2" + "@polkadot/util" "^6.3.1" + "@polkadot/util-crypto" "^6.3.1" + "@polkadot/x-rxjs" "^6.3.1" bn.js "^4.11.9" -"@polkadot/api@3.8.1": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-3.8.1.tgz#32d6d4efde1f76b170ba2985f136be4fd52ab1b8" - integrity sha512-5ayXsixyEL7A/ljFBCJReYfn9KAxfTJRTymDVf4S3aOwll0WRtvb0Vhy8nQa9H9RQleQ2Bk5JL5zx4EgAy01dg== - dependencies: - "@babel/runtime" "^7.12.13" - "@polkadot/api-derive" "3.8.1" - "@polkadot/keyring" "^5.6.1" - "@polkadot/metadata" "3.8.1" - "@polkadot/rpc-core" "3.8.1" - "@polkadot/rpc-provider" "3.8.1" - "@polkadot/types" "3.8.1" - "@polkadot/types-known" "3.8.1" - "@polkadot/util" "^5.6.1" - "@polkadot/util-crypto" "^5.6.1" - "@polkadot/x-rxjs" "^5.6.1" +"@polkadot/api@4.7.2": + version "4.7.2" + resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-4.7.2.tgz#0e98117fc631f2988ca364881111c05a00e8b701" + integrity sha512-PkWrgx+gICWt5uYjYoP68a8jyCRBkQXn9ecr0ReVr9jiiwvBYZyw3CLXTVRwJ89PpJLtDVz9QGCa4dM6j4a/LA== + dependencies: + "@babel/runtime" "^7.13.17" + "@polkadot/api-derive" "4.7.2" + "@polkadot/keyring" "^6.3.1" + "@polkadot/metadata" "4.7.2" + "@polkadot/rpc-core" "4.7.2" + "@polkadot/rpc-provider" "4.7.2" + "@polkadot/types" "4.7.2" + "@polkadot/types-known" "4.7.2" + "@polkadot/util" "^6.3.1" + "@polkadot/util-crypto" "^6.3.1" + "@polkadot/x-rxjs" "^6.3.1" bn.js "^4.11.9" eventemitter3 "^4.0.7" -"@polkadot/dev@^0.61.24": - version "0.61.25" - resolved "https://registry.yarnpkg.com/@polkadot/dev/-/dev-0.61.25.tgz#360e9b6f5a559eb1fd82a57ed5bb4e61102a0f4d" - integrity sha512-KSwO5OkNID1XQRupilDRL5JTaLleZyl/7hP75oJHxy5iUteNqVHwSr4bDXMM6IBxhFugwKAHE2CgiE38H4nvmA== +"@polkadot/dev@^0.62.10": + version "0.62.10" + resolved "https://registry.yarnpkg.com/@polkadot/dev/-/dev-0.62.10.tgz#364c3956aef53d89ad3b636233141c7016631a97" + integrity sha512-J7LwYBoNWXDXIRMIkTkuOQsuQKlO5rQPFya//zjFndBXP2ClSB1rWnHCD7Hw8JwcQVigxR0V2ZKCGJrZ/ThoSw== dependencies: - "@babel/cli" "^7.12.13" - "@babel/core" "^7.12.13" - "@babel/plugin-proposal-class-properties" "^7.12.13" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.13" + "@babel/cli" "^7.13.16" + "@babel/core" "^7.13.16" + "@babel/plugin-proposal-class-properties" "^7.13.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.13.8" "@babel/plugin-proposal-numeric-separator" "^7.12.13" - "@babel/plugin-proposal-object-rest-spread" "^7.12.13" - "@babel/plugin-proposal-optional-chaining" "^7.12.13" - "@babel/plugin-proposal-private-methods" "^7.12.13" + "@babel/plugin-proposal-object-rest-spread" "^7.13.8" + "@babel/plugin-proposal-optional-chaining" "^7.13.12" + "@babel/plugin-proposal-private-methods" "^7.13.0" "@babel/plugin-syntax-bigint" "^7.8.3" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-top-level-await" "^7.12.13" - "@babel/plugin-transform-regenerator" "^7.12.13" - "@babel/plugin-transform-runtime" "^7.12.15" - "@babel/preset-env" "^7.12.13" - "@babel/preset-react" "^7.12.13" - "@babel/preset-typescript" "^7.12.13" - "@babel/register" "^7.12.13" - "@babel/runtime" "^7.12.13" + "@babel/plugin-transform-regenerator" "^7.13.15" + "@babel/plugin-transform-runtime" "^7.13.15" + "@babel/preset-env" "^7.13.15" + "@babel/preset-react" "^7.13.13" + "@babel/preset-typescript" "^7.13.0" + "@babel/register" "^7.13.16" + "@babel/runtime" "^7.13.17" "@rushstack/eslint-patch" "^1.0.6" - "@typescript-eslint/eslint-plugin" "4.14.2" - "@typescript-eslint/parser" "4.14.2" + "@typescript-eslint/eslint-plugin" "4.22.0" + "@typescript-eslint/parser" "4.22.0" "@vue/component-compiler-utils" "^3.2.0" babel-jest "^26.6.3" - babel-plugin-module-extension-resolver "^1.0.0-rc.1" + babel-plugin-module-extension-resolver "^1.0.0-rc.2" babel-plugin-module-resolver "^4.1.0" babel-plugin-styled-components "^1.12.0" - browserslist "^4.16.3" - chalk "^4.1.0" + browserslist "^4.16.5" + chalk "^4.1.1" coveralls "^3.1.0" - eslint "^7.19.0" + eslint "^7.25.0" eslint-config-standard "^16.0.2" eslint-import-resolver-node "^0.3.4" eslint-plugin-header "^3.1.1" eslint-plugin-import "^2.22.1" eslint-plugin-node "^11.1.0" - eslint-plugin-promise "^4.2.1" - eslint-plugin-react "^7.22.0" + eslint-plugin-promise "^5.1.0" + eslint-plugin-react "^7.23.2" eslint-plugin-react-hooks "^4.2.0" eslint-plugin-simple-import-sort "^7.0.0" eslint-plugin-sort-destructure-keys "^1.3.5" @@ -1389,131 +1597,129 @@ jest-config "^26.6.3" jest-haste-map "^26.6.2" jest-resolve "^26.6.2" - madge "^4.0.0" + madge "^4.0.2" minimatch "^3.0.4" mkdirp "^1.0.4" prettier "^2.2.1" rimraf "^3.0.2" - typedoc "^0.20.23" - typedoc-plugin-markdown "^3.4.5" - typedoc-plugin-no-inherit "^1.2.0" - typescript "^4.1.3" + typescript "^4.2.4" yargs "^16.2.0" -"@polkadot/keyring@^5.6.1": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-5.6.2.tgz#9335d7cf21df10ad99580d8f070bfaa63327f797" - integrity sha512-LqN/ziJ3Nbpn1hiaGVc5DRKDxfbdY1kjTO9W8P4XENrGQmKzr+iBucNv/8KoFgKcwqksbVAQdvoiUhBkcQLtiw== - dependencies: - "@babel/runtime" "^7.12.13" - "@polkadot/util" "5.6.2" - "@polkadot/util-crypto" "5.6.2" - -"@polkadot/metadata@3.8.1": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@polkadot/metadata/-/metadata-3.8.1.tgz#bfef0381b79166dc84f673ff86e3baec4344aa28" - integrity sha512-bx+cg/BsjkRzuPEOdvhO62/2+mLJPGxohZL/Uuf1W4hgv/dBYvV/48wSCcpFNIeiJr40Zy2QPD5uiOXfncOtqA== - dependencies: - "@babel/runtime" "^7.12.13" - "@polkadot/types" "3.8.1" - "@polkadot/types-known" "3.8.1" - "@polkadot/util" "^5.6.1" - "@polkadot/util-crypto" "^5.6.1" +"@polkadot/keyring@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-6.3.1.tgz#434847cc4fb134116691c07e05750e8388cbb2b7" + integrity sha512-uVWhdd4TVtLc4R2OtiKHJE5jgJZnuEognbgjl5RT2uKrCJYTsYnq0IeRTvMmtdPJAJvGeD3JTsX2ekgt3tJpuw== + dependencies: + "@babel/runtime" "^7.13.17" + "@polkadot/util" "6.3.1" + "@polkadot/util-crypto" "6.3.1" + +"@polkadot/metadata@4.7.2": + version "4.7.2" + resolved "https://registry.yarnpkg.com/@polkadot/metadata/-/metadata-4.7.2.tgz#91076a1c1158494574a1965ec1fe124fb4d1b848" + integrity sha512-+YWeD828cpIpD31epoSZfK5kmtJsBcgTTyYsQ4bBO4NBJceLTipmHgyLXs7fXjU4cC6uvSuBnAV0KGJW7L9nDQ== + dependencies: + "@babel/runtime" "^7.13.17" + "@polkadot/types" "4.7.2" + "@polkadot/types-known" "4.7.2" + "@polkadot/util" "^6.3.1" + "@polkadot/util-crypto" "^6.3.1" bn.js "^4.11.9" -"@polkadot/networks@5.6.2", "@polkadot/networks@^5.6.1": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-5.6.2.tgz#acc62fb581adaa606908207fc8d0585112e513d1" - integrity sha512-DI70uSFLUmiVhn8LvoXSfMIbI2/+ikVQydD567QtIsH9uDF2VE4XtdSvykCv5Em3WKs1Wlu1/ylPukKk+2ZEhw== - dependencies: - "@babel/runtime" "^7.12.13" - -"@polkadot/rpc-core@3.8.1": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-3.8.1.tgz#bcd1bc1d287d6f25ff5a7cf02b970a41e0ccfef2" - integrity sha512-QBOZKjOMO6FM0xF4SKwPRk3rOSVM9+h7VoJa4BRdoiFjlgLfbIFl7g4mfNQVHqHjpAIR9ZeE5T6zU9bWIr3uog== - dependencies: - "@babel/runtime" "^7.12.13" - "@polkadot/metadata" "3.8.1" - "@polkadot/rpc-provider" "3.8.1" - "@polkadot/types" "3.8.1" - "@polkadot/util" "^5.6.1" - "@polkadot/x-rxjs" "^5.6.1" - -"@polkadot/rpc-provider@3.8.1": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-3.8.1.tgz#ebe51ddc0db4b20d8852bf1425f994f83836461d" - integrity sha512-1U0A9OxQ2B2ABNFWaporuIaNxMrHqVbWJgpOoRSf8lbnwuHWQClRIljlxBp9TT3S7RKC3XXegQi8zpl22ZEorQ== - dependencies: - "@babel/runtime" "^7.12.13" - "@polkadot/types" "3.8.1" - "@polkadot/util" "^5.6.1" - "@polkadot/util-crypto" "^5.6.1" - "@polkadot/x-fetch" "^5.6.1" - "@polkadot/x-global" "^5.6.1" - "@polkadot/x-ws" "^5.6.1" +"@polkadot/networks@6.3.1", "@polkadot/networks@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-6.3.1.tgz#c5063681ea73f8b579f418d57d0eba2d4bb72292" + integrity sha512-oANup0CLGt75CPbE3gz2HUWUlqQKucImdb1TtStLXMUH+Aj8ZOnQFA2lwixzaRdx+ymPfmEL7GkF36i96OqQVw== + dependencies: + "@babel/runtime" "^7.13.17" + +"@polkadot/rpc-core@4.7.2": + version "4.7.2" + resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-4.7.2.tgz#d79c42bb9fafc84a5c3b90959a86fe97b4a21fb5" + integrity sha512-LxpI8TVdjL99nfnLQog1tL0STdiYIUSLzdN+2PKvaO0YoBPAau945PVfz6GeN7wqQZKxR6N/1SKhAVfYcP7ctA== + dependencies: + "@babel/runtime" "^7.13.17" + "@polkadot/metadata" "4.7.2" + "@polkadot/rpc-provider" "4.7.2" + "@polkadot/types" "4.7.2" + "@polkadot/util" "^6.3.1" + "@polkadot/x-rxjs" "^6.3.1" + +"@polkadot/rpc-provider@4.7.2": + version "4.7.2" + resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-4.7.2.tgz#71340ec6a109a2652502aee8d24e06f0322663b8" + integrity sha512-nvKScoPTzi7PFA5XnVI1lbebLjdwF6OcvWC0QvaEUrbwoG3NPFtoAGF6r2HloX0Q/Qo6FEHowrX0nY4gTM+QCw== + dependencies: + "@babel/runtime" "^7.13.17" + "@polkadot/types" "4.7.2" + "@polkadot/util" "^6.3.1" + "@polkadot/util-crypto" "^6.3.1" + "@polkadot/x-fetch" "^6.3.1" + "@polkadot/x-global" "^6.3.1" + "@polkadot/x-ws" "^6.3.1" bn.js "^4.11.9" eventemitter3 "^4.0.7" -"@polkadot/ts@^0.3.59": - version "0.3.59" - resolved "https://registry.yarnpkg.com/@polkadot/ts/-/ts-0.3.59.tgz#2000016f4bdd93f6a50b31a8f05e37b0e3078d26" - integrity sha512-opTBp1r2UpvTKl2ZbxodnYIUZMjsR6wjnXV87s7VUl+cyUiJhNRh2wpeZ5jXbeUAdYPXGh/8h/hu1WfyKvnROA== - dependencies: - "@types/chrome" "^0.0.127" - -"@polkadot/typegen@^3.6.4": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@polkadot/typegen/-/typegen-3.8.1.tgz#f4f5c2e79d001396f72f8fda04e3611c4f03497a" - integrity sha512-mWnTpBBgnq79K5yIwtX5Vxx51RRSnic4dasy6xlgulGuYyO7E+M2kVOdVHEYhld5oU3zTAVZb+EWstvmBUOvNQ== - dependencies: - "@babel/core" "^7.12.13" - "@babel/register" "^7.12.13" - "@babel/runtime" "^7.12.13" - "@polkadot/api" "3.8.1" - "@polkadot/metadata" "3.8.1" - "@polkadot/rpc-provider" "3.8.1" - "@polkadot/types" "3.8.1" - "@polkadot/util" "^5.6.1" - handlebars "^4.7.6" - websocket "^1.0.33" +"@polkadot/ts@^0.3.63": + version "0.3.63" + resolved "https://registry.yarnpkg.com/@polkadot/ts/-/ts-0.3.63.tgz#184014eaeca5fb0fdbf93375f95d2a3b32f7907f" + integrity sha512-P69/Q5Hs54ynvVZ/xTVu/FWBdXGPWtW/KxNeVymXBe5PAGNoofEB8FGO+jA6Qd5qIgnjU4+k0r63UQRwwqJH4w== + dependencies: + "@types/chrome" "^0.0.135" + +"@polkadot/typegen@^4.7.2": + version "4.7.2" + resolved "https://registry.yarnpkg.com/@polkadot/typegen/-/typegen-4.7.2.tgz#22cc04bfee8bb3a9c596402504022089d4685749" + integrity sha512-GjkJa9fgU4HZPT+trr6rrBmroRv39uEUVGc7f2474UrzGWyO8X9034at165heMlOb0VhFoxTHAyZcIQX3Ub/IA== + dependencies: + "@babel/core" "^7.13.16" + "@babel/register" "^7.13.16" + "@babel/runtime" "^7.13.17" + "@polkadot/api" "4.7.2" + "@polkadot/metadata" "4.7.2" + "@polkadot/rpc-provider" "4.7.2" + "@polkadot/types" "4.7.2" + "@polkadot/util" "^6.3.1" + handlebars "^4.7.7" + websocket "^1.0.34" yargs "^16.2.0" -"@polkadot/types-known@3.8.1": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@polkadot/types-known/-/types-known-3.8.1.tgz#408e6165a1ddff484689fb0b252ef62960297b7e" - integrity sha512-mGQNaFzMImMwU5ahT6QEySkREy++Dt6c2VAf+CuvYKqORQWODM/95cveJdVdypi36iohW0SJc4UCXupicVey7Q== +"@polkadot/types-known@4.7.2": + version "4.7.2" + resolved "https://registry.yarnpkg.com/@polkadot/types-known/-/types-known-4.7.2.tgz#d6b55c75a9461a09490167a679b6ed783eab6350" + integrity sha512-vlIMBtBdVYHyjWqonQ39PCdZJ9WeTsA5h5zr2mEpkCSoopby5pZ6eOR8CPqjc1uYbdDHT72Dbtx8Wr9L7z8HXg== dependencies: - "@babel/runtime" "^7.12.13" - "@polkadot/networks" "^5.6.1" - "@polkadot/types" "3.8.1" - "@polkadot/util" "^5.6.1" + "@babel/runtime" "^7.13.17" + "@polkadot/networks" "^6.3.1" + "@polkadot/types" "4.7.2" + "@polkadot/util" "^6.3.1" bn.js "^4.11.9" -"@polkadot/types@3.8.1": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-3.8.1.tgz#e1c59016bc91c3b25d925837f3781811aff616a1" - integrity sha512-ONqae9KD2N/HsSfPB6ZmRh6cuUvrfmhHORNl7ciTzM4Q6MnK1r+66N5wg1wZpadkCIl8eeMzRre065aTKGrm3Q== +"@polkadot/types@4.7.2": + version "4.7.2" + resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-4.7.2.tgz#6b3e8c16999951e040459d5e338e259543bfec16" + integrity sha512-8qj/f6YAv5XCDLej60uWlX+cjuz2qt6AJKemi+lozA4vYZ9XTXIODYLv/XfjimbVABzeLdIAwWX1OQO9+F0Gng== dependencies: - "@babel/runtime" "^7.12.13" - "@polkadot/metadata" "3.8.1" - "@polkadot/util" "^5.6.1" - "@polkadot/util-crypto" "^5.6.1" - "@polkadot/x-rxjs" "^5.6.1" + "@babel/runtime" "^7.13.17" + "@polkadot/metadata" "4.7.2" + "@polkadot/util" "^6.3.1" + "@polkadot/util-crypto" "^6.3.1" + "@polkadot/x-rxjs" "^6.3.1" "@types/bn.js" "^4.11.6" bn.js "^4.11.9" -"@polkadot/util-crypto@5.6.2", "@polkadot/util-crypto@^5.4.4", "@polkadot/util-crypto@^5.6.1": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-5.6.2.tgz#5703afdfe93d15cd16b90b47ffc1a83625c176ec" - integrity sha512-cdwyPrfqYWJP2A4/jUnQIlCkMYl6saZR9jlke4PmCva0oYKdJjVCEu2g/caOoLH+wb+w29ulHzKzNRlyswSl0A== +"@polkadot/util-crypto@6.3.1", "@polkadot/util-crypto@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-6.3.1.tgz#5328da77bdee5064bc41f9dec0a76cc634690b88" + integrity sha512-fwH4t6EN2XACwJB2Z5xUyNo4mQ1RXJj0MgVaaLua8PbG0qq9tt4eaEbdVzrm7A6igIfsTntDoZISTfVjBcRtkQ== dependencies: - "@babel/runtime" "^7.12.13" - "@polkadot/networks" "5.6.2" - "@polkadot/util" "5.6.2" - "@polkadot/wasm-crypto" "^3.2.2" - "@polkadot/x-randomvalues" "5.6.2" + "@babel/runtime" "^7.13.17" + "@polkadot/networks" "6.3.1" + "@polkadot/util" "6.3.1" + "@polkadot/wasm-crypto" "^4.0.2" + "@polkadot/x-randomvalues" "6.3.1" base-x "^3.0.8" + base64-js "^1.5.1" blakejs "^1.1.0" bn.js "^4.11.9" create-hash "^1.2.0" @@ -1524,102 +1730,102 @@ tweetnacl "^1.0.3" xxhashjs "^0.2.2" -"@polkadot/util@5.6.2", "@polkadot/util@^5.6.1": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-5.6.2.tgz#c85ee096a8137d7005c16a26b242f932dcd9f242" - integrity sha512-SgwSmLf6YgLFwLUsVYHiqeheGWRtSBwD76zX+H6rj+qb31V+idtKpa0mxODrZ06x9fRg1erJbxvffya34KuYAQ== +"@polkadot/util@6.3.1", "@polkadot/util@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-6.3.1.tgz#410ee362ddb37f9c67af8f5897d977a7fd950ebf" + integrity sha512-M9pGaXSB67DZPckdNQU29wq5W7BUOh6qeu5LonzxpUek+riJfbiF9JOgZQ2Q/aEFYbd1hqLbOMsLRZLhSmlbYw== dependencies: - "@babel/runtime" "^7.12.13" - "@polkadot/x-textdecoder" "5.6.2" - "@polkadot/x-textencoder" "5.6.2" + "@babel/runtime" "^7.13.17" + "@polkadot/x-textdecoder" "6.3.1" + "@polkadot/x-textencoder" "6.3.1" "@types/bn.js" "^4.11.6" bn.js "^4.11.9" camelcase "^5.3.1" ip-regex "^4.3.0" -"@polkadot/wasm-crypto-asmjs@^3.2.2": - version "3.2.2" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-3.2.2.tgz#b18af677764d6943cba3c225ba28e9626760704c" - integrity sha512-OD6Ejzq0II+VuMLbs7nvGILO9b7PbK8F74uglDXQIaAl2YXuSEWbpE4S3RY7mRp+1Xg0igeNBhgMdRRUg5vDVg== +"@polkadot/wasm-crypto-asmjs@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-4.0.2.tgz#f42c353a64e1243841daf90e4bd54eff01a4e3cf" + integrity sha512-hlebqtGvfjg2ZNm4scwBGVHwOwfUhy2yw5RBHmPwkccUif3sIy4SAzstpcVBIVMdAEvo746bPWEInA8zJRcgJA== dependencies: - "@babel/runtime" "^7.12.5" + "@babel/runtime" "^7.13.9" -"@polkadot/wasm-crypto-wasm@^3.2.2": - version "3.2.2" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-3.2.2.tgz#44f8713d1db19efe13ea4c598f13a8495b24b49f" - integrity sha512-kU0m5X68NA8g7OKu0f0C+M1TmTy+hBEmGZ+7jbGBdDqkogc01sUR6qNtmPiT9g9Qsi1bhCoYVaVqtetpiD+CUw== +"@polkadot/wasm-crypto-wasm@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-4.0.2.tgz#89f9e0a1e4d076784d4a42bea37fc8b06bdd8bb6" + integrity sha512-de/AfNPZ0uDKFWzOZ1rJCtaUbakGN29ks6IRYu6HZTRg7+RtqvE1rIkxabBvYgQVHIesmNwvEA9DlIkS6hYRFQ== dependencies: - "@babel/runtime" "^7.12.5" + "@babel/runtime" "^7.13.9" -"@polkadot/wasm-crypto@^3.2.2": - version "3.2.2" - resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto/-/wasm-crypto-3.2.2.tgz#732d36f2dcd4c327696d078ad2efc64b70ca8586" - integrity sha512-dffdBQvFHbP0WLvpCf2fJ5mEWavXj75ykuFR16WIduhTRnI7fVYqYRaiJioUHWvPR34ik/VKlATWG7WPYiF5ZQ== +"@polkadot/wasm-crypto@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto/-/wasm-crypto-4.0.2.tgz#9649057adee8383cc86433d107ba526b718c5a3b" + integrity sha512-2h9FuQFkBc+B3TwSapt6LtyPvgtd0Hq9QsHW8g8FrmKBFRiiFKYRpfJKHCk0aCZzuRf9h95bQl/X6IXAIWF2ng== dependencies: - "@babel/runtime" "^7.12.5" - "@polkadot/wasm-crypto-asmjs" "^3.2.2" - "@polkadot/wasm-crypto-wasm" "^3.2.2" + "@babel/runtime" "^7.13.9" + "@polkadot/wasm-crypto-asmjs" "^4.0.2" + "@polkadot/wasm-crypto-wasm" "^4.0.2" -"@polkadot/x-fetch@^5.6.1": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-fetch/-/x-fetch-5.6.2.tgz#36052a0c5a5308c4c0ac14889725584996b22556" - integrity sha512-pAOaD24opprqIKfYdnRsf5aJ7XEnz1ryk2nQ67Ypv4BXQt+pih4kI9mVhZeAoK+yWpX3S6JjZkkkEYQ2lcqbZQ== +"@polkadot/x-fetch@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/x-fetch/-/x-fetch-6.3.1.tgz#ac1737f57a2a03b6666aec6abe3c8a2e147c2696" + integrity sha512-goBtKZarq5sXV2G98inj2v1ivVNF9gif8sg6IqsGRbljca6K6pZWTVd0yGWe7OABnCkFQotk283nly9nkr9+1g== dependencies: - "@babel/runtime" "^7.12.13" - "@polkadot/x-global" "5.6.2" - "@types/node-fetch" "^2.5.8" + "@babel/runtime" "^7.13.17" + "@polkadot/x-global" "6.3.1" + "@types/node-fetch" "^2.5.10" node-fetch "^2.6.1" -"@polkadot/x-global@5.6.2", "@polkadot/x-global@^5.6.1": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-5.6.2.tgz#14a0f0422232899d3b03e9668b014792b5460506" - integrity sha512-oAj0gf3HtWrxMEpjQPKZ1hlTKw4qMrMXB6lCls+jCK+TfLrwcMLOsYJsqt/RJoNIXyTxnWRgCktOt5UYgWLTGQ== +"@polkadot/x-global@6.3.1", "@polkadot/x-global@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-6.3.1.tgz#cdb4883fa20e23411bdd5f50a5d5c92814a3106f" + integrity sha512-eFooGQdxJpiOsm3AKTSMInaecBKaQ/tqOUJNm/CpdJalCqTDMp/qzgj64Uflk9eUqGgk7jB7Q5FaQdyWsC0Mtg== dependencies: - "@babel/runtime" "^7.12.13" - "@types/node-fetch" "^2.5.8" + "@babel/runtime" "^7.13.17" + "@types/node-fetch" "^2.5.10" node-fetch "^2.6.1" -"@polkadot/x-randomvalues@5.6.2": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-5.6.2.tgz#2a7092811992b95a0090332681d986d2e6996f85" - integrity sha512-+DjkwgmKFTfM8IOY1YvBI0duwuKzOeG/CWR8XuLyE3PnSnTn7eHXUGhtx6LHJPyMg9vHMs34ircYEVmhBKBvbA== +"@polkadot/x-randomvalues@6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-6.3.1.tgz#e2b91223277d7d7978c39e9d280fbc6526217d46" + integrity sha512-SZ5MUYm1fd1fgGFexMWbbG8zZgCS7b9QNKaIcnv1Dwlfp2meDoDlgoedn+1pCJ6VEa1adswqLHX4WbYA4D9ynA== dependencies: - "@babel/runtime" "^7.12.13" - "@polkadot/x-global" "5.6.2" + "@babel/runtime" "^7.13.17" + "@polkadot/x-global" "6.3.1" -"@polkadot/x-rxjs@^5.6.1": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-rxjs/-/x-rxjs-5.6.2.tgz#8a1770af2cf7abb9bcc4f4173f4f4a3e1c694130" - integrity sha512-PNifEC0N8e8bxNY/aWkHnWESjvWt8zepavo3xoG/rJ4hTAHRKjtpG9Gv16RCG1QQPiaX38VKHVxeUVqcp5Grcw== +"@polkadot/x-rxjs@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/x-rxjs/-/x-rxjs-6.3.1.tgz#5627f9601df6db22a65512a3eab0af4a22a58830" + integrity sha512-Z9mbvpixr0fopQh049tFlR8r/RItOyYRL4P7YqwnfeROqxU4R8UTmmB8As9y/zy0O5Jlkjzy9MdyQgwzhGQOcQ== dependencies: - "@babel/runtime" "^7.12.13" - rxjs "^6.6.3" + "@babel/runtime" "^7.13.17" + rxjs "^6.6.7" -"@polkadot/x-textdecoder@5.6.2": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-5.6.2.tgz#64ce45f9e2ced992785ac909da16d7db759630aa" - integrity sha512-kgZM+HwQSPVXjEJyOZulACHiPctCLsClgOrzsismm6UPPrsoweXFOlLIkK1K7VjloJFzi0uw0TCJxLtjzd24Jw== +"@polkadot/x-textdecoder@6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-6.3.1.tgz#ab0eec87d5df2d119480fa7a3657d8d72f583af8" + integrity sha512-lLb11yaAmyx2STw7ZmdgPtV7LI26U/5h1K527cM7QnxgTQgYggtAt4f9aLHiWsmOCvnT0U0PWsWSUbAJrLHLBA== dependencies: - "@babel/runtime" "^7.12.13" - "@polkadot/x-global" "5.6.2" + "@babel/runtime" "^7.13.17" + "@polkadot/x-global" "6.3.1" -"@polkadot/x-textencoder@5.6.2": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-5.6.2.tgz#71b4f94aedd17e1ef64e1cf2d5fc6f148b02e06a" - integrity sha512-3ln2vwzRi0qH1zHl+MltfX9f3zuQVaYLFHSyfr7FvlJ4mXIXslCjqsgIvmGuyyY50naD2nOd1IWg1uGlNhZLJA== +"@polkadot/x-textencoder@6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-6.3.1.tgz#2277770650f5637698d7d8cd7ac0cfd5ca0dace2" + integrity sha512-7V5OuT43JPTm7rrwdBEMzXAF5nLg+t6q24ntZHNcFUH1pdkP/+2f3vGM3e9BK5k4wkQLoepod5gyY6Qbw9bsYQ== dependencies: - "@babel/runtime" "^7.12.13" - "@polkadot/x-global" "5.6.2" + "@babel/runtime" "^7.13.17" + "@polkadot/x-global" "6.3.1" -"@polkadot/x-ws@^5.6.1": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-ws/-/x-ws-5.6.2.tgz#18620e71c41eb6b69992a46916bea3283ac7e33f" - integrity sha512-HihaUsxceC6KH5PGErugKs/V5sSzGDnmOrCTQ6g8XJ8Ob2CLixyzgF0L7+SUL1PbuvIRsVOJY/jcy2ThHk4OXg== +"@polkadot/x-ws@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@polkadot/x-ws/-/x-ws-6.3.1.tgz#1534f8d1cd03dbf497410725d14313e5554a2ffd" + integrity sha512-bDb9a+bxoaNOza0EeLp9M6FKYz9ogJcFQzRP+YR6ND7oQ0QcQG06XloRKTU0wtcZRKP8AzkYYN+FAc/6bnIqTw== dependencies: - "@babel/runtime" "^7.12.13" - "@polkadot/x-global" "5.6.2" - "@types/websocket" "^1.0.1" - websocket "^1.0.33" + "@babel/runtime" "^7.13.17" + "@polkadot/x-global" "6.3.1" + "@types/websocket" "^1.0.2" + websocket "^1.0.34" "@rushstack/eslint-patch@^1.0.6": version "1.0.6" @@ -1632,9 +1838,9 @@ integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== "@sinonjs/commons@^1.7.0": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.2.tgz#858f5c4b48d80778fde4b9d541f27edc0d56488b" - integrity sha512-sruwd86RJHdsVf/AtBoijDmUqJp3B6hF/DGC23C+JaegnDHaZyewCjoVGTdg3J0uz3Zs7NnIT05OBOmML72lQw== + version "1.8.3" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" + integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== dependencies: type-detect "4.0.8" @@ -1653,9 +1859,9 @@ defer-to-connect "^1.0.1" "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": - version "7.1.12" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.12.tgz#4d8e9e51eb265552a7e4f1ff2219ab6133bdfb2d" - integrity sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ== + version "7.1.14" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.14.tgz#faaeefc4185ec71c389f4501ee5ec84b170cc402" + integrity sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -1679,13 +1885,13 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.0.tgz#b9a1efa635201ba9bc850323a8793ee2d36c04a0" - integrity sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg== + version "7.11.1" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.1.tgz#654f6c4f67568e24c23b367e947098c6206fa639" + integrity sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw== dependencies: "@babel/types" "^7.3.0" -"@types/bn.js@^4.11.6": +"@types/bn.js@^4.11.3", "@types/bn.js@^4.11.5", "@types/bn.js@^4.11.6": version "4.11.6" resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== @@ -1699,35 +1905,35 @@ dependencies: "@types/chai" "*" -"@types/chai@*", "@types/chai@^4.2.12": - version "4.2.15" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.15.tgz#b7a6d263c2cecf44b6de9a051cf496249b154553" - integrity sha512-rYff6FI+ZTKAPkJUoyz7Udq3GaoDZnxYDEvdEdFZASiA7PoErltHezDishqQiSDWrGxvxmplH304jyzQmjp0AQ== +"@types/chai@*", "@types/chai@^4.2.17": + version "4.2.17" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.17.tgz#85f9f0610f514b22a94125d441f73eef65bde5cc" + integrity sha512-LaiwWNnYuL8xJlQcE91QB2JoswWZckq9A4b+nMPq8dt8AP96727Nb3X4e74u+E3tm4NLTILNI9MYFsyVc30wSA== -"@types/chrome@^0.0.127": - version "0.0.127" - resolved "https://registry.yarnpkg.com/@types/chrome/-/chrome-0.0.127.tgz#9e29f351d558f60e95326ceadc586fdcc824151b" - integrity sha512-hBB9EApLYKKn2GvklVkTxVP6vZvxsH9okyIRUinNtMzZHIgIKWQk/ESbX+O5g4Bihfy38+aFGn7Kl7Cxou5JUg== +"@types/chrome@^0.0.135": + version "0.0.135" + resolved "https://registry.yarnpkg.com/@types/chrome/-/chrome-0.0.135.tgz#a4dc6dbdc68b3f7d04b24f04d0ca5c803392b72f" + integrity sha512-SczB5P5mIgQWHAeiimlYg5VFvuQKCw4Q5cAzVD7II1Czf4U0222jb3mTHUd1qM0BRJ/kPtzybBde+Zy2sdx/LA== dependencies: "@types/filesystem" "*" "@types/har-format" "*" "@types/filesystem@*": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/filesystem/-/filesystem-0.0.29.tgz#ee3748eb5be140dcf980c3bd35f11aec5f7a3748" - integrity sha512-85/1KfRedmfPGsbK8YzeaQUyV1FQAvMPMTuWFQ5EkLd2w7szhNO96bk3Rh/SKmOfd9co2rCLf0Voy4o7ECBOvw== + version "0.0.30" + resolved "https://registry.yarnpkg.com/@types/filesystem/-/filesystem-0.0.30.tgz#a7373a2edf34d13e298baf7ee1101f738b2efb7e" + integrity sha512-NCoRgmGmLpTT9VFL6Bb6z0jQuqI3d0E5FGl7M0JOv/J5RQYo9s5aOItPYnpckx9MbYQk1APLXcF8f20Vqnf2yA== dependencies: "@types/filewriter" "*" "@types/filewriter@*": - version "0.0.28" - resolved "https://registry.yarnpkg.com/@types/filewriter/-/filewriter-0.0.28.tgz#c054e8af4d9dd75db4e63abc76f885168714d4b3" - integrity sha1-wFTor02d11205jq8dviFFocU1LM= + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/filewriter/-/filewriter-0.0.29.tgz#a48795ecadf957f6c0d10e0c34af86c098fa5bee" + integrity sha512-BsPXH/irW0ht0Ji6iw/jJaK8Lj3FJemon2gvEqHKpCdDCeemHa+rI3WBGq5z7cDMZgoLjY40oninGxqk+8NzNQ== "@types/graceful-fs@^4.1.2": - version "4.1.4" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.4.tgz#4ff9f641a7c6d1a3508ff88bc3141b152772e753" - integrity sha512-mWA/4zFQhfvOA8zWkXobwJvBD7vzcxgrOQ0J5CH1votGqdq9m7+FwtGaqyCZqC3NyyBkc9z4m+iry4LlqcMWJg== + version "4.1.5" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" + integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== dependencies: "@types/node" "*" @@ -1765,43 +1971,62 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= -"@types/mocha@^8.0.3": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-8.2.0.tgz#3eb56d13a1de1d347ecb1957c6860c911704bc44" - integrity sha512-/Sge3BymXo4lKc31C8OINJgXLaw+7vL1/L1pGiBNpGrBiT8FQiaFpSYV0uhTaG4y78vcMBTMFsWaHDvuD+xGzQ== +"@types/mocha@^8.2.2": + version "8.2.2" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-8.2.2.tgz#91daa226eb8c2ff261e6a8cbf8c7304641e095e0" + integrity sha512-Lwh0lzzqT5Pqh6z61P3c3P5nm6fzQK/MMHl9UKeneAeInVflBSz1O2EkX6gM6xfJd7FBXBY5purtLx7fUiZ7Hw== -"@types/node-fetch@^2.5.8": - version "2.5.8" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.8.tgz#e199c835d234c7eb0846f6618012e558544ee2fb" - integrity sha512-fbjI6ja0N5ZA8TV53RUqzsKNkl9fv8Oj3T7zxW7FGv1GSH7gwJaNF8dzCjrqKaxKeUpTz4yT1DaJFq/omNpGfw== +"@types/node-fetch@^2.5.10": + version "2.5.10" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.10.tgz#9b4d4a0425562f9fcea70b12cb3fcdd946ca8132" + integrity sha512-IpkX0AasN44hgEad0gEF/V6EgR5n69VEqPEgnmoM8GsIGro3PowbWs4tR6IhxUTyPLpOn+fiGG6nrQhcmoCuIQ== dependencies: "@types/node" "*" form-data "^3.0.0" -"@types/node@*", "@types/node@>= 8": - version "14.14.25" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.25.tgz#15967a7b577ff81383f9b888aa6705d43fbbae93" - integrity sha512-EPpXLOVqDvisVxtlbvzfyqSsFeQxltFbluZNRndIb8tr9KiBnYNLzrc1N3pyKUCww2RNrfHDViqDWWE1LCJQtQ== +"@types/node@*": + version "15.0.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.0.1.tgz#ef34dea0881028d11398be5bf4e856743e3dc35a" + integrity sha512-TMkXt0Ck1y0KKsGr9gJtWGjttxlZnnvDtphxUOSd0bfaR6Q1jle+sPvrzNR1urqYTWMinoKvjKfXUGsumaO1PA== + +"@types/node@^12.12.6": + version "12.20.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.11.tgz#980832cd56efafff8c18aa148c4085eb02a483f4" + integrity sha512-gema+apZ6qLQK7k7F0dGkGCWQYsL0qqKORWOQO6tq46q+x+1C0vbOiOqOwRVlh4RAdbQwV/j/ryr3u5NOG1fPQ== "@types/normalize-package-data@^2.4.0": version "2.4.0" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== +"@types/pbkdf2@^3.0.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" + integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== + dependencies: + "@types/node" "*" + "@types/prettier@^2.0.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.2.0.tgz#a4e8205a4955690eef712a6d0394a1d2e121e721" - integrity sha512-O3SQC6+6AySHwrspYn2UvC6tjo6jCTMMmylxZUFhE1CulVu5l3AxU6ca9lrJDTQDVllF62LIxVSx5fuYL6LiZg== + version "2.2.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.2.3.tgz#ef65165aea2924c9359205bf748865b8881753c0" + integrity sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA== + +"@types/secp256k1@^4.0.1": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.2.tgz#20c29a87149d980f64464e56539bf4810fdb5d1d" + integrity sha512-QMg+9v0bbNJ2peLuHRWxzmy0HRJIG6gFZNhaRSp7S3ggSbCCxiqQB2/ybvhXyhHOCequpNkrx7OavNhrWOsW0A== + dependencies: + "@types/node" "*" "@types/stack-utils@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw== -"@types/websocket@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-1.0.1.tgz#039272c196c2c0e4868a0d8a1a27bbb86e9e9138" - integrity sha512-f5WLMpezwVxCLm1xQe/kdPpQIOmL0TXYx2O15VYfYzc7hTIdxiOoOvez+McSIw3b7z/1zGovew9YSL7+h4h7/Q== +"@types/websocket@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-1.0.2.tgz#d2855c6a312b7da73ed16ba6781815bf30c6187a" + integrity sha512-B5m9aq7cbbD/5/jThEr33nUY8WEfVi6A2YKCTOvw5Ldy7mtsOkqRvGjnzy6g7iMMDsgu7xREuCzqATLDLQVKcQ== dependencies: "@types/node" "*" @@ -1817,13 +2042,13 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.14.2.tgz#47a15803cfab89580b96933d348c2721f3d2f6fe" - integrity sha512-uMGfG7GFYK/nYutK/iqYJv6K/Xuog/vrRRZX9aEP4Zv1jsYXuvFUMDFLhUnc8WFv3D2R5QhNQL3VYKmvLS5zsQ== +"@typescript-eslint/eslint-plugin@4.22.0": + version "4.22.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.22.0.tgz#3d5f29bb59e61a9dba1513d491b059e536e16dbc" + integrity sha512-U8SP9VOs275iDXaL08Ln1Fa/wLXfj5aTr/1c0t0j6CdbOnxh+TruXu1p4I0NAvdPBQgoPjHsgKn28mOi0FzfoA== dependencies: - "@typescript-eslint/experimental-utils" "4.14.2" - "@typescript-eslint/scope-manager" "4.14.2" + "@typescript-eslint/experimental-utils" "4.22.0" + "@typescript-eslint/scope-manager" "4.22.0" debug "^4.1.1" functional-red-black-tree "^1.0.1" lodash "^4.17.15" @@ -1831,87 +2056,60 @@ semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.14.2.tgz#9df35049d1d36b6cbaba534d703648b9e1f05cbb" - integrity sha512-mV9pmET4C2y2WlyHmD+Iun8SAEqkLahHGBkGqDVslHkmoj3VnxnGP4ANlwuxxfq1BsKdl/MPieDbohCEQgKrwA== +"@typescript-eslint/experimental-utils@4.22.0": + version "4.22.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.22.0.tgz#68765167cca531178e7b650a53456e6e0bef3b1f" + integrity sha512-xJXHHl6TuAxB5AWiVrGhvbGL8/hbiCQ8FiWwObO3r0fnvBdrbWEDy1hlvGQOAWc6qsCWuWMKdVWlLAEMpxnddg== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/scope-manager" "4.14.2" - "@typescript-eslint/types" "4.14.2" - "@typescript-eslint/typescript-estree" "4.14.2" + "@typescript-eslint/scope-manager" "4.22.0" + "@typescript-eslint/types" "4.22.0" + "@typescript-eslint/typescript-estree" "4.22.0" eslint-scope "^5.0.0" eslint-utils "^2.0.0" -"@typescript-eslint/parser@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.14.2.tgz#31e216e4baab678a56e539f9db9862e2542c98d0" - integrity sha512-ipqSP6EuUsMu3E10EZIApOJgWSpcNXeKZaFeNKQyzqxnQl8eQCbV+TSNsl+s2GViX2d18m1rq3CWgnpOxDPgHg== +"@typescript-eslint/parser@4.22.0": + version "4.22.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.22.0.tgz#e1637327fcf796c641fe55f73530e90b16ac8fe8" + integrity sha512-z/bGdBJJZJN76nvAY9DkJANYgK3nlRstRRi74WHm3jjgf2I8AglrSY+6l7ogxOmn55YJ6oKZCLLy+6PW70z15Q== dependencies: - "@typescript-eslint/scope-manager" "4.14.2" - "@typescript-eslint/types" "4.14.2" - "@typescript-eslint/typescript-estree" "4.14.2" + "@typescript-eslint/scope-manager" "4.22.0" + "@typescript-eslint/types" "4.22.0" + "@typescript-eslint/typescript-estree" "4.22.0" debug "^4.1.1" -"@typescript-eslint/scope-manager@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.14.2.tgz#64cbc9ca64b60069aae0c060b2bf81163243b266" - integrity sha512-cuV9wMrzKm6yIuV48aTPfIeqErt5xceTheAgk70N1V4/2Ecj+fhl34iro/vIssJlb7XtzcaD07hWk7Jk0nKghg== +"@typescript-eslint/scope-manager@4.22.0": + version "4.22.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.22.0.tgz#ed411545e61161a8d702e703a4b7d96ec065b09a" + integrity sha512-OcCO7LTdk6ukawUM40wo61WdeoA7NM/zaoq1/2cs13M7GyiF+T4rxuA4xM+6LeHWjWbss7hkGXjFDRcKD4O04Q== dependencies: - "@typescript-eslint/types" "4.14.2" - "@typescript-eslint/visitor-keys" "4.14.2" - -"@typescript-eslint/types@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.14.2.tgz#d96da62be22dc9dc6a06647f3633815350fb3174" - integrity sha512-LltxawRW6wXy4Gck6ZKlBD05tCHQUj4KLn4iR69IyRiDHX3d3NCAhO+ix5OR2Q+q9bjCrHE/HKt+riZkd1At8Q== + "@typescript-eslint/types" "4.22.0" + "@typescript-eslint/visitor-keys" "4.22.0" -"@typescript-eslint/types@4.15.0": - version "4.15.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.15.0.tgz#3011ae1ac3299bb9a5ac56bdd297cccf679d3662" - integrity sha512-su4RHkJhS+iFwyqyXHcS8EGPlUVoC+XREfy5daivjLur9JP8GhvTmDipuRpcujtGC4M+GYhUOJCPDE3rC5NJrg== - -"@typescript-eslint/typescript-estree@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.14.2.tgz#9c5ebd8cae4d7b014f890acd81e8e17f309c9df9" - integrity sha512-ESiFl8afXxt1dNj8ENEZT12p+jl9PqRur+Y19m0Z/SPikGL6rqq4e7Me60SU9a2M28uz48/8yct97VQYaGl0Vg== - dependencies: - "@typescript-eslint/types" "4.14.2" - "@typescript-eslint/visitor-keys" "4.14.2" - debug "^4.1.1" - globby "^11.0.1" - is-glob "^4.0.1" - lodash "^4.17.15" - semver "^7.3.2" - tsutils "^3.17.1" +"@typescript-eslint/types@4.22.0": + version "4.22.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.22.0.tgz#0ca6fde5b68daf6dba133f30959cc0688c8dd0b6" + integrity sha512-sW/BiXmmyMqDPO2kpOhSy2Py5w6KvRRsKZnV0c4+0nr4GIcedJwXAq+RHNK4lLVEZAJYFltnnk1tJSlbeS9lYA== -"@typescript-eslint/typescript-estree@^4.8.2": - version "4.15.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.15.0.tgz#402c86a7d2111c1f7a2513022f22a38a395b7f93" - integrity sha512-jG6xTmcNbi6xzZq0SdWh7wQ9cMb2pqXaUp6bUZOMsIlu5aOlxGxgE/t6L/gPybybQGvdguajXGkZKSndZJpksA== +"@typescript-eslint/typescript-estree@4.22.0", "@typescript-eslint/typescript-estree@^4.8.2": + version "4.22.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.22.0.tgz#b5d95d6d366ff3b72f5168c75775a3e46250d05c" + integrity sha512-TkIFeu5JEeSs5ze/4NID+PIcVjgoU3cUQUIZnH3Sb1cEn1lBo7StSV5bwPuJQuoxKXlzAObjYTilOEKRuhR5yg== dependencies: - "@typescript-eslint/types" "4.15.0" - "@typescript-eslint/visitor-keys" "4.15.0" + "@typescript-eslint/types" "4.22.0" + "@typescript-eslint/visitor-keys" "4.22.0" debug "^4.1.1" globby "^11.0.1" is-glob "^4.0.1" semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/visitor-keys@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.14.2.tgz#997cbe2cb0690e1f384a833f64794e98727c70c6" - integrity sha512-KBB+xLBxnBdTENs/rUgeUKO0UkPBRs2vD09oMRRIkj5BEN8PX1ToXV532desXfpQnZsYTyLLviS7JrPhdL154w== - dependencies: - "@typescript-eslint/types" "4.14.2" - eslint-visitor-keys "^2.0.0" - -"@typescript-eslint/visitor-keys@4.15.0": - version "4.15.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.15.0.tgz#2a07768df30c8a5673f1bce406338a07fdec38ca" - integrity sha512-RnDtJwOwFucWFAMjG3ghCG/ikImFJFEg20DI7mn4pHEx3vC48lIAoyjhffvfHmErRDboUPC7p9Z2il4CLb7qxA== +"@typescript-eslint/visitor-keys@4.22.0": + version "4.22.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.22.0.tgz#169dae26d3c122935da7528c839f42a8a42f6e47" + integrity sha512-nnMu4F+s4o0sll6cBSsTeVsT4cwxB7zECK3dFxzEjPBii9xLpq4yqqsy/FU5zMfan6G60DKZSCXAa3sHJZrcYw== dependencies: - "@typescript-eslint/types" "4.15.0" + "@typescript-eslint/types" "4.22.0" eslint-visitor-keys "^2.0.0" "@ungap/promise-all-settled@1.1.2": @@ -1935,11 +2133,19 @@ optionalDependencies: prettier "^1.18.2" -abab@^2.0.3: +abab@^2.0.3, abab@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== +accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + acorn-globals@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" @@ -1963,6 +2169,11 @@ acorn@^7.1.1, acorn@^7.4.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.1.0: + version "8.2.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.2.1.tgz#0d36af126fb6755095879c1dc6fd7edf7d60a5fb" + integrity sha512-z716cpm5TX4uzOzILx8PavOE6C6DKshHDw1aQN52M/yNSqE9s5O8SMfyhCCfCJ3HmTL0NkVOi+8a/55T7YB3bg== + ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" @@ -1973,10 +2184,10 @@ ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^7.0.2: - version "7.1.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-7.1.0.tgz#f982ea7933dc7f1012eae9eec5a86687d805421b" - integrity sha512-svS9uILze/cXbH0z2myCK2Brqprx/+JJYK5pHicT/GQiBfzzhUVAIT6MwqJg8y4xV/zoGsUeuPuwtoiKSGE15g== +ajv@^8.0.1: + version "8.2.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.2.0.tgz#c89d3380a784ce81b2085f48811c4c101df4c602" + integrity sha512-WSNGFuyWd//XO8n/m/EaOlNLtO0yL8EXT/74LqT4khdhpZjP7lkj/kT5uwRmGitKEVp/Oj7ZUHeGfPtgHhQ5CA== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" @@ -1996,11 +2207,11 @@ ansi-colors@4.1.1, ansi-colors@^4.1.1: integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== ansi-escapes@^4.2.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" - integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: - type-fest "^0.11.0" + type-fest "^0.21.3" ansi-regex@^2.0.0: version "2.1.1" @@ -2022,7 +2233,7 @@ ansi-regex@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== -ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== @@ -2045,9 +2256,9 @@ anymatch@^2.0.0: normalize-path "^2.1.1" anymatch@^3.0.3, anymatch@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" - integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" @@ -2088,6 +2299,11 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" @@ -2103,15 +2319,25 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= -array-includes@^3.1.1, array-includes@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.2.tgz#a8db03e0b88c8c6aeddc49cb132f9bcab4ebf9c8" - integrity sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - get-intrinsic "^1.0.1" +array-filter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83" + integrity sha1-uveeYubvTCpMC4MSMtr/7CUfnYM= + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-includes@^3.1.1, array-includes@^3.1.2, array-includes@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a" + integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + get-intrinsic "^1.1.1" is-string "^1.0.5" array-union@^1.0.1: @@ -2145,7 +2371,7 @@ array.prototype.flat@^1.2.3: define-properties "^1.1.3" es-abstract "^1.18.0-next.1" -array.prototype.flatmap@^1.2.3: +array.prototype.flatmap@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9" integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q== @@ -2155,6 +2381,16 @@ array.prototype.flatmap@^1.2.3: es-abstract "^1.18.0-next.1" function-bind "^1.1.1" +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" + asn1@~0.2.3: version "0.2.4" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" @@ -2192,6 +2428,11 @@ async-each@^1.0.1: resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + async@^2.6.1: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" @@ -2219,6 +2460,13 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== +available-typed-arrays@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz#6b098ca9d8039079ee3f77f7b783c4480ba513f5" + integrity sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ== + dependencies: + array-filter "^1.0.0" + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -2271,7 +2519,7 @@ babel-plugin-jest-hoist@^26.6.2: "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" -babel-plugin-module-extension-resolver@^1.0.0-rc.1: +babel-plugin-module-extension-resolver@^1.0.0-rc.2: version "1.0.0-rc.2" resolved "https://registry.yarnpkg.com/babel-plugin-module-extension-resolver/-/babel-plugin-module-extension-resolver-1.0.0-rc.2.tgz#c12a5bc29c478cc87cdf9359188bf500db53eae9" integrity sha512-nSvCi7Eq079snAYgWbq+VM8eci7OER9MAhDchuxpdimuyJr06x/Stsmc2b6zP5CDv4XR54Etkpf7jOo5NfzgVg== @@ -2287,6 +2535,30 @@ babel-plugin-module-resolver@^4.1.0: reselect "^4.0.0" resolve "^1.13.1" +babel-plugin-polyfill-corejs2@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz#686775bf9a5aa757e10520903675e3889caeedc4" + integrity sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg== + dependencies: + "@babel/compat-data" "^7.13.11" + "@babel/helper-define-polyfill-provider" "^0.2.0" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz#f4b4bb7b19329827df36ff56f6e6d367026cb7a2" + integrity sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.2.0" + core-js-compat "^3.9.1" + +babel-plugin-polyfill-regenerator@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz#853f5f5716f4691d98c84f8069c7636ea8da7ab8" + integrity sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.2.0" + babel-plugin-styled-components@^1.12.0: version "1.12.0" resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.12.0.tgz#1dec1676512177de6b827211e9eda5a30db4f9b9" @@ -2329,18 +2601,18 @@ babel-preset-jest@^26.6.2: babel-preset-current-node-syntax "^1.0.0" balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base-x@^3.0.8: +base-x@^3.0.2, base-x@^3.0.8: version "3.0.8" resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.8.tgz#1e1106c2537f0162e8b52474a557ebb09000018d" integrity sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA== dependencies: safe-buffer "^5.0.1" -base64-js@^1.3.1: +base64-js@^1.3.1, base64-js@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -2365,12 +2637,12 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -before-after-hook@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.1.tgz#99ae36992b5cfab4a83f6bee74ab27835f28f405" - integrity sha512-5ekuQOvO04MDj7kYZJaMab2S8SPjGJbotVNyv7QYFCOAwrGZs/YnoDNlh1U+m5hl7H2D/+n0taaAV/tfyd3KMA== +before-after-hook@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.1.tgz#73540563558687586b52ed217dad6a802ab1549c" + integrity sha512-/6FKxSTWoJdbsLDF8tdIjaRiFXiE6UHsEHE3OPI/cwPURCVi1ukP0gmLn7XWEiFk5TcwQjjY5PWsU+j+tgXgmw== -bignumber.js@^9.0.0: +bignumber.js@^9.0.0, bignumber.js@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.1.tgz#8d7ba124c882bfd8e43260c67475518d0689e4e5" integrity sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA== @@ -2385,7 +2657,7 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== -bl@^4.0.3: +bl@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== @@ -2399,20 +2671,46 @@ blakejs@^1.1.0: resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.0.tgz#69df92ef953aa88ca51a32df6ab1c54a155fc7a5" integrity sha1-ad+S75U6qIylGjLfarHFShVfx6U= -bluebird@^3.1.1: +bluebird@^3.1.1, bluebird@^3.5.0: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -bn.js@^4.11.9: - version "4.11.9" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" - integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== +bn.js@4.11.6: + version "4.11.6" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + integrity sha1-UzRK2xRhehP26N0s4okF0cC6MhU= + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^4.11.6, bn.js@^4.11.9, bn.js@^4.4.0: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.0.0, bn.js@^5.1.1: + version "5.2.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" + integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== + +body-parser@1.19.0, body-parser@^1.16.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" boxen@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.0.0.tgz#64fe9b16066af815f51057adcc800c3730120854" - integrity sha512-5bvsqw+hhgUi3oYGK0Vf4WpIkyemp60WBInn7+WNfoISzAqk/HX4L7WNROq38E6UR/y3YADpv6pEm4BfkeEAdA== + version "5.0.1" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.0.1.tgz#657528bdd3f59a772b8279b831f27ec2c744664b" + integrity sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA== dependencies: ansi-align "^3.0.0" camelcase "^6.2.0" @@ -2454,7 +2752,7 @@ braces@^3.0.1, braces@~3.0.2: dependencies: fill-range "^7.0.1" -brorand@^1.1.0: +brorand@^1.0.1, brorand@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= @@ -2469,16 +2767,86 @@ browser-stdout@1.3.1: resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== -browserslist@^4.14.5, browserslist@^4.16.1, browserslist@^4.16.3: - version "4.16.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.3.tgz#340aa46940d7db878748567c5dea24a48ddf3717" - integrity sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw== +browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== + dependencies: + bn.js "^5.0.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +browserslist@^4.14.5, browserslist@^4.16.4, browserslist@^4.16.5: + version "4.16.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.5.tgz#952825440bca8913c62d0021334cbe928ef062ae" + integrity sha512-C2HAjrM1AI/djrpAUU/tr4pml1DqLIzJKSLDBXBrNErl9ZCCTXdhwxdJjYc16953+mBWf7Lw+uUJgpgb8cN71A== dependencies: - caniuse-lite "^1.0.30001181" - colorette "^1.2.1" - electron-to-chromium "^1.3.649" + caniuse-lite "^1.0.30001214" + colorette "^1.2.2" + electron-to-chromium "^1.3.719" escalade "^3.1.1" - node-releases "^1.1.70" + node-releases "^1.1.71" + +bs58@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha1-vhYedsNU9veIrkBx9j806MTwpCo= + dependencies: + base-x "^3.0.2" + +bs58check@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" + integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== + dependencies: + bs58 "^4.0.0" + create-hash "^1.1.0" + safe-buffer "^5.1.2" bser@2.1.1: version "2.1.1" @@ -2492,7 +2860,17 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== -buffer@^5.5.0: +buffer-to-arraybuffer@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a" + integrity sha1-YGSkD6dutDxyOrqe+PbhIW0QURo= + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^5.0.5, buffer@^5.5.0, buffer@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -2512,6 +2890,11 @@ builtin-modules@^1.1.1: resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -2563,10 +2946,10 @@ camelcase@^6.0.0, camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== -caniuse-lite@^1.0.30001181: - version "1.0.30001185" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001185.tgz#3482a407d261da04393e2f0d61eefbc53be43b95" - integrity sha512-Fpi4kVNtNvJ15H0F6vwmXtb3tukv3Zg3qhKkOGUq7KJ1J6b9kf4dnNgtEAFXhRsJo0gNj9W60+wBvn0JcTvdTg== +caniuse-lite@^1.0.30001214: + version "1.0.30001219" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001219.tgz#5bfa5d0519f41f993618bd318f606a4c4c16156b" + integrity sha512-c0yixVG4v9KBc/tQ2rlbB3A/bgBFRvl8h8M4IeUbqCca4gsiCfvtaheUssbnux/Mb66Vjz7x8yYjDgYcNQOhyQ== capture-exit@^2.0.0: version "2.0.0" @@ -2587,16 +2970,16 @@ chai-as-promised@^7.1.1: dependencies: check-error "^1.0.2" -chai@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.0.tgz#5523a5faf7f819c8a92480d70a8cccbadacfc25f" - integrity sha512-/BFd2J30EcOwmdOgXvVsmM48l0Br0nmZPlO0uOW4XKh6kpsUumRXBgPV+IlaqFaqr9cYbeoZAM1Npx0i4A+aiA== +chai@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.4.tgz#b55e655b31e1eac7099be4c08c21964fce2e6c49" + integrity sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA== dependencies: assertion-error "^1.1.0" check-error "^1.0.2" deep-eql "^3.0.1" get-func-name "^2.0.0" - pathval "^1.1.0" + pathval "^1.1.1" type-detect "^4.0.5" chalk@^2.0.0, chalk@^2.3.0, chalk@^2.4.2: @@ -2616,10 +2999,10 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.0.0, chalk@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" + integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" @@ -2647,22 +3030,7 @@ check-error@^1.0.2: resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= -chokidar@3.4.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" - integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.5.0" - optionalDependencies: - fsevents "~2.1.2" - -chokidar@^3.4.0: +chokidar@3.5.1, chokidar@^3.4.0: version "3.5.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== @@ -2677,12 +3045,28 @@ chokidar@^3.4.0: optionalDependencies: fsevents "~2.3.1" +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== -cipher-base@^1.0.1: +cids@^0.7.1: + version "0.7.5" + resolved "https://registry.yarnpkg.com/cids/-/cids-0.7.5.tgz#60a08138a99bfb69b6be4ceb63bfef7a396b28b2" + integrity sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA== + dependencies: + buffer "^5.5.0" + class-is "^1.1.0" + multibase "~0.6.0" + multicodec "^1.0.0" + multihashes "~0.4.15" + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== @@ -2695,6 +3079,11 @@ cjs-module-lexer@^0.6.0: resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== +class-is@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825" + integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw== + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -2718,24 +3107,15 @@ cli-cursor@^3.1.0: restore-cursor "^3.1.0" cli-spinners@^2.2.0, cli-spinners@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.5.0.tgz#12763e47251bf951cb75c201dfa58ff1bcb2d047" - integrity sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ== + version "2.6.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.0.tgz#36c7dc98fb6a9a76bd6238ec3f77e2425627e939" + integrity sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q== cli-width@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - cliui@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" @@ -2754,6 +3134,15 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + clone-response@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" @@ -2813,15 +3202,10 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colorette@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" - integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== - -colors@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== +colorette@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" + integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" @@ -2889,6 +3273,27 @@ contains-path@^0.1.0: resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-hash@^2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/content-hash/-/content-hash-2.5.2.tgz#bbc2655e7c21f14fd3bfc7b7d4bfe6e454c9e211" + integrity sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw== + dependencies: + cids "^0.7.1" + multicodec "^0.5.5" + multihashes "^0.4.15" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" @@ -2896,17 +3301,32 @@ convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0, dependencies: safe-buffer "~5.1.1" +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + +cookiejar@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c" + integrity sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA== + copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js-compat@^3.8.0: - version "3.8.3" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.3.tgz#9123fb6b9cad30f0651332dc77deba48ef9b0b3f" - integrity sha512-1sCb0wBXnBIL16pfFG1Gkvei6UzvKyTNYpiC41yrdjEv0UoJoq9E/abTMzyYJ6JpTkAj15dLjbqifIzEBDVvog== +core-js-compat@^3.9.0, core-js-compat@^3.9.1: + version "3.11.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.11.0.tgz#635683f43480a0b41e3f6be3b1c648dadb8b4390" + integrity sha512-3wsN9YZJohOSDCjVB0GequOyHax8zFiogSX3XWLE28M1Ew7dTU57tgHjIylSBKSIouwmLBp3g61sKMz/q3xEGA== dependencies: - browserslist "^4.16.1" + browserslist "^4.16.4" semver "7.0.0" core-util-is@1.0.2, core-util-is@~1.0.0: @@ -2914,6 +3334,14 @@ core-util-is@1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +cors@^2.8.1: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + coveralls@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.1.0.tgz#13c754d5e7a2dd8b44fe5269e21ca394fb4d615b" @@ -2925,7 +3353,15 @@ coveralls@^3.1.0: minimist "^1.2.5" request "^2.88.2" -create-hash@^1.2.0: +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== @@ -2936,6 +3372,18 @@ create-hash@^1.2.0: ripemd160 "^2.0.1" sha.js "^2.4.0" +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + create-require@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" @@ -2961,6 +3409,23 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2: shebang-command "^2.0.0" which "^2.0.1" +crypto-browserify@3.12.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + crypto-random-string@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" @@ -2981,7 +3446,7 @@ cssom@~0.3.6: resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== -cssstyle@^2.2.0: +cssstyle@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== @@ -3017,21 +3482,14 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" -debug@4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" - integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== - dependencies: - ms "2.1.2" - -debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: +debug@4.3.1, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== @@ -3048,7 +3506,7 @@ decamelize@^4.0.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== -decimal.js@^10.2.0: +decimal.js@^10.2.1: version "10.2.1" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3" integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw== @@ -3059,13 +3517,13 @@ decode-uri-component@^0.2.0: integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= decomment@^0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/decomment/-/decomment-0.9.3.tgz#b913f32e5fe1113848f516caa5c7afefa9544d38" - integrity sha512-5skH5BfUL3n09RDmMVaHS1QGCiZRnl2nArUwmsE9JRY93Ueh3tihYl5wIrDdAuXnoFhxVis/DmRWREO2c6DG3w== + version "0.9.4" + resolved "https://registry.yarnpkg.com/decomment/-/decomment-0.9.4.tgz#fa40335bd90e3826d5c1984276e390525ff856d5" + integrity sha512-8eNlhyI5cSU4UbBlrtagWpR03dqXcE5IR9zpe7PnO6UzReXDskucsD8usgrzUmQ6qJ3N82aws/p/mu/jqbURWw== dependencies: esprima "4.0.1" -decompress-response@^3.3.0: +decompress-response@^3.2.0, decompress-response@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= @@ -3147,10 +3605,15 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + dependency-tree@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/dependency-tree/-/dependency-tree-8.0.0.tgz#59d141bcb53ca59f54e7f7b94013820ddd49b7d7" - integrity sha512-zagnV3jgizudEWY3FIFkGCrRr3+GukSMLlw1snIWAOL2beceC22hBXdeNjCnnfPZvbHIPB9DvacSCfD+IoOG3w== + version "8.1.0" + resolved "https://registry.yarnpkg.com/dependency-tree/-/dependency-tree-8.1.0.tgz#1b896a0418bd7ba3e6d55c39bb664452a001579f" + integrity sha512-YKFK+1KXJOqVpsW6MkrIl/DyiW+KVG25V8NfRs27ANe+oSeCkQx2ROW1mBpp1bcm++5zj3Xv8wyFxHgX6TbM1w== dependencies: commander "^2.20.3" debug "^4.3.1" @@ -3163,6 +3626,19 @@ deprecation@^2.0.0, deprecation@^2.3.1: resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + detect-indent@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd" @@ -3174,12 +3650,12 @@ detect-newline@^3.0.0: integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== detective-amd@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/detective-amd/-/detective-amd-3.0.1.tgz#aca8eddb1f405821953faf4a893d9b9e0430b09e" - integrity sha512-vJgluSKkPyo+/McW9hzwmZwY1VPA3BS0VS1agdpPAWAhr65HwC1ox4Ig82rVfGYDYCa4GcKQON5JWBk++2Kf1Q== + version "3.1.0" + resolved "https://registry.yarnpkg.com/detective-amd/-/detective-amd-3.1.0.tgz#92daee3214a0ca4522646cf333cac90a3fca6373" + integrity sha512-G7wGWT6f0VErjUkE2utCm7IUshT7nBh7aBBH2VBOiY9Dqy2DMens5iiOvYCuhstoIxRKLrnOvVAz4/EyPIAjnw== dependencies: ast-module-types "^2.7.0" - escodegen "^1.8.0" + escodegen "^2.0.0" get-amd-module-type "^3.0.0" node-source-walk "^4.0.0" @@ -3250,16 +3726,40 @@ detective-typescript@^6.0.0: node-source-walk "^4.2.0" typescript "^3.9.7" +detective-typescript@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/detective-typescript/-/detective-typescript-7.0.0.tgz#8c8917f2e51d9e4ee49821abf759ff512dd897f2" + integrity sha512-y/Ev98AleGvl43YKTNcA2Q+lyFmsmCfTTNWy4cjEJxoLkbobcXtRS0Kvx06daCgr2GdtlwLfNzL553BkktfJoA== + dependencies: + "@typescript-eslint/typescript-estree" "^4.8.2" + ast-module-types "^2.7.1" + node-source-walk "^4.2.0" + typescript "^3.9.7" + diff-sequences@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== -diff@4.0.2, diff@^4.0.1: +diff@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + +diff@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -3289,6 +3789,11 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +dom-walk@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" + integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== + domexception@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" @@ -3326,12 +3831,17 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" -electron-to-chromium@^1.3.649: - version "1.3.662" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.662.tgz#43305bcf88a3340feb553b815d6fd7466659d5ee" - integrity sha512-IGBXmTGwdVGUVTnZ8ISEvkhDfhhD+CDFndG4//BhvDcEtPYiVrzoB+rzT/Y12OQCf5bvRCrVmrUbGrS9P7a6FQ== +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +electron-to-chromium@^1.3.719: + version "1.3.723" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.723.tgz#52769a75635342a4db29af5f1e40bd3dad02c877" + integrity sha512-L+WXyXI7c7+G1V8ANzRsPI5giiimLAUDC6Zs1ojHHPhYXb3k/iTABFmWjivEtsWrRQymjnO66/rO2ZTABGdmWg== -elliptic@^6.5.4: +elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== @@ -3364,6 +3874,11 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" @@ -3372,9 +3887,9 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: once "^1.4.0" enhanced-resolve@^5.3.2: - version "5.7.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz#525c5d856680fbd5052de453ac83e32049958b5c" - integrity sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw== + version "5.8.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.8.0.tgz#d9deae58f9d3773b6a111a5a46831da5be5c9ac0" + integrity sha512-Sl3KRpJA8OpprrtaIswVki3cWPiPKxXuFxJXBp+zNb6s6VwNWwFRUdtmzd2ReUut8n+sCPx7QCtQ7w5wfJhSgQ== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -3393,25 +3908,27 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.18.0-next.1: - version "1.18.0-next.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.2.tgz#088101a55f0541f595e7e057199e27ddc8f3a5c2" - integrity sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw== +es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: + version "1.18.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4" + integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw== dependencies: call-bind "^1.0.2" es-to-primitive "^1.2.1" function-bind "^1.1.1" - get-intrinsic "^1.0.2" + get-intrinsic "^1.1.1" has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.2.2" + has-symbols "^1.0.2" + is-callable "^1.2.3" is-negative-zero "^2.0.1" - is-regex "^1.1.1" + is-regex "^1.1.2" + is-string "^1.0.5" object-inspect "^1.9.0" object-keys "^1.1.1" object.assign "^4.1.2" - string.prototype.trimend "^1.0.3" - string.prototype.trimstart "^1.0.3" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.0" es-to-primitive@^1.2.1: version "1.2.1" @@ -3458,6 +3975,11 @@ escape-goat@^2.0.0: resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + escape-string-regexp@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" @@ -3473,13 +3995,13 @@ escape-string-regexp@^2.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -escodegen@^1.14.1, escodegen@^1.8.0: - version "1.14.3" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" - integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== +escodegen@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== dependencies: esprima "^4.0.1" - estraverse "^4.2.0" + estraverse "^5.2.0" esutils "^2.0.2" optionator "^0.8.1" optionalDependencies: @@ -3550,32 +4072,33 @@ eslint-plugin-node@^11.1.0: resolve "^1.10.1" semver "^6.1.0" -eslint-plugin-promise@^4.2.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz#61485df2a359e03149fdafc0a68b0e030ad2ac45" - integrity sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ== +eslint-plugin-promise@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-5.1.0.tgz#fb2188fb734e4557993733b41aa1a688f46c6f24" + integrity sha512-NGmI6BH5L12pl7ScQHbg7tvtk4wPxxj8yPHH47NvSmMtFneC077PSeY3huFj06ZWZvtbfxSPt3RuOQD5XcR4ng== eslint-plugin-react-hooks@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz#8c229c268d468956334c943bb45fc860280f5556" integrity sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ== -eslint-plugin-react@^7.22.0: - version "7.22.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.22.0.tgz#3d1c542d1d3169c45421c1215d9470e341707269" - integrity sha512-p30tuX3VS+NWv9nQot9xIGAHBXR0+xJVaZriEsHoJrASGCJZDJ8JLNM0YqKqI0AKm6Uxaa1VUHoNEibxRCMQHA== +eslint-plugin-react@^7.23.2: + version "7.23.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.23.2.tgz#2d2291b0f95c03728b55869f01102290e792d494" + integrity sha512-AfjgFQB+nYszudkxRkTFu0UR1zEQig0ArVMPloKhxwlwkzaw/fBiH0QWcBBhZONlXqQC51+nfqFrkn4EzHcGBw== dependencies: - array-includes "^3.1.1" - array.prototype.flatmap "^1.2.3" + array-includes "^3.1.3" + array.prototype.flatmap "^1.2.4" doctrine "^2.1.0" has "^1.0.3" jsx-ast-utils "^2.4.1 || ^3.0.0" - object.entries "^1.1.2" - object.fromentries "^2.0.2" - object.values "^1.1.1" + minimatch "^3.0.4" + object.entries "^1.1.3" + object.fromentries "^2.0.4" + object.values "^1.1.3" prop-types "^15.7.2" - resolve "^1.18.1" - string.prototype.matchall "^4.0.2" + resolve "^2.0.0-next.3" + string.prototype.matchall "^4.0.4" eslint-plugin-simple-import-sort@^7.0.0: version "7.0.0" @@ -3614,13 +4137,13 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== -eslint@^7.19.0: - version "7.19.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.19.0.tgz#6719621b196b5fad72e43387981314e5d0dc3f41" - integrity sha512-CGlMgJY56JZ9ZSYhJuhow61lMPPjUzWmChFya71Z/jilVos7mR/jPgaEfVGgMBY5DshbKdG8Ezb8FDCHcoMEMg== +eslint@^7.25.0: + version "7.25.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.25.0.tgz#1309e4404d94e676e3e831b3a3ad2b050031eb67" + integrity sha512-TVpSovpvCNpLURIScDRB6g5CYu/ZFq9GfX2hLNIV4dSBKxIWojeDODvYl3t0k0VtMxYeR8OXPCFE5+oHMlGfhw== dependencies: - "@babel/code-frame" "^7.0.0" - "@eslint/eslintrc" "^0.3.0" + "@babel/code-frame" "7.12.11" + "@eslint/eslintrc" "^0.4.0" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -3631,12 +4154,12 @@ eslint@^7.19.0: eslint-utils "^2.1.0" eslint-visitor-keys "^2.0.0" espree "^7.3.1" - esquery "^1.2.0" + esquery "^1.4.0" esutils "^2.0.2" - file-entry-cache "^6.0.0" + file-entry-cache "^6.0.1" functional-red-black-tree "^1.0.1" glob-parent "^5.0.0" - globals "^12.1.0" + globals "^13.6.0" ignore "^4.0.6" import-fresh "^3.0.0" imurmurhash "^0.1.4" @@ -3644,7 +4167,7 @@ eslint@^7.19.0: js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" - lodash "^4.17.20" + lodash "^4.17.21" minimatch "^3.0.4" natural-compare "^1.4.0" optionator "^0.9.1" @@ -3671,7 +4194,7 @@ esprima@4.0.1, esprima@^4.0.0, esprima@^4.0.1: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.2.0: +esquery@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== @@ -3685,7 +4208,7 @@ esrecurse@^4.3.0: dependencies: estraverse "^5.2.0" -estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.1.1: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== @@ -3700,15 +4223,132 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +eth-ens-namehash@2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf" + integrity sha1-IprEbsqG1S4MmR58sq74P/D2i88= + dependencies: + idna-uts46-hx "^2.3.1" + js-sha3 "^0.5.7" + +eth-lib@0.2.8: + version "0.2.8" + resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8" + integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + xhr-request-promise "^0.1.2" + +eth-lib@^0.1.26: + version "0.1.29" + resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.1.29.tgz#0c11f5060d42da9f931eab6199084734f4dbd1d9" + integrity sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + nano-json-stream-parser "^0.1.2" + servify "^0.1.12" + ws "^3.0.0" + xhr-request-promise "^0.1.2" + +ethereum-bloom-filters@^1.0.6: + version "1.0.9" + resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.9.tgz#4a59dead803af0c9e33834170bd7695df67061ec" + integrity sha512-GiK/RQkAkcVaEdxKVkPcG07PQ5vD7v2MFSHgZmBJSfMzNRHimntdBithsHAT89tAXnIpzVDWt8iaCD1DvkaxGg== + dependencies: + js-sha3 "^0.8.0" + +ethereum-cryptography@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" + integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== + dependencies: + "@types/pbkdf2" "^3.0.0" + "@types/secp256k1" "^4.0.1" + blakejs "^1.1.0" + browserify-aes "^1.2.0" + bs58check "^2.1.2" + create-hash "^1.2.0" + create-hmac "^1.1.7" + hash.js "^1.1.7" + keccak "^3.0.0" + pbkdf2 "^3.0.17" + randombytes "^2.1.0" + safe-buffer "^5.1.2" + scrypt-js "^3.0.0" + secp256k1 "^4.0.1" + setimmediate "^1.0.5" + +ethereumjs-common@^1.3.2, ethereumjs-common@^1.5.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz#2065dbe9214e850f2e955a80e650cb6999066979" + integrity sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA== + +ethereumjs-tx@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz#5dfe7688bf177b45c9a23f86cf9104d47ea35fed" + integrity sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw== + dependencies: + ethereumjs-common "^1.5.0" + ethereumjs-util "^6.0.0" + +ethereumjs-util@^6.0.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" + integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== + dependencies: + "@types/bn.js" "^4.11.3" + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "0.1.6" + rlp "^2.2.3" + +ethjs-unit@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" + integrity sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk= + dependencies: + bn.js "4.11.6" + number-to-bn "1.7.0" + +ethjs-util@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" + integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== + dependencies: + is-hex-prefixed "1.0.0" + strip-hex-prefix "1.0.0" + +eventemitter3@4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" + integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== + eventemitter3@^4.0.7: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + exec-sh@^0.3.2: - version "0.3.4" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" - integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== + version "0.3.6" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" + integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== execa@^1.0.0: version "1.0.0" @@ -3768,6 +4408,42 @@ expect@^26.6.2: jest-message-util "^26.6.2" jest-regex-util "^26.0.0" +express@^4.14.0: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + ext@^1.1.2: version "1.4.0" resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" @@ -3856,9 +4532,9 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= fastq@^1.6.0: - version "1.10.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.10.1.tgz#8b8f2ac8bf3632d67afcd65dac248d5fdc45385e" - integrity sha512-AWuv6Ery3pM+dY7LYS8YIaCiQvUaos9OB1RyNgaOWnaX+Tik7Onvcsf8x8c+YtDeT0maYLniBip2hox5KtEXXA== + version "1.11.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" + integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== dependencies: reusify "^1.0.4" @@ -3876,10 +4552,10 @@ figures@^3.0.0: dependencies: escape-string-regexp "^1.0.5" -file-entry-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.0.tgz#7921a89c391c6d93efec2169ac6bf300c527ea0a" - integrity sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA== +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: flat-cache "^3.0.4" @@ -3941,6 +4617,19 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + find-babel-config@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.2.0.tgz#a9b7b317eb5b9860cda9d54740a8c8337a2283a2" @@ -4030,15 +4719,20 @@ for-in@^1.0.2: resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= form-data@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.0.tgz#31b7e39c85f1355b7139ee0c647cf0de7f83c682" - integrity sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg== + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" @@ -4053,6 +4747,11 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" @@ -4060,6 +4759,20 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +fs-extra@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" + integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" @@ -4079,6 +4792,13 @@ fs-extra@^9.1.0: jsonfile "^6.0.1" universalify "^2.0.0" +fs-minipass@^1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + fs-readdir-recursive@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" @@ -4094,11 +4814,6 @@ fsevents@^2.1.2, fsevents@~2.3.1: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== -fsevents@~2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== - function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -4123,7 +4838,7 @@ gauge@^v2.7.4: strip-ansi "^3.0.1" wide-align "^1.1.0" -gensync@^1.0.0-beta.1: +gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== @@ -4146,7 +4861,7 @@ get-func-name@^2.0.0: resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= -get-intrinsic@^1.0.1, get-intrinsic@^1.0.2, get-intrinsic@^1.1.0: +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== @@ -4165,6 +4880,11 @@ get-package-type@^0.1.0: resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + get-stream@^4.0.0, get-stream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -4245,9 +4965,9 @@ ghauth@^5.0.0: read "^1.0.7" github-url-to-object@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/github-url-to-object/-/github-url-to-object-4.0.4.tgz#a9797b7026e18d53b50b07f45b7e169b55fd90ee" - integrity sha512-1Ri1pR8XTfzLpbtPz5MlW/amGNdNReuExPsbF9rxLsBfO1GH9RtDBamhJikd0knMWq3RTTQDbTtw0GGvvEAJEA== + version "4.0.6" + resolved "https://registry.yarnpkg.com/github-url-to-object/-/github-url-to-object-4.0.6.tgz#5ea8701dc8c336b8d582dc3fa5bf964165c3b365" + integrity sha512-NaqbYHMUAlPcmWFdrAB7bcxrNIiiJWJe8s/2+iOc9vlcHlwHqSGrPk+Yi3nu6ebTwgsZEa7igz+NH2vEq3gYwQ== dependencies: is-url "^1.1.0" @@ -4260,9 +4980,9 @@ glob-parent@^3.1.0: path-dirname "^1.0.0" glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" - integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" @@ -4292,6 +5012,14 @@ global-dirs@^3.0.0: dependencies: ini "2.0.0" +global@~4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== + dependencies: + min-document "^2.19.0" + process "^0.11.10" + globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" @@ -4304,10 +5032,17 @@ globals@^12.1.0: dependencies: type-fest "^0.8.1" +globals@^13.6.0: + version "13.8.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.8.0.tgz#3e20f504810ce87a8d72e55aecf8435b50f4c1b3" + integrity sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q== + dependencies: + type-fest "^0.20.2" + globby@^11.0.1: - version "11.0.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.2.tgz#1af538b766a3b540ebfb58a32b2e2d5897321d83" - integrity sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og== + version "11.0.3" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb" + integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg== dependencies: array-union "^2.1.0" dir-glob "^3.0.1" @@ -4334,7 +5069,7 @@ gonzales-pe@^4.2.3: dependencies: minimist "^1.2.5" -got@^9.6.0: +got@9.6.0, got@^9.6.0: version "9.6.0" resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== @@ -4351,9 +5086,29 @@ got@^9.6.0: to-readable-stream "^1.0.0" url-parse-lax "^3.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: - version "4.2.6" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" +got@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" + integrity sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw== + dependencies: + decompress-response "^3.2.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-plain-obj "^1.1.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + isurl "^1.0.0-alpha5" + lowercase-keys "^1.0.0" + p-cancelable "^0.3.0" + p-timeout "^1.1.1" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + url-parse-lax "^1.0.0" + url-to-options "^1.0.1" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: + version "4.2.6" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== graphviz@0.0.9: @@ -4373,10 +5128,10 @@ growly@^1.3.0: resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= -handlebars@^4.7.6: - version "4.7.6" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.6.tgz#d4c05c1baf90e9945f77aa68a7a219aa4a7df74e" - integrity sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA== +handlebars@^4.7.7: + version "4.7.7" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" + integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== dependencies: minimist "^1.2.5" neo-async "^2.6.0" @@ -4398,6 +5153,11 @@ har-validator@~5.1.3: ajv "^6.12.3" har-schema "^2.0.0" +has-bigints@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" + integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -4408,10 +5168,22 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" - integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== +has-symbol-support-x@^1.4.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" + integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== + +has-symbols@^1.0.1, has-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + +has-to-string-tag-x@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" + integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== + dependencies: + has-symbol-support-x "^1.4.1" has-unicode@^2.0.0: version "2.0.1" @@ -4498,9 +5270,9 @@ hmac-drbg@^1.0.1: minimalistic-crypto-utils "^1.0.1" hosted-git-info@^2.1.4: - version "2.8.8" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" - integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== html-encoding-sniffer@^2.0.1: version "2.0.1" @@ -4519,6 +5291,33 @@ http-cache-semantics@^4.0.0: resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-https@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" + integrity sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs= + http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" @@ -4548,6 +5347,13 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +idna-uts46-hx@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz#a1dc5c4df37eee522bf66d969cc980e00e8711f9" + integrity sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA== + dependencies: + punycode "2.1.0" + ieee754@^1.1.13: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" @@ -4602,11 +5408,16 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + ini@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" @@ -4636,7 +5447,7 @@ inquirer@^7.3.3: strip-ansi "^6.0.0" through "^2.3.6" -internal-slot@^1.0.2: +internal-slot@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== @@ -4650,16 +5461,16 @@ interpret@^1.0.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= - ip-regex@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -4674,11 +5485,23 @@ is-accessor-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" +is-arguments@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" + integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== + dependencies: + call-bind "^1.0.0" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= +is-bigint@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.1.tgz#6923051dfcbc764278540b9ce0e6b3213aa5ebc2" + integrity sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg== + is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" @@ -4693,12 +5516,19 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" +is-boolean-object@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0" + integrity sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA== + dependencies: + call-bind "^1.0.0" + is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-callable@^1.1.4, is-callable@^1.2.2: +is-callable@^1.1.4, is-callable@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== @@ -4711,9 +5541,9 @@ is-ci@^2.0.0: ci-info "^2.0.0" is-core-module@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" - integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== + version "2.3.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.3.0.tgz#d341652e3408bca69c4671b79a0954a3d349f887" + integrity sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw== dependencies: has "^1.0.3" @@ -4755,9 +5585,9 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: kind-of "^6.0.2" is-docker@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" - integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" @@ -4793,11 +5623,21 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-function@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" + integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== + is-generator-fn@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== +is-generator-function@^1.0.7: + version "1.0.8" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.8.tgz#dfb5c2b120e02b0a8d9d2c6806cd5621aa922f7b" + integrity sha512-2Omr/twNtufVZFr1GhxjOMFPAj2sjc/dKaIqBhvo4qciXfJmITGH6ZGd8eZYNHza8t1y0e01AuqRhJwfWp26WQ== + is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" @@ -4812,6 +5652,11 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-hex-prefixed@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" + integrity sha1-fY035q135dEnFIkTxXPggtd39VQ= + is-installed-globally@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" @@ -4835,6 +5680,11 @@ is-npm@^5.0.0: resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== +is-number-object@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" + integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== + is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -4857,12 +5707,17 @@ is-obj@^2.0.0: resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== +is-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf" + integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA== + is-path-inside@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" - integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg== + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== -is-plain-obj@^1.0.0: +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= @@ -4885,11 +5740,11 @@ is-plain-object@^5.0.0: integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== is-potential-custom-element-name@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397" - integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c= + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== -is-regex@^1.1.1: +is-regex@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251" integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg== @@ -4907,7 +5762,12 @@ is-relative-path@^1.0.2: resolved "https://registry.yarnpkg.com/is-relative-path/-/is-relative-path-1.0.2.tgz#091b46a0d67c1ed0fe85f1f8cfdde006bb251d46" integrity sha1-CRtGoNZ8HtD+hfH4z93gBrslHUY= -is-stream@^1.1.0: +is-retry-allowed@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== + +is-stream@^1.0.0, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= @@ -4922,18 +5782,34 @@ is-string@^1.0.5: resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== -is-symbol@^1.0.2: +is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== dependencies: has-symbols "^1.0.1" +is-typed-array@^1.1.3: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.5.tgz#f32e6e096455e329eb7b423862456aa213f0eb4e" + integrity sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug== + dependencies: + available-typed-arrays "^1.0.2" + call-bind "^1.0.2" + es-abstract "^1.18.0-next.2" + foreach "^2.0.5" + has-symbols "^1.0.1" + is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + is-url@^1.1.0, is-url@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" @@ -5024,6 +5900,14 @@ istanbul-reports@^3.0.2: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" +isurl@^1.0.0-alpha5: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" + integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== + dependencies: + has-to-string-tag-x "^1.2.0" + is-object "^1.0.1" + jest-changed-files@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" @@ -5397,6 +6281,11 @@ jest@^26.6.3: import-local "^3.0.2" jest-cli "^26.6.3" +js-sha3@0.5.7, js-sha3@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" + integrity sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc= + js-sha3@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" @@ -5407,13 +6296,12 @@ js-sha3@^0.8.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@3.14.0: - version "3.14.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" - integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== +js-yaml@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.0.0.tgz#f426bc0ff4b4051926cd588c71113183409a121f" + integrity sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q== dependencies: - argparse "^1.0.7" - esprima "^4.0.0" + argparse "^2.0.1" js-yaml@^3.13.1: version "3.14.1" @@ -5429,35 +6317,35 @@ jsbn@~0.1.0: integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= jsdom@^16.4.0: - version "16.4.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.4.0.tgz#36005bde2d136f73eee1a830c6d45e55408edddb" - integrity sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w== + version "16.5.3" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.5.3.tgz#13a755b3950eb938b4482c407238ddf16f0d2136" + integrity sha512-Qj1H+PEvUsOtdPJ056ewXM4UJPCi4hhLA8wpiz9F2YvsRBhuFsXxtrIFAgGBDynQA9isAMGE91PfUYbdMPXuTA== dependencies: - abab "^2.0.3" - acorn "^7.1.1" + abab "^2.0.5" + acorn "^8.1.0" acorn-globals "^6.0.0" cssom "^0.4.4" - cssstyle "^2.2.0" + cssstyle "^2.3.0" data-urls "^2.0.0" - decimal.js "^10.2.0" + decimal.js "^10.2.1" domexception "^2.0.1" - escodegen "^1.14.1" + escodegen "^2.0.0" html-encoding-sniffer "^2.0.1" is-potential-custom-element-name "^1.0.0" nwsapi "^2.2.0" - parse5 "5.1.1" + parse5 "6.0.1" request "^2.88.2" - request-promise-native "^1.0.8" - saxes "^5.0.0" + request-promise-native "^1.0.9" + saxes "^5.0.1" symbol-tree "^3.2.4" - tough-cookie "^3.0.1" + tough-cookie "^4.0.0" w3c-hr-time "^1.0.2" w3c-xmlserializer "^2.0.0" webidl-conversions "^6.1.0" whatwg-encoding "^1.0.5" whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - ws "^7.2.3" + whatwg-url "^8.5.0" + ws "^7.4.4" xml-name-validator "^3.0.0" jsesc@^2.5.1: @@ -5558,6 +6446,14 @@ jsprim@^1.2.2: array-includes "^3.1.2" object.assign "^4.1.2" +keccak@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.1.tgz#ae30a0e94dbe43414f741375cff6d64c8bea0bff" + integrity sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + keyv@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" @@ -5687,22 +6583,37 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + +lodash.flatten@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= -lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20: - version "4.17.20" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" - integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= + +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.7.0: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== log-driver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== -log-symbols@4.0.0, log-symbols@^4.0.0: +log-symbols@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== @@ -5716,6 +6627,14 @@ log-symbols@^3.0.0: dependencies: chalk "^2.4.2" +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -5741,13 +6660,6 @@ lru-cache@^4.1.2: pseudomap "^1.0.2" yallist "^2.1.2" -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -5755,15 +6667,10 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -lunr@^2.3.9: - version "2.3.9" - resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" - integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== - -madge@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/madge/-/madge-4.0.0.tgz#8930e0e0310451b049a43b3a86253aea6cf7d03e" - integrity sha512-BQbYl2HTFnTqOTJQQwVGJPBuD7ScafYvWa2GGGIt+qBFQ2ZpYhSWQJp2rk3EdazthyAOhFvpeuIEOXTBVB50hw== +madge@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/madge/-/madge-4.0.2.tgz#56a3aff8021a5844f8713e0789f6ee94095f2f41" + integrity sha512-l5bnA2dvyk0azLKDbOTCI+wDZ6nB007PhvPdmiYlPmqwVi49JPbhQrH/t4u8E6Akp3gwji1GZuA+v/F5q6yoWQ== dependencies: chalk "^4.1.0" commander "^6.2.1" @@ -5778,7 +6685,7 @@ madge@^4.0.0: detective-sass "^3.0.1" detective-scss "^2.0.1" detective-stylus "^1.0.0" - detective-typescript "^6.0.0" + detective-typescript "^7.0.0" graphviz "0.0.9" ora "^5.1.0" pluralize "^8.0.0" @@ -5827,11 +6734,6 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -marked@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/marked/-/marked-2.0.0.tgz#9662bbcb77ebbded0662a7be66ff929a8611cee5" - integrity sha512-NqRSh2+LlN2NInpqTQnS614Y/3NkVMFFU6sJlRFEpxJ/LHuK/qJECH7/fXZjk4VZstPW/Pevjil/VtSONsLc7Q== - md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -5841,6 +6743,16 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + merge-source-map@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" @@ -5858,6 +6770,11 @@ merge2@^1.3.0: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -5878,29 +6795,42 @@ micromatch@^3.1.10, micromatch@^3.1.4: to-regex "^3.0.2" micromatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" - integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + version "4.0.4" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== dependencies: braces "^3.0.1" - picomatch "^2.0.5" + picomatch "^2.2.3" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" -mime-db@1.45.0: - version "1.45.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" - integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== +mime-db@1.47.0: + version "1.47.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" + integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== -mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.28" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.28.tgz#1160c4757eab2c5363888e005273ecf79d2a0ecd" - integrity sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ== +mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.30" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d" + integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg== dependencies: - mime-db "1.45.0" + mime-db "1.47.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mime@^2.4.6: - version "2.5.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.0.tgz#2b4af934401779806ee98026bb42e8c1ae1876b1" - integrity sha512-ft3WayFSFUVBuJj7BMLKAQcSlItKtfjsKDDsii3rqFDAZ7t11zRe8ASw/GlmivGwVUYtwkQrxiGGpL6gFvB0ag== + version "2.5.2" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" + integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== mimic-fn@^2.1.0: version "2.1.0" @@ -5917,6 +6847,13 @@ mimic-response@^3.1.0: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= + dependencies: + dom-walk "^0.1.0" + minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -5927,7 +6864,7 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@3.0.4, minimatch@^3.0.0, minimatch@^3.0.4: +minimatch@3.0.4, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== @@ -5939,6 +6876,21 @@ minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + mixin-deep@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" @@ -5947,49 +6899,61 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@^0.5.1: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== +mkdirp-promise@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" + integrity sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE= dependencies: - minimist "^1.2.5" + mkdirp "*" -mkdirp@^1.0.4: +mkdirp@*, mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mocha@^8.1.1: - version "8.2.1" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.2.1.tgz#f2fa68817ed0e53343d989df65ccd358bc3a4b39" - integrity sha512-cuLBVfyFfFqbNR0uUKbDGXKGk+UDFe6aR4os78XIrMQpZl/nv7JYHcvP5MFIAb374b2zFXsdgEGwmzMtP0Xg8w== +mkdirp@^0.5.0, mkdirp@^0.5.3: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +mocha@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.3.2.tgz#53406f195fa86fbdebe71f8b1c6fb23221d69fcc" + integrity sha512-UdmISwr/5w+uXLPKspgoV7/RXZwKRTiTjJ2/AC5ZiEztIoOYdfKb19+9jNmEInzx5pBsCyJQzarAxqIGBNYJhg== dependencies: "@ungap/promise-all-settled" "1.1.2" ansi-colors "4.1.1" browser-stdout "1.3.1" - chokidar "3.4.3" - debug "4.2.0" - diff "4.0.2" + chokidar "3.5.1" + debug "4.3.1" + diff "5.0.0" escape-string-regexp "4.0.0" find-up "5.0.0" glob "7.1.6" growl "1.10.5" he "1.2.0" - js-yaml "3.14.0" + js-yaml "4.0.0" log-symbols "4.0.0" minimatch "3.0.4" - ms "2.1.2" - nanoid "3.1.12" + ms "2.1.3" + nanoid "3.1.20" serialize-javascript "5.0.1" strip-json-comments "3.1.1" - supports-color "7.2.0" + supports-color "8.1.1" which "2.0.2" wide-align "1.1.3" - workerpool "6.0.2" - yargs "13.3.2" - yargs-parser "13.1.2" + workerpool "6.1.0" + yargs "16.2.0" + yargs-parser "20.2.4" yargs-unparser "2.0.0" +mock-fs@^4.1.0: + version "4.14.0" + resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.14.0.tgz#ce5124d2c601421255985e6e94da80a7357b1b18" + integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw== + module-definition@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/module-definition/-/module-definition-3.3.1.tgz#fedef71667713e36988b93d0626a4fe7b35aebfc" @@ -6014,26 +6978,81 @@ ms@2.0.0: resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multibase@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.7.0.tgz#1adfc1c50abe05eefeb5091ac0c2728d6b84581b" + integrity sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg== + dependencies: + base-x "^3.0.8" + buffer "^5.5.0" + +multibase@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.6.1.tgz#b76df6298536cc17b9f6a6db53ec88f85f8cc12b" + integrity sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw== + dependencies: + base-x "^3.0.8" + buffer "^5.5.0" + +multicodec@^0.5.5: + version "0.5.7" + resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-0.5.7.tgz#1fb3f9dd866a10a55d226e194abba2dcc1ee9ffd" + integrity sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA== + dependencies: + varint "^5.0.0" + +multicodec@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-1.0.4.tgz#46ac064657c40380c28367c90304d8ed175a714f" + integrity sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg== + dependencies: + buffer "^5.6.0" + varint "^5.0.0" + +multihashes@^0.4.15, multihashes@~0.4.15: + version "0.4.21" + resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-0.4.21.tgz#dc02d525579f334a7909ade8a122dabb58ccfcb5" + integrity sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw== + dependencies: + buffer "^5.5.0" + multibase "^0.7.0" + varint "^5.0.0" + mute-stream@0.0.8, mute-stream@~0.0.4: version "0.0.8" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -nanoid@3.1.12: - version "3.1.12" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.12.tgz#6f7736c62e8d39421601e4a0c77623a97ea69654" - integrity sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A== +nano-json-stream-parser@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" + integrity sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18= -nanoid@^3.1.20: +nanoid@3.1.20: version "3.1.20" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw== +nanoid@^3.1.22: + version "3.1.22" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.22.tgz#b35f8fb7d151990a8aebd5aa5015c03cf726f844" + integrity sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ== + nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -6061,6 +7080,11 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + neo-async@^2.6.0: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" @@ -6076,6 +7100,11 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +node-addon-api@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" + integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== + node-fetch@^2.6.0, node-fetch@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" @@ -6097,9 +7126,9 @@ node-modules-regexp@^1.0.0: integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= node-notifier@^8.0.0: - version "8.0.1" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.1.tgz#f86e89bbc925f2b068784b31f382afdc6ca56be1" - integrity sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA== + version "8.0.2" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.2.tgz#f3167a38ef0d2c8a866a83e318c1ba0efeb702c5" + integrity sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg== dependencies: growly "^1.3.0" is-wsl "^2.2.0" @@ -6108,10 +7137,10 @@ node-notifier@^8.0.0: uuid "^8.3.0" which "^2.0.2" -node-releases@^1.1.70: - version "1.1.70" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.70.tgz#66e0ed0273aa65666d7fe78febe7634875426a08" - integrity sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw== +node-releases@^1.1.71: + version "1.1.71" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" + integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== node-source-walk@^4.0.0, node-source-walk@^4.2.0: version "4.2.0" @@ -6176,6 +7205,14 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= +number-to-bn@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" + integrity sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA= + dependencies: + bn.js "4.11.6" + strip-hex-prefix "1.0.0" + nwsapi@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" @@ -6186,7 +7223,7 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -6201,9 +7238,9 @@ object-copy@^0.1.0: kind-of "^3.0.3" object-inspect@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" - integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== + version "1.10.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.2.tgz#b6385a3e2b7cae0b5eafcf90cddf85d128767f30" + integrity sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA== object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" @@ -6227,7 +7264,7 @@ object.assign@^4.1.0, object.assign@^4.1.2: has-symbols "^1.0.1" object-keys "^1.1.1" -object.entries@^1.1.2: +object.entries@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.3.tgz#c601c7f168b62374541a07ddbd3e2d5e4f7711a6" integrity sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg== @@ -6237,14 +7274,14 @@ object.entries@^1.1.2: es-abstract "^1.18.0-next.1" has "^1.0.3" -object.fromentries@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.3.tgz#13cefcffa702dc67750314a3305e8cb3fad1d072" - integrity sha512-IDUSMXs6LOSJBWE++L0lzIbSqHl9KDCfff2x/JSEIDtEUavUnyMYC2ZGay/04Zq4UT8lvd4xNhU4/YHKibAOlw== +object.fromentries@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.4.tgz#26e1ba5c4571c5c6f0890cef4473066456a120b8" + integrity sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" + es-abstract "^1.18.0-next.2" has "^1.0.3" object.pick@^1.3.0: @@ -6254,16 +7291,30 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -object.values@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.2.tgz#7a2015e06fcb0f546bd652486ce8583a4731c731" - integrity sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag== +object.values@^1.1.1, object.values@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.3.tgz#eaa8b1e17589f02f698db093f7c62ee1699742ee" + integrity sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" + es-abstract "^1.18.0-next.2" has "^1.0.3" +oboe@2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.5.tgz#5554284c543a2266d7a38f17e073821fbde393cd" + integrity sha1-VVQoTFQ6ImbXo48X4HOCH73jk80= + dependencies: + http-https "^1.0.0" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -6278,13 +7329,6 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" -onigasm@^2.2.5: - version "2.2.5" - resolved "https://registry.yarnpkg.com/onigasm/-/onigasm-2.2.5.tgz#cc4d2a79a0fa0b64caec1f4c7ea367585a676892" - integrity sha512-F+th54mPc0l1lp1ZcFMyL/jTs2Tlq4SqIHKIXGZOR/VkHkF9A7Fr5rRr5+ZG/lWeRsyrClLYRq7s/yFQ/XhWCA== - dependencies: - lru-cache "^5.1.1" - optionator@^0.8.1: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" @@ -6324,16 +7368,17 @@ ora@^4.0.5: wcwidth "^1.0.1" ora@^5.1.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.3.0.tgz#fb832899d3a1372fe71c8b2c534bbfe74961bb6f" - integrity sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g== + version "5.4.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.0.tgz#42eda4855835b9cd14d33864c97a3c95a3f56bf4" + integrity sha512-1StwyXQGoU6gdjYkyVcqOLnVlbKj+6yPNNOxJVgpt9t4eksKjiriiHuxktLYkgllwk+D6MbC4ihH84L1udRXPg== dependencies: - bl "^4.0.3" + bl "^4.1.0" chalk "^4.1.0" cli-cursor "^3.1.0" cli-spinners "^2.5.0" is-interactive "^1.0.0" - log-symbols "^4.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" strip-ansi "^6.0.0" wcwidth "^1.0.1" @@ -6342,6 +7387,11 @@ os-tmpdir@~1.0.2: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= +p-cancelable@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" + integrity sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw== + p-cancelable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" @@ -6406,6 +7456,13 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" +p-timeout@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386" + integrity sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y= + dependencies: + p-finally "^1.0.0" + p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" @@ -6433,6 +7490,22 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== + dependencies: + asn1.js "^5.2.0" + browserify-aes "^1.0.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-headers@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.3.tgz#5e8e7512383d140ba02f0c7aa9f49b4399c92515" + integrity sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA== + parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" @@ -6455,10 +7528,15 @@ parse-ms@^2.1.0: resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d" integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== -parse5@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" - integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== +parse5@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== pascalcase@^0.1.1: version "0.1.1" @@ -6500,6 +7578,11 @@ path-parse@^1.0.6: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + path-type@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" @@ -6512,20 +7595,31 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -pathval@^1.1.0: +pathval@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== +pbkdf2@^3.0.17, pbkdf2@^3.0.3: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" - integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.3.tgz#465547f359ccc206d3c48e46a1bcb89bf7ee619d" + integrity sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg== pify@^2.0.0: version "2.3.0" @@ -6595,13 +7689,11 @@ posix-character-classes@^0.1.0: integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= postcss-selector-parser@^6.0.2: - version "6.0.4" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz#56075a1380a04604c38b063ea7767a129af5c2b3" - integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw== + version "6.0.5" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.5.tgz#042d74e137db83e6f294712096cb413f5aa612c4" + integrity sha512-aFYPoYmXbZ1V6HZaSvat08M97A8HqO6Pjz+PiNpw/DhuRrC72XWAdp3hL6wusDCN31sSmcZyMGa2hZEuX+Xfhg== dependencies: cssesc "^3.0.0" - indexes-of "^1.0.1" - uniq "^1.0.1" util-deprecate "^1.0.2" postcss-values-parser@^2.0.1: @@ -6623,18 +7715,18 @@ postcss@^7.0.14: supports-color "^6.1.0" postcss@^8.1.7: - version "8.2.6" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.6.tgz#5d69a974543b45f87e464bc4c3e392a97d6be9fe" - integrity sha512-xpB8qYxgPuly166AGlpRjUdEYtmOWx2iCwGmrv4vqZL9YPVviDVPZPRXxnXr6xPZOdxQ9lp3ZBFCRgWJ7LE3Sg== + version "8.2.13" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.13.tgz#dbe043e26e3c068e45113b1ed6375d2d37e2129f" + integrity sha512-FCE5xLH+hjbzRdpbRb1IMCvPv9yZx2QnDarBEYSN0N0HYk+TcXsEhwdFcFb+SRWOKzKGErhIEbBK2ogyLdTtfQ== dependencies: - colorette "^1.2.1" - nanoid "^3.1.20" + colorette "^1.2.2" + nanoid "^3.1.22" source-map "^0.6.1" precinct@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/precinct/-/precinct-7.0.0.tgz#37334165dee5d28f469202a910787cb2fb6a9186" - integrity sha512-ayTxq+fdaoowk4HvdfBs7bChg4ToqdRxjZqy3611dppelGF8UHQZrLta3GolRLoHSJQtKfBGA35IvW8K3tRR7A== + version "7.1.0" + resolved "https://registry.yarnpkg.com/precinct/-/precinct-7.1.0.tgz#a0311e0b59029647eaf57c2d30b8efa9c85d129a" + integrity sha512-I1RkW5PX51/q6Xl39//D7x9NgaKNGHpR5DCNaoxP/b2+KbzzXDNhauJUMV17KSYkJA41CSpwYUPRtRoNxbshWA== dependencies: commander "^2.20.3" debug "^4.3.1" @@ -6660,7 +7752,7 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prepend-http@^1.0.0: +prepend-http@^1.0.0, prepend-http@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= @@ -6702,6 +7794,11 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + progress-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/progress-stream/-/progress-stream-2.0.0.tgz#fac63a0b3d11deacbb0969abcc93b214bce19ed5" @@ -6710,15 +7807,15 @@ progress-stream@^2.0.0: speedometer "~1.0.0" through2 "~2.0.3" -progress@^2.0.0, progress@^2.0.3: +progress@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== prompts@^2.0.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7" - integrity sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ== + version "2.4.1" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.1.tgz#befd3b1195ba052f9fd2fde8a486c4e82ee77f61" + integrity sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ== dependencies: kleur "^3.0.3" sisteransi "^1.0.5" @@ -6732,16 +7829,36 @@ prop-types@^15.7.2: object-assign "^4.1.1" react-is "^16.8.1" +proxy-addr@~2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.1" + pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= -psl@^1.1.28: +psl@^1.1.28, psl@^1.1.33: version "1.8.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" @@ -6759,6 +7876,11 @@ pumpify@^2.0.1: inherits "^2.0.3" pump "^3.0.0" +punycode@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" + integrity sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0= + punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" @@ -6771,6 +7893,11 @@ pupa@^2.1.1: dependencies: escape-goat "^2.0.0" +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" @@ -6784,18 +7911,50 @@ query-string@^4.1.0: object-assign "^4.1.0" strict-uri-encode "^1.0.0" +query-string@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" + integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== + dependencies: + decode-uri-component "^0.2.0" + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + queue-microtask@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.2.tgz#abf64491e6ecf0f38a6502403d4cda04f372dfd3" - integrity sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg== + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -randombytes@^2.1.0: +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + rc@^1.2.7, rc@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -6812,9 +7971,9 @@ react-is@^16.8.1: integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== react-is@^17.0.1: - version "17.0.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" - integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== read-pkg-up@^2.0.0: version "2.0.0" @@ -6936,7 +8095,7 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp.prototype.flags@^1.3.0: +regexp.prototype.flags@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== @@ -6981,9 +8140,9 @@ regjsgen@^0.5.1: integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== regjsparser@^0.6.4: - version "0.6.7" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.7.tgz#c00164e1e6713c2e3ee641f1701c4b7aa0a7f86c" - integrity sha512-ib77G0uxsA2ovgiYbCVGx4Pv3PSttAx2vIwidqQzbL2U5S4Q+j00HdSAneSBuyVcMvEnTXMjiGgB+DlXozVhpQ== + version "0.6.9" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.9.tgz#b489eef7c9a2ce43727627011429cf833a7183e6" + integrity sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ== dependencies: jsesc "~0.5.0" @@ -6998,9 +8157,9 @@ remove-trailing-separator@^1.0.1: integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + version "1.1.4" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== repeat-string@^1.6.1: version "1.6.1" @@ -7014,7 +8173,7 @@ request-promise-core@1.1.4: dependencies: lodash "^4.17.19" -request-promise-native@^1.0.8: +request-promise-native@^1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== @@ -7023,7 +8182,7 @@ request-promise-native@^1.0.8: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@^2.88.2: +request@^2.79.0, request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -7109,7 +8268,7 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.19.0, resolve@^1.3.2: +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.19.0, resolve@^1.3.2: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -7117,6 +8276,14 @@ resolve@^1.1.6, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.13.1, resolve@^1.17 is-core-module "^2.2.0" path-parse "^1.0.6" +resolve@^2.0.0-next.3: + version "2.0.0-next.3" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46" + integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + responselike@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" @@ -7149,7 +8316,7 @@ rimraf@^3.0.0, rimraf@^3.0.2: dependencies: glob "^7.1.3" -ripemd160@^2.0.1: +ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== @@ -7157,6 +8324,13 @@ ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" +rlp@^2.2.3: + version "2.2.6" + resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.6.tgz#c80ba6266ac7a483ef1e69e8e2f056656de2fb2c" + integrity sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg== + dependencies: + bn.js "^4.11.1" + rsvp@^4.8.4: version "4.8.5" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" @@ -7174,23 +8348,23 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rxjs@^6.6.0, rxjs@^6.6.3: - version "6.6.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" - integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== +rxjs@^6.6.0, rxjs@^6.6.7: + version "6.6.7" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== dependencies: tslib "^1.9.0" -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" @@ -7225,18 +8399,32 @@ sass-lookup@^3.0.0: dependencies: commander "^2.16.0" -saxes@^5.0.0: +saxes@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== dependencies: xmlchars "^2.2.0" +scrypt-js@^3.0.0, scrypt-js@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + scryptsy@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/scryptsy/-/scryptsy-2.1.0.tgz#8d1e8d0c025b58fdd25b6fa9a0dc905ee8faa790" integrity sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w== +secp256k1@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.2.tgz#15dd57d0f0b9fdb54ac1fa1694f40e5e9a54f4a1" + integrity sha512-UDar4sKvWAksIlfX3xIaQReADn+WFnHvbVujpcbr+9Sf/69odMwy2MUsz5CKLQgX9nsIyrjuxL2imVyoNHa3fg== + dependencies: + elliptic "^6.5.2" + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + semver-diff@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" @@ -7244,7 +8432,7 @@ semver-diff@^3.1.1: dependencies: semver "^6.3.0" -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -7254,18 +8442,37 @@ semver@7.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@^6.0.0, semver@^6.1.0, semver@^6.2.0, semver@^6.3.0: +semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== semver@^7.2.1, semver@^7.3.2, semver@^7.3.4: - version "7.3.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" - integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== dependencies: lru-cache "^6.0.0" +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + serialize-javascript@5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" @@ -7273,6 +8480,27 @@ serialize-javascript@5.0.1: dependencies: randombytes "^2.1.0" +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +servify@^0.1.12: + version "0.1.12" + resolved "https://registry.yarnpkg.com/servify/-/servify-0.1.12.tgz#142ab7bee1f1d033b66d0707086085b17c06db95" + integrity sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw== + dependencies: + body-parser "^1.16.0" + cors "^2.8.1" + express "^4.14.0" + request "^2.79.0" + xhr "^2.3.3" + set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -7288,7 +8516,17 @@ set-value@^2.0.0, set-value@^2.0.1: is-plain-object "^2.0.3" split-string "^3.0.1" -sha.js@^2.4.0: +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== @@ -7296,6 +8534,13 @@ sha.js@^2.4.0: inherits "^2.0.1" safe-buffer "^5.0.1" +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -7334,15 +8579,7 @@ shellwords@^0.1.1: resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== -shiki@^0.9.2: - version "0.9.2" - resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.9.2.tgz#b9e660b750d38923275765c4dc4c92b23877b115" - integrity sha512-BjUCxVbxMnvjs8jC4b+BQ808vwjJ9Q8NtLqPwXShZ307HdXiDFYP968ORSVfaTNNSWYDBYdMnVKJ0fYNsoZUBA== - dependencies: - onigasm "^2.2.5" - vscode-textmate "^5.2.0" - -side-channel@^1.0.3, side-channel@^1.0.4: +side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== @@ -7361,6 +8598,15 @@ simple-concat@^1.0.0: resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== +simple-get@^2.7.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.1.tgz#0e22e91d4575d87620620bc91308d57a77f44b5d" + integrity sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw== + dependencies: + decompress-response "^3.3.0" + once "^1.3.1" + simple-concat "^1.0.0" + simple-get@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.0.tgz#73fa628278d21de83dadd5512d2cc1f4872bd675" @@ -7550,6 +8796,11 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" +"statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + stealthy-require@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" @@ -7566,9 +8817,9 @@ strict-uri-encode@^1.0.0: integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= string-length@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.1.tgz#4a973bf31ef77c4edbceadd6af2611996985f8a1" - integrity sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw== + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== dependencies: char-regex "^1.0.2" strip-ansi "^6.0.0" @@ -7590,7 +8841,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string-width@^3.0.0, string-width@^3.1.0: +string-width@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== @@ -7600,41 +8851,41 @@ string-width@^3.0.0, string-width@^3.1.0: strip-ansi "^5.1.0" string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" - integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + version "4.2.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" + integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -string.prototype.matchall@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.3.tgz#24243399bc31b0a49d19e2b74171a15653ec996a" - integrity sha512-OBxYDA2ifZQ2e13cP82dWFMaCV9CGF8GzmN4fljBVw5O5wep0lu4gacm1OL6MjROoUnB8VbkWRThqkV2YFLNxw== +string.prototype.matchall@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.4.tgz#608f255e93e072107f5de066f81a2dfb78cf6b29" + integrity sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" + es-abstract "^1.18.0-next.2" has-symbols "^1.0.1" - internal-slot "^1.0.2" - regexp.prototype.flags "^1.3.0" - side-channel "^1.0.3" + internal-slot "^1.0.3" + regexp.prototype.flags "^1.3.1" + side-channel "^1.0.4" -string.prototype.trimend@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b" - integrity sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw== +string.prototype.trimend@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" + integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" define-properties "^1.1.3" -string.prototype.trimstart@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa" - integrity sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg== +string.prototype.trimstart@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" + integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" define-properties "^1.1.3" string_decoder@^1.1.1: @@ -7674,7 +8925,7 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: +strip-ansi@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== @@ -7708,6 +8959,13 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strip-hex-prefix@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" + integrity sha1-DF8VX+8RUTczd96du1iNoFUA428= + dependencies: + is-hex-prefixed "1.0.0" + strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" @@ -7738,10 +8996,10 @@ stylus-lookup@^3.0.1: commander "^2.8.1" debug "^4.1.0" -supports-color@7.2.0, supports-color@^7.0.0, supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== +supports-color@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" @@ -7759,34 +9017,74 @@ supports-color@^6.1.0: dependencies: has-flag "^3.0.0" +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + supports-hyperlinks@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" - integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA== + version "2.2.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" + integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== dependencies: has-flag "^4.0.0" supports-color "^7.0.0" +swarm-js@^0.1.40: + version "0.1.40" + resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.40.tgz#b1bc7b6dcc76061f6c772203e004c11997e06b99" + integrity sha512-yqiOCEoA4/IShXkY3WKwP5PvZhmoOOD8clsKA7EEcRILMkTEYHCQ21HDCAcVpmIxZq4LyZvWeRJ6quIyHk1caA== + dependencies: + bluebird "^3.5.0" + buffer "^5.0.5" + eth-lib "^0.1.26" + fs-extra "^4.0.2" + got "^7.1.0" + mime-types "^2.1.16" + mkdirp-promise "^5.0.1" + mock-fs "^4.1.0" + setimmediate "^1.0.5" + tar "^4.0.2" + xhr-request "^1.0.1" + symbol-tree@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== table@^6.0.4: - version "6.0.7" - resolved "https://registry.yarnpkg.com/table/-/table-6.0.7.tgz#e45897ffbcc1bcf9e8a87bf420f2c9e5a7a52a34" - integrity sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g== - dependencies: - ajv "^7.0.2" - lodash "^4.17.20" + version "6.6.0" + resolved "https://registry.yarnpkg.com/table/-/table-6.6.0.tgz#905654b79df98d9e9a973de1dd58682532c40e8e" + integrity sha512-iZMtp5tUvcnAdtHpZTWLPF0M7AgiQsURR2DwmxnJwSy8I3+cY+ozzVvYha3BOLG2TB+L0CqjIz+91htuj6yCXg== + dependencies: + ajv "^8.0.1" + lodash.clonedeep "^4.5.0" + lodash.flatten "^4.4.0" + lodash.truncate "^4.4.2" slice-ansi "^4.0.0" string-width "^4.2.0" + strip-ansi "^6.0.0" tapable@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b" integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw== +tar@^4.0.2: + version "4.4.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.8.6" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + temp@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/temp/-/temp-0.4.0.tgz#671ad63d57be0fe9d7294664b3fc400636678a60" @@ -7832,6 +9130,11 @@ through@^2.3.6: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= +timed-out@^4.0.0, timed-out@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= + tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -7886,6 +9189,11 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + tough-cookie@^2.3.3, tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" @@ -7894,14 +9202,14 @@ tough-cookie@^2.3.3, tough-cookie@~2.5.0: psl "^1.1.28" punycode "^2.1.1" -tough-cookie@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" - integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== +tough-cookie@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" + integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== dependencies: - ip-regex "^2.1.0" - psl "^1.1.28" + psl "^1.1.33" punycode "^2.1.1" + universalify "^0.1.2" tr46@^2.0.2: version "2.0.2" @@ -7917,7 +9225,7 @@ trim-repeated@^1.0.0: dependencies: escape-string-regexp "^1.0.2" -ts-node@^9.0.0: +ts-node@^9.1.1: version "9.1.1" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d" integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg== @@ -7939,15 +9247,15 @@ tsconfig-paths@^3.9.0: minimist "^1.2.0" strip-bom "^3.0.0" -tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: +tslib@^1.13.0, tslib@^1.8.1, tslib@^1.9.0: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslint@^5.20.1: - version "5.20.1" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.20.1.tgz#e401e8aeda0152bc44dd07e614034f3f80c67b7d" - integrity sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg== +tslint@^6.1.3: + version "6.1.3" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-6.1.3.tgz#5c23b2eccc32487d5523bd3a470e9aa31789d904" + integrity sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg== dependencies: "@babel/code-frame" "^7.0.0" builtin-modules "^1.1.1" @@ -7957,10 +9265,10 @@ tslint@^5.20.1: glob "^7.1.1" js-yaml "^3.13.1" minimatch "^3.0.4" - mkdirp "^0.5.1" + mkdirp "^0.5.3" resolve "^1.3.2" semver "^5.3.0" - tslib "^1.8.0" + tslib "^1.13.0" tsutils "^2.29.0" tsutils@^2.29.0: @@ -7971,9 +9279,9 @@ tsutils@^2.29.0: tslib "^1.8.1" tsutils@^3.17.1: - version "3.20.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.20.0.tgz#ea03ea45462e146b53d70ce0893de453ff24f698" - integrity sha512-RYbuQuvkhuqVeXweWT3tJLKOEJ/UUw9GjNEZGWdrLLlM+611o1gwLHBpxoFJKKl25fLprp2eVthtKs5JOrNeXg== + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== dependencies: tslib "^1.8.1" @@ -8013,16 +9321,16 @@ type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== -type-fest@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" - integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== - type-fest@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + type-fest@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" @@ -8033,15 +9341,23 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + type@^1.0.1: version "1.2.0" resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== type@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/type/-/type-2.1.0.tgz#9bdc22c648cf8cf86dd23d32336a41cfb6475e3f" - integrity sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA== + version "2.5.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.5.0.tgz#0a2e78c2e77907b252abe5f298c1b01c63f0db3d" + integrity sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw== typedarray-to-buffer@^3.1.5: version "3.1.5" @@ -8050,54 +9366,40 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typedoc-default-themes@^0.12.7: - version "0.12.7" - resolved "https://registry.yarnpkg.com/typedoc-default-themes/-/typedoc-default-themes-0.12.7.tgz#d44f68d40a3e90a19b5ea7be4cc6ed949afe768d" - integrity sha512-0XAuGEqID+gon1+fhi4LycOEFM+5Mvm2PjwaiVZNAzU7pn3G2DEpsoXnFOPlLDnHY6ZW0BY0nO7ur9fHOFkBLQ== - -typedoc-plugin-markdown@^3.4.5: - version "3.4.5" - resolved "https://registry.yarnpkg.com/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.4.5.tgz#d32aad06a9b93946a31ea68438cd02620c12e857" - integrity sha512-m24mSCGcEk6tQDCHIG4TM3AS2a7e9NtC/YdO0mefyF+z1/bKYnZ/oQswLZmm2zBngiLIoKX6eNdufdBpQNPtrA== - dependencies: - handlebars "^4.7.6" - -typedoc-plugin-no-inherit@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/typedoc-plugin-no-inherit/-/typedoc-plugin-no-inherit-1.2.0.tgz#7f73809c04cb29c03afe5eea356534968cb717a9" - integrity sha512-jAAslwDbm5sVpA6EQIg5twYctRi/bnT9TgZ5SwbrNpCD5xCIIylPRX9KxIoi1RJliVgCIAxWbSUzzLKGwJCkeA== - -typedoc@^0.20.23: - version "0.20.24" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.20.24.tgz#9dd1cb32e44823a5ebbeb54c9b84af85286c5941" - integrity sha512-TadOYtcw8agrk7WTZlXUcct4jLZZcGcYe3xbmARkI+rBpXI6Mw+0P8oUo13+9oFreQvK5zZgMem4YEi7lCXLIw== - dependencies: - colors "^1.4.0" - fs-extra "^9.1.0" - handlebars "^4.7.6" - lodash "^4.17.20" - lunr "^2.3.9" - marked "^2.0.0" - minimatch "^3.0.0" - progress "^2.0.3" - shelljs "^0.8.4" - shiki "^0.9.2" - typedoc-default-themes "^0.12.7" - typescript@^3.9.5, typescript@^3.9.7: version "3.9.9" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.9.tgz#e69905c54bc0681d0518bd4d587cc6f2d0b1a674" integrity sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w== -typescript@^4.1.3: - version "4.1.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.5.tgz#123a3b214aaff3be32926f0d8f1f6e704eb89a72" - integrity sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA== +typescript@^4.2.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.4.tgz#8610b59747de028fda898a8aef0e103f156d0961" + integrity sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg== uglify-js@^3.1.4: - version "3.12.7" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.12.7.tgz#be4f06142a67bd91ef868b4e111dc241e151bff3" - integrity sha512-SIZhkoh+U/wjW+BHGhVwE9nt8tWJspncloBcFapkpGRwNPqcH8pzX36BXe3TPBjzHWPMUZotpCigak/udWNr1Q== + version "3.13.4" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.4.tgz#592588bb9f47ae03b24916e2471218d914955574" + integrity sha512-kv7fCkIXyQIilD5/yQy8O+uagsYIOt5cZvs890W40/e/rvjMSzJw81o9Bg0tkURxzZBROtDQhW2LFjOGoK3RZw== + +ultron@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== + +unbox-primitive@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" + integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== + dependencies: + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" + which-boxed-primitive "^1.0.2" + +underscore@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" + integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" @@ -8149,7 +9451,7 @@ universal-user-agent@^6.0.0: resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== -universalify@^0.1.0: +universalify@^0.1.0, universalify@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== @@ -8159,6 +9461,11 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" @@ -8204,6 +9511,13 @@ urix@^0.1.0: resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= + dependencies: + prepend-http "^1.0.1" + url-parse-lax@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" @@ -8211,6 +9525,16 @@ url-parse-lax@^3.0.0: dependencies: prepend-http "^2.0.0" +url-set-query@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339" + integrity sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk= + +url-to-options@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" + integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k= + use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" @@ -8223,6 +9547,11 @@ utf-8-validate@^5.0.2: dependencies: node-gyp-build "^4.2.0" +utf8@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" + integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== + util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -8233,6 +9562,28 @@ util-extend@^1.0.1: resolved "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f" integrity sha1-p8IW0mdUUWljeztu3GypEZ4v+T8= +util@^0.12.0: + version "0.12.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.3.tgz#971bb0292d2cc0c892dab7c6a5d37c2bec707888" + integrity sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog== + 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" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + uuid@^3.3.2: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" @@ -8244,14 +9595,14 @@ uuid@^8.3.0: integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== v8-compile-cache@^2.0.3: - version "2.2.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" - integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== v8-to-istanbul@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.0.tgz#5b95cef45c0f83217ec79f8fc7ee1c8b486aee07" - integrity sha512-uXUVqNUCLa0AH1vuVxzi+MI4RfxEOKt9pBgKwHbgH7st8Kv2P1m+jvWNnektzBh5QShF3ODgKmUFCf38LnVz1g== + version "7.1.1" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.1.tgz#04bfd1026ba4577de5472df4f5e89af49de5edda" + integrity sha512-p0BB09E5FRjx0ELN6RgusIPsSPhtgexSRcKETybEs6IGOTXJSZqfwxp7r//55nnu0f1AxltY5VvdVqy2vZf9AA== dependencies: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" @@ -8265,6 +9616,16 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +varint@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" + integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== + +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" @@ -8274,11 +9635,6 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -vscode-textmate@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-5.2.0.tgz#01f01760a391e8222fe4f33fbccbd1ad71aed74e" - integrity sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ== - vue-template-es2015-compiler@^1.9.0: version "1.9.1" resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825" @@ -8317,6 +9673,246 @@ wcwidth@^1.0.1: dependencies: defaults "^1.0.3" +web3-bzz@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.3.5.tgz#f181a1319d9f867f4183b147e7aebd21aecff4a0" + integrity sha512-XiEUAbB1uKm/agqfwBsCW8fbw+sma85TfwuDpdcy591vinVk0S9TfWgLxro6v1KJ6nSELySIbKGbAJbh2GSyxw== + dependencies: + "@types/node" "^12.12.6" + got "9.6.0" + swarm-js "^0.1.40" + underscore "1.9.1" + +web3-core-helpers@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.3.5.tgz#9f0ff7ed40befb9f691986e66fd94c828c7b1b13" + integrity sha512-HYh3ix5FjysgT0jyzD8s/X5ym0b4BGU7I2QtuBiydMnE0mQEWy7GcT9XKpTySA8FTOHHIAQYvQS07DN/ky3UzA== + dependencies: + underscore "1.9.1" + web3-eth-iban "1.3.5" + web3-utils "1.3.5" + +web3-core-method@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.3.5.tgz#995fe12f3b364469e5208a88d72736327b231faa" + integrity sha512-hCbmgQ+At6OTuaNGAdjXMsCr4eUCmp9yGKSuaB5HdkNVDpqFso4HHjVxcjNrTyJp3OZnyjKBzQzK1ZWLpLl84Q== + dependencies: + "@ethersproject/transactions" "^5.0.0-beta.135" + underscore "1.9.1" + web3-core-helpers "1.3.5" + web3-core-promievent "1.3.5" + web3-core-subscriptions "1.3.5" + web3-utils "1.3.5" + +web3-core-promievent@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.3.5.tgz#33c34811cc4e2987c56e5192f9a014368c42ca39" + integrity sha512-K0j8x3ZJr0eAyNvyUCxOUsSTd4hco0/9nxxlyOuijcsa6YV8l9NL6eqhniWbSyxCJT8ka5Mb7yAiUZe69EDLBQ== + dependencies: + eventemitter3 "4.0.4" + +web3-core-requestmanager@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.3.5.tgz#c452ea85fcffdf5b82b84c250707b638790d0e75" + integrity sha512-9l294U3Ga8qmvv8E37BqjQREfMs+kFnkU3PY28g9DZGYzKvl3V1dgDYqxyrOBdCFhc7rNSpHdgC4PrVHjouspg== + dependencies: + underscore "1.9.1" + util "^0.12.0" + web3-core-helpers "1.3.5" + web3-providers-http "1.3.5" + web3-providers-ipc "1.3.5" + web3-providers-ws "1.3.5" + +web3-core-subscriptions@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.3.5.tgz#7c4dc9d559e344d852de2cf01bd0cc13c94023cb" + integrity sha512-6mtXdaEB1V1zKLqYBq7RF2W75AK5ZJNGpW6QYC7Zvbku7zq1ZlgaUkJo88JKMWJ7etfaHaYqQ/7VveHk5sQynA== + dependencies: + eventemitter3 "4.0.4" + underscore "1.9.1" + web3-core-helpers "1.3.5" + +web3-core@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.3.5.tgz#1e9335e6c4549dac09aaa07157242ebd6d097226" + integrity sha512-VQjTvnGTqJwDwjKEHSApea3RmgtFGLDSJ6bqrOyHROYNyTyKYjFQ/drG9zs3rjDkND9mgh8foI1ty37Qua3QCQ== + dependencies: + "@types/bn.js" "^4.11.5" + "@types/node" "^12.12.6" + bignumber.js "^9.0.0" + web3-core-helpers "1.3.5" + web3-core-method "1.3.5" + web3-core-requestmanager "1.3.5" + web3-utils "1.3.5" + +web3-eth-abi@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.3.5.tgz#eeffab0a4b318c47b8777de90983ca45614f8173" + integrity sha512-bkbG2v/mOW5DH6rF/SEgqunusjYoEi2IBw+fkmD3rzWDaEY7+/i1xY94AeO257d06QMgld75GtV/N+aEs7A6vQ== + dependencies: + "@ethersproject/abi" "5.0.7" + underscore "1.9.1" + web3-utils "1.3.5" + +web3-eth-accounts@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.3.5.tgz#c23ee748759a6a06d6485a9322b106baa944dcdd" + integrity sha512-r3WOR21rgm6Cd6OFnifr3Tizdm5K+g2TsSOPySwX4FrgLrYDL6ck4zr5VXUPz+llpSExb/JztpE8pqEHr3U2NA== + dependencies: + crypto-browserify "3.12.0" + eth-lib "0.2.8" + ethereumjs-common "^1.3.2" + ethereumjs-tx "^2.1.1" + scrypt-js "^3.0.1" + underscore "1.9.1" + uuid "3.3.2" + web3-core "1.3.5" + web3-core-helpers "1.3.5" + web3-core-method "1.3.5" + web3-utils "1.3.5" + +web3-eth-contract@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.3.5.tgz#b41ecf8612b379c4fb1c614e950135717aa8f919" + integrity sha512-WfGVeQquN3D7Qm+KEIN9EI7yrm/fL2V9Y4+YhDWiKA/ns1pX1LYcEWojTOnBXCnPF3tcvoKKL+KBxXg1iKm38A== + dependencies: + "@types/bn.js" "^4.11.5" + underscore "1.9.1" + web3-core "1.3.5" + web3-core-helpers "1.3.5" + web3-core-method "1.3.5" + web3-core-promievent "1.3.5" + web3-core-subscriptions "1.3.5" + web3-eth-abi "1.3.5" + web3-utils "1.3.5" + +web3-eth-ens@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.3.5.tgz#5a28d23eb402fb1f6964da60ea60641e4d24d366" + integrity sha512-5bkpFTXV18CvaVP8kCbLZZm2r1TWUv9AsXH+80yz8bTZulUGvXsBMRfK6e5nfEr2Yv59xlIXCFoalmmySI9EJw== + dependencies: + content-hash "^2.5.2" + eth-ens-namehash "2.0.8" + underscore "1.9.1" + web3-core "1.3.5" + web3-core-helpers "1.3.5" + web3-core-promievent "1.3.5" + web3-eth-abi "1.3.5" + web3-eth-contract "1.3.5" + web3-utils "1.3.5" + +web3-eth-iban@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.3.5.tgz#dff1e37864e23a3387016ec4db96cdc290a6fbd6" + integrity sha512-x+BI/d2Vt0J1cKK8eFd4W0f1TDjgEOYCwiViTb28lLE+tqrgyPqWDA+l6UlKYLF/yMFX3Dym4ofcCOtgcn4q4g== + dependencies: + bn.js "^4.11.9" + web3-utils "1.3.5" + +web3-eth-personal@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.3.5.tgz#bc5d5b900bc4824139af2ef01eaf8e9855c644ba" + integrity sha512-xELQHNZ8p3VoO1582ghCaq+Bx7pSkOOalc6/ACOCGtHDMelqgVejrmSIZGScYl+k0HzngmQAzURZWQocaoGM1g== + dependencies: + "@types/node" "^12.12.6" + web3-core "1.3.5" + web3-core-helpers "1.3.5" + web3-core-method "1.3.5" + web3-net "1.3.5" + web3-utils "1.3.5" + +web3-eth@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.3.5.tgz#2a3d0db870ef7921942a5d798ba0569175cc4de1" + integrity sha512-5qqDPMMD+D0xRqOV2ePU2G7/uQmhn0FgCEhFzKDMHrssDQJyQLW/VgfA0NLn64lWnuUrGnQStGvNxrWf7MgsfA== + dependencies: + underscore "1.9.1" + web3-core "1.3.5" + web3-core-helpers "1.3.5" + web3-core-method "1.3.5" + web3-core-subscriptions "1.3.5" + web3-eth-abi "1.3.5" + web3-eth-accounts "1.3.5" + web3-eth-contract "1.3.5" + web3-eth-ens "1.3.5" + web3-eth-iban "1.3.5" + web3-eth-personal "1.3.5" + web3-net "1.3.5" + web3-utils "1.3.5" + +web3-net@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.3.5.tgz#06e3465a9fbbeec1240160e2fd66ddb07b6af944" + integrity sha512-usbFbuUpKK8s7jPLGoUzi/WpNnefGFPTj948aJv8BZ04UQA4L/XS5NNkkhk358zNMmhGfEFW8wrWy+0Oy0njtA== + dependencies: + web3-core "1.3.5" + web3-core-method "1.3.5" + web3-utils "1.3.5" + +web3-providers-http@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.3.5.tgz#cdada6fb342e08fd75aea249fceb6eee467beffc" + integrity sha512-ZQOmceFjcajEZdiuqciXjijwIYWNmEJ1oxMtbrwB2eGxHRCMXEH2xGRUZuhOFNF88yQC/VXVi14yvYg5ZlFJlA== + dependencies: + web3-core-helpers "1.3.5" + xhr2-cookies "1.1.0" + +web3-providers-ipc@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.3.5.tgz#2f5536abfe03f3824e00dedc614d8f46db72b57f" + integrity sha512-cbZOeb/sALiHjzMolJjIyHla/J5wdL2JKUtRO66Nh/uLALBCpU8JUgzNvpAdJ1ae3+A33+EdFStdzuDYHKtQew== + dependencies: + oboe "2.1.5" + underscore "1.9.1" + web3-core-helpers "1.3.5" + +web3-providers-ws@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.3.5.tgz#7f841ec79358d90c4a803d1291157b5ffb15aeb7" + integrity sha512-zeZ4LMvKhYaJBDCqA//Bzgp4r/T0tNq5U/xvN0axA4YflzF7yqlsbzGwCkcZYDbrUaK3Ltl2uOmvwjbWALOZ1A== + dependencies: + eventemitter3 "4.0.4" + underscore "1.9.1" + web3-core-helpers "1.3.5" + websocket "^1.0.32" + +web3-shh@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.3.5.tgz#af0b8ebca90a3652dbbb90d351395f36ca91f40b" + integrity sha512-aRwzCduXvuGVslLL/Y15VcOHa70Qr2kxZI7UwOzQVhaaOdxuRRvo3AK/cmyln1Tsd54/n93Yk8I3qg5I2+6alw== + dependencies: + web3-core "1.3.5" + web3-core-method "1.3.5" + web3-core-subscriptions "1.3.5" + web3-net "1.3.5" + +web3-utils@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.3.5.tgz#14ee2ff1a7a226867698d6eaffd21aa97aed422e" + integrity sha512-5apMRm8ElYjI/92GHqijmaLC+s+d5lgjpjHft+rJSs/dsnX8I8tQreqev0dmU+wzU+2EEe4Sx9a/OwGWHhQv3A== + 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" + underscore "1.9.1" + utf8 "3.0.0" + +web3@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.3.5.tgz#ef4c3a2241fdd74f2f7794e839f30bc6f9814e46" + integrity sha512-UyQW/MT5EIGBrXPCh/FDIaD7RtJTn5/rJUNw2FOglp0qoXnCQHNKvntiR1ylztk05fYxIF6UgsC76IrazlKJjw== + dependencies: + web3-bzz "1.3.5" + web3-core "1.3.5" + web3-eth "1.3.5" + web3-eth-personal "1.3.5" + web3-net "1.3.5" + web3-shh "1.3.5" + web3-utils "1.3.5" + webidl-conversions@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" @@ -8327,10 +9923,10 @@ webidl-conversions@^6.1.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== -websocket@^1.0.33: - version "1.0.33" - resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.33.tgz#407f763fc58e74a3fa41ca3ae5d78d3f5e3b82a5" - integrity sha512-XwNqM2rN5eh3G2CUQE3OHZj+0xfdH42+OFK6LdC2yqiC0YU8e5UK0nYre220T0IyyN031V/XOvtHvXozvJYFWA== +websocket@^1.0.32, websocket@^1.0.34: + version "1.0.34" + resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" + integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== dependencies: bufferutil "^4.0.1" debug "^2.2.0" @@ -8351,20 +9947,44 @@ whatwg-mimetype@^2.3.0: resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== -whatwg-url@^8.0.0: - version "8.4.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.4.0.tgz#50fb9615b05469591d2b2bd6dfaed2942ed72837" - integrity sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw== +whatwg-url@^8.0.0, whatwg-url@^8.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.5.0.tgz#7752b8464fc0903fec89aa9846fc9efe07351fd3" + integrity sha512-fy+R77xWv0AiqfLl4nuGUlQ3/6b5uNfQ4WAbGQVMYshCTCCPK9psC1nWh3XHuxGVCtlcDDQPQW1csmmIQo+fwg== dependencies: - lodash.sortby "^4.7.0" + lodash "^4.7.0" tr46 "^2.0.2" webidl-conversions "^6.1.0" +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= +which-typed-array@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.4.tgz#8fcb7d3ee5adf2d771066fba7cf37e32fe8711ff" + integrity sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA== + dependencies: + available-typed-arrays "^1.0.2" + call-bind "^1.0.0" + es-abstract "^1.18.0-next.1" + foreach "^2.0.5" + function-bind "^1.1.1" + has-symbols "^1.0.1" + is-typed-array "^1.1.3" + which@2.0.2, which@^2.0.1, which@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -8403,19 +10023,10 @@ wordwrap@^1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= -workerpool@6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.0.2.tgz#e241b43d8d033f1beb52c7851069456039d1d438" - integrity sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q== - -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" +workerpool@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.0.tgz#a8e038b4c94569596852de7a8ea4228eefdeb37b" + integrity sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg== wrap-ansi@^6.2.0: version "6.2.0" @@ -8462,16 +10073,62 @@ write-json-file@^4.2.0: sort-keys "^4.0.0" write-file-atomic "^3.0.0" -ws@^7.2.3: - version "7.4.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.3.tgz#1f9643de34a543b8edb124bdcbc457ae55a6e5cd" - integrity sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA== +ws@^3.0.0: + version "3.3.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" + integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + ultron "~1.1.0" + +ws@^7.4.4: + version "7.4.5" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.5.tgz#a484dd851e9beb6fdb420027e3885e8ce48986c1" + integrity sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g== xdg-basedir@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== +xhr-request-promise@^0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c" + integrity sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg== + dependencies: + xhr-request "^1.1.0" + +xhr-request@^1.0.1, xhr-request@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/xhr-request/-/xhr-request-1.1.0.tgz#f4a7c1868b9f198723444d82dcae317643f2e2ed" + integrity sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA== + dependencies: + buffer-to-arraybuffer "^0.0.5" + object-assign "^4.1.1" + query-string "^5.0.1" + simple-get "^2.7.0" + timed-out "^4.0.1" + url-set-query "^1.0.0" + xhr "^2.0.4" + +xhr2-cookies@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz#7d77449d0999197f155cb73b23df72505ed89d48" + integrity sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg= + dependencies: + cookiejar "^2.1.1" + +xhr@^2.0.4, xhr@^2.3.3: + version "2.6.0" + resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d" + integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== + dependencies: + global "~4.4.0" + is-function "^1.0.1" + parse-headers "^2.0.0" + xtend "^4.0.0" + xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" @@ -8482,7 +10139,7 @@ xmlchars@^2.2.0: resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== -xtend@~4.0.1: +xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== @@ -8495,14 +10152,14 @@ xxhashjs@^0.2.2: cuint "^0.2.2" y18n@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" - integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== y18n@^5.0.5: - version "5.0.5" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" - integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yaeti@^0.0.6: version "0.0.6" @@ -8514,7 +10171,7 @@ yallist@^2.1.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -yallist@^3.0.2: +yallist@^3.0.0, yallist@^3.0.3: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== @@ -8524,13 +10181,10 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yargs-parser@13.1.2, yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== yargs-parser@^18.1.2: version "18.1.3" @@ -8541,9 +10195,9 @@ yargs-parser@^18.1.2: decamelize "^1.2.0" yargs-parser@^20.2.2: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + version "20.2.7" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a" + integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw== yargs-unparser@2.0.0: version "2.0.0" @@ -8555,21 +10209,18 @@ yargs-unparser@2.0.0: flat "^5.0.2" is-plain-obj "^2.1.0" -yargs@13.3.2: - version "13.3.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== +yargs@16.2.0, yargs@^16.0.3, yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" yargs@^15.4.1: version "15.4.1" @@ -8588,19 +10239,6 @@ yargs@^15.4.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^16.0.3, yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" From 3e526984b9711033510396bc7aeba1c7ca0a9baf Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 7 May 2021 16:16:31 +0300 Subject: [PATCH 33/66] fix: missing error handler for create_item call Signed-off-by: Yaroslav Bolyukin --- pallets/nft/src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pallets/nft/src/lib.rs b/pallets/nft/src/lib.rs index 413db326fe..1036130606 100644 --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -1148,7 +1148,7 @@ decl_module! { let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let collection = Self::get_collection(collection_id)?; - Self::create_item_internal(&sender, &collection, &owner, data); + Self::create_item_internal(&sender, &collection, &owner, data)?; Self::submit_logs(collection)?; Ok(()) @@ -2227,7 +2227,7 @@ impl Module { >::insert(collection.id, collection.into_inner()); } - fn submit_logs(collection: CollectionHandle) -> DispatchResult { + pub fn submit_logs(collection: CollectionHandle) -> DispatchResult { if collection.logs.is_empty() { return Ok(()) } From 6b456b94d3ef41f48f9f6cdf91c0ab541e8a42b1 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 7 May 2021 16:21:05 +0300 Subject: [PATCH 34/66] feat: submit chain extension produced logs Signed-off-by: Yaroslav Bolyukin --- runtime/src/chain_extension.rs | 38 ++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/runtime/src/chain_extension.rs b/runtime/src/chain_extension.rs index 62e3715816..c707c7b646 100644 --- a/runtime/src/chain_extension.rs +++ b/runtime/src/chain_extension.rs @@ -92,16 +92,16 @@ impl ChainExtension for NFTExtension { let collection = pallet_nft::Module::::get_collection(input.collection_id)?; - match pallet_nft::Module::::transfer_internal( + pallet_nft::Module::::transfer_internal( &C::CrossAccountId::from_sub(env.ext().caller().clone()), &C::CrossAccountId::from_sub(input.recipient), &collection, input.token_id, input.amount, - ) { - Ok(_) => Ok(RetVal::Converging(func_id)), - _ => Err(DispatchError::Other("Transfer error")) - } + )?; + + pallet_nft::Module::::submit_logs(collection)?; + Ok(RetVal::Converging(func_id)) }, 1 => { // Create Item @@ -110,15 +110,15 @@ impl ChainExtension for NFTExtension { let collection = pallet_nft::Module::::get_collection(input.collection_id)?; - match pallet_nft::Module::::create_item_internal( + pallet_nft::Module::::create_item_internal( &C::CrossAccountId::from_sub(env.ext().address().clone()), &collection, &C::CrossAccountId::from_sub(input.owner), input.data, - ) { - Ok(_) => Ok(RetVal::Converging(func_id)), - _ => Err(DispatchError::Other("CreateItem error")) - } + )?; + + pallet_nft::Module::::submit_logs(collection)?; + Ok(RetVal::Converging(func_id)) }, 2 => { // Create multiple items @@ -127,15 +127,15 @@ impl ChainExtension for NFTExtension { let collection = pallet_nft::Module::::get_collection(input.collection_id)?; - match pallet_nft::Module::::create_multiple_items_internal( + pallet_nft::Module::::create_multiple_items_internal( &C::CrossAccountId::from_sub(env.ext().address().clone()), &collection, &C::CrossAccountId::from_sub(input.owner), input.data, - ) { - Ok(_) => Ok(RetVal::Converging(func_id)), - _ => Err(DispatchError::Other("CreateMultipleItems error")) - } + )?; + + pallet_nft::Module::::submit_logs(collection)?; + Ok(RetVal::Converging(func_id)) }, 3 => { // Approve @@ -151,6 +151,8 @@ impl ChainExtension for NFTExtension { input.item_id, input.amount, )?; + + pallet_nft::Module::::submit_logs(collection)?; Ok(RetVal::Converging(func_id)) }, 4 => { @@ -168,6 +170,8 @@ impl ChainExtension for NFTExtension { input.item_id, input.amount )?; + + pallet_nft::Module::::submit_logs(collection)?; Ok(RetVal::Converging(func_id)) }, 5 => { @@ -183,6 +187,8 @@ impl ChainExtension for NFTExtension { input.item_id, input.data, )?; + + pallet_nft::Module::::submit_logs(collection)?; Ok(RetVal::Converging(func_id)) }, 6 => { @@ -198,6 +204,8 @@ impl ChainExtension for NFTExtension { &C::CrossAccountId::from_sub(input.address), input.whitelisted, )?; + + pallet_nft::Module::::submit_logs(collection)?; Ok(RetVal::Converging(func_id)) } _ => { From c68888f211f101e9120e25af572bc1eb70eaafa7 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Thu, 13 May 2021 11:20:59 +0300 Subject: [PATCH 35/66] feat(CE): charge for calling pallet methods --- runtime/src/chain_extension.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/runtime/src/chain_extension.rs b/runtime/src/chain_extension.rs index 52024a86a8..7c7f4e8ebd 100644 --- a/runtime/src/chain_extension.rs +++ b/runtime/src/chain_extension.rs @@ -77,10 +77,13 @@ pub struct NFTExtToggleWhiteList { /// The chain Extension of NFT pallet pub struct NFTExtension; +pub type NftWeightInfoOf = ::WeightInfo; + impl ChainExtension for NFTExtension { fn call(func_id: u32, env: Environment) -> Result where E: Ext, + C: pallet_nft::Config, ::AccountId: UncheckedFrom<::Hash> + AsRef<[u8]>, { // The memory of the vm stores buf in scale-codec @@ -88,6 +91,7 @@ impl ChainExtension for NFTExtension { 0 => { let mut env = env.buf_in_buf_out(); let input: NFTExtTransfer = env.read_as()?; + env.charge_weight(NftWeightInfoOf::::transfer())?; let collection = pallet_nft::Module::::get_collection(input.collection_id)?; @@ -106,6 +110,7 @@ impl ChainExtension for NFTExtension { // Create Item let mut env = env.buf_in_buf_out(); let input: NFTExtCreateItem = env.read_as()?; + env.charge_weight(NftWeightInfoOf::::create_item(input.data.len()))?; match pallet_nft::Module::::create_item_internal( env.ext().address().clone(), @@ -121,6 +126,11 @@ impl ChainExtension for NFTExtension { // Create multiple items let mut env = env.buf_in_buf_out(); let input: NFTExtCreateMultipleItems = env.read_as()?; + env.charge_weight(NftWeightInfoOf::::create_item( + input.data.iter() + .map(|i| i.len()) + .sum() + ))?; let collection = pallet_nft::Module::::get_collection(input.collection_id)?; @@ -138,6 +148,7 @@ impl ChainExtension for NFTExtension { // Approve let mut env = env.buf_in_buf_out(); let input: NFTExtApprove = env.read_as()?; + env.charge_weight(NftWeightInfoOf::::approve())?; let collection = pallet_nft::Module::::get_collection(input.collection_id)?; @@ -154,6 +165,7 @@ impl ChainExtension for NFTExtension { // Transfer from let mut env = env.buf_in_buf_out(); let input: NFTExtTransferFrom = env.read_as()?; + env.charge_weight(NftWeightInfoOf::::transfer_from())?; let collection = pallet_nft::Module::::get_collection(input.collection_id)?; @@ -171,6 +183,7 @@ impl ChainExtension for NFTExtension { // Set variable metadata let mut env = env.buf_in_buf_out(); let input: NFTExtSetVariableMetaData = env.read_as()?; + env.charge_weight(NftWeightInfoOf::::set_variable_meta_data())?; let collection = pallet_nft::Module::::get_collection(input.collection_id)?; @@ -186,6 +199,7 @@ impl ChainExtension for NFTExtension { // Toggle whitelist let mut env = env.buf_in_buf_out(); let input: NFTExtToggleWhiteList = env.read_as()?; + env.charge_weight(NftWeightInfoOf::::add_to_white_list())?; let collection = pallet_nft::Module::::get_collection(input.collection_id)?; From 2260ad67fa719e1c6ecb4fd8625e1c1da77f7a02 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Thu, 13 May 2021 11:35:48 +0300 Subject: [PATCH 36/66] fix(CE): correct error handling Successful Converging value only used as return value, and most repos just return 0 Chain extension should not panic on not implemented func_id --- runtime/src/chain_extension.rs | 41 +++++++++++++++++----------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/runtime/src/chain_extension.rs b/runtime/src/chain_extension.rs index 7c7f4e8ebd..157f8ce16e 100644 --- a/runtime/src/chain_extension.rs +++ b/runtime/src/chain_extension.rs @@ -95,16 +95,15 @@ impl ChainExtension for NFTExtension { let collection = pallet_nft::Module::::get_collection(input.collection_id)?; - match pallet_nft::Module::::transfer_internal( + pallet_nft::Module::::transfer_internal( env.ext().caller().clone(), input.recipient, &collection, input.token_id, input.amount, - ) { - Ok(_) => Ok(RetVal::Converging(func_id)), - _ => Err(DispatchError::Other("Transfer error")) - } + )?; + + Ok(RetVal::Converging(0)) }, 1 => { // Create Item @@ -112,15 +111,14 @@ impl ChainExtension for NFTExtension { let input: NFTExtCreateItem = env.read_as()?; env.charge_weight(NftWeightInfoOf::::create_item(input.data.len()))?; - match pallet_nft::Module::::create_item_internal( + pallet_nft::Module::::create_item_internal( env.ext().address().clone(), input.collection_id, input.owner, input.data, - ) { - Ok(_) => Ok(RetVal::Converging(func_id)), - _ => Err(DispatchError::Other("CreateItem error")) - } + )?; + + Ok(RetVal::Converging(0)) }, 2 => { // Create multiple items @@ -134,15 +132,14 @@ impl ChainExtension for NFTExtension { let collection = pallet_nft::Module::::get_collection(input.collection_id)?; - match pallet_nft::Module::::create_multiple_items_internal( + pallet_nft::Module::::create_multiple_items_internal( env.ext().address().clone(), &collection, input.owner, input.data, - ) { - Ok(_) => Ok(RetVal::Converging(func_id)), - _ => Err(DispatchError::Other("CreateMultipleItems error")) - } + )?; + + Ok(RetVal::Converging(0)) }, 3 => { // Approve @@ -159,7 +156,8 @@ impl ChainExtension for NFTExtension { input.item_id, input.amount, )?; - Ok(RetVal::Converging(func_id)) + + Ok(RetVal::Converging(0)) }, 4 => { // Transfer from @@ -177,7 +175,8 @@ impl ChainExtension for NFTExtension { input.item_id, input.amount )?; - Ok(RetVal::Converging(func_id)) + + Ok(RetVal::Converging(0)) }, 5 => { // Set variable metadata @@ -193,7 +192,8 @@ impl ChainExtension for NFTExtension { input.item_id, input.data, )?; - Ok(RetVal::Converging(func_id)) + + Ok(RetVal::Converging(0)) }, 6 => { // Toggle whitelist @@ -209,10 +209,11 @@ impl ChainExtension for NFTExtension { &input.address, input.whitelisted, )?; - Ok(RetVal::Converging(func_id)) + + Ok(RetVal::Converging(0)) } _ => { - panic!("Passed unknown func_id to test chain extension: {}", func_id); + Err(DispatchError::Other("unknown chain_extension func_id")); } } } From 849f7eea966c26945d6a8dbd0ebfaf580685f5e4 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Thu, 13 May 2021 11:20:59 +0300 Subject: [PATCH 37/66] feat(CE): charge for calling pallet methods Signed-off-by: Yaroslav Bolyukin --- runtime/src/chain_extension.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/runtime/src/chain_extension.rs b/runtime/src/chain_extension.rs index 52024a86a8..7c7f4e8ebd 100644 --- a/runtime/src/chain_extension.rs +++ b/runtime/src/chain_extension.rs @@ -77,10 +77,13 @@ pub struct NFTExtToggleWhiteList { /// The chain Extension of NFT pallet pub struct NFTExtension; +pub type NftWeightInfoOf = ::WeightInfo; + impl ChainExtension for NFTExtension { fn call(func_id: u32, env: Environment) -> Result where E: Ext, + C: pallet_nft::Config, ::AccountId: UncheckedFrom<::Hash> + AsRef<[u8]>, { // The memory of the vm stores buf in scale-codec @@ -88,6 +91,7 @@ impl ChainExtension for NFTExtension { 0 => { let mut env = env.buf_in_buf_out(); let input: NFTExtTransfer = env.read_as()?; + env.charge_weight(NftWeightInfoOf::::transfer())?; let collection = pallet_nft::Module::::get_collection(input.collection_id)?; @@ -106,6 +110,7 @@ impl ChainExtension for NFTExtension { // Create Item let mut env = env.buf_in_buf_out(); let input: NFTExtCreateItem = env.read_as()?; + env.charge_weight(NftWeightInfoOf::::create_item(input.data.len()))?; match pallet_nft::Module::::create_item_internal( env.ext().address().clone(), @@ -121,6 +126,11 @@ impl ChainExtension for NFTExtension { // Create multiple items let mut env = env.buf_in_buf_out(); let input: NFTExtCreateMultipleItems = env.read_as()?; + env.charge_weight(NftWeightInfoOf::::create_item( + input.data.iter() + .map(|i| i.len()) + .sum() + ))?; let collection = pallet_nft::Module::::get_collection(input.collection_id)?; @@ -138,6 +148,7 @@ impl ChainExtension for NFTExtension { // Approve let mut env = env.buf_in_buf_out(); let input: NFTExtApprove = env.read_as()?; + env.charge_weight(NftWeightInfoOf::::approve())?; let collection = pallet_nft::Module::::get_collection(input.collection_id)?; @@ -154,6 +165,7 @@ impl ChainExtension for NFTExtension { // Transfer from let mut env = env.buf_in_buf_out(); let input: NFTExtTransferFrom = env.read_as()?; + env.charge_weight(NftWeightInfoOf::::transfer_from())?; let collection = pallet_nft::Module::::get_collection(input.collection_id)?; @@ -171,6 +183,7 @@ impl ChainExtension for NFTExtension { // Set variable metadata let mut env = env.buf_in_buf_out(); let input: NFTExtSetVariableMetaData = env.read_as()?; + env.charge_weight(NftWeightInfoOf::::set_variable_meta_data())?; let collection = pallet_nft::Module::::get_collection(input.collection_id)?; @@ -186,6 +199,7 @@ impl ChainExtension for NFTExtension { // Toggle whitelist let mut env = env.buf_in_buf_out(); let input: NFTExtToggleWhiteList = env.read_as()?; + env.charge_weight(NftWeightInfoOf::::add_to_white_list())?; let collection = pallet_nft::Module::::get_collection(input.collection_id)?; From ead48f376fcd03f40b4db5dddff10a25735dc1f1 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Thu, 13 May 2021 11:35:48 +0300 Subject: [PATCH 38/66] fix(CE): correct error handling Successful Converging value only used as return value, and most repos just return 0 Chain extension should not panic on not implemented func_id Signed-off-by: Yaroslav Bolyukin --- runtime/src/chain_extension.rs | 41 +++++++++++++++++----------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/runtime/src/chain_extension.rs b/runtime/src/chain_extension.rs index 7c7f4e8ebd..d811f9fb46 100644 --- a/runtime/src/chain_extension.rs +++ b/runtime/src/chain_extension.rs @@ -95,16 +95,15 @@ impl ChainExtension for NFTExtension { let collection = pallet_nft::Module::::get_collection(input.collection_id)?; - match pallet_nft::Module::::transfer_internal( + pallet_nft::Module::::transfer_internal( env.ext().caller().clone(), input.recipient, &collection, input.token_id, input.amount, - ) { - Ok(_) => Ok(RetVal::Converging(func_id)), - _ => Err(DispatchError::Other("Transfer error")) - } + )?; + + Ok(RetVal::Converging(0)) }, 1 => { // Create Item @@ -112,15 +111,14 @@ impl ChainExtension for NFTExtension { let input: NFTExtCreateItem = env.read_as()?; env.charge_weight(NftWeightInfoOf::::create_item(input.data.len()))?; - match pallet_nft::Module::::create_item_internal( + pallet_nft::Module::::create_item_internal( env.ext().address().clone(), input.collection_id, input.owner, input.data, - ) { - Ok(_) => Ok(RetVal::Converging(func_id)), - _ => Err(DispatchError::Other("CreateItem error")) - } + )?; + + Ok(RetVal::Converging(0)) }, 2 => { // Create multiple items @@ -134,15 +132,14 @@ impl ChainExtension for NFTExtension { let collection = pallet_nft::Module::::get_collection(input.collection_id)?; - match pallet_nft::Module::::create_multiple_items_internal( + pallet_nft::Module::::create_multiple_items_internal( env.ext().address().clone(), &collection, input.owner, input.data, - ) { - Ok(_) => Ok(RetVal::Converging(func_id)), - _ => Err(DispatchError::Other("CreateMultipleItems error")) - } + )?; + + Ok(RetVal::Converging(0)) }, 3 => { // Approve @@ -159,7 +156,8 @@ impl ChainExtension for NFTExtension { input.item_id, input.amount, )?; - Ok(RetVal::Converging(func_id)) + + Ok(RetVal::Converging(0)) }, 4 => { // Transfer from @@ -177,7 +175,8 @@ impl ChainExtension for NFTExtension { input.item_id, input.amount )?; - Ok(RetVal::Converging(func_id)) + + Ok(RetVal::Converging(0)) }, 5 => { // Set variable metadata @@ -193,7 +192,8 @@ impl ChainExtension for NFTExtension { input.item_id, input.data, )?; - Ok(RetVal::Converging(func_id)) + + Ok(RetVal::Converging(0)) }, 6 => { // Toggle whitelist @@ -209,10 +209,11 @@ impl ChainExtension for NFTExtension { &input.address, input.whitelisted, )?; - Ok(RetVal::Converging(func_id)) + + Ok(RetVal::Converging(0)) } _ => { - panic!("Passed unknown func_id to test chain extension: {}", func_id); + Err(DispatchError::Other("unknown chain_extension func_id")) } } } From 14cafc1288271b980bd273f26381d5376c1569e0 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 14 May 2021 15:59:20 +0300 Subject: [PATCH 39/66] test: cleanup debug logs Signed-off-by: Yaroslav Bolyukin --- tests/src/contracts.test.ts | 6 ++---- tests/src/removeCollectionAdmin.test.ts | 1 - 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/tests/src/contracts.test.ts b/tests/src/contracts.test.ts index 72df3e44e9..8b890c4779 100644 --- a/tests/src/contracts.test.ts +++ b/tests/src/contracts.test.ts @@ -64,15 +64,13 @@ describe('Contracts', () => { const collectionId = await createCollectionExpectSuccess(); const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT'); const [contract, deployer] = await deployTransferContract(api); - const tokenBefore: any = (await api.query.nft.nftItemList(collectionId, tokenId) as any).unwrap(); + const tokenBefore: any = (await api.query.nft.nftItemList(collectionId, tokenId) as any).toJSON(); // Transfer - console.log('transfer using contract'); const transferTx = contract.tx.transfer(value, gasLimit, bob.address, collectionId, tokenId, 1); const events = await submitTransactionAsync(alice, transferTx); - console.log('done'); const result = getGenericResult(events); - const tokenAfter: any = (await api.query.nft.nftItemList(collectionId, tokenId) as any).unwrap(); + const tokenAfter: any = (await api.query.nft.nftItemList(collectionId, tokenId) as any).toJSON(); // tslint:disable-next-line:no-unused-expression expect(result.success).to.be.true; diff --git a/tests/src/removeCollectionAdmin.test.ts b/tests/src/removeCollectionAdmin.test.ts index ef05461523..69a8443b39 100644 --- a/tests/src/removeCollectionAdmin.test.ts +++ b/tests/src/removeCollectionAdmin.test.ts @@ -26,7 +26,6 @@ describe('Integration Test removeCollectionAdmin(collection_id, account_id):', ( await submitTransactionAsync(Alice, addAdminTx); const adminListAfterAddAdmin: any = (await api.query.nft.adminList(collectionId)).toJSON(); - console.log(adminListAfterAddAdmin); expect(adminListAfterAddAdmin).to.be.deep.contains(normalizeAccountId(Bob.address)); // then remove bob from admins of collection From bfd1d206fb3e99ff83916b0c49e357d55bc8260b Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 14 May 2021 15:59:57 +0300 Subject: [PATCH 40/66] fix: nft collection check Signed-off-by: Yaroslav Bolyukin --- pallets/nft/src/eth/mod.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pallets/nft/src/eth/mod.rs b/pallets/nft/src/eth/mod.rs index 10f2e9b0c5..66e9051809 100644 --- a/pallets/nft/src/eth/mod.rs +++ b/pallets/nft/src/eth/mod.rs @@ -60,7 +60,7 @@ fn result_to_output(result: Result>, logs: Vec

(sender: H160, collection: &CollectionHandle, method_id: u32, mut input: AbiReader) -> Result> { let erc20 = matches!(collection.mode, CollectionMode::Fungible(_)); - let erc721 = matches!(collection.mode, CollectionMode::ReFungible); + let erc721 = matches!(collection.mode, CollectionMode::NFT); Ok(match method_id { // function name() external view returns (string memory) @@ -90,7 +90,7 @@ fn call_internal(sender: H160, collection: &CollectionHandle, meth } } // function totalSupply() external view returns (uint256) - 0x18160ddd if erc20 => { + 0x18160ddd if erc20 || erc721 => { // TODO: can't be implemented, as we don't track total amount of fungibles crate::abi_encode!(uint256(0)) } From 057ef8c1c4683a352971d440041710f62cf01c2a Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 14 May 2021 16:00:02 +0300 Subject: [PATCH 41/66] fix: fungible amount is not indexed Signed-off-by: Yaroslav Bolyukin --- pallets/nft/src/eth/mod.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/pallets/nft/src/eth/mod.rs b/pallets/nft/src/eth/mod.rs index 66e9051809..979288ee81 100644 --- a/pallets/nft/src/eth/mod.rs +++ b/pallets/nft/src/eth/mod.rs @@ -263,9 +263,9 @@ pub const TRANSFER_NFT_TOPIC: H256 = H256(hex_literal::hex!("ddf252ad1be2c89b69c pub const APPROVAL_NFT_TOPIC: H256 = H256(hex_literal::hex!("8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925")); // TODO: event ApprovalForAll(address indexed owner, address indexed operator, bool approved); -/// event Transfer(address indexed from, address indexed to, uint256 indexed amount); +/// event Transfer(address indexed from, address indexed to, uint256 amount); pub const TRANSFER_FUNGIBLE_TOPIC: H256 = H256(hex_literal::hex!("ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef")); -/// event Approval(address indexed owner, address indexed approved, uint256 indexed amount); +/// event Approval(address indexed owner, address indexed approved, uint256 amount); pub const APPROVAL_FUNGIBLE_TOPIC: H256 = H256(hex_literal::hex!("8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925")); pub fn address_to_topic(address: &H160) -> H256 { @@ -274,6 +274,12 @@ pub fn address_to_topic(address: &H160) -> H256 { H256(output) } +pub fn u32_to_topic(id: u32) -> H256 { + let mut output = [0; 32]; + output[28..32].copy_from_slice(&id.to_be_bytes()); + H256(output) +} + // TODO: This function is slow, and output can be memoized pub fn generate_transaction(collection_id: u32, chain_id: u64) -> ethereum::Transaction { From 392616379d3a6d491db0eb4d93dc664aa7724fc5 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 14 May 2021 16:00:06 +0300 Subject: [PATCH 42/66] fix: nft indexed logs Signed-off-by: Yaroslav Bolyukin --- pallets/nft/src/lib.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/pallets/nft/src/lib.rs b/pallets/nft/src/lib.rs index 1036130606..08af1065ec 100644 --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -1762,8 +1762,9 @@ impl Module { eth::APPROVAL_NFT_TOPIC, eth::address_to_topic(sender.as_eth()), eth::address_to_topic(spender.as_eth()), + eth::u32_to_topic(item_id), ]), - abi_encode!(uint256(item_id.into())), + abi_encode!(), ); } @@ -2118,8 +2119,9 @@ impl Module { eth::TRANSFER_NFT_TOPIC, eth::address_to_topic(&H160::default()), eth::address_to_topic(item_owner.as_eth()), + eth::u32_to_topic(current_index), ]), - abi_encode!(uint256(current_index.into())), + abi_encode!(), ); Self::deposit_event(RawEvent::ItemCreated(collection_id, current_index, item_owner)); Ok(()) @@ -2478,8 +2480,9 @@ impl Module { eth::TRANSFER_NFT_TOPIC, eth::address_to_topic(sender.as_eth()), eth::address_to_topic(new_owner.as_eth()), + eth::u32_to_topic(item_id), ]), - abi_encode!(uint256(item_id.into())), + abi_encode!(), ); Self::deposit_event(RawEvent::Transfer(collection.id, item_id, sender, new_owner, 1)); From 34596c284143c60661bb6688d8dabe0fd4e07a58 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 14 May 2021 16:00:09 +0300 Subject: [PATCH 43/66] feat(eth): plain transfer for nft collections Signed-off-by: Yaroslav Bolyukin --- pallets/nft/src/eth/mod.rs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/pallets/nft/src/eth/mod.rs b/pallets/nft/src/eth/mod.rs index 979288ee81..09585c2c69 100644 --- a/pallets/nft/src/eth/mod.rs +++ b/pallets/nft/src/eth/mod.rs @@ -124,6 +124,23 @@ fn call_internal(sender: H160, collection: &CollectionHandle, meth amount, ).map_err(|_| "transfer error")?; + crate::abi_encode!(bool(true)) + } + // function transfer(address recipient, uint256 token) external returns (bool) { + 0xa9059cbb if erc721 => { + crate::abi_decode!(input, recipient: address, token_id: uint256); + let sender = T::CrossAccountId::from_eth(sender); + let recipient = T::CrossAccountId::from_eth(recipient); + let token_id: u32 = token_id.try_into().map_err(|_| "bad token id")?; + + >::transfer_internal( + &sender, + &recipient, + &collection, + token_id, + 1, + ).map_err(|_| "transfer error")?; + crate::abi_encode!(bool(true)) } // function allowance(address owner, address spender) external view returns (uint256) From 38cb2f2141604d10fdbe94436078fd5ee4b00b40 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 14 May 2021 16:21:00 +0300 Subject: [PATCH 44/66] test: make various test helpers accept CrossAccountId --- tests/src/util/helpers.ts | 75 ++++++++++++++++++++++++--------------- 1 file changed, 47 insertions(+), 28 deletions(-) diff --git a/tests/src/util/helpers.ts b/tests/src/util/helpers.ts index 4be81f912a..afe70a710c 100644 --- a/tests/src/util/helpers.ts +++ b/tests/src/util/helpers.ts @@ -4,10 +4,10 @@ // import { ApiPromise, Keyring } from '@polkadot/api'; -import { Enum, Struct } from '@polkadot/types/codec'; import type { AccountId, EventRecord } from '@polkadot/types/interfaces'; import { u128 } from '@polkadot/types/primitive'; import { IKeyringPair } from '@polkadot/types/types'; +import { evmToAddress } from '@polkadot/util-crypto'; import { BigNumber } from 'bignumber.js'; import BN from 'bn.js'; import chai from 'chai'; @@ -21,16 +21,30 @@ import { hexToStr, strToUTF16, utf16ToStr } from './util'; chai.use(chaiAsPromised); const expect = chai.expect; -export type CrossAccountId = string | { +export type CrossAccountId = { substrate: string, } | { ethereum: string, }; -export function normalizeAccountId(input: CrossAccountId): CrossAccountId { +export function normalizeAccountId(input: string | CrossAccountId | IKeyringPair): CrossAccountId { if (typeof input === 'string') return { substrate: input }; + if ('address' in input) { + return { substrate: input.address }; + } + if ('ethereum' in input) { + input.ethereum = input.ethereum.toLowerCase(); + } return input; } +export function toSubstrateAddress(input: CrossAccountId): string { + input = normalizeAccountId(input); + if ('substrate' in input) { + return input.substrate; + } else { + return evmToAddress(input.ethereum); + } +} export const U128_MAX = (1n << 128n) - 1n; @@ -643,17 +657,18 @@ export async function burnItemExpectSuccess(owner: IKeyringPair, collectionId: n export async function approveExpectSuccess(collectionId: number, - tokenId: number, owner: IKeyringPair, approved: IKeyringPair, amount: number | bigint = 1) { + tokenId: number, owner: IKeyringPair, approved: IKeyringPair | CrossAccountId | string, amount: number | bigint = 1) { await usingApi(async (api: ApiPromise) => { + approved = normalizeAccountId(approved); const allowanceBefore = - await api.query.nft.allowances(collectionId, [tokenId, owner.address, approved.address]) as unknown as BN; - const approveNftTx = api.tx.nft.approve(normalizeAccountId(approved.address), collectionId, tokenId, amount); + await api.query.nft.allowances(collectionId, [tokenId, owner.address, toSubstrateAddress(approved)]) as unknown as BN; + const approveNftTx = api.tx.nft.approve(approved, collectionId, tokenId, amount); const events = await submitTransactionAsync(owner, approveNftTx); const result = getCreateItemResult(events); // tslint:disable-next-line:no-unused-expression expect(result.success).to.be.true; const allowanceAfter = - await api.query.nft.allowances(collectionId, [tokenId, owner.address, approved.address]) as unknown as BN; + await api.query.nft.allowances(collectionId, [tokenId, owner.address, toSubstrateAddress(approved)]) as unknown as BN; expect(allowanceAfter.sub(allowanceBefore).toString()).to.be.equal(amount.toString()); }); } @@ -663,32 +678,33 @@ export async function tokenId: number, accountApproved: IKeyringPair, accountFrom: IKeyringPair, - accountTo: IKeyringPair, + accountTo: IKeyringPair | CrossAccountId, value: number | bigint = 1, type: string = 'NFT') { await usingApi(async (api: ApiPromise) => { + const to = normalizeAccountId(accountTo); let balanceBefore = new BN(0); if (type === 'Fungible') { - balanceBefore = await api.query.nft.balance(collectionId, accountTo.address) as unknown as BN; + balanceBefore = await api.query.nft.balance(collectionId, toSubstrateAddress(to)) as unknown as BN; } const transferFromTx = api.tx.nft.transferFrom( - normalizeAccountId(accountFrom.address), normalizeAccountId(accountTo.address), collectionId, tokenId, value); + normalizeAccountId(accountFrom.address), to, collectionId, tokenId, value); const events = await submitTransactionAsync(accountApproved, transferFromTx); const result = getCreateItemResult(events); // tslint:disable-next-line:no-unused-expression expect(result.success).to.be.true; if (type === 'NFT') { const nftItemData = (await api.query.nft.nftItemList(collectionId, tokenId) as any).toJSON() as ITokenDataType; - expect(nftItemData.Owner).to.be.deep.equal(normalizeAccountId(accountTo.address)); + expect(nftItemData.Owner).to.be.deep.equal(to); } if (type === 'Fungible') { - const balanceAfter = (await api.query.nft.fungibleItemList(collectionId, accountTo.address) as any).Value as unknown as BN; + const balanceAfter = (await api.query.nft.fungibleItemList(collectionId, toSubstrateAddress(to)) as any).Value as unknown as BN; expect(balanceAfter.sub(balanceBefore).toString()).to.be.equal(value.toString()); } if (type === 'ReFungible') { const nftItemData = (await api.query.nft.reFungibleItemList(collectionId, tokenId) as any).toJSON() as IReFungibleTokenDataType; - expect(nftItemData.Owner[0].Owner).to.be.deep.equal(normalizeAccountId(accountTo.address)); + expect(nftItemData.Owner[0].Owner).to.be.deep.equal(normalizeAccountId(to)); expect(nftItemData.Owner[0].Fraction).to.be.equal(value); } }); @@ -715,15 +731,17 @@ export async function transferExpectSuccess(collectionId: number, tokenId: number, sender: IKeyringPair, - recipient: IKeyringPair, + recipient: IKeyringPair | CrossAccountId, value: number | bigint = 1, type: string = 'NFT') { await usingApi(async (api: ApiPromise) => { + const to = normalizeAccountId(recipient); + let balanceBefore = new BN(0); if (type === 'Fungible') { - balanceBefore = await api.query.nft.balance(collectionId, recipient.address) as unknown as BN; + balanceBefore = await api.query.nft.balance(collectionId, toSubstrateAddress(to)) as unknown as BN; } - const transferTx = api.tx.nft.transfer(normalizeAccountId(recipient.address), collectionId, tokenId, value); + const transferTx = api.tx.nft.transfer(to, collectionId, tokenId, value); const events = await submitTransactionAsync(sender, transferTx); const result = getTransferResult(events); // tslint:disable-next-line:no-unused-expression @@ -731,20 +749,20 @@ export async function expect(result.collectionId).to.be.equal(collectionId); expect(result.itemId).to.be.equal(tokenId); expect(result.sender).to.be.deep.equal(normalizeAccountId(sender.address)); - expect(result.recipient).to.be.deep.equal(normalizeAccountId(recipient.address)); + expect(result.recipient).to.be.deep.equal(to); expect(result.value.toString()).to.be.equal(value.toString()); if (type === 'NFT') { const nftItemData = (await api.query.nft.nftItemList(collectionId, tokenId)).toJSON() as unknown as ITokenDataType; - expect(nftItemData.Owner).to.be.deep.equal(normalizeAccountId(recipient.address)); + expect(nftItemData.Owner).to.be.deep.equal(to); } if (type === 'Fungible') { - const balanceAfter = (await api.query.nft.fungibleItemList(collectionId, recipient.address) as any).Value as unknown as BN; + const balanceAfter = (await api.query.nft.fungibleItemList(collectionId, toSubstrateAddress(to)) as any).Value as unknown as BN; expect(balanceAfter.sub(balanceBefore).toString()).to.be.equal(value.toString()); } if (type === 'ReFungible') { const nftItemData = (await api.query.nft.reFungibleItemList(collectionId, tokenId)).toJSON() as unknown as IReFungibleTokenDataType; - expect(nftItemData.Owner[0].Owner).to.be.deep.equal(normalizeAccountId(recipient.address)); + expect(nftItemData.Owner[0].Owner).to.be.deep.equal(to); expect(nftItemData.Owner[0].Fraction.toString()).to.be.equal(value.toString()); } }); @@ -794,7 +812,7 @@ export async function createFungibleItemExpectSuccess( sender: IKeyringPair, collectionId: number, data: CreateFungibleData, - owner: CrossAccountId = sender.address, + owner: CrossAccountId | string = sender.address, ) { return await usingApi(async (api) => { const tx = api.tx.nft.createItem(collectionId, normalizeAccountId(owner), { Fungible: data }); @@ -808,29 +826,30 @@ export async function createFungibleItemExpectSuccess( } export async function createItemExpectSuccess( - sender: IKeyringPair, collectionId: number, createMode: string, owner: string = sender.address) { + sender: IKeyringPair, collectionId: number, createMode: string, owner: CrossAccountId | string = sender.address) { let newItemId: number = 0; await usingApi(async (api) => { + const to = normalizeAccountId(owner); const AItemCount = parseInt((await api.query.nft.itemListIndex(collectionId)).toString(), 10); - const Aitem: any = (await api.query.nft.fungibleItemList(collectionId, owner)).toJSON(); + const Aitem: any = (await api.query.nft.fungibleItemList(collectionId, toSubstrateAddress(to))).toJSON(); const AItemBalance = new BigNumber(Aitem.Value); let tx; if (createMode === 'Fungible') { const createData = { fungible: { value: 10 } }; - tx = api.tx.nft.createItem(collectionId, normalizeAccountId(owner), createData); + tx = api.tx.nft.createItem(collectionId, to, createData); } else if (createMode === 'ReFungible') { const createData = { refungible: { const_data: [], variable_data: [], pieces: 100 } }; - tx = api.tx.nft.createItem(collectionId, normalizeAccountId(owner), createData); + tx = api.tx.nft.createItem(collectionId, to, createData); } else { - tx = api.tx.nft.createItem(collectionId, normalizeAccountId(owner), createMode); + tx = api.tx.nft.createItem(collectionId, to, createMode); } const events = await submitTransactionAsync(sender, tx); const result = getCreateItemResult(events); const BItemCount = parseInt((await api.query.nft.itemListIndex(collectionId)).toString(), 10); - const Bitem: any = (await api.query.nft.fungibleItemList(collectionId, owner)).toJSON(); + const Bitem: any = (await api.query.nft.fungibleItemList(collectionId, toSubstrateAddress(to))).toJSON(); const BItemBalance = new BigNumber(Bitem.Value); // What to expect @@ -843,7 +862,7 @@ export async function createItemExpectSuccess( } expect(collectionId).to.be.equal(result.collectionId); expect(BItemCount.toString()).to.be.equal(result.itemId.toString()); - expect(normalizeAccountId(owner)).to.be.deep.equal(result.recipient); + expect(to).to.be.deep.equal(result.recipient); newItemId = result.itemId; }); return newItemId; From 6d1d1e806e3274f68ec8f6e5623b4ec5089f205b Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Mon, 17 May 2021 13:21:31 +0300 Subject: [PATCH 45/66] build: upgrade frontier Signed-off-by: Yaroslav Bolyukin --- Cargo.lock | 1422 ++++++++++++++++++++-------------------- node/Cargo.toml | 4 +- node/src/rpc.rs | 1 + pallets/nft/Cargo.toml | 4 +- runtime/Cargo.toml | 4 +- 5 files changed, 725 insertions(+), 710 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 536e36c564..8c8a736470 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -18,14 +18,23 @@ version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a55f82cfe485775d02112886f4169bde0c5894d75e79ead7eafe7e40a25e45f7" dependencies = [ - "gimli", + "gimli 0.23.0", +] + +[[package]] +name = "addr2line" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03345e98af8f3d786b6d9f656ccfa6ac316d954e92bc4841f0bba20789d5fb5a" +dependencies = [ + "gimli 0.24.0", ] [[package]] name = "adler" -version = "0.2.3" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "aead" @@ -89,13 +98,24 @@ checksum = "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e" [[package]] name = "aho-corasick" -version = "0.7.15" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5" +checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" dependencies = [ "memchr", ] +[[package]] +name = "alga" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f823d037a7ec6ea2197046bafd4ae150e6bc36f9ca347404f46a46823fa84f2" +dependencies = [ + "approx 0.3.2", + "num-complex 0.2.4", + "num-traits", +] + [[package]] name = "ansi_term" version = "0.11.0" @@ -116,9 +136,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.38" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afddf7f520a80dbf76e6f50a35bca42a2331ef227a28b3b6dc5c2e2338d114b1" +checksum = "28b2cd92db5cbd74e8e5028f7e27dd7aa3090e89e4f2a197cc7c8dfb69c7063b" [[package]] name = "approx" @@ -129,6 +149,15 @@ dependencies = [ "num-traits", ] +[[package]] +name = "approx" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f2a05fd1bd10b2527e20a2cd32d8873d115b8b39fe219ee25f42a8aca6ba278" +dependencies = [ + "num-traits", +] + [[package]] name = "arrayref" version = "0.3.6" @@ -150,6 +179,12 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" +[[package]] +name = "arrayvec" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a2f58b0bb10c380af2b26e57212856b8c9a59e0925b4c20f4a174a49734eaf7" + [[package]] name = "asn1_der" version = "0.6.3" @@ -171,9 +206,9 @@ dependencies = [ [[package]] name = "async-channel" -version = "1.5.1" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59740d83946db6a5af71ae25ddf9562c2b176b2ca42cf99a455f09f4a220d6b9" +checksum = "2114d64672151c0c5eaa5e131ec84a74f06e1e559830dabba01ca30605d66319" dependencies = [ "concurrent-queue", "event-listener", @@ -182,16 +217,16 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb877970c7b440ead138f6321a3b5395d6061183af779340b65e20c0fede9146" +checksum = "871f9bb5e0a22eeb7e8cf16641feb87c9dc67032ccf8ff49e772eb9941d3a965" dependencies = [ "async-task", "concurrent-queue", "fastrand", "futures-lite", "once_cell", - "vec-arena", + "slab", ] [[package]] @@ -212,29 +247,29 @@ dependencies = [ [[package]] name = "async-io" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9315f8f07556761c3e48fec2e6b276004acf426e6dc068b2c2251854d65ee0fd" +checksum = "4bbfd5cf2794b1e908ea8457e6c45f8f8f1f6ec5f74617bf4662623f47503c3b" dependencies = [ "concurrent-queue", "fastrand", "futures-lite", "libc", "log", - "nb-connect", "once_cell", "parking", "polling", - "vec-arena", + "slab", + "socket2 0.4.0", "waker-fn", "winapi 0.3.9", ] [[package]] name = "async-lock" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1996609732bde4a9988bc42125f55f2af5f3c36370e27c778d5191a4a1b63bfb" +checksum = "e6a8ea61bf9947a1007c5cada31e647dbc77b103c679858150003ba697ea798b" dependencies = [ "event-listener", ] @@ -250,15 +285,16 @@ dependencies = [ [[package]] name = "async-process" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8cea09c1fb10a317d1b5af8024eeba256d6554763e85ecd90ff8df31c7bbda" +checksum = "a8f38756dd9ac84671c428afbf7c9f7495feff9ec5b0710f17100098e5b354ac" dependencies = [ "async-io", "blocking", - "cfg-if 0.1.10", + "cfg-if 1.0.0", "event-listener", "futures-lite", + "libc", "once_cell", "signal-hook", "winapi 0.3.9", @@ -275,7 +311,7 @@ dependencies = [ "async-io", "async-lock", "async-process", - "crossbeam-utils 0.8.1", + "crossbeam-utils 0.8.4", "futures-channel", "futures-core", "futures-io", @@ -286,7 +322,7 @@ dependencies = [ "memchr", "num_cpus", "once_cell", - "pin-project-lite 0.2.4", + "pin-project-lite 0.2.6", "pin-utils", "slab", "wasm-bindgen-futures", @@ -300,9 +336,9 @@ checksum = "e91831deabf0d6d7ec49552e489aed63b7456a7a3c46cff62adad428110b0af0" [[package]] name = "async-trait" -version = "0.1.42" +version = "0.1.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d3a45e77e34375a7923b1e8febb049bb011f064714a8e17a1a616fef01da13d" +checksum = "0b98e84bbb4cbcdd97da190ba0c58a1bb0de2c1fdf67d159e192ed766aeca722" dependencies = [ "proc-macro2", "quote", @@ -319,7 +355,7 @@ dependencies = [ "futures-sink", "futures-util", "memchr", - "pin-project-lite 0.2.4", + "pin-project-lite 0.2.6", ] [[package]] @@ -332,7 +368,7 @@ dependencies = [ "futures-sink", "futures-util", "memchr", - "pin-project-lite 0.2.4", + "pin-project-lite 0.2.6", ] [[package]] @@ -369,15 +405,16 @@ checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" [[package]] name = "backtrace" -version = "0.3.56" +version = "0.3.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d117600f438b1707d4e4ae15d3595657288f8235a0eb593e80ecc98ab34e1bc" +checksum = "4717cfcbfaa661a0fd48f8453951837ae7e8f81e481fbb136e3202d72805a744" dependencies = [ - "addr2line", + "addr2line 0.15.1", + "cc", "cfg-if 1.0.0", "libc", "miniz_oxide", - "object 0.23.0", + "object 0.24.0", "rustc-demangle", ] @@ -407,36 +444,30 @@ checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" [[package]] name = "bincode" -version = "1.3.2" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d175dfa69e619905c4c3cdb7c3c203fa3bdd5d51184e3afdb2742c0280493772" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" dependencies = [ - "byteorder", "serde", ] [[package]] name = "bindgen" -version = "0.54.0" +version = "0.57.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66c0bb6167449588ff70803f4127f0684f9063097eca5016f37eb52b92c2cf36" +checksum = "fd4865004a46a0aafb2a0a5eb19d3c9fc46ee5f063a6cfc605c69ac9ecf5263d" dependencies = [ "bitflags", "cexpr", - "cfg-if 0.1.10", "clang-sys", - "clap", - "env_logger", "lazy_static", "lazycell", - "log", "peeking_take_while", "proc-macro2", "quote", "regex", "rustc-hash", "shlex", - "which 3.1.1", ] [[package]] @@ -457,9 +488,9 @@ dependencies = [ [[package]] name = "bitvec" -version = "0.20.2" +version = "0.20.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f682656975d3a682daff957be4ddeb65d6ad656737cd821f2d00685ae466af1" +checksum = "7774144344a4faa177370406a7ff5f1da24303817368584c6206c8303eb07848" dependencies = [ "funty", "radium 0.6.2", @@ -534,7 +565,7 @@ dependencies = [ "block-padding 0.1.5", "byte-tools", "byteorder", - "generic-array 0.12.3", + "generic-array 0.12.4", ] [[package]] @@ -593,9 +624,9 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bstr" -version = "0.2.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "473fc6b38233f9af7baa94fb5852dca389e3d95b8e21c8e3719301462c5d9faf" +checksum = "90682c8d613ad3373e66de8c6411e0ae2ab2571e879d2efbf73558cc66f21279" dependencies = [ "memchr", ] @@ -611,9 +642,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.6.0" +version = "3.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "099e596ef14349721d9016f6b80dd3419ea1bf289ab9b44df8e4dfd3a005d5d9" +checksum = "63396b8a4b9de3f4fdfb320ab6080762242f66a8ef174c49d8e19b674db4cdbe" [[package]] name = "byte-slice-cast" @@ -635,9 +666,9 @@ checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" [[package]] name = "byteorder" -version = "1.3.4" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "bytes" @@ -692,9 +723,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.66" +version = "1.0.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c0496836a84f8d0495758516b8621a622beb77c0fed418570e50764093ced48" +checksum = "e3c69b077ad434294d3ce9f1f6143a2a4b89a8a2d54ef813d85003a4fd1137fd" dependencies = [ "jobserver", ] @@ -778,13 +809,13 @@ dependencies = [ [[package]] name = "clang-sys" -version = "0.29.3" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe6837df1d5cba2397b835c8530f51723267e16abbf83892e9e5af4f0e5dd10a" +checksum = "853eda514c284c2287f4bf20ae614f8781f40a81d32ecda6e91449304dfe077c" dependencies = [ "glob", "libc", - "libloading", + "libloading 0.7.0", ] [[package]] @@ -826,6 +857,12 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + [[package]] name = "core-foundation" version = "0.7.0" @@ -853,10 +890,13 @@ dependencies = [ ] [[package]] -name = "cpuid-bool" -version = "0.1.2" +name = "cpufeatures" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8aebca1129a03dc6dc2b127edd729435bbc4a37e1d5f4d7513165089ceb02634" +checksum = "ed00c67cb5d0a7d64a44f6ad2668db7e7530311dd53ea79bcd4fb022c64911c8" +dependencies = [ + "libc", +] [[package]] name = "cpuid-bool" @@ -884,7 +924,7 @@ dependencies = [ "cranelift-codegen-meta", "cranelift-codegen-shared", "cranelift-entity", - "gimli", + "gimli 0.23.0", "log", "regalloc", "serde", @@ -969,12 +1009,12 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dca26ee1f8d361640700bde38b2c37d8c22b3ce2d360e1fc1c74ea4b0aa7d775" +checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" dependencies = [ "cfg-if 1.0.0", - "crossbeam-utils 0.8.1", + "crossbeam-utils 0.8.4", ] [[package]] @@ -995,8 +1035,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94af6efb46fef72616855b036a624cf27ba656ffc9be1b9a3c931cfc7749a9a9" dependencies = [ "cfg-if 1.0.0", - "crossbeam-epoch 0.9.2", - "crossbeam-utils 0.8.1", + "crossbeam-epoch 0.9.4", + "crossbeam-utils 0.8.4", ] [[package]] @@ -1016,15 +1056,14 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.2" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d60ab4a8dba064f2fbb5aa270c28da5cf4bbd0e72dae1140a6b0353a779dbe00" +checksum = "52fb27eab85b17fbb9f6fd667089e07d6a2eb8743d02639ee7f6a7a7729c9c94" dependencies = [ "cfg-if 1.0.0", - "crossbeam-utils 0.8.1", + "crossbeam-utils 0.8.4", "lazy_static", - "loom", - "memoffset 0.6.1", + "memoffset 0.6.3", "scopeguard", ] @@ -1052,9 +1091,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.1" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02d96d1e189ef58269ebe5b97953da3274d83a93af647c2ddd6f9dab28cedb8d" +checksum = "4feb231f0d4d6af81aed15928e58ecf5816aa62a2393e2c82f46973e92a9a278" dependencies = [ "autocfg", "cfg-if 1.0.0", @@ -1073,7 +1112,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" dependencies = [ - "generic-array 0.12.3", + "generic-array 0.12.4", "subtle 1.0.0", ] @@ -1098,9 +1137,9 @@ dependencies = [ [[package]] name = "ctor" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8f45d9ad417bcef4817d614a501ab55cdd96a6fdb24f49aab89a54acfd66b19" +checksum = "5e98e2ad1a782e33928b96fc3948e7c355e5af34ba4de7670fe8bac2a3b2006d" dependencies = [ "quote", "syn", @@ -1132,9 +1171,9 @@ dependencies = [ [[package]] name = "curve25519-dalek" -version = "3.0.2" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f627126b946c25a4638eec0ea634fc52506dea98db118aae985118ce7c3d723f" +checksum = "639891fde0dbea823fc3d798a0fdf9d2f9440a42d64a78ab3488b0ca025117b3" dependencies = [ "byteorder", "digest 0.9.0", @@ -1171,10 +1210,11 @@ dependencies = [ [[package]] name = "derive_more" -version = "0.99.11" +version = "0.99.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41cb0e6161ad61ed084a36ba71fbba9e3ac5aee3606fb607fe08da6acbcf3d8c" +checksum = "5cc7b9cef1e351660e5443924e4f43ab25fbbed3e9a5f052df3677deb4d6b320" dependencies = [ + "convert_case", "proc-macro2", "quote", "syn", @@ -1186,7 +1226,7 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" dependencies = [ - "generic-array 0.12.3", + "generic-array 0.12.4", ] [[package]] @@ -1200,9 +1240,9 @@ dependencies = [ [[package]] name = "directories" -version = "3.0.1" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8fed639d60b58d0f53498ab13d26f621fd77569cc6edb031f4cc36a2ad9da0f" +checksum = "e69600ff1703123957937708eb27f7a564e48885c537782722ed0ba3189ce1d7" dependencies = [ "dirs-sys", ] @@ -1219,12 +1259,12 @@ dependencies = [ [[package]] name = "dirs-sys" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e93d7f5705de3e49895a2b5e0b8855a1c27f080192ae9c32a6432d50741a57a" +checksum = "03d86534ed367a67548dc68113a0f5db55432fdfbb6e6f9d77704397d95d5780" dependencies = [ "libc", - "redox_users 0.3.5", + "redox_users", "winapi 0.3.9", ] @@ -1235,7 +1275,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" dependencies = [ "libc", - "redox_users 0.4.0", + "redox_users", "winapi 0.3.9", ] @@ -1278,9 +1318,9 @@ checksum = "ee2626afccd7561a06cf1367e2950c4718ea04565e20fb5029b6c7d8ad09abcf" [[package]] name = "ed25519" -version = "1.0.3" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37c66a534cbb46ab4ea03477eae19d5c22c01da8258030280b7bd9d8433fb6ef" +checksum = "8d0860415b12243916284c67a9be413e044ee6668247b99ba26d94b2bc06c8f6" dependencies = [ "signature", ] @@ -1291,11 +1331,11 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" dependencies = [ - "curve25519-dalek 3.0.2", + "curve25519-dalek 3.1.0", "ed25519", "rand 0.7.3", "serde", - "sha2 0.9.3", + "sha2 0.9.5", "zeroize", ] @@ -1340,9 +1380,9 @@ dependencies = [ [[package]] name = "environmental" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6576a1755ddffd988788025e75bce9e74b018f7cc226198fe931d077911c6d7e" +checksum = "68b91989ae21441195d7d9b9993a2f9295c7e1a8c96255d8b729accddc124797" [[package]] name = "erased-serde" @@ -1411,7 +1451,7 @@ dependencies = [ "funty", "hash-db", "hash256-std-hasher", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "rlp 0.5.0", "rlp-derive", "serde", @@ -1480,7 +1520,7 @@ dependencies = [ "evm-gasometer", "evm-runtime", "log", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "primitive-types 0.9.0", "rlp 0.5.0", "serde", @@ -1493,7 +1533,7 @@ version = "0.26.0" source = "git+https://github.com/usetech-llc/evm.git?branch=precompile-output#e667bc507590bc67024e5d12c65241d4aef2a1b9" dependencies = [ "funty", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "primitive-types 0.9.0", "serde", ] @@ -1524,7 +1564,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e43f2f1833d64e33f15592464d6fdd70f349dda7b1a53088eb83cd94014008c5" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", ] [[package]] @@ -1563,25 +1603,25 @@ checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" [[package]] name = "fastrand" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca5faf057445ce5c9d4329e382b2ce7ca38550ef3b73a5348362d5f24e0c7fe3" +checksum = "77b705829d1e87f762c2df6da140b26af5839e1033aa84aa5f56bb688e4e1bdb" dependencies = [ "instant", ] [[package]] name = "fc-consensus" -version = "1.0.0" -source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#bd8cd6db44be646a059698371497de64128940af" +version = "1.0.1-dev" +source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#7facf3dd69644e19d13e5622353d84d97080d1c4" dependencies = [ "derive_more", "fc-db", "fp-consensus", "fp-rpc", - "futures 0.3.12", + "futures 0.3.15", "log", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "sc-client-api", "sp-api", "sp-block-builder", @@ -1597,11 +1637,11 @@ dependencies = [ [[package]] name = "fc-db" version = "1.0.0" -source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#bd8cd6db44be646a059698371497de64128940af" +source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#7facf3dd69644e19d13e5622353d84d97080d1c4" dependencies = [ "kvdb", "kvdb-rocksdb", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", "sp-core", "sp-database", @@ -1611,13 +1651,13 @@ dependencies = [ [[package]] name = "fc-mapping-sync" version = "1.1.0-dev" -source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#bd8cd6db44be646a059698371497de64128940af" +source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#7facf3dd69644e19d13e5622353d84d97080d1c4" dependencies = [ "fc-consensus", "fc-db", "fp-consensus", "fp-rpc", - "futures 0.3.12", + "futures 0.3.15", "futures-timer 3.0.2", "log", "sc-client-api", @@ -1629,7 +1669,7 @@ dependencies = [ [[package]] name = "fc-rpc" version = "2.0.0-dev" -source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#bd8cd6db44be646a059698371497de64128940af" +source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#7facf3dd69644e19d13e5622353d84d97080d1c4" dependencies = [ "ethereum", "ethereum-types 0.11.0", @@ -1641,7 +1681,7 @@ dependencies = [ "fp-evm", "fp-rpc", "fp-storage", - "futures 0.3.12", + "futures 0.3.15", "jsonrpc-core 15.1.0", "jsonrpc-core-client 14.2.0", "jsonrpc-derive 14.2.2", @@ -1650,7 +1690,7 @@ dependencies = [ "log", "pallet-ethereum", "pallet-evm", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "rand 0.7.3", "rlp 0.5.0", "rustc-hex", @@ -1670,7 +1710,7 @@ dependencies = [ [[package]] name = "fc-rpc-core" version = "1.1.0-dev" -source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#bd8cd6db44be646a059698371497de64128940af" +source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#7facf3dd69644e19d13e5622353d84d97080d1c4" dependencies = [ "ethereum-types 0.11.0", "jsonrpc-core 15.1.0", @@ -1708,11 +1748,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6447e2f8178843749e8c8003206def83ec124a7859475395777a28b5338647c" dependencies = [ "either", - "futures 0.3.12", + "futures 0.3.15", "futures-timer 3.0.2", "log", "num-traits", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", ] @@ -1786,14 +1826,14 @@ name = "fork-tree" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", ] [[package]] name = "form_urlencoded" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ece68d15c92e84fa4f19d3780f1294e5ca82a78a6d515f1efaabcc144688be00" +checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" dependencies = [ "matches", "percent-encoding 2.1.0", @@ -1802,10 +1842,10 @@ dependencies = [ [[package]] name = "fp-consensus" version = "1.0.0" -source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#bd8cd6db44be646a059698371497de64128940af" +source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#7facf3dd69644e19d13e5622353d84d97080d1c4" dependencies = [ "ethereum", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "rlp 0.5.0", "sha3 0.8.2", "sp-core", @@ -1815,12 +1855,12 @@ dependencies = [ [[package]] name = "fp-evm" -version = "1.0.0" -source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#bd8cd6db44be646a059698371497de64128940af" +version = "1.0.1-dev" +source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#7facf3dd69644e19d13e5622353d84d97080d1c4" dependencies = [ "evm", "impl-trait-for-tuples 0.1.3", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "serde", "sp-core", "sp-std", @@ -1828,13 +1868,13 @@ dependencies = [ [[package]] name = "fp-rpc" -version = "1.0.0" -source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#bd8cd6db44be646a059698371497de64128940af" +version = "1.0.1-dev" +source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#7facf3dd69644e19d13e5622353d84d97080d1c4" dependencies = [ "ethereum", "ethereum-types 0.11.0", "fp-evm", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "sp-api", "sp-core", "sp-io", @@ -1844,13 +1884,13 @@ dependencies = [ [[package]] name = "fp-storage" -version = "1.0.0" -source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#bd8cd6db44be646a059698371497de64128940af" +version = "1.0.1-dev" +source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#7facf3dd69644e19d13e5622353d84d97080d1c4" dependencies = [ "ethereum", "ethereum-types 0.11.0", "fp-evm", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "sp-api", "sp-core", "sp-runtime", @@ -1866,8 +1906,8 @@ dependencies = [ "frame-system", "linregress", "log", - "parity-scale-codec 2.0.1", - "paste 1.0.4", + "parity-scale-codec 2.1.1", + "paste", "sp-api", "sp-io", "sp-runtime", @@ -1885,7 +1925,7 @@ dependencies = [ "chrono", "frame-benchmarking", "handlebars", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "sc-cli", "sc-client-db", "sc-executor", @@ -1906,7 +1946,7 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "frame-support", "frame-system", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "serde", "sp-core", "sp-io", @@ -1920,7 +1960,7 @@ name = "frame-metadata" version = "13.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "serde", "sp-core", "sp-std", @@ -1937,8 +1977,8 @@ dependencies = [ "impl-trait-for-tuples 0.2.1", "log", "once_cell", - "parity-scale-codec 2.0.1", - "paste 1.0.4", + "parity-scale-codec 2.1.1", + "paste", "serde", "smallvec 1.6.1", "sp-arithmetic", @@ -1994,7 +2034,7 @@ dependencies = [ "frame-support", "impl-trait-for-tuples 0.2.1", "log", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "serde", "sp-core", "sp-io", @@ -2011,7 +2051,7 @@ dependencies = [ "frame-benchmarking", "frame-support", "frame-system", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "sp-core", "sp-runtime", "sp-std", @@ -2022,19 +2062,19 @@ name = "frame-system-rpc-runtime-api" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "sp-api", ] [[package]] name = "fs-swap" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5839fda247e24ca4919c87c71dd5ca658f1f39e4f06829f80e3f15c3bafcfc2c" +checksum = "03d47dad3685eceed8488986cad3d5027165ea5edb164331770e2059555f10a5" dependencies = [ "lazy_static", "libc", - "libloading", + "libloading 0.5.2", "winapi 0.3.9", ] @@ -2078,15 +2118,15 @@ checksum = "fed34cd105917e91daa4da6b3728c47b068749d6a62c59811f06ed2ac71d9da7" [[package]] name = "futures" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7e4c2612746b0df8fed4ce0c69156021b704c9aefa360311c04e6e9e002eed" +checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678" [[package]] name = "futures" -version = "0.3.12" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da9052a1a50244d8d5aa9bf55cbc2fb6f357c86cc52e46c62ed390a7180cf150" +checksum = "0e7e43a803dae2fa37c1f6a8fe121e1f7bf9548b4dfc0522a42f34145dadfc27" dependencies = [ "futures-channel", "futures-core", @@ -2099,9 +2139,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.12" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2d31b7ec7efab6eefc7c57233bb10b847986139d88cc2f5a02a1ae6871a1846" +checksum = "e682a68b29a882df0545c143dc3646daefe80ba479bcdede94d5a703de2871e2" dependencies = [ "futures-core", "futures-sink", @@ -2109,9 +2149,9 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.12" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79e5145dde8da7d1b3892dad07a9c98fc04bc39892b1ecc9692cf53e2b780a65" +checksum = "0402f765d8a89a26043b889b26ce3c4679d268fa6bb22cd7c6aad98340e179d1" [[package]] name = "futures-cpupool" @@ -2119,7 +2159,7 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4" dependencies = [ - "futures 0.1.30", + "futures 0.1.31", "num_cpus", ] @@ -2129,21 +2169,21 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdcef58a173af8148b182684c9f2d5250875adbcaff7b5794073894f9d8634a9" dependencies = [ - "futures 0.1.30", - "futures 0.3.12", + "futures 0.1.31", + "futures 0.3.15", "lazy_static", "log", "parking_lot 0.9.0", - "pin-project 0.4.27", + "pin-project 0.4.28", "serde", "serde_json", ] [[package]] name = "futures-executor" -version = "0.3.12" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9e59fdc009a4b3096bf94f740a0f2424c082521f20a9b08c5c07c48d90fd9b9" +checksum = "badaa6a909fac9e7236d0620a2f57f7664640c56575b71a7552fbd68deafab79" dependencies = [ "futures-core", "futures-task", @@ -2153,9 +2193,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.12" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28be053525281ad8259d47e4de5de657b25e7bac113458555bb4b70bc6870500" +checksum = "acc499defb3b348f8d8f3f66415835a9131856ff7714bf10dadfc4ec4bdb29a1" [[package]] name = "futures-lite" @@ -2168,16 +2208,17 @@ dependencies = [ "futures-io", "memchr", "parking", - "pin-project-lite 0.2.4", + "pin-project-lite 0.2.6", "waker-fn", ] [[package]] name = "futures-macro" -version = "0.3.12" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c287d25add322d9f9abdcdc5927ca398917996600182178774032e9f8258fedd" +checksum = "a4c40298486cdf52cc00cd6d6987892ba502c7656a16a4192a9992b1ccedd121" dependencies = [ + "autocfg", "proc-macro-hack", "proc-macro2", "quote", @@ -2191,24 +2232,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a1387e07917c711fb4ee4f48ea0adb04a3c9739e53ef85bf43ae1edc2937a8b" dependencies = [ "futures-io", - "rustls 0.19.0", + "rustls 0.19.1", "webpki", ] [[package]] name = "futures-sink" -version = "0.3.12" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caf5c69029bda2e743fddd0582d1083951d65cc9539aebf8812f36c3491342d6" +checksum = "a57bead0ceff0d6dde8f465ecd96c9338121bb7717d3e7b108059531870c4282" [[package]] name = "futures-task" -version = "0.3.12" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13de07eb8ea81ae445aca7b69f5f7bf15d7bf4912d8ca37d6645c77ae8a58d86" -dependencies = [ - "once_cell", -] +checksum = "8a16bef9fc1a4dddb5bee51c989e3fbba26569cbb0e31f5b303c184e3dd33dae" [[package]] name = "futures-timer" @@ -2224,11 +2262,12 @@ checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" [[package]] name = "futures-util" -version = "0.3.12" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "632a8cd0f2a4b3fdea1657f08bde063848c3bd00f9bbf6e256b8be78802e624b" +checksum = "feb5c238d27e2bf94ffdfd27b2c29e3df4a68c4193bb6427384259e2bf191967" dependencies = [ - "futures 0.1.30", + "autocfg", + "futures 0.1.31", "futures-channel", "futures-core", "futures-io", @@ -2236,7 +2275,7 @@ dependencies = [ "futures-sink", "futures-task", "memchr", - "pin-project-lite 0.2.4", + "pin-project-lite 0.2.6", "pin-utils", "proc-macro-hack", "proc-macro-nested", @@ -2249,33 +2288,20 @@ version = "0.3.55" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" -[[package]] -name = "generator" -version = "0.6.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "061d3be1afec479d56fa3bd182bf966c7999ec175fcfdb87ac14d417241366c6" -dependencies = [ - "cc", - "libc", - "log", - "rustversion", - "winapi 0.3.9", -] - [[package]] name = "generic-array" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec" +checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" dependencies = [ "typenum", ] [[package]] name = "generic-array" -version = "0.13.2" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ed1e761351b56f54eb9dcd0cfaca9fd0daecf93918e1cfc01c8a3d26ee7adcd" +checksum = "f797e67af32588215eaaab8327027ee8e71b9dd0b2b26996aedf20c030fce309" dependencies = [ "typenum", ] @@ -2333,6 +2359,12 @@ dependencies = [ "stable_deref_trait", ] +[[package]] +name = "gimli" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e4075386626662786ddb0ec9081e7c7eeb1ba31951f447ca780ef9f5d568189" + [[package]] name = "glob" version = "0.3.0" @@ -2374,7 +2406,7 @@ dependencies = [ "byteorder", "bytes 0.4.12", "fnv", - "futures 0.1.30", + "futures 0.1.31", "http 0.1.21", "indexmap", "log", @@ -2394,7 +2426,7 @@ dependencies = [ "futures-core", "futures-sink", "futures-util", - "http 0.2.3", + "http 0.2.4", "indexmap", "slab", "tokio 0.2.25", @@ -2405,14 +2437,14 @@ dependencies = [ [[package]] name = "handlebars" -version = "3.5.3" +version = "3.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb0867bbc5a3da37a753e78021d5fcf8a4db00e18dd2dd90fd36e24190e162d" +checksum = "4498fc115fa7d34de968184e473529abb40eeb6be8bc5f7faba3d08c316cb3e3" dependencies = [ "log", "pest", "pest_derive", - "quick-error 2.0.0", + "quick-error 2.0.1", "serde", "serde_json", ] @@ -2461,9 +2493,9 @@ dependencies = [ [[package]] name = "hex" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "644f9158b2f133fd50f5fb3242878846d9eb792e445c893805ff0e3824006e35" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hex-literal" @@ -2504,7 +2536,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6e570451493f10f6581b48cdd530413b63ea9e780f544bfd3bdcaa0d89d1a7b" dependencies = [ "digest 0.8.1", - "generic-array 0.12.3", + "generic-array 0.12.4", "hmac 0.7.1", ] @@ -2521,9 +2553,9 @@ dependencies = [ [[package]] name = "http" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7245cd7449cc792608c3c8a9eaf69bd4eabbabf802713748fd739c98b82f0747" +checksum = "527e8c9ac747e28542699a951517aa9a6945af506cd1f2e1b53a576c17b6cc11" dependencies = [ "bytes 1.0.1", "fnv", @@ -2537,7 +2569,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6741c859c1b2463a423a1dbce98d418e6c3c3fc720fb0d45528657320920292d" dependencies = [ "bytes 0.4.12", - "futures 0.1.30", + "futures 0.1.31", "http 0.1.21", "tokio-buf", ] @@ -2549,14 +2581,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13d5ff830006f7646652e057693569bfe0d51760c0085a071769d142a205111b" dependencies = [ "bytes 0.5.6", - "http 0.2.3", + "http 0.2.4", ] [[package]] name = "httparse" -version = "1.3.5" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "615caabe2c3160b313d52ccc905335f4ed5f10881dd63dc5699d47e90be85691" +checksum = "f3a87b616e37e93c22fb19bcd386f02f3af5ea98a25670ad0fce773de23c5e68" [[package]] name = "httpdate" @@ -2575,12 +2607,12 @@ dependencies = [ [[package]] name = "hyper" -version = "0.12.35" +version = "0.12.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dbe6ed1438e1f8ad955a4701e9a944938e9519f6888d12d8558b645e247d5f6" +checksum = "5c843caf6296fc1f93444735205af9ed4e109a539005abb2564ae1d6fad34c52" dependencies = [ "bytes 0.4.12", - "futures 0.1.30", + "futures 0.1.31", "futures-cpupool", "h2 0.1.26", "http 0.1.21", @@ -2605,22 +2637,22 @@ dependencies = [ [[package]] name = "hyper" -version = "0.13.9" +version = "0.13.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ad767baac13b44d4529fcf58ba2cd0995e36e7b435bc5b039de6f47e880dbf" +checksum = "8a6f157065790a3ed2f88679250419b5cdd96e714a0d65f7797fd337186e96bb" dependencies = [ "bytes 0.5.6", "futures-channel", "futures-core", "futures-util", "h2 0.2.7", - "http 0.2.3", + "http 0.2.4", "http-body 0.3.1", "httparse", "httpdate", "itoa", - "pin-project 1.0.5", - "socket2", + "pin-project 1.0.7", + "socket2 0.3.19", "tokio 0.2.25", "tower-service", "tracing", @@ -2636,7 +2668,7 @@ dependencies = [ "bytes 0.5.6", "ct-logs", "futures-util", - "hyper 0.13.9", + "hyper 0.13.10", "log", "rustls 0.18.1", "rustls-native-certs", @@ -2658,9 +2690,9 @@ dependencies = [ [[package]] name = "idna" -version = "0.2.0" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9" +checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" dependencies = [ "matches", "unicode-bidi", @@ -2695,7 +2727,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97b8538953a3f0d0d3868f0a706eb4273535e10d72acb5c82c1c23ae48835c85" dependencies = [ "async-io", - "futures 0.3.12", + "futures 0.3.15", "futures-lite", "if-addrs", "ipnet", @@ -2719,7 +2751,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df170efa359aebdd5cb7fe78edcc67107748e4737bdca8a8fb40d15ea7a877ed" dependencies = [ - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", ] [[package]] @@ -2773,9 +2805,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.6.1" +version = "1.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb1fa934250de4de8aef298d81c729a7d33d8c239daa3a7575e6b92bfc7313b" +checksum = "824845a0bf897a9042383849b02c1bc219c2383772efcd5c6f9766fa4b81aef3" dependencies = [ "autocfg", "hashbrown", @@ -2806,7 +2838,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64fa110ec7b8f493f416eed552740d10e7030ad5f63b2308f82c9608ec2df275" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "futures-timer 2.0.2", ] @@ -2848,18 +2880,18 @@ checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" [[package]] name = "jobserver" -version = "0.1.21" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c71313ebb9439f74b00d9d2dcec36440beaf57a6aa0623068441dd7cd81a7f2" +checksum = "972f5ae5d1cb9c6ae417789196c803205313edde988685da5e3aae0827b9e7fd" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.47" +version = "0.3.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cfb73131c35423a367daf8cbd24100af0d077668c8c2943f0e7dd775fef0f65" +checksum = "83bdfbace3a0e81a4253f73b49e960b053e396a11012cbd49b9b74d6a2b67062" dependencies = [ "wasm-bindgen", ] @@ -2871,7 +2903,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2773fa94a2a1fd51efb89a8f45b8861023dbb415d18d3c9235ae9388d780f9ec" dependencies = [ "failure", - "futures 0.1.30", + "futures 0.1.31", "jsonrpc-core 14.2.0", "jsonrpc-pubsub 14.2.0", "log", @@ -2887,7 +2919,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "489b9c612e60c766f751ab40fcb43cbb55a1e10bb44a9b4307ed510ca598cbd7" dependencies = [ "failure", - "futures 0.1.30", + "futures 0.1.31", "jsonrpc-core 15.1.0", "jsonrpc-pubsub 15.1.0", "log", @@ -2902,7 +2934,7 @@ version = "14.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0747307121ffb9703afd93afbd0fb4f854c38fb873f2c8b90e0e902f27c7b62" dependencies = [ - "futures 0.1.30", + "futures 0.1.31", "log", "serde", "serde_derive", @@ -2915,7 +2947,7 @@ version = "15.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0745a6379e3edc893c84ec203589790774e4247420033e71a76d3ab4687991fa" dependencies = [ - "futures 0.1.30", + "futures 0.1.31", "log", "serde", "serde_derive", @@ -2970,7 +3002,7 @@ version = "15.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fb5c4513b7b542f42da107942b7b759f27120b5cc894729f88254b28dff44b7" dependencies = [ - "hyper 0.12.35", + "hyper 0.12.36", "jsonrpc-core 15.1.0", "jsonrpc-server-utils", "log", @@ -3097,9 +3129,9 @@ dependencies = [ [[package]] name = "kvdb-rocksdb" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34446c373ccc494c2124439281c198c7636ccdc2752c06722bbffd56d459c1e4" +checksum = "94b27cdb788bf1c8ade782289f9dbee626940be2961fd75c7cde993fa2f1ded1" dependencies = [ "fs-swap", "kvdb", @@ -3133,9 +3165,9 @@ checksum = "3576a87f2ba00f6f106fdfcd16db1d698d648a26ad8e0573cad8537c3c362d2a" [[package]] name = "libc" -version = "0.2.85" +version = "0.2.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ccac4b00700875e6a07c6cde370d44d32fa01c5a65cdd2fca6858c479d28bb3" +checksum = "18794a8ad5b29321f790b55d93dfba91e125cb1a9edbd4f8e3150acc771c1a5e" [[package]] name = "libloading" @@ -3147,6 +3179,16 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "libloading" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f84d96438c15fcd6c3f244c8fce01d1e2b9c6b5623e9c711dc9286d8fc92d6a" +dependencies = [ + "cfg-if 1.0.0", + "winapi 0.3.9", +] + [[package]] name = "libm" version = "0.2.1" @@ -3161,7 +3203,7 @@ checksum = "adc225a49973cf9ab10d0cdd6a4b8f0cda299df9b760824bbb623f15f8f0c95a" dependencies = [ "atomic", "bytes 1.0.1", - "futures 0.3.12", + "futures 0.3.15", "lazy_static", "libp2p-core", "libp2p-deflate", @@ -3186,7 +3228,7 @@ dependencies = [ "libp2p-yamux", "parity-multiaddr", "parking_lot 0.11.1", - "pin-project 1.0.5", + "pin-project 1.0.7", "smallvec 1.6.1", "wasm-timer", ] @@ -3202,7 +3244,7 @@ dependencies = [ "ed25519-dalek", "either", "fnv", - "futures 0.3.12", + "futures 0.3.15", "futures-timer 3.0.2", "lazy_static", "libsecp256k1", @@ -3211,13 +3253,13 @@ dependencies = [ "multistream-select", "parity-multiaddr", "parking_lot 0.11.1", - "pin-project 1.0.5", + "pin-project 1.0.7", "prost", "prost-build", "rand 0.7.3", "ring", "rw-stream-sink", - "sha2 0.9.3", + "sha2 0.9.5", "smallvec 1.6.1", "thiserror", "unsigned-varint 0.7.0", @@ -3232,7 +3274,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d42eed63305f0420736fa487f9acef720c4528bd7852a6a760f5ccde4813345" dependencies = [ "flate2", - "futures 0.3.12", + "futures 0.3.15", "libp2p-core", ] @@ -3242,7 +3284,7 @@ version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5153b6db68fd4baa3b304e377db744dd8fea8ff4e4504509ee636abcde88d3e3" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "libp2p-core", "log", ] @@ -3255,7 +3297,7 @@ checksum = "b3c63dfa06581b24b1d12bf9815b43689a784424be217d6545c800c7c75a207f" dependencies = [ "cuckoofilter", "fnv", - "futures 0.3.12", + "futures 0.3.15", "libp2p-core", "libp2p-swarm", "log", @@ -3276,7 +3318,7 @@ dependencies = [ "byteorder", "bytes 1.0.1", "fnv", - "futures 0.3.12", + "futures 0.3.15", "hex_fmt", "libp2p-core", "libp2p-swarm", @@ -3285,7 +3327,7 @@ dependencies = [ "prost-build", "rand 0.7.3", "regex", - "sha2 0.9.3", + "sha2 0.9.5", "smallvec 1.6.1", "unsigned-varint 0.7.0", "wasm-timer", @@ -3297,7 +3339,7 @@ version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b40fb36a059b7a8cce1514bd8b546fa612e006c9937caa7f5950cb20021fe91e" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "libp2p-core", "libp2p-swarm", "log", @@ -3318,14 +3360,14 @@ dependencies = [ "bytes 1.0.1", "either", "fnv", - "futures 0.3.12", + "futures 0.3.15", "libp2p-core", "libp2p-swarm", "log", "prost", "prost-build", "rand 0.7.3", - "sha2 0.9.3", + "sha2 0.9.5", "smallvec 1.6.1", "uint 0.9.0", "unsigned-varint 0.7.0", @@ -3342,7 +3384,7 @@ dependencies = [ "async-io", "data-encoding", "dns-parser", - "futures 0.3.12", + "futures 0.3.15", "if-watch", "lazy_static", "libp2p-core", @@ -3350,7 +3392,7 @@ dependencies = [ "log", "rand 0.7.3", "smallvec 1.6.1", - "socket2", + "socket2 0.3.19", "void", ] @@ -3362,7 +3404,7 @@ checksum = "350ce8b3923594aedabd5d6e3f875d058435052a29c3f32df378bc70d10be464" dependencies = [ "asynchronous-codec 0.6.0", "bytes 1.0.1", - "futures 0.3.12", + "futures 0.3.15", "libp2p-core", "log", "nohash-hasher", @@ -3379,15 +3421,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4aca322b52a0c5136142a7c3971446fb1e9964923a526c9cc6ef3b7c94e57778" dependencies = [ "bytes 1.0.1", - "curve25519-dalek 3.0.2", - "futures 0.3.12", + "curve25519-dalek 3.1.0", + "futures 0.3.15", "lazy_static", "libp2p-core", "log", "prost", "prost-build", "rand 0.7.3", - "sha2 0.9.3", + "sha2 0.9.5", "snow", "static_assertions", "x25519-dalek", @@ -3400,7 +3442,7 @@ version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f3813276d0708c8db0f500d8beda1bda9ad955723b9cb272c41f4727256f73c" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "libp2p-core", "libp2p-swarm", "log", @@ -3417,7 +3459,7 @@ checksum = "9d58defcadb646ae4b033e130b48d87410bf76394dc3335496cae99dac803e61" dependencies = [ "asynchronous-codec 0.6.0", "bytes 1.0.1", - "futures 0.3.12", + "futures 0.3.15", "libp2p-core", "log", "prost", @@ -3432,9 +3474,9 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ce3374f3b28162db9d3442c9347c4f14cb01e8290052615c7d341d40eae0599" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "log", - "pin-project 1.0.5", + "pin-project 1.0.7", "rand 0.7.3", "salsa20", "sha3 0.9.1", @@ -3448,7 +3490,7 @@ checksum = "10e5552827c33d8326502682da73a0ba4bfa40c1b55b216af3c303f32169dd89" dependencies = [ "async-trait", "bytes 1.0.1", - "futures 0.3.12", + "futures 0.3.15", "libp2p-core", "libp2p-swarm", "log", @@ -3467,7 +3509,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7955b973e1fd2bd61ffd43ce261c1223f61f4aacd5bae362a924993f9a25fd98" dependencies = [ "either", - "futures 0.3.12", + "futures 0.3.15", "libp2p-core", "log", "rand 0.7.3", @@ -3493,14 +3535,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "88a5aef80e519a6cb8e2663605142f97baaaea1a252eecbf8756184765f7471b" dependencies = [ "async-io", - "futures 0.3.12", + "futures 0.3.15", "futures-timer 3.0.2", "if-watch", "ipnet", "libc", "libp2p-core", "log", - "socket2", + "socket2 0.3.19", ] [[package]] @@ -3510,7 +3552,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80ac51ce419f60be966e02103c17f67ff5dc4422ba83ba54d251d6c62a4ed487" dependencies = [ "async-std", - "futures 0.3.12", + "futures 0.3.15", "libp2p-core", "log", ] @@ -3521,7 +3563,7 @@ version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6149c46cb76935c80bc8be6ec6e3ebd5f5e1679765a255fb34331d54610f15dd" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "js-sys", "libp2p-core", "parity-send-wrapper", @@ -3536,14 +3578,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3b1c6a3431045da8b925ed83384e4c5163e14b990572307fca9c507435d4d22" dependencies = [ "either", - "futures 0.3.12", + "futures 0.3.15", "futures-rustls", "libp2p-core", "log", "quicksink", "rw-stream-sink", "soketto", - "url 2.2.0", + "url 2.2.2", "webpki-roots", ] @@ -3553,7 +3595,7 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4819358c542a86ff95f6ae691efb4b94ddaf477079b01a686f5705b79bfc232a" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "libp2p-core", "parking_lot 0.11.1", "thiserror", @@ -3562,9 +3604,9 @@ dependencies = [ [[package]] name = "librocksdb-sys" -version = "6.11.4" +version = "6.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb5b56f651c204634b936be2f92dbb42c36867e00ff7fe2405591f3b9fa66f09" +checksum = "5da125e1c0f22c7cae785982115523a0738728498547f415c9054cb17c7e89f9" dependencies = [ "bindgen", "cc", @@ -3590,9 +3632,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "602113192b08db8f38796c4e85c39e960c145965140e918018bcde1952429655" +checksum = "de5435b8549c16d423ed0c03dbaafe57cf6c3344744f1242520d59c9d8ecec66" dependencies = [ "cc", "pkg-config", @@ -3616,11 +3658,11 @@ dependencies = [ [[package]] name = "linregress" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d0ad4b5cc8385a881c561fac3501353d63d2a2b7a357b5064d71815c9a92724" +checksum = "b36162d2e1dcbdeb61223cb788f029f8ac9f2ab19969b89c5a8f4517aad4d940" dependencies = [ - "nalgebra", + "nalgebra 0.25.4", "statrs", ] @@ -3635,9 +3677,9 @@ dependencies = [ [[package]] name = "lock_api" -version = "0.4.2" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd96ffd135b2fd7b973ac026d28085defbe8983df057ced3eb4f2130b0831312" +checksum = "0382880606dff6d15c9476c416d18690b72742aa7b605bb6dd6ec9030fbf07eb" dependencies = [ "scopeguard", ] @@ -3652,17 +3694,6 @@ dependencies = [ "value-bag", ] -[[package]] -name = "loom" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d44c73b4636e497b4917eb21c33539efa3816741a2d3ff26c6316f1b529481a4" -dependencies = [ - "cfg-if 1.0.0", - "generator", - "scoped-tls", -] - [[package]] name = "lru" version = "0.6.5" @@ -3711,6 +3742,15 @@ dependencies = [ "rawpointer", ] +[[package]] +name = "matrixmultiply" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a8a15b776d9dfaecd44b03c5828c2199cddff5247215858aac14624f8d6b741" +dependencies = [ + "rawpointer", +] + [[package]] name = "maybe-uninit" version = "2.0.0" @@ -3719,15 +3759,15 @@ checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" [[package]] name = "memchr" -version = "2.3.4" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" +checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc" [[package]] name = "memmap2" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04e3e85b970d650e2ae6d70592474087051c11c54da7f7b4949725c5735fbcc6" +checksum = "397d1a6d6d0563c0f5462bbdae662cf6c784edf5e828e40c7257f85d82bf56dd" dependencies = [ "libc", ] @@ -3743,9 +3783,9 @@ dependencies = [ [[package]] name = "memoffset" -version = "0.6.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "157b4208e3059a8f9e78d559edc658e13df41410cb3ae03979c83130067fdd87" +checksum = "f83fb6581e8ed1f85fd45c116db8405483899489e38406156c25eb743554361d" dependencies = [ "autocfg", ] @@ -3781,18 +3821,18 @@ dependencies = [ [[package]] name = "minicbor" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3265a9f5210bb726f81ef9c456ae0aff5321cd95748c0e71889b0e19d8f0332b" +checksum = "1c2b2c73f9640fccab53947e2b3474d5071fcbc8f82cac51ddf6c8041a30a9ea" dependencies = [ "minicbor-derive", ] [[package]] name = "minicbor-derive" -version = "0.6.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "130b9455e28a3f308f6579671816a6f2621e2e0cbf55dc2f886345bef699481e" +checksum = "7f2b9e8883d58e34b18facd16c4564a77ea50fce028ad3d0ee6753440e37acc8" dependencies = [ "proc-macro2", "quote", @@ -3801,9 +3841,9 @@ dependencies = [ [[package]] name = "miniz_oxide" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f2d26ec3309788e423cfbf68ad1800f061638098d76a83681af979dc4eda19d" +checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" dependencies = [ "adler", "autocfg", @@ -3848,7 +3888,7 @@ checksum = "0840c1c50fd55e521b247f949c241c9997709f23bd7f023b9762cd561e935656" dependencies = [ "log", "mio", - "miow 0.3.6", + "miow 0.3.7", "winapi 0.3.9", ] @@ -3877,11 +3917,10 @@ dependencies = [ [[package]] name = "miow" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a33c1b55807fbed163481b5ba66db4b2fa6cde694a5027be10fb724206c5897" +checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" dependencies = [ - "socket2", "winapi 0.3.9", ] @@ -3914,7 +3953,7 @@ dependencies = [ "digest 0.9.0", "generic-array 0.14.4", "multihash-derive", - "sha2 0.9.3", + "sha2 0.9.5", "sha3 0.9.1", "unsigned-varint 0.5.1", ] @@ -3935,59 +3974,66 @@ dependencies = [ [[package]] name = "multimap" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1255076139a83bb467426e7f8d0134968a8118844faa755985e077cf31850333" +checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" [[package]] name = "multistream-select" -version = "0.10.0" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10ddc0eb0117736f19d556355464fc87efc8ad98b29e3fd84f02531eb6e90840" +checksum = "7d91ec0a2440aaff5f78ec35631a7027d50386c6163aa975f7caa0d5da4b6ff8" dependencies = [ "bytes 1.0.1", - "futures 0.3.12", + "futures 0.3.15", "log", - "pin-project 1.0.5", + "pin-project 1.0.7", "smallvec 1.6.1", - "unsigned-varint 0.6.0", + "unsigned-varint 0.7.0", ] [[package]] name = "nalgebra" -version = "0.21.1" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6b6147c3d50b4f3cdabfe2ecc94a0191fd3d6ad58aefd9664cf396285883486" +checksum = "0abb021006c01b126a936a8dd1351e0720d83995f4fc942d0d426c654f990745" dependencies = [ - "approx", - "generic-array 0.13.2", - "matrixmultiply", - "num-complex", - "num-rational", + "alga", + "approx 0.3.2", + "generic-array 0.13.3", + "matrixmultiply 0.2.4", + "num-complex 0.2.4", + "num-rational 0.2.4", "num-traits", "rand 0.7.3", "rand_distr", - "simba", "typenum", ] [[package]] -name = "names" -version = "0.11.0" +name = "nalgebra" +version = "0.25.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef320dab323286b50fb5cdda23f61c796a72a89998ab565ca32525c5c556f2da" +checksum = "c70c9e8c5f213c8e93fc8c112ade4edd3ee62062fb897776c23dcebac7932900" dependencies = [ - "rand 0.3.23", + "approx 0.4.0", + "generic-array 0.14.4", + "matrixmultiply 0.3.1", + "num-complex 0.3.1", + "num-rational 0.3.2", + "num-traits", + "serde", + "simba", + "typenum", ] [[package]] -name = "nb-connect" -version = "1.0.2" +name = "names" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8123a81538e457d44b933a02faf885d3fe8408806b23fa700e8f01c6c3a98998" +checksum = "ef320dab323286b50fb5cdda23f61c796a72a89998ab565ca32525c5c556f2da" dependencies = [ - "libc", - "winapi 0.3.9", + "rand 0.3.23", ] [[package]] @@ -4014,7 +4060,7 @@ dependencies = [ "fp-rpc", "frame-benchmarking", "frame-benchmarking-cli", - "futures 0.3.12", + "futures 0.3.15", "jsonrpc-core 15.1.0", "jsonrpc-pubsub 15.1.0", "log", @@ -4085,7 +4131,7 @@ dependencies = [ "pallet-transaction-payment-rpc-runtime-api", "pallet-treasury", "pallet-vesting", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "serde", "smallvec 1.6.1", "sp-api", @@ -4146,6 +4192,15 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-complex" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "747d632c0c558b87dbabbe6a82f3b4ae03720d0646ac5b7b4dae89394be5f2c5" +dependencies = [ + "num-traits", +] + [[package]] name = "num-integer" version = "0.1.44" @@ -4168,6 +4223,17 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-rational" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.14" @@ -4200,15 +4266,15 @@ dependencies = [ [[package]] name = "object" -version = "0.23.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9a7ab5d64814df0fe4a4b5ead45ed6c5f181ee3ff04ba344313a6c80446c5d4" +checksum = "1a5b3dd1c072ee7963717671d1ca129f1048fda25edea6b752bfc71ac8854170" [[package]] name = "once_cell" -version = "1.5.2" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13bd41f508810a131401606d54ac32a467c97172d74ba7662562ebba5ad07fa0" +checksum = "af8b08b04175473088b46763e51ee54da5f9a164bc162f615b91bc179dbf15a3" dependencies = [ "parking_lot 0.11.1", ] @@ -4227,9 +4293,9 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openssl-probe" -version = "0.1.2" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" +checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" [[package]] name = "owning_ref" @@ -4249,7 +4315,7 @@ dependencies = [ "frame-system", "pallet-session", "pallet-timestamp", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "serde", "sp-application-crypto", "sp-consensus-aura", @@ -4265,7 +4331,7 @@ dependencies = [ "frame-support", "frame-system", "impl-trait-for-tuples 0.2.1", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "sp-authorship", "sp-inherents", "sp-runtime", @@ -4281,7 +4347,7 @@ dependencies = [ "frame-support", "frame-system", "log", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "serde", "sp-runtime", "sp-std", @@ -4297,7 +4363,7 @@ dependencies = [ "log", "pallet-contracts-primitives", "pallet-contracts-proc-macro", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "parity-wasm 0.41.0", "pwasm-utils 0.16.0", "serde", @@ -4315,7 +4381,7 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "bitflags", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "sp-runtime", "sp-std", ] @@ -4340,7 +4406,7 @@ dependencies = [ "jsonrpc-derive 15.1.0", "pallet-contracts-primitives", "pallet-contracts-rpc-runtime-api", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "serde", "sp-api", "sp-blockchain", @@ -4355,7 +4421,7 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "pallet-contracts-primitives", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "sp-api", "sp-runtime", "sp-std", @@ -4364,7 +4430,7 @@ dependencies = [ [[package]] name = "pallet-ethereum" version = "1.0.1-dev" -source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#bd8cd6db44be646a059698371497de64128940af" +source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#7facf3dd69644e19d13e5622353d84d97080d1c4" dependencies = [ "ethereum", "ethereum-types 0.11.0", @@ -4379,7 +4445,7 @@ dependencies = [ "pallet-balances", "pallet-evm", "pallet-timestamp", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "rlp 0.5.0", "rustc-hex", "serde", @@ -4391,8 +4457,8 @@ dependencies = [ [[package]] name = "pallet-evm" -version = "3.0.0" -source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#bd8cd6db44be646a059698371497de64128940af" +version = "3.0.1-dev" +source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions#7facf3dd69644e19d13e5622353d84d97080d1c4" dependencies = [ "evm", "evm-gasometer", @@ -4404,7 +4470,7 @@ dependencies = [ "log", "pallet-balances", "pallet-timestamp", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "primitive-types 0.9.0", "rlp 0.5.0", "serde", @@ -4426,7 +4492,7 @@ dependencies = [ "log", "pallet-authorship", "pallet-session", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "serde", "sp-application-crypto", "sp-core", @@ -4447,7 +4513,7 @@ dependencies = [ "pallet-balances", "pallet-randomness-collective-flip", "pallet-timestamp", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "serde", "sp-core", "sp-io", @@ -4473,7 +4539,7 @@ dependencies = [ "pallet-randomness-collective-flip", "pallet-timestamp", "pallet-transaction-payment", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "rlp 0.5.0", "serde", "sp-api", @@ -4490,7 +4556,7 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "frame-support", "frame-system", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "safe-mix", "sp-runtime", "sp-std", @@ -4505,7 +4571,7 @@ dependencies = [ "frame-system", "impl-trait-for-tuples 0.2.1", "pallet-timestamp", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "serde", "sp-core", "sp-io", @@ -4523,7 +4589,7 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "frame-support", "frame-system", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "serde", "sp-io", "sp-runtime", @@ -4540,7 +4606,7 @@ dependencies = [ "frame-system", "impl-trait-for-tuples 0.2.1", "log", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "serde", "sp-inherents", "sp-io", @@ -4556,7 +4622,7 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "frame-support", "frame-system", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "serde", "smallvec 1.6.1", "sp-core", @@ -4574,7 +4640,7 @@ dependencies = [ "jsonrpc-core-client 15.1.0", "jsonrpc-derive 15.1.0", "pallet-transaction-payment-rpc-runtime-api", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "sp-api", "sp-blockchain", "sp-core", @@ -4588,7 +4654,7 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "pallet-transaction-payment", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "sp-api", "sp-runtime", ] @@ -4602,7 +4668,7 @@ dependencies = [ "frame-system", "impl-trait-for-tuples 0.2.1", "pallet-balances", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "serde", "sp-runtime", "sp-std", @@ -4616,7 +4682,7 @@ dependencies = [ "enumflags2", "frame-support", "frame-system", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "serde", "sp-runtime", "sp-std", @@ -4641,9 +4707,9 @@ dependencies = [ [[package]] name = "parity-multiaddr" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2c6805f98667a3828afb2ec2c396a8d610497e8d546f5447188aae47c5a79ec" +checksum = "58341485071825827b7f03cf7efd1cb21e6a709bea778fb50227fd45d2f361b4" dependencies = [ "arrayref", "bs58", @@ -4654,7 +4720,7 @@ dependencies = [ "serde", "static_assertions", "unsigned-varint 0.7.0", - "url 2.2.0", + "url 2.2.2", ] [[package]] @@ -4671,12 +4737,12 @@ dependencies = [ [[package]] name = "parity-scale-codec" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cd3dab59b5cf4bc81069ade0fc470341a1ef3ad5fa73e5a8943bed2ec12b2e8" +checksum = "e0f518afaa5a47d0d6386229b0a6e01e86427291d643aa4cabb4992219f504f8" dependencies = [ - "arrayvec 0.5.2", - "bitvec 0.20.2", + "arrayvec 0.7.0", + "bitvec 0.20.4", "byte-slice-cast 1.0.0", "parity-scale-codec-derive", "serde", @@ -4684,9 +4750,9 @@ dependencies = [ [[package]] name = "parity-scale-codec-derive" -version = "2.0.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa04976a81fde04924b40cc4036c4d12841e8bb04325a5cf2ada75731a150a7d" +checksum = "f44c5f94427bd0b5076e8f7e15ca3f60a4d8ac0077e4793884e6fdfd8915344e" dependencies = [ "proc-macro-crate 0.1.5", "proc-macro2", @@ -4707,11 +4773,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e57fea504fea33f9fbb5f49f378359030e7e026a6ab849bb9e8f0787376f1bf" dependencies = [ "bytes 0.4.12", - "futures 0.1.30", + "futures 0.1.31", "libc", "log", "mio-named-pipes", - "miow 0.3.6", + "miow 0.3.7", "rand 0.7.3", "tokio 0.1.22", "tokio-named-pipes", @@ -4776,7 +4842,7 @@ dependencies = [ "rand 0.7.3", "sha-1 0.8.2", "slab", - "url 2.2.0", + "url 2.2.2", ] [[package]] @@ -4813,8 +4879,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb" dependencies = [ "instant", - "lock_api 0.4.2", - "parking_lot_core 0.8.2", + "lock_api 0.4.4", + "parking_lot_core 0.8.3", ] [[package]] @@ -4848,42 +4914,23 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ccb628cad4f84851442432c60ad8e1f607e29752d0bf072cbd0baf28aa34272" +checksum = "fa7a782938e745763fe6907fc6ba86946d72f49fe7e21de074e08128a99fb018" dependencies = [ "cfg-if 1.0.0", "instant", "libc", - "redox_syscall 0.1.57", + "redox_syscall 0.2.8", "smallvec 1.6.1", "winapi 0.3.9", ] [[package]] name = "paste" -version = "0.1.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45ca20c77d80be666aef2b45486da86238fabe33e38306bd3118fe4af33fa880" -dependencies = [ - "paste-impl", - "proc-macro-hack", -] - -[[package]] -name = "paste" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5d65c4d95931acda4498f675e332fcbdc9a06705cd07086c510e9b6009cd1c1" - -[[package]] -name = "paste-impl" -version = "0.1.18" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95a7db200b97ef370c8e6de0088252f7e0dfff7d047a28528e47456c0fc98b6" -dependencies = [ - "proc-macro-hack", -] +checksum = "acbf547ad0c65e31259204bd90935776d1c693cec2f4ff7abb7a1bbbd40dfe58" [[package]] name = "pbkdf2" @@ -4983,27 +5030,27 @@ dependencies = [ [[package]] name = "pin-project" -version = "0.4.27" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ffbc8e94b38ea3d2d8ba92aea2983b503cd75d0888d75b86bb37970b5698e15" +checksum = "918192b5c59119d51e0cd221f4d49dde9112824ba717369e903c97d076083d0f" dependencies = [ - "pin-project-internal 0.4.27", + "pin-project-internal 0.4.28", ] [[package]] name = "pin-project" -version = "1.0.5" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96fa8ebb90271c4477f144354485b8068bd8f6b78b428b01ba892ca26caf0b63" +checksum = "c7509cc106041c40a4518d2af7a61530e1eed0e6285296a3d8c5472806ccc4a4" dependencies = [ - "pin-project-internal 1.0.5", + "pin-project-internal 1.0.7", ] [[package]] name = "pin-project-internal" -version = "0.4.27" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65ad2ae56b6abe3a1ee25f15ee605bacadb9a764edaba9c2bf4103800d4a1895" +checksum = "3be26700300be6d9d23264c73211d8190e755b6b5ca7a1b28230025511b52a5e" dependencies = [ "proc-macro2", "quote", @@ -5012,9 +5059,9 @@ dependencies = [ [[package]] name = "pin-project-internal" -version = "1.0.5" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "758669ae3558c6f74bd2a18b41f7ac0b5a195aea6639d6a9b5e5d1ad5ba24c0b" +checksum = "48c950132583b500556b1efd71d45b319029f2b71518d979fcc208e16b42426f" dependencies = [ "proc-macro2", "quote", @@ -5023,15 +5070,15 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c917123afa01924fc84bb20c4c03f004d9c38e5127e3c039bbf7f4b9c76a2f6b" +checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777" [[package]] name = "pin-project-lite" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439697af366c49a6d0a010c56a0d97685bc140ce0d377b13a2ea2aa42d64a827" +checksum = "dc0e1f259c92177c30a4c9d177246edd0a3568b25756a977d0632cf8fa37e905" [[package]] name = "pin-utils" @@ -5053,11 +5100,11 @@ checksum = "989d43012e2ca1c4a02507c67282691a0a3207f9dc67cec596b43fe925b3d325" [[package]] name = "polling" -version = "2.0.2" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2a7bc6b2a29e632e45451c941832803a18cce6781db04de8a04696cdca8bde4" +checksum = "4fc12d774e799ee9ebae13f4076ca003b40d18a11ac0f3641e6f899618580b7b" dependencies = [ - "cfg-if 0.1.10", + "cfg-if 1.0.0", "libc", "log", "wepoll-sys", @@ -5070,7 +5117,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b7456bc1ad2d4cf82b3a016be4c2ac48daf11bf990c1603ebd447fe6f30fca8" dependencies = [ - "cpuid-bool 0.2.0", + "cpuid-bool", "universal-hash", ] @@ -5080,7 +5127,7 @@ version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eebcc4aa140b9abd2bc40d9c3f7ccec842679cd79045ac3a7ac698c1a064b7cd" dependencies = [ - "cpuid-bool 0.2.0", + "cpuid-bool", "opaque-debug 0.3.0", "universal-hash", ] @@ -5174,9 +5221,9 @@ checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086" [[package]] name = "proc-macro2" -version = "1.0.24" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" +checksum = "a152013215dca273577e18d2bf00fa862b89b24169fb78c4c95aeb07992c9cec" dependencies = [ "unicode-xid", ] @@ -5220,7 +5267,7 @@ dependencies = [ "prost", "prost-types", "tempfile", - "which 4.0.2", + "which", ] [[package]] @@ -5285,9 +5332,9 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quick-error" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ac73b1112776fc109b2e61909bc46c7e1bf0d7f690ffb1676553acce16d5cda" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" [[package]] name = "quicksink" @@ -5297,14 +5344,14 @@ checksum = "77de3c815e5a160b1539c6592796801df2043ae35e123b46d73380cfa57af858" dependencies = [ "futures-core", "futures-sink", - "pin-project-lite 0.1.11", + "pin-project-lite 0.1.12", ] [[package]] name = "quote" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "991431c3519a3f36861882da93630ce66b52918dcf1b8e2fd66b397fc96f28df" +checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" dependencies = [ "proc-macro2", ] @@ -5366,7 +5413,7 @@ checksum = "0ef9e7e66b4468674bfcb0c81af8b7fa0bb154fa9f28eb840da5c447baeb8d7e" dependencies = [ "libc", "rand_chacha 0.3.0", - "rand_core 0.6.1", + "rand_core 0.6.2", "rand_hc 0.3.0", ] @@ -5387,7 +5434,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d" dependencies = [ "ppv-lite86", - "rand_core 0.6.1", + "rand_core 0.6.2", ] [[package]] @@ -5416,9 +5463,9 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c026d7df8b298d90ccbbc5190bd04d85e159eaf5576caeacf8741da93ccbd2e5" +checksum = "34cf66eb183df1c5876e2dcf6b13d57340741e8dc255b48e40a26de954d06ae7" dependencies = [ "getrandom 0.2.2", ] @@ -5447,7 +5494,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73" dependencies = [ - "rand_core 0.6.1", + "rand_core 0.6.2", ] [[package]] @@ -5496,7 +5543,7 @@ checksum = "9ab346ac5921dc62ffa9f89b7a773907511cdfa5490c572ae9be1be33e8afa4a" dependencies = [ "crossbeam-channel", "crossbeam-deque 0.8.0", - "crossbeam-utils 0.8.1", + "crossbeam-utils 0.8.4", "lazy_static", "num_cpus", ] @@ -5518,24 +5565,13 @@ checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" [[package]] name = "redox_syscall" -version = "0.2.4" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ec8ca9416c5ea37062b502703cd7fcb207736bc294f6e0cf367ac6fc234570" +checksum = "742739e41cd49414de871ea5e549afb7e2a3ac77b589bcbebe8c82fab37147fc" dependencies = [ "bitflags", ] -[[package]] -name = "redox_users" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d" -dependencies = [ - "getrandom 0.1.16", - "redox_syscall 0.1.57", - "rust-argon2", -] - [[package]] name = "redox_users" version = "0.4.0" @@ -5543,7 +5579,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64" dependencies = [ "getrandom 0.2.2", - "redox_syscall 0.2.4", + "redox_syscall 0.2.8", ] [[package]] @@ -5579,14 +5615,13 @@ dependencies = [ [[package]] name = "regex" -version = "1.4.3" +version = "1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9251239e129e16308e70d853559389de218ac275b515068abc96829d05b948a" +checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" dependencies = [ "aho-corasick", "memchr", "regex-syntax", - "thread_local", ] [[package]] @@ -5601,9 +5636,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.22" +version = "0.6.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5eb417147ba9860a96cfe72a0b93bf88fee1744b5636ec99ab20c1aa9376581" +checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" [[package]] name = "region" @@ -5628,9 +5663,9 @@ dependencies = [ [[package]] name = "retain_mut" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53552c6c49e1e13f1a203ef0080ab3bbef0beb570a528993e83df057a9d9bba1" +checksum = "e9c17925a9027d298a4603d286befe3f9dc0e8ed02523141914eb628798d6e5b" [[package]] name = "ring" @@ -5679,9 +5714,9 @@ dependencies = [ [[package]] name = "rocksdb" -version = "0.15.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d83c02c429044d58474eaf5ae31e062d0de894e21125b47437ec0edc1397e6" +checksum = "c749134fda8bfc90d0de643d59bfc841dcb3ac8a1062e12b6754bd60235c48b3" dependencies = [ "libc", "librocksdb-sys", @@ -5697,23 +5732,11 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "rust-argon2" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b18820d944b33caa75a71378964ac46f58517c92b6ae5f762636247c09e78fb" -dependencies = [ - "base64 0.13.0", - "blake2b_simd", - "constant_time_eq", - "crossbeam-utils 0.8.1", -] - [[package]] name = "rustc-demangle" -version = "0.1.18" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e3bad0ee36814ca07d7968269dd4b7ec89ec2da10c4bb613928d3077083c232" +checksum = "410f7acf3cb3a44527c5d9546bad4bf4e6c460915d5f9f2fc524498bfe8f70ce" [[package]] name = "rustc-hash" @@ -5751,9 +5774,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "064fd21ff87c6e87ed4506e68beb42459caa4a0e2eb144932e6776768556980b" +checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" dependencies = [ "base64 0.13.0", "log", @@ -5774,20 +5797,14 @@ dependencies = [ "security-framework", ] -[[package]] -name = "rustversion" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb5d2a036dc6d2d8fd16fde3498b04306e29bd193bf306a57427019b823d5acd" - [[package]] name = "rw-stream-sink" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4da5fcb054c46f5a5dff833b129285a93d3f0179531735e6c866e8cc307d2020" dependencies = [ - "futures 0.3.12", - "pin-project 0.4.27", + "futures 0.3.15", + "pin-project 0.4.28", "static_assertions", ] @@ -5829,10 +5846,10 @@ name = "sc-basic-authorship" version = "0.9.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "futures-timer 3.0.2", "log", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "sc-block-builder", "sc-client-api", "sc-proposer-metrics", @@ -5852,7 +5869,7 @@ name = "sc-block-builder" version = "0.9.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "sc-client-api", "sp-api", "sp-block-builder", @@ -5869,7 +5886,7 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "impl-trait-for-tuples 0.2.1", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "sc-chain-spec-derive", "sc-consensus-babe", "sc-consensus-epochs", @@ -5902,12 +5919,12 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "chrono", "fdlimit", - "futures 0.3.12", + "futures 0.3.15", "hex", "libp2p", "log", "names", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "rand 0.7.3", "regex", "rpassword", @@ -5940,12 +5957,12 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "derive_more", "fnv", - "futures 0.3.12", + "futures 0.3.15", "hash-db", "kvdb", "lazy_static", "log", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", "sc-executor", "sp-api", @@ -5980,7 +5997,7 @@ dependencies = [ "linked-hash-map", "log", "parity-db", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "parity-util-mem", "parking_lot 0.11.1", "sc-client-api", @@ -6014,10 +6031,10 @@ version = "0.9.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "derive_more", - "futures 0.3.12", + "futures 0.3.15", "futures-timer 3.0.2", "log", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", "sc-block-builder", "sc-client-api", @@ -6047,14 +6064,14 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "derive_more", "fork-tree", - "futures 0.3.12", + "futures 0.3.15", "futures-timer 3.0.2", "log", "merlin", "num-bigint", - "num-rational", + "num-rational 0.2.4", "num-traits", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", "pdqselect", "rand 0.7.3", @@ -6092,7 +6109,7 @@ version = "0.9.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "fork-tree", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", "sc-client-api", "sp-blockchain", @@ -6104,10 +6121,10 @@ name = "sc-consensus-slots" version = "0.9.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "futures-timer 3.0.2", "log", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", "sc-client-api", "sc-telemetry", @@ -6148,7 +6165,7 @@ dependencies = [ "lazy_static", "libsecp256k1", "log", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "parity-wasm 0.41.0", "parking_lot 0.11.1", "sc-executor-common", @@ -6174,7 +6191,7 @@ version = "0.9.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "derive_more", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "parity-wasm 0.41.0", "sp-allocator", "sp-core", @@ -6190,7 +6207,7 @@ version = "0.9.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "log", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "sc-executor-common", "sp-allocator", "sp-core", @@ -6205,7 +6222,7 @@ version = "0.9.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "log", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "parity-wasm 0.41.0", "pwasm-utils 0.14.0", "sc-executor-common", @@ -6226,13 +6243,13 @@ dependencies = [ "dyn-clone", "finality-grandpa", "fork-tree", - "futures 0.3.12", + "futures 0.3.15", "futures-timer 3.0.2", "linked-hash-map", "log", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", - "pin-project 1.0.5", + "pin-project 1.0.7", "rand 0.7.3", "sc-block-builder", "sc-client-api", @@ -6262,7 +6279,7 @@ version = "0.9.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "ansi_term 0.12.1", - "futures 0.3.12", + "futures 0.3.15", "log", "parity-util-mem", "sc-client-api", @@ -6281,7 +6298,7 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "async-trait", "derive_more", - "futures 0.3.12", + "futures 0.3.15", "futures-util", "hex", "merlin", @@ -6301,7 +6318,7 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "hash-db", "lazy_static", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", "sc-client-api", "sc-executor", @@ -6330,7 +6347,7 @@ dependencies = [ "erased-serde", "fnv", "fork-tree", - "futures 0.3.12", + "futures 0.3.15", "futures-timer 3.0.2", "hex", "ip_network", @@ -6340,9 +6357,9 @@ dependencies = [ "log", "lru", "nohash-hasher", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", - "pin-project 1.0.5", + "pin-project 1.0.7", "prost", "prost-build", "rand 0.7.3", @@ -6371,7 +6388,7 @@ name = "sc-network-gossip" version = "0.9.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "futures-timer 3.0.2", "libp2p", "log", @@ -6389,14 +6406,14 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "bytes 0.5.6", "fnv", - "futures 0.3.12", + "futures 0.3.15", "futures-timer 3.0.2", "hex", - "hyper 0.13.9", + "hyper 0.13.10", "hyper-rustls", "log", "num_cpus", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", "rand 0.7.3", "sc-client-api", @@ -6415,7 +6432,7 @@ name = "sc-peerset" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "libp2p", "log", "serde_json", @@ -6437,12 +6454,12 @@ name = "sc-rpc" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "hash-db", "jsonrpc-core 15.1.0", "jsonrpc-pubsub 15.1.0", "log", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", "sc-block-builder", "sc-client-api", @@ -6472,13 +6489,13 @@ version = "0.9.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "derive_more", - "futures 0.3.12", + "futures 0.3.15", "jsonrpc-core 15.1.0", "jsonrpc-core-client 15.1.0", "jsonrpc-derive 15.1.0", "jsonrpc-pubsub 15.1.0", "log", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", "serde", "serde_json", @@ -6495,7 +6512,7 @@ name = "sc-rpc-server" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "futures 0.1.30", + "futures 0.1.31", "jsonrpc-core 15.1.0", "jsonrpc-http-server", "jsonrpc-ipc-server", @@ -6515,18 +6532,18 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "directories", "exit-future", - "futures 0.1.30", - "futures 0.3.12", + "futures 0.1.31", + "futures 0.3.15", "futures-timer 3.0.2", "hash-db", "jsonrpc-core 15.1.0", "jsonrpc-pubsub 15.1.0", "lazy_static", "log", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "parity-util-mem", "parking_lot 0.11.1", - "pin-project 1.0.5", + "pin-project 1.0.7", "rand 0.7.3", "sc-block-builder", "sc-chain-spec", @@ -6577,7 +6594,7 @@ version = "0.9.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "log", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "parity-util-mem", "parity-util-mem-derive", "parking_lot 0.11.1", @@ -6592,11 +6609,11 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "chrono", - "futures 0.3.12", + "futures 0.3.15", "libp2p", "log", "parking_lot 0.11.1", - "pin-project 1.0.5", + "pin-project 1.0.7", "rand 0.7.3", "serde", "serde_json", @@ -6650,7 +6667,7 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "derive_more", - "futures 0.3.12", + "futures 0.3.15", "linked-hash-map", "log", "parity-util-mem", @@ -6671,11 +6688,11 @@ name = "sc-transaction-pool" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "futures-diagnose", "intervalier", "log", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "parity-util-mem", "parking_lot 0.11.1", "sc-client-api", @@ -6755,9 +6772,9 @@ dependencies = [ [[package]] name = "sct" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3042af939fca8c3453b7af0f1c66e533a15a86169e39de2657310ade8f98d3c" +checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" dependencies = [ "ring", "untrusted", @@ -6858,18 +6875,18 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.123" +version = "1.0.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92d5161132722baa40d802cc70b15262b98258453e85e5d1d365c757c73869ae" +checksum = "ec7505abeacaec74ae4778d9d9328fe5a5d04253220a85c4ee022239fc996d03" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.123" +version = "1.0.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9391c295d64fc0abb2c556bad848f33cb8296276b1ad2677d1ae1ace4f258f31" +checksum = "963a7dbc9895aeac7ac90e74f34a5d5261828f79df35cbed41e10189d3804d43" dependencies = [ "proc-macro2", "quote", @@ -6878,9 +6895,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.61" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fceb2595057b6891a4ee808f70054bd2d12f0e97f1cbb78689b59f676df325a" +checksum = "799e97dc9fdae36a5c8b8f2cae9ce2ee9fdce2058c57a93e6099d919fd982f79" dependencies = [ "itoa", "ryu", @@ -6901,13 +6918,13 @@ dependencies = [ [[package]] name = "sha-1" -version = "0.9.3" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4b312c3731e3fe78a185e6b9b911a7aa715b8e31cce117975219aab2acf285d" +checksum = "8c4cfa741c5832d0ef7fab46cabed29c2aae926db0b11bb2069edd8db5e64e16" dependencies = [ "block-buffer 0.9.0", "cfg-if 1.0.0", - "cpuid-bool 0.1.2", + "cpufeatures", "digest 0.9.0", "opaque-debug 0.3.0", ] @@ -6926,13 +6943,13 @@ dependencies = [ [[package]] name = "sha2" -version = "0.9.3" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa827a14b29ab7f44778d14a88d3cb76e949c45083f7dbfa507d0cb699dc12de" +checksum = "b362ae5752fd2137731f9fa25fd4d9058af34666ca1966fb969119cc35719f12" dependencies = [ "block-buffer 0.9.0", "cfg-if 1.0.0", - "cpuid-bool 0.1.2", + "cpufeatures", "digest 0.9.0", "opaque-debug 0.3.0", ] @@ -6979,9 +6996,9 @@ checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2" [[package]] name = "signal-hook" -version = "0.1.17" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e31d442c16f047a671b5a71e2161d6e68814012b7f5379d269ebd915fac2729" +checksum = "ef33d6d0cd06e0840fba9985aab098c147e67e05cee14d412d3345ed14ff30ac" dependencies = [ "libc", "signal-hook-registry", @@ -7004,21 +7021,21 @@ checksum = "0f0242b8e50dd9accdd56170e94ca1ebd223b098eb9c83539a6e367d0f36ae68" [[package]] name = "simba" -version = "0.1.5" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb931b1367faadea6b1ab1c306a860ec17aaa5fa39f367d0c744e69d971a1fb2" +checksum = "5132a955559188f3d13c9ba831e77c802ddc8782783f050ed0c52f5988b95f4c" dependencies = [ - "approx", - "num-complex", + "approx 0.4.0", + "num-complex 0.3.1", "num-traits", - "paste 0.1.18", + "paste", ] [[package]] name = "slab" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" +checksum = "f173ac3d1a7e3b28003f40de0b5ce7fe2710f9b9dc3fc38664cebee46b3b6527" [[package]] name = "smallvec" @@ -7048,7 +7065,7 @@ dependencies = [ "rand_core 0.5.1", "ring", "rustc_version", - "sha2 0.9.3", + "sha2 0.9.5", "subtle 2.4.0", "x25519-dalek", ] @@ -7064,6 +7081,16 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "socket2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e3dfc207c526015c632472a77be09cf1b6e46866581aecae5cc38fb4235dea2" +dependencies = [ + "libc", + "winapi 0.3.9", +] + [[package]] name = "soketto" version = "0.4.2" @@ -7073,11 +7100,11 @@ dependencies = [ "base64 0.12.3", "bytes 0.5.6", "flate2", - "futures 0.3.12", + "futures 0.3.15", "httparse", "log", "rand 0.7.3", - "sha-1 0.9.3", + "sha-1 0.9.6", ] [[package]] @@ -7099,7 +7126,7 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "hash-db", "log", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "sp-api-proc-macro", "sp-core", "sp-runtime", @@ -7126,7 +7153,7 @@ name = "sp-application-crypto" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "serde", "sp-core", "sp-io", @@ -7140,7 +7167,7 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "integer-sqrt", "num-traits", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "serde", "sp-debug-derive", "sp-std", @@ -7151,7 +7178,7 @@ name = "sp-authorship" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "sp-inherents", "sp-runtime", "sp-std", @@ -7162,7 +7189,7 @@ name = "sp-block-builder" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "sp-api", "sp-inherents", "sp-runtime", @@ -7174,10 +7201,10 @@ name = "sp-blockchain" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "log", "lru", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", "sp-api", "sp-consensus", @@ -7201,11 +7228,11 @@ name = "sp-consensus" version = "0.9.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "futures-timer 3.0.2", "libp2p", "log", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", "serde", "sp-api", @@ -7227,7 +7254,7 @@ name = "sp-consensus-aura" version = "0.9.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "sp-api", "sp-application-crypto", "sp-consensus-slots", @@ -7243,7 +7270,7 @@ version = "0.9.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "merlin", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "serde", "sp-api", "sp-application-crypto", @@ -7263,7 +7290,7 @@ name = "sp-consensus-slots" version = "0.9.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "sp-arithmetic", "sp-runtime", ] @@ -7273,7 +7300,7 @@ name = "sp-consensus-vrf" version = "0.9.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "schnorrkel", "sp-core", "sp-runtime", @@ -7290,7 +7317,7 @@ dependencies = [ "byteorder", "dyn-clonable", "ed25519-dalek", - "futures 0.3.12", + "futures 0.3.15", "hash-db", "hash256-std-hasher", "hex", @@ -7300,7 +7327,7 @@ dependencies = [ "log", "merlin", "num-traits", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "parity-util-mem", "parking_lot 0.11.1", "primitive-types 0.9.0", @@ -7309,7 +7336,7 @@ dependencies = [ "schnorrkel", "secrecy", "serde", - "sha2 0.9.3", + "sha2 0.9.5", "sp-debug-derive", "sp-externalities", "sp-runtime-interface", @@ -7349,7 +7376,7 @@ version = "0.9.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "environmental", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "sp-std", "sp-storage", ] @@ -7361,7 +7388,7 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "finality-grandpa", "log", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "serde", "sp-api", "sp-application-crypto", @@ -7376,7 +7403,7 @@ name = "sp-inherents" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", "sp-core", "sp-std", @@ -7388,11 +7415,11 @@ name = "sp-io" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "hash-db", "libsecp256k1", "log", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", "sp-core", "sp-externalities", @@ -7425,9 +7452,9 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "async-trait", "derive_more", - "futures 0.3.12", + "futures 0.3.15", "merlin", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", "schnorrkel", "serde", @@ -7471,9 +7498,9 @@ dependencies = [ "hash256-std-hasher", "impl-trait-for-tuples 0.2.1", "log", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "parity-util-mem", - "paste 1.0.4", + "paste", "rand 0.7.3", "serde", "sp-application-crypto", @@ -7489,7 +7516,7 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "impl-trait-for-tuples 0.2.1", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "primitive-types 0.9.0", "sp-externalities", "sp-runtime-interface-proc-macro", @@ -7517,7 +7544,7 @@ name = "sp-sandbox" version = "0.9.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "sp-core", "sp-io", "sp-std", @@ -7539,7 +7566,7 @@ name = "sp-session" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "sp-api", "sp-core", "sp-runtime", @@ -7552,7 +7579,7 @@ name = "sp-staking" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "sp-runtime", "sp-std", ] @@ -7565,7 +7592,7 @@ dependencies = [ "hash-db", "log", "num-traits", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "parking_lot 0.11.1", "rand 0.7.3", "smallvec 1.6.1", @@ -7590,7 +7617,7 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "impl-serde", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "ref-cast", "serde", "sp-debug-derive", @@ -7615,7 +7642,7 @@ name = "sp-timestamp" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "sp-api", "sp-inherents", "sp-runtime", @@ -7629,7 +7656,7 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "log", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "sp-std", "tracing", "tracing-core", @@ -7642,9 +7669,9 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "derive_more", - "futures 0.3.12", + "futures 0.3.15", "log", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "serde", "sp-api", "sp-blockchain", @@ -7659,7 +7686,7 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b313 dependencies = [ "hash-db", "memory-db", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "sp-core", "sp-std", "trie-db", @@ -7671,7 +7698,7 @@ name = "sp-utils" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "futures-core", "futures-timer 3.0.2", "lazy_static", @@ -7684,7 +7711,7 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "impl-serde", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "serde", "sp-runtime", "sp-std", @@ -7696,7 +7723,7 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "impl-trait-for-tuples 0.2.1", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "sp-std", "wasmi", ] @@ -7721,10 +7748,11 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "statrs" -version = "0.12.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cce16f6de653e88beca7bd13780d08e09d4489dbca1f9210e041bc4852481382" +checksum = "1e34b58a8f9b7462b6922e0b4e3c83d1b3c2075f7f996a56d6c66afa81590064" dependencies = [ + "nalgebra 0.19.0", "rand 0.7.3", ] @@ -7826,12 +7854,12 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "frame-system-rpc-runtime-api", - "futures 0.3.12", + "futures 0.3.15", "jsonrpc-core 15.1.0", "jsonrpc-core-client 15.1.0", "jsonrpc-derive 15.1.0", "log", - "parity-scale-codec 2.0.1", + "parity-scale-codec 2.1.1", "sc-client-api", "sc-rpc-api", "serde", @@ -7851,7 +7879,7 @@ dependencies = [ "async-std", "derive_more", "futures-util", - "hyper 0.13.9", + "hyper 0.13.10", "log", "prometheus", "tokio 0.2.25", @@ -7887,9 +7915,9 @@ checksum = "1e81da0851ada1f3e9d4312c704aa4f8806f0f9d69faaf8df2f3464b4a9437c2" [[package]] name = "syn" -version = "1.0.60" +version = "1.0.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c700597eca8a5a762beb35753ef6b94df201c81cca676604f547495a0d7f0081" +checksum = "a1e8cdbefb79a9a5a65e0db8b47b723ee907b7c7f8496c76a1770b5c310bab82" dependencies = [ "proc-macro2", "quote", @@ -7935,7 +7963,7 @@ dependencies = [ "cfg-if 1.0.0", "libc", "rand 0.8.3", - "redox_syscall 0.2.4", + "redox_syscall 0.2.8", "remove_dir_all", "winapi 0.3.9", ] @@ -7980,9 +8008,9 @@ dependencies = [ [[package]] name = "thread_local" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8208a331e1cb318dd5bd76951d2b8fc48ca38a69f5f4e4af1b6a9f8c6236915" +checksum = "8018d24e04c95ac8790716a5987d0fec4f8b27249ffa0f7d33f1369bdfb88cbd" dependencies = [ "once_cell", ] @@ -8019,7 +8047,7 @@ dependencies = [ "pbkdf2 0.4.0", "rand 0.7.3", "rustc-hash", - "sha2 0.9.3", + "sha2 0.9.5", "thiserror", "unicode-normalization", "zeroize", @@ -8036,9 +8064,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317cca572a0e89c3ce0ca1f1bdc9369547fe318a683418e42ac8f59d14701023" +checksum = "5b5220f05bb7de7f3f53c7c065e1199b3172696fe2db9f9c4d8ad9b4ee74c342" dependencies = [ "tinyvec_macros", ] @@ -8056,7 +8084,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6" dependencies = [ "bytes 0.4.12", - "futures 0.1.30", + "futures 0.1.31", "mio", "num_cpus", "tokio-codec", @@ -8089,7 +8117,7 @@ dependencies = [ "mio", "mio-uds", "num_cpus", - "pin-project-lite 0.1.11", + "pin-project-lite 0.1.12", "signal-hook-registry", "slab", "winapi 0.3.9", @@ -8103,7 +8131,7 @@ checksum = "8fb220f46c53859a4b7ec083e41dec9778ff0b1851c0942b211edb89e0ccdc46" dependencies = [ "bytes 0.4.12", "either", - "futures 0.1.30", + "futures 0.1.31", ] [[package]] @@ -8113,7 +8141,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25b2998660ba0e70d18684de5d06b70b70a3a747469af9dea7618cc59e75976b" dependencies = [ "bytes 0.4.12", - "futures 0.1.30", + "futures 0.1.31", "tokio-io", ] @@ -8123,7 +8151,7 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1de0e32a83f131e002238d7ccde18211c0a5397f60cbfffcb112868c2e0e20e" dependencies = [ - "futures 0.1.30", + "futures 0.1.31", "tokio-executor", ] @@ -8134,7 +8162,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671" dependencies = [ "crossbeam-utils 0.7.2", - "futures 0.1.30", + "futures 0.1.31", ] [[package]] @@ -8143,7 +8171,7 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "297a1206e0ca6302a0eed35b700d292b275256f596e2f3fea7729d5e629b6ff4" dependencies = [ - "futures 0.1.30", + "futures 0.1.31", "tokio-io", "tokio-threadpool", ] @@ -8155,7 +8183,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674" dependencies = [ "bytes 0.4.12", - "futures 0.1.30", + "futures 0.1.31", "log", ] @@ -8166,7 +8194,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d282d483052288b2308ba5ee795f5673b159c9bdf63c385a05609da782a5eae" dependencies = [ "bytes 0.4.12", - "futures 0.1.30", + "futures 0.1.31", "mio", "mio-named-pipes", "tokio 0.1.22", @@ -8179,7 +8207,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09bc590ec4ba8ba87652da2068d150dcada2cfa2e07faae270a5e0409aa51351" dependencies = [ "crossbeam-utils 0.7.2", - "futures 0.1.30", + "futures 0.1.31", "lazy_static", "log", "mio", @@ -8209,7 +8237,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24da22d077e0f15f55162bdbdc661228c1581892f52074fb242678d015b45162" dependencies = [ - "futures 0.1.30", + "futures 0.1.31", ] [[package]] @@ -8219,7 +8247,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edfe50152bc8164fcc456dab7891fa9bf8beaf01c5ee7e1dd43a397c3cf87dee" dependencies = [ "fnv", - "futures 0.1.30", + "futures 0.1.31", ] [[package]] @@ -8229,7 +8257,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98df18ed66e3b72e742f185882a9e201892407957e45fbff8da17ae7a7c51f72" dependencies = [ "bytes 0.4.12", - "futures 0.1.30", + "futures 0.1.31", "iovec", "mio", "tokio-io", @@ -8245,7 +8273,7 @@ dependencies = [ "crossbeam-deque 0.7.3", "crossbeam-queue", "crossbeam-utils 0.7.2", - "futures 0.1.30", + "futures 0.1.31", "lazy_static", "log", "num_cpus", @@ -8260,7 +8288,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93044f2d313c95ff1cb7809ce9a7a05735b012288a888b62d4434fd58c94f296" dependencies = [ "crossbeam-utils 0.7.2", - "futures 0.1.30", + "futures 0.1.31", "slab", "tokio-executor", ] @@ -8272,7 +8300,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2a0b10e610b39c38b031a2fcab08e4b82f16ece36504988dcbd81dbba650d82" dependencies = [ "bytes 0.4.12", - "futures 0.1.30", + "futures 0.1.31", "log", "mio", "tokio-codec", @@ -8287,7 +8315,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab57a4ac4111c8c9dbcf70779f6fc8bc35ae4b2454809febac840ad19bd7e4e0" dependencies = [ "bytes 0.4.12", - "futures 0.1.30", + "futures 0.1.31", "iovec", "libc", "log", @@ -8308,7 +8336,7 @@ dependencies = [ "futures-core", "futures-sink", "log", - "pin-project-lite 0.1.11", + "pin-project-lite 0.1.12", "tokio 0.2.25", ] @@ -8329,22 +8357,22 @@ checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" [[package]] name = "tracing" -version = "0.1.25" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01ebdc2bb4498ab1ab5f5b73c5803825e60199229ccba0698170e3be0e7f959f" +checksum = "09adeb8c97449311ccd28a427f96fb563e7fd31aabf994189879d9da2394b89d" dependencies = [ "cfg-if 1.0.0", "log", - "pin-project-lite 0.2.4", + "pin-project-lite 0.2.6", "tracing-attributes", "tracing-core", ] [[package]] name = "tracing-attributes" -version = "0.1.14" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41768be5b9f3489491825f56f01f25290aa1d3e7cc97e182d4d34360493ba6fa" +checksum = "c42e6fa53307c8a17e4ccd4dc81cf5ec38db9209f59b222210375b54ee40d1e2" dependencies = [ "proc-macro2", "quote", @@ -8353,9 +8381,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.17" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f50de3927f93d202783f4513cda820ab47ef17f624b03c096e86ef00c67e6b5f" +checksum = "a9ff14f98b1a4b289c6248a023c1c2fa1491062964e9fed67ab29c4e4da4a052" dependencies = [ "lazy_static", ] @@ -8366,7 +8394,7 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" dependencies = [ - "pin-project 1.0.5", + "pin-project 1.0.7", "tracing", ] @@ -8393,9 +8421,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.2.16" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ab8966ac3ca27126141f7999361cc97dd6fb4b71da04c02044fa9045d98bb96" +checksum = "aa5553bf0883ba7c9cbe493b085c29926bd41b66afc31ff72cf17ff4fb60dcd5" dependencies = [ "ansi_term 0.12.1", "chrono", @@ -8458,15 +8486,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04f8ab788026715fa63b31960869617cba39117e520eb415b0139543e325ab59" dependencies = [ "cfg-if 0.1.10", - "rand 0.3.23", + "rand 0.7.3", "static_assertions", ] [[package]] name = "typenum" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "373c8a200f9e67a0c95e62a4f52fbf80c23b4381c05a17845531982fa99e6b33" +checksum = "879f6906492a7cd215bfa4cf595b600146ccfac0c79bcbd1f3000162af5e8b06" [[package]] name = "ucd-trie" @@ -8509,18 +8537,18 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" +checksum = "eeb8be209bb1c96b7c177c7420d26e04eccacb0eeae6b980e35fcb74678107e0" dependencies = [ "matches", ] [[package]] name = "unicode-normalization" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a13e63ab62dbe32aeee58d1c5408d35c36c392bba5d9d3142287219721afe606" +checksum = "07fbfce1c8a97d547e8b5334978438d9d6ec8c20e38f56d4a4374d181493eaef" dependencies = [ "tinyvec", ] @@ -8539,9 +8567,9 @@ checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" [[package]] name = "unicode-xid" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" +checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" [[package]] name = "universal-hash" @@ -8602,36 +8630,31 @@ dependencies = [ [[package]] name = "url" -version = "2.2.0" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5909f2b0817350449ed73e8bcd81c8c3c8d9a7a5d8acba4b27db277f1868976e" +checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" dependencies = [ "form_urlencoded", - "idna 0.2.0", + "idna 0.2.3", "matches", "percent-encoding 2.1.0", ] [[package]] name = "value-bag" -version = "1.0.0-alpha.6" +version = "1.0.0-alpha.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b676010e055c99033117c2343b33a40a30b91fecd6c49055ac9cd2d6c305ab1" +checksum = "dd320e1520f94261153e96f7534476ad869c14022aee1e59af7c778075d840ae" dependencies = [ "ctor", + "version_check", ] [[package]] name = "vcpkg" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b00bca6106a5e23f3eee943593759b7fcddb00554332e856d990c893966879fb" - -[[package]] -name = "vec-arena" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eafc1b9b2dfc6f5529177b62cf806484db55b32dc7c9658a118e11bbeb33061d" +checksum = "cbdbff6266a24120518560b5dc983096efb98462e51d0d68169895b237be3e5d" [[package]] name = "vec_map" @@ -8641,9 +8664,9 @@ checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "version_check" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" +checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" [[package]] name = "void" @@ -8659,9 +8682,9 @@ checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" [[package]] name = "walkdir" -version = "2.3.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" dependencies = [ "same-file", "winapi 0.3.9", @@ -8674,7 +8697,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6395efa4784b027708f7451087e647ec73cc74f5d9bc2e418404248d679a230" dependencies = [ - "futures 0.1.30", + "futures 0.1.31", "log", "try-lock", ] @@ -8703,9 +8726,9 @@ checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" [[package]] name = "wasm-bindgen" -version = "0.2.70" +version = "0.2.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55c0f7123de74f0dab9b7d00fd614e7b19349cd1e2f5252bbe9b1754b59433be" +checksum = "d54ee1d4ed486f78874278e63e4069fc1ab9f6a18ca492076ffb90c5eb2997fd" dependencies = [ "cfg-if 1.0.0", "wasm-bindgen-macro", @@ -8713,9 +8736,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.70" +version = "0.2.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bc45447f0d4573f3d65720f636bbcc3dd6ce920ed704670118650bcd47764c7" +checksum = "3b33f6a0694ccfea53d94db8b2ed1c3a8a4c86dd936b13b9f0a15ec4a451b900" dependencies = [ "bumpalo", "lazy_static", @@ -8728,9 +8751,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.20" +version = "0.4.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3de431a2910c86679c34283a33f66f4e4abd7e0aec27b6669060148872aadf94" +checksum = "5fba7978c679d53ce2d0ac80c8c175840feb849a161664365d1287b41f2e67f1" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -8740,9 +8763,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.70" +version = "0.2.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b8853882eef39593ad4174dd26fc9865a64e84026d223f63bb2c42affcbba2c" +checksum = "088169ca61430fe1e58b8096c24975251700e7b1f6fd91cc9d59b04fb9b18bd4" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -8750,9 +8773,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.70" +version = "0.2.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4133b5e7f2a531fa413b3a1695e925038a05a71cf67e87dafa295cb645a01385" +checksum = "be2241542ff3d9f241f5e2cb6dd09b37efe786df8851c54957683a49f0987a97" dependencies = [ "proc-macro2", "quote", @@ -8763,9 +8786,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.70" +version = "0.2.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd4945e4943ae02d15c13962b38a5b1e81eadd4b71214eee75af64a4d6a4fd64" +checksum = "d7cff876b8f18eed75a66cf49b65e7f967cb354a7aa16003fb55dbfd25b44b4f" [[package]] name = "wasm-gc-api" @@ -8784,7 +8807,7 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "js-sys", "parking_lot 0.11.1", "pin-utils", @@ -8801,7 +8824,7 @@ checksum = "bf617d864d25af3587aa745529f7aaa541066c876d57e050c0d0c85c61c92aff" dependencies = [ "libc", "memory_units", - "num-rational", + "num-rational 0.2.4", "num-traits", "parity-wasm 0.41.0", "wasmi-validation", @@ -8866,7 +8889,7 @@ dependencies = [ "libc", "log", "serde", - "sha2 0.9.3", + "sha2 0.9.5", "toml", "winapi 0.3.9", "zstd", @@ -8892,7 +8915,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e91fa931df6dd8af2b02606307674d3bad23f55473d5f4c809dddf7e4c4dc411" dependencies = [ "anyhow", - "gimli", + "gimli 0.23.0", "more-asserts", "object 0.22.0", "target-lexicon", @@ -8912,7 +8935,7 @@ dependencies = [ "cranelift-codegen", "cranelift-entity", "cranelift-wasm", - "gimli", + "gimli 0.23.0", "indexmap", "log", "more-asserts", @@ -8927,7 +8950,7 @@ version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "738bfcd1561ede8bb174215776fd7d9a95d5f0a47ca3deabe0282c55f9a89f68" dependencies = [ - "addr2line", + "addr2line 0.14.1", "anyhow", "cfg-if 1.0.0", "cranelift-codegen", @@ -8935,7 +8958,7 @@ dependencies = [ "cranelift-frontend", "cranelift-native", "cranelift-wasm", - "gimli", + "gimli 0.23.0", "log", "more-asserts", "object 0.22.0", @@ -8976,7 +8999,7 @@ checksum = "60bb672c9d894776d7b9250dd9b4fe890f8760201ee4f53e5f2da772b6c4debb" dependencies = [ "anyhow", "cfg-if 1.0.0", - "gimli", + "gimli 0.23.0", "lazy_static", "libc", "object 0.22.0", @@ -9000,7 +9023,7 @@ dependencies = [ "lazy_static", "libc", "log", - "memoffset 0.6.1", + "memoffset 0.6.3", "more-asserts", "psm", "region", @@ -9011,27 +9034,27 @@ dependencies = [ [[package]] name = "wast" -version = "35.0.0" +version = "35.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db5ae96da18bb5926341516fd409b5a8ce4e4714da7f0a1063d3b20ac9f9a1e1" +checksum = "2ef140f1b49946586078353a453a1d28ba90adfc54dde75710bc1931de204d68" dependencies = [ "leb128", ] [[package]] name = "wat" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b0fa059022c5dabe129f02b429d67086400deb8277f89c975555dacc1dadbcc" +checksum = "8ec280a739b69173e0ffd12c1658507996836ba4e992ed9bc1e5385a0bd72a02" dependencies = [ "wast", ] [[package]] name = "web-sys" -version = "0.3.47" +version = "0.3.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c40dc691fc48003eba817c38da7113c15698142da971298003cac3ef175680b3" +checksum = "e828417b379f3df7111d3a2a9e5753706cae29c41f7c4029ee9fd77f3e09e582" dependencies = [ "js-sys", "wasm-bindgen", @@ -9049,9 +9072,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.21.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82015b7e0b8bad8185994674a13a93306bea76cf5a16c5a181382fd3a5ec2376" +checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940" dependencies = [ "webpki", ] @@ -9067,21 +9090,12 @@ dependencies = [ [[package]] name = "which" -version = "3.1.1" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d011071ae14a2f6671d0b74080ae0cd8ebf3a6f8c9589a2cd45f23126fe29724" -dependencies = [ - "libc", -] - -[[package]] -name = "which" -version = "4.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87c14ef7e1b8b8ecfc75d5eca37949410046e66f15d185c01d70824f1f8111ef" +checksum = "b55551e42cbdf2ce2bedd2203d0cc08dba002c27510f86dab6d0ce304cba3dfe" dependencies = [ + "either", "libc", - "thiserror", ] [[package]] @@ -9145,11 +9159,11 @@ checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214" [[package]] name = "x25519-dalek" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc614d95359fd7afc321b66d2107ede58b246b844cf5d8a0adcca413e439f088" +checksum = "5a0c105152107e3b96f6a00a65e86ce82d9b125230e1c4302940eca58ff71f4f" dependencies = [ - "curve25519-dalek 3.0.2", + "curve25519-dalek 3.1.0", "rand_core 0.5.1", "zeroize", ] @@ -9160,7 +9174,7 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1cc7bd8c983209ed5d527f44b01c41b7dc146fd960c61cf9e1d25399841dc271" dependencies = [ - "futures 0.3.12", + "futures 0.3.15", "log", "nohash-hasher", "parking_lot 0.11.1", @@ -9176,18 +9190,18 @@ checksum = "9fc79f4a1e39857fc00c3f662cbf2651c771f00e9c15fe2abc341806bd46bd71" [[package]] name = "zeroize" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81a974bcdd357f0dca4d41677db03436324d45a4c9ed2d0b873a5a360ce41c36" +checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3f369ddb18862aba61aa49bf31e74d29f0f162dec753063200e1dc084345d16" +checksum = "a2c1e130bebaeab2f23886bf9acbaca14b092408c452543c857f66399cd6dab1" dependencies = [ "proc-macro2", "quote", diff --git a/node/Cargo.toml b/node/Cargo.toml index 9e289ef367..93aed54f3b 100644 --- a/node/Cargo.toml +++ b/node/Cargo.toml @@ -34,11 +34,11 @@ frame-benchmarking = { version = '3.0.0', git = "https://github.com/paritytech/s frame-benchmarking-cli = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } pallet-transaction-payment-rpc = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } fc-rpc-core = { version = "1.1.0-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } -fc-consensus = { version = "1.0.0", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } +fc-consensus = { version = "1.0.1-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } fc-mapping-sync = { version = "1.1.0-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } fc-rpc = { version = "2.0.0-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } fc-db = { version = "1.0.0", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } -fp-rpc = { version = "1.0.0", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } +fp-rpc = { version = "1.0.1-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } sc-basic-authorship = { version = '0.9.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } sc-cli = { version = '0.9.0', features = ['wasmtime'], git = "https://github.com/paritytech/substrate.git", branch = "frontier" } sc-client-api = { version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } diff --git a/node/src/rpc.rs b/node/src/rpc.rs index 3a1ad10506..fa776d30d0 100644 --- a/node/src/rpc.rs +++ b/node/src/rpc.rs @@ -194,6 +194,7 @@ pub fn create_full( NetApiServer::to_delegate(NetApi::new( client.clone(), network.clone(), + true, )) ); diff --git a/pallets/nft/Cargo.toml b/pallets/nft/Cargo.toml index 92e94d4791..477ca9713a 100644 --- a/pallets/nft/Cargo.toml +++ b/pallets/nft/Cargo.toml @@ -23,13 +23,13 @@ serde = { version = "1.0.119" } frame-support = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } frame-system = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } pallet-balances = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } -pallet-evm = { default-features = false, version = "3.0.0", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } +pallet-evm = { default-features = false, version = "3.0.1-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } pallet-ethereum = { default-features = false, version = "1.0.1-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } pallet-timestamp = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } pallet-randomness-collective-flip = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } sp-std = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } frame-benchmarking = { default-features = false, version = '3.0.0', optional = true, git = "https://github.com/paritytech/substrate.git", branch = "frontier" } -fp-evm = { default-features = false, version = '1.0.0', git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } +fp-evm = { default-features = false, version = '1.0.1-dev', git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } sp-core = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } sp-io = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } sp-api = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 97edc0bb11..ef7e2b64f2 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -40,7 +40,7 @@ pallet-balances = { default-features = false, version = '3.0.0', git = "https:// pallet-contracts = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } pallet-contracts-primitives = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } pallet-contracts-rpc-runtime-api = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } -pallet-evm = { default-features = false, version = "3.0.0", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } +pallet-evm = { default-features = false, version = "3.0.1-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } pallet-ethereum = { default-features = false, version = "1.0.1-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } pallet-grandpa = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } pallet-randomness-collective-flip = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } @@ -50,7 +50,7 @@ pallet-transaction-payment = { default-features = false, version = '3.0.0', git pallet-transaction-payment-rpc-runtime-api = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } pallet-treasury = { default-features = false, version = "3.0.0", git = "https://github.com/paritytech/substrate.git", branch = "frontier" } pallet-vesting = { default-features = false, version = "3.0.0", git = "https://github.com/paritytech/substrate.git", branch = "frontier" } -fp-rpc = { default-features = false, version = "1.0.0", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } +fp-rpc = { default-features = false, version = "1.0.1-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions" } sp-arithmetic = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } sp-api = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } sp-block-builder = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } From 2d71e7a206db6d53d1c54ebc8bcdf07ca15909df Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Mon, 31 May 2021 18:31:02 +0000 Subject: [PATCH 46/66] refactor: use new selector macros Signed-off-by: Yaroslav Bolyukin --- pallets/nft/src/eth/mod.rs | 51 ++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 27 deletions(-) diff --git a/pallets/nft/src/eth/mod.rs b/pallets/nft/src/eth/mod.rs index 09585c2c69..e38989db00 100644 --- a/pallets/nft/src/eth/mod.rs +++ b/pallets/nft/src/eth/mod.rs @@ -64,45 +64,45 @@ fn call_internal(sender: H160, collection: &CollectionHandle, meth Ok(match method_id { // function name() external view returns (string memory) - 0x06fdde03 => { + fn_selector!(name()) => { let name = collection.name.iter() .map(|&e| e.try_into().ok() as Option) .collect::>>() .ok_or(Some("non-ascii name"))?; - + crate::abi_encode!(memory(&name)) } // function symbol() external view returns (string memory) - 0x95d89b41 => { + fn_selector!(symbol()) => { let name = collection.token_prefix.iter() .map(|&e| e.is_ascii_uppercase().then(|| e)) .collect::>>() .ok_or(Some("non-uppercase prefix"))?; - + crate::abi_encode!(memory(&name)) } // function decimals() external view returns (uint8 decimals) - 0x313ce567 if erc20 => { + fn_selector!(decimals()) if erc20 => { if let CollectionMode::Fungible(decimals) = &collection.mode { crate::abi_encode!(uint8(*decimals)) } else { unreachable!() - } + } } // function totalSupply() external view returns (uint256) - 0x18160ddd if erc20 || erc721 => { + fn_selector!(totalSupply()) if erc20 || erc721 => { // TODO: can't be implemented, as we don't track total amount of fungibles crate::abi_encode!(uint256(0)) } // function balanceOf(address account) external view returns (uint256) - 0x70a08231 if erc20 || erc721 => { + fn_selector!(balanceOf(address)) if erc20 || erc721 => { crate::abi_decode!(input, account: address); let account = T::EvmAddressMapping::into_account_id(account); let balance = >::get(collection.id, account); crate::abi_encode!(uint256(balance)) } // function ownerOf(uint256 tokenId) external view returns (address) - 0x6352211e if erc721 => { + fn_selector!(ownerOf(uint256)) if erc721 => { crate::abi_decode!(input, token_id: uint256); let token_id: u32 = token_id.try_into().map_err(|_| "bad token id")?; @@ -111,7 +111,7 @@ fn call_internal(sender: H160, collection: &CollectionHandle, meth crate::abi_encode!(address(token.owner.as_eth().clone())) } // function transfer(address recipient, uint256 amount) external returns (bool) { - 0xa9059cbb if erc20 => { + fn_selector!(transfer(address, uint256)) if erc20 => { crate::abi_decode!(input, recipient: address, amount: uint256); let sender = T::CrossAccountId::from_eth(sender); let recipient = T::CrossAccountId::from_eth(recipient); @@ -125,9 +125,9 @@ fn call_internal(sender: H160, collection: &CollectionHandle, meth ).map_err(|_| "transfer error")?; crate::abi_encode!(bool(true)) - } - // function transfer(address recipient, uint256 token) external returns (bool) { - 0xa9059cbb if erc721 => { + } + + fn_selector!(transfer(address, uint256)) if erc721 => { crate::abi_decode!(input, recipient: address, token_id: uint256); let sender = T::CrossAccountId::from_eth(sender); let recipient = T::CrossAccountId::from_eth(recipient); @@ -143,8 +143,9 @@ fn call_internal(sender: H160, collection: &CollectionHandle, meth crate::abi_encode!(bool(true)) } + // function allowance(address owner, address spender) external view returns (uint256) - 0xdd62ed3e if erc20 => { + fn_selector!(allowance(address, address)) if erc20 => { crate::abi_decode!(input, owner: address, spender: address); let owner = T::EvmAddressMapping::into_account_id(owner); let spender = T::EvmAddressMapping::into_account_id(spender); @@ -154,7 +155,7 @@ fn call_internal(sender: H160, collection: &CollectionHandle, meth // function approve(address spender, uint256 amount) external returns (bool) // FIXME: All current implementations resets amount to specified value, ours - adds it // FIXME: Our implementation doesn't handle resets (approve with zero amount) - 0x095ea7b3 if erc20 => { + fn_selector!(approve(address, uint256)) if erc20 => { crate::abi_decode!(input, spender: address, amount: uint256); let sender = T::CrossAccountId::from_eth(sender); let spender = T::CrossAccountId::from_eth(spender); @@ -170,7 +171,7 @@ fn call_internal(sender: H160, collection: &CollectionHandle, meth crate::abi_encode!(bool(true)) } // function approve(address approved, uint256 tokenId) external payable - 0x095ea7b3 if erc721 => { + fn_selector!(approve(address, uint256)) if erc721 => { crate::abi_decode!(input, approved: address, token_id: uint256); let sender = T::CrossAccountId::from_eth(sender); let approved = T::CrossAccountId::from_eth(approved); @@ -186,7 +187,7 @@ fn call_internal(sender: H160, collection: &CollectionHandle, meth crate::abi_encode!() } // function transferFrom(address sender, address recipient, uint256 amount) external returns (bool) - 0x23b872dd if erc20 => { + fn_selector!(transferFrom(address, address, uint256)) if erc20 => { crate::abi_decode!(input, from: address, recipient: address, amount: uint256); let sender = T::CrossAccountId::from_eth(sender); let from = T::CrossAccountId::from_eth(from); @@ -204,7 +205,7 @@ fn call_internal(sender: H160, collection: &CollectionHandle, meth crate::abi_encode!(bool(true)) } // function transferFrom(address from, address to, uint256 tokenId) external payable - 0x23b872dd if erc721 => { + fn_selector!(transferFrom(address, address, uint256)) if erc721 => { crate::abi_decode!(input, from: address, recipient: address, token_id: uint256); let sender = T::CrossAccountId::from_eth(sender); let from = T::CrossAccountId::from_eth(from); @@ -223,7 +224,7 @@ fn call_internal(sender: H160, collection: &CollectionHandle, meth crate::abi_encode!() } // function supportsInterface(bytes4 interfaceID) public pure returns (bool) - 0x01ffc9a7 => { + fn_selector!(supportsInterface(bytes4)) => { crate::abi_decode!(input, interface_id: uint32); let supports = match interface_id { // ERC165 @@ -274,16 +275,12 @@ impl pallet_evm::OnMethodCall for NftErcSupport { } } -/// event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); -pub const TRANSFER_NFT_TOPIC: H256 = H256(hex_literal::hex!("ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef")); -/// event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); -pub const APPROVAL_NFT_TOPIC: H256 = H256(hex_literal::hex!("8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925")); +pub const TRANSFER_NFT_TOPIC: H256 = event_topic!(Transfer(address, address, uint256)); +pub const APPROVAL_NFT_TOPIC: H256 = event_topic!(Approval(address, address, uint256)); // TODO: event ApprovalForAll(address indexed owner, address indexed operator, bool approved); -/// event Transfer(address indexed from, address indexed to, uint256 amount); -pub const TRANSFER_FUNGIBLE_TOPIC: H256 = H256(hex_literal::hex!("ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef")); -/// event Approval(address indexed owner, address indexed approved, uint256 amount); -pub const APPROVAL_FUNGIBLE_TOPIC: H256 = H256(hex_literal::hex!("8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925")); +pub const TRANSFER_FUNGIBLE_TOPIC: H256 = event_topic!(Transfer(address, address, uint256)); +pub const APPROVAL_FUNGIBLE_TOPIC: H256 = event_topic!(Approval(address, address, uint256)); pub fn address_to_topic(address: &H160) -> H256 { let mut output = [0; 32]; From 18247867133a517e28b5b0cdb2be970c6e092c00 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Wed, 2 Jun 2021 17:36:04 +0000 Subject: [PATCH 47/66] build(devcontainer): bump dependencies Update rustc due to unstable fingerprints Update node.js because new polkadot.js/api now requires node 1.14 Signed-off-by: Yaroslav Bolyukin --- .devcontainer/Dockerfile | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 47379a1014..efdeb5f736 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -8,7 +8,10 @@ USER vscode RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash && \ export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")" && \ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ - nvm install v12.20.1 && \ - rustup toolchain install nightly-2021-03-01 && \ - rustup default nightly-2021-03-01 && \ - rustup target add wasm32-unknown-unknown \ No newline at end of file + nvm install v16.2.0 && \ + npm install -g yarn && \ + rustup toolchain install nightly-2021-05-30 && \ + rustup default nightly-2021-05-30 && \ + rustup target add wasm32-unknown-unknown && \ + rustup component add rustfmt clippy && \ + cargo install cargo-expand cargo-edit From e3aef6f9aee550b6c720a2014aea3ea433c814df Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Wed, 2 Jun 2021 17:40:00 +0000 Subject: [PATCH 48/66] refactor: revert changing collection owner type Not necessary yet, we don't have to support evm accounts create collections Signed-off-by: Yaroslav Bolyukin --- pallets/nft/src/lib.rs | 29 +++++++++++++++-------------- runtime_types.json | 2 +- tests/src/util/helpers.ts | 4 ++-- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/pallets/nft/src/lib.rs b/pallets/nft/src/lib.rs index 08af1065ec..e2f9913620 100644 --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -167,7 +167,7 @@ impl Default for SponsorshipState { #[derive(Encode, Decode, Clone, PartialEq)] #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] pub struct Collection { - pub owner: T::CrossAccountId, + pub owner: T::AccountId, pub mode: CollectionMode, pub access: AccessMode, pub decimal_points: DecimalPoints, @@ -638,6 +638,7 @@ decl_storage! { decl_event!( pub enum Event where + AccountId = ::AccountId, CrossAccountId = ::CrossAccountId, { /// New collection was created @@ -649,7 +650,7 @@ decl_event!( /// * mode: [CollectionMode] converted into u8. /// /// * account_id: Collection owner. - CollectionCreated(CollectionId, u8, CrossAccountId), + CollectionCreated(CollectionId, u8, AccountId), /// New item was created. /// @@ -734,7 +735,7 @@ decl_module! { mode: CollectionMode) -> DispatchResult { // Anyone can create a collection - let who = T::CrossAccountId::from_sub(ensure_signed(origin)?); + let who = ensure_signed(origin)?; // Take a (non-refundable) deposit of collection creation let mut imbalance = <<::Currency as Currency>::PositiveImbalance>::zero(); @@ -743,7 +744,7 @@ decl_module! { T::CollectionCreationPrice::get(), )); ::Currency::settle( - who.as_sub(), + &who, imbalance, WithdrawReasons::TRANSFER, ExistenceRequirement::KeepAlive, @@ -820,7 +821,7 @@ decl_module! { #[transactional] pub fn destroy_collection(origin, collection_id: CollectionId) -> DispatchResult { - let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); + let sender = ensure_signed(origin)?; let collection = Self::get_collection(collection_id)?; Self::check_owner_permissions(&collection, &sender)?; if !collection.limits.owner_can_destroy { @@ -925,7 +926,7 @@ decl_module! { #[transactional] pub fn set_public_access_mode(origin, collection_id: CollectionId, mode: AccessMode) -> DispatchResult { - let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); + let sender = ensure_signed(origin)?; let mut target_collection = Self::get_collection(collection_id)?; Self::check_owner_permissions(&target_collection, &sender)?; @@ -952,7 +953,7 @@ decl_module! { #[transactional] pub fn set_mint_permission(origin, collection_id: CollectionId, mint_permission: bool) -> DispatchResult { - let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); + let sender = ensure_signed(origin)?; let mut target_collection = Self::get_collection(collection_id)?; Self::check_owner_permissions(&target_collection, &sender)?; @@ -975,9 +976,9 @@ decl_module! { /// * new_owner. #[weight = ::WeightInfo::change_collection_owner()] #[transactional] - pub fn change_collection_owner(origin, collection_id: CollectionId, new_owner: T::CrossAccountId) -> DispatchResult { + pub fn change_collection_owner(origin, collection_id: CollectionId, new_owner: T::AccountId) -> DispatchResult { - let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); + let sender = ensure_signed(origin)?; let mut target_collection = Self::get_collection(collection_id)?; Self::check_owner_permissions(&target_collection, &sender)?; target_collection.owner = new_owner; @@ -1061,7 +1062,7 @@ decl_module! { #[weight = ::WeightInfo::set_collection_sponsor()] #[transactional] pub fn set_collection_sponsor(origin, collection_id: CollectionId, new_sponsor: T::AccountId) -> DispatchResult { - let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); + let sender = ensure_signed(origin)?; let mut target_collection = Self::get_collection(collection_id)?; Self::check_owner_permissions(&target_collection, &sender)?; @@ -1110,7 +1111,7 @@ decl_module! { let sender = ensure_signed(origin)?; let mut target_collection = Self::get_collection(collection_id)?; - Self::check_owner_permissions(&target_collection, &T::CrossAccountId::from_sub(sender))?; + Self::check_owner_permissions(&target_collection, &sender)?; target_collection.sponsorship = SponsorshipState::Disabled; Self::save_collection(target_collection); @@ -1650,7 +1651,7 @@ decl_module! { ) -> DispatchResult { let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?); let mut target_collection = Self::get_collection(collection_id)?; - Self::check_owner_permissions(&target_collection, &sender)?; + Self::check_owner_permissions(&target_collection, &sender.as_sub())?; let old_limits = &target_collection.limits; let chain_limits = ChainLimit::get(); @@ -2239,7 +2240,7 @@ impl Module { ) } - fn check_owner_permissions(target_collection: &CollectionHandle, subject: &T::CrossAccountId) -> DispatchResult { + fn check_owner_permissions(target_collection: &CollectionHandle, subject: &T::AccountId) -> DispatchResult { ensure!( *subject == target_collection.owner, Error::::NoPermission @@ -2249,7 +2250,7 @@ impl Module { } fn is_owner_or_admin_permissions(collection: &CollectionHandle, subject: &T::CrossAccountId) -> bool { - *subject == collection.owner || >::get(collection.id).contains(&subject) + *subject.as_sub() == collection.owner || >::get(collection.id).contains(&subject) } fn check_owner_or_admin_permissions( diff --git a/runtime_types.json b/runtime_types.json index 41a8dc37b1..55819ffcc9 100644 --- a/runtime_types.json +++ b/runtime_types.json @@ -45,7 +45,7 @@ } }, "Collection": { - "Owner": "CrossAccountId", + "Owner": "AccountId", "Mode": "CollectionMode", "Access": "AccessMode", "DecimalPoints": "DecimalPoints", diff --git a/tests/src/util/helpers.ts b/tests/src/util/helpers.ts index afe70a710c..47628fa55f 100644 --- a/tests/src/util/helpers.ts +++ b/tests/src/util/helpers.ts @@ -37,7 +37,7 @@ export function normalizeAccountId(input: string | CrossAccountId | IKeyringPair } return input; } -export function toSubstrateAddress(input: CrossAccountId): string { +export function toSubstrateAddress(input: string | CrossAccountId | IKeyringPair): string { input = normalizeAccountId(input); if ('substrate' in input) { return input.substrate; @@ -273,7 +273,7 @@ export async function createCollectionExpectSuccess(params: Partial Date: Wed, 2 Jun 2021 17:47:40 +0000 Subject: [PATCH 49/66] feat: simplify ERC implementations by proc-macro Signed-off-by: Yaroslav Bolyukin --- crates/evm-coder-macros/Cargo.toml | 16 + crates/evm-coder-macros/src/lib.rs | 224 +++++++ .../src/solidity_interface.rs | 569 ++++++++++++++++++ crates/evm-coder-macros/src/to_log.rs | 170 ++++++ 4 files changed, 979 insertions(+) create mode 100644 crates/evm-coder-macros/Cargo.toml create mode 100644 crates/evm-coder-macros/src/lib.rs create mode 100644 crates/evm-coder-macros/src/solidity_interface.rs create mode 100644 crates/evm-coder-macros/src/to_log.rs diff --git a/crates/evm-coder-macros/Cargo.toml b/crates/evm-coder-macros/Cargo.toml new file mode 100644 index 0000000000..a1414d7a96 --- /dev/null +++ b/crates/evm-coder-macros/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "evm-coder-macros" +version = "0.1.0" +edition = "2018" + +[lib] +proc-macro = true + +[dependencies] +sha3 = "0.9.1" +quote = "1.0" +proc-macro2 = "1.0" +syn = { version = "1.0", features = ["full"] } +hex = "0.4.3" +Inflector = "0.11.4" +darling = "0.13.0" \ No newline at end of file diff --git a/crates/evm-coder-macros/src/lib.rs b/crates/evm-coder-macros/src/lib.rs new file mode 100644 index 0000000000..65508176ee --- /dev/null +++ b/crates/evm-coder-macros/src/lib.rs @@ -0,0 +1,224 @@ +use darling::FromMeta; +use inflector::cases; +use proc_macro::TokenStream; +use quote::quote; +use sha3::{Digest, Keccak256}; +use syn::{ + AttributeArgs, DeriveInput, GenericArgument, Ident, ItemTrait, Pat, Path, PathArguments, + PathSegment, Type, parse_macro_input, spanned::Spanned, +}; + +mod solidity_interface; +mod to_log; + +fn fn_selector_str(input: &str) -> u32 { + let mut hasher = Keccak256::new(); + hasher.update(input.as_bytes()); + let result = hasher.finalize(); + + let mut selector_bytes = [0; 4]; + selector_bytes.copy_from_slice(&result[0..4]); + + u32::from_be_bytes(selector_bytes) +} + +/// Returns solidity function selector (first 4 bytes of hash) by its +/// textual representation +/// +/// ```rs +/// use evm_coder_macros::fn_selector; +/// +/// assert_eq!(fn_selector!(transfer(address, uint256)), 0xa9059cbb); +/// ``` +#[proc_macro] +pub fn fn_selector(input: TokenStream) -> TokenStream { + let input = input.to_string().replace(' ', ""); + let selector = fn_selector_str(&input); + + (quote! { + #selector + }) + .into() +} + +fn event_selector_str(input: &str) -> [u8; 32] { + let mut hasher = Keccak256::new(); + hasher.update(input.as_bytes()); + let result = hasher.finalize(); + + let mut selector_bytes = [0; 32]; + selector_bytes.copy_from_slice(&result[0..32]); + selector_bytes +} + +/// Returns solidity topic (hash) by its textual representation +/// +/// ```rs +/// use evm_coder_macros::event_topic; +/// +/// assert_eq!( +/// format!("{:x}", event_topic!(Transfer(address, address, uint256))), +/// "ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", +/// ); +/// ``` +#[proc_macro] +pub fn event_topic(stream: TokenStream) -> TokenStream { + let input = stream.to_string().replace(' ', ""); + let selector_bytes = event_selector_str(&input); + + (quote! { + ::primitive_types::H256([#( + #selector_bytes, + )*]) + }) + .into() +} + +fn parse_path(ty: &Type) -> syn::Result<&Path> { + match &ty { + syn::Type::Path(pat) => { + if let Some(qself) = &pat.qself { + return Err(syn::Error::new(qself.ty.span(), "no receiver expected")); + } + Ok(&pat.path) + } + _ => Err(syn::Error::new(ty.span(), "expected ty to be path")), + } +} + +fn parse_path_segment(path: &Path) -> syn::Result<&PathSegment> { + if path.segments.len() != 1 { + return Err(syn::Error::new( + path.span(), + "expected path to have only segment", + )); + } + let last_segment = &path.segments.last().unwrap(); + Ok(last_segment) +} + +fn parse_ident_from_pat(pat: &Pat) -> syn::Result<&Ident> { + match pat { + Pat::Ident(i) => Ok(&i.ident), + _ => Err(syn::Error::new(pat.span(), "expected pat ident")), + } +} + +fn parse_ident_from_segment(segment: &PathSegment) -> syn::Result<&Ident> { + if segment.arguments != PathArguments::None { + return Err(syn::Error::new( + segment.arguments.span(), + "unexpected generic type", + )); + } + Ok(&segment.ident) +} + +fn parse_ident_from_path(path: &Path) -> syn::Result<&Ident> { + let segment = parse_path_segment(path)?; + parse_ident_from_segment(segment) +} + +fn parse_ident_from_type(ty: &Type) -> syn::Result<&Ident> { + let path = parse_path(ty)?; + parse_ident_from_path(path) +} + +// Gets T out of Result +fn parse_result_ok(ty: &Type) -> syn::Result<&Ident> { + let path = parse_path(ty)?; + let segment = parse_path_segment(path)?; + + if segment.ident != "Result" { + return Err(syn::Error::new( + ty.span(), + "expected Result as return type (no renamed aliases allowed)", + )); + } + let args = match &segment.arguments { + PathArguments::AngleBracketed(e) => e, + _ => { + return Err(syn::Error::new( + segment.arguments.span(), + "missing Result generics", + )) + } + }; + + let args = &args.args; + let arg = args.first().unwrap(); + + let ty = match arg { + GenericArgument::Type(ty) => ty, + _ => { + return Err(syn::Error::new( + arg.span(), + "expected first generic to be type", + )) + } + }; + + parse_ident_from_type(ty) +} + +fn pascal_ident_to_call(ident: &Ident) -> Ident { + let name = format!("{}Call", ident); + Ident::new(&name, ident.span()) +} +fn snake_ident_to_pascal(ident: &Ident) -> Ident { + let name = ident.to_string(); + let name = cases::pascalcase::to_pascal_case(&name); + Ident::new(&name, ident.span()) +} +fn snake_ident_to_screaming(ident: &Ident) -> Ident { + let name = ident.to_string(); + let name = cases::screamingsnakecase::to_screaming_snake_case(&name); + Ident::new(&name, ident.span()) +} +fn pascal_ident_to_snake_call(ident: &Ident) -> Ident { + let name = ident.to_string(); + let name = cases::snakecase::to_snake_case(&name); + let name = format!("call_{}", name); + Ident::new(&name, ident.span()) +} + +fn format_ty(ty: &Ident) -> String { + if ty == "string" { + format!("{} memory", ty) + } else { + ty.to_string() + } +} + +#[proc_macro_attribute] +pub fn solidity_interface(args: TokenStream, stream: TokenStream) -> TokenStream { + let args = parse_macro_input!(args as AttributeArgs); + let args = solidity_interface::InterfaceInfo::from_list(&args).unwrap(); + + let input: ItemTrait = match syn::parse(stream) { + Ok(t) => t, + Err(e) => return e.to_compile_error().into(), + }; + + match solidity_interface::SolidityInterface::try_from(args, &input) { + Ok(v) => v.expand(), + Err(e) => e.to_compile_error(), + } + .into() +} + +#[proc_macro_attribute] +pub fn solidity(_args: TokenStream, stream: TokenStream) -> TokenStream { + stream +} + +#[proc_macro_derive(ToLog, attributes(indexed))] +pub fn to_log(value: TokenStream) -> TokenStream { + let input = parse_macro_input!(value as DeriveInput); + + match to_log::Events::try_from(&input) { + Ok(e) => e.expand(), + Err(e) => e.to_compile_error(), + } + .into() +} diff --git a/crates/evm-coder-macros/src/solidity_interface.rs b/crates/evm-coder-macros/src/solidity_interface.rs new file mode 100644 index 0000000000..f9fa931fcf --- /dev/null +++ b/crates/evm-coder-macros/src/solidity_interface.rs @@ -0,0 +1,569 @@ +use quote::quote; +use darling::FromMeta; +use inflector::cases; +use std::fmt::Write; +use syn::{ + FnArg, Ident, ItemTrait, Meta, NestedMeta, PatType, Path, ReturnType, TraitItem, + TraitItemMethod, Visibility, spanned::Spanned, +}; + +use crate::{ + fn_selector_str, format_ty, parse_ident_from_pat, parse_ident_from_path, parse_ident_from_type, + parse_result_ok, pascal_ident_to_call, pascal_ident_to_snake_call, snake_ident_to_pascal, + snake_ident_to_screaming, +}; + +struct Is { + name: Ident, + pascal_call_name: Ident, + snake_call_name: Ident, +} +impl Is { + fn try_from(path: &Path) -> syn::Result { + let name = parse_ident_from_path(path)?.clone(); + Ok(Self { + pascal_call_name: pascal_ident_to_call(&name), + snake_call_name: pascal_ident_to_snake_call(&name), + name, + }) + } + + fn expand_call_def(&self) -> proc_macro2::TokenStream { + let name = &self.name; + let pascal_call_name = &self.pascal_call_name; + quote! { + #name(#pascal_call_name) + } + } + + fn expand_interface_id(&self) -> proc_macro2::TokenStream { + let pascal_call_name = &self.pascal_call_name; + quote! { + interface_id ^= #pascal_call_name::interface_id(); + } + } + + fn expand_supports_interface(&self) -> proc_macro2::TokenStream { + let pascal_call_name = &self.pascal_call_name; + quote! { + #pascal_call_name::supports_interface(interface_id) + } + } + + fn expand_variant_call(&self) -> proc_macro2::TokenStream { + let name = &self.name; + let snake_call_name = &self.snake_call_name; + quote! { + InternalCall::#name(call) => return self.#snake_call_name(Msg { + call, + caller: c.caller, + value: c.value, + }) + } + } + + fn expand_call_inner(&self) -> proc_macro2::TokenStream { + let snake_call_name = &self.snake_call_name; + let pascal_call_name = &self.pascal_call_name; + quote! { + fn #snake_call_name(&mut self, c: Msg<#pascal_call_name>) -> ::core::result::Result<::evm_coder::abi::AbiWriter, Self::Error>; + } + } + + fn expand_parse(&self) -> proc_macro2::TokenStream { + let name = &self.name; + let pascal_call_name = &self.pascal_call_name; + quote! { + if let Some(parsed_call) = #pascal_call_name::parse(method_id, reader)? { + return Ok(Some(Self::#name(parsed_call))) + } + } + } +} + +#[derive(Default)] +struct IsList(Vec); +impl FromMeta for IsList { + fn from_list(items: &[NestedMeta]) -> darling::Result { + let mut out = Vec::new(); + for item in items { + match item { + NestedMeta::Meta(Meta::Path(path)) => out.push(Is::try_from(path)?), + _ => return Err(syn::Error::new(item.span(), "expected path").into()), + } + } + Ok(Self(out)) + } +} + +#[derive(FromMeta)] +pub struct InterfaceInfo { + #[darling(default)] + is: IsList, + #[darling(default)] + inline_is: IsList, + #[darling(default)] + _events: IsList, +} + +#[derive(FromMeta)] +struct MethodInfo { + #[darling(default)] + rename_selector: Option, +} + +struct MethodArg { + name: Ident, + ty: Ident, +} +impl MethodArg { + fn try_from(value: &PatType) -> syn::Result { + Ok(Self { + name: parse_ident_from_pat(&value.pat)?.clone(), + ty: parse_ident_from_type(&value.ty)?.clone(), + }) + } + fn is_value(&self) -> bool { + self.ty == "value" + } + fn is_caller(&self) -> bool { + self.ty == "caller" + } + fn is_special(&self) -> bool { + self.is_value() || self.is_caller() + } + fn selector_ty(&self) -> &Ident { + assert!(!self.is_special()); + &self.ty + } + + fn expand_call_def(&self) -> proc_macro2::TokenStream { + assert!(!self.is_special()); + let name = &self.name; + let ty = &self.ty; + + quote! { + #name: #ty + } + } + + fn expand_parse(&self) -> proc_macro2::TokenStream { + assert!(!self.is_special()); + let name = &self.name; + quote! { + #name: reader.abi_read()? + } + } + + fn expand_call_arg(&self) -> proc_macro2::TokenStream { + if self.is_value() { + quote! { + c.value.clone() + } + } else if self.is_caller() { + quote! { + c.caller.clone() + } + } else { + let name = &self.name; + quote! { + #name + } + } + } + + fn solidity_def(&self) -> String { + assert!(!self.is_special()); + format!("{} {}", format_ty(&self.ty), self.name) + } +} + +#[derive(PartialEq)] +enum Mutability { + Mutable, + View, + Pure, +} + +struct Method { + name: Ident, + camel_name: String, + pascal_name: Ident, + screaming_name: Ident, + selector_str: String, + selector: u32, + args: Vec, + has_normal_args: bool, + mutability: Mutability, + result: Ident, +} +impl Method { + fn try_from(value: &TraitItemMethod) -> syn::Result { + let mut info = MethodInfo { + rename_selector: None, + }; + for attr in &value.attrs { + let ident = parse_ident_from_path(&attr.path)?; + if ident == "solidity" { + let args = attr.parse_meta().unwrap(); + info = MethodInfo::from_meta(&args).unwrap(); + } else if ident == "doc" { + // TODO: Add docs to evm interfaces + } + } + let ident = &value.sig.ident; + let ident_str = ident.to_string(); + if !cases::snakecase::is_snake_case(&ident_str) { + return Err(syn::Error::new(ident.span(), "method name should be snake_cased\nif alternative solidity name needs to be set - use #[solidity] attribute")); + } + + let mut mutability = Mutability::Pure; + + if let Some(FnArg::Receiver(receiver)) = value + .sig + .inputs + .iter() + .find(|arg| matches!(arg, FnArg::Receiver(_))) + { + if receiver.reference.is_none() { + return Err(syn::Error::new( + receiver.span(), + "receiver should be by ref", + )); + } + if receiver.mutability.is_some() { + mutability = Mutability::Mutable; + } else { + mutability = Mutability::View; + } + } + let mut args = Vec::new(); + for typ in value + .sig + .inputs + .iter() + .filter(|arg| matches!(arg, FnArg::Typed(_))) + { + let typ = match typ { + FnArg::Typed(typ) => typ, + _ => unreachable!(), + }; + args.push(MethodArg::try_from(typ)?); + } + + if mutability != Mutability::Mutable && args.iter().any(|arg| arg.is_value()) { + return Err(syn::Error::new( + args.iter().find(|arg| arg.is_value()).unwrap().ty.span(), + "payable function should be mutable", + )); + } + + let result = match &value.sig.output { + ReturnType::Type(_, ty) => ty, + _ => return Err(syn::Error::new(value.sig.output.span(), "interface method should return Result\nif there is no value to return - specify void (which is alias to unit)")), + }; + let result = parse_result_ok(&result)?; + + let camel_name = info + .rename_selector + .unwrap_or_else(|| cases::camelcase::to_camel_case(&ident.to_string())); + let mut selector_str = camel_name.clone(); + selector_str.push('('); + let mut has_normal_args = false; + for (i, arg) in args.iter().filter(|arg| !arg.is_special()).enumerate() { + if i != 0 { + selector_str.push(','); + } + write!(selector_str, "{}", arg.selector_ty()).unwrap(); + has_normal_args = true; + } + selector_str.push(')'); + let selector = fn_selector_str(&selector_str); + + Ok(Self { + name: ident.clone(), + camel_name, + pascal_name: snake_ident_to_pascal(&ident), + screaming_name: snake_ident_to_screaming(&ident), + selector_str, + selector, + args, + has_normal_args, + mutability, + result: result.clone(), + }) + } + fn expand_call_def(&self) -> proc_macro2::TokenStream { + let defs = self + .args + .iter() + .filter(|a| !a.is_special()) + .map(|a| a.expand_call_def()); + let pascal_name = &self.pascal_name; + + if self.has_normal_args { + quote! { + #pascal_name { + #( + #defs, + )* + } + } + } else { + quote! {#pascal_name} + } + } + + fn expand_const(&self) -> proc_macro2::TokenStream { + let screaming_name = &self.screaming_name; + let selector = self.selector; + let selector_str = &self.selector_str; + quote! { + #[doc = #selector_str] + const #screaming_name: u32 = #selector; + } + } + + fn expand_interface_id(&self) -> proc_macro2::TokenStream { + let screaming_name = &self.screaming_name; + quote! { + interface_id ^= Self::#screaming_name; + } + } + + fn expand_parse(&self) -> proc_macro2::TokenStream { + let pascal_name = &self.pascal_name; + let screaming_name = &self.screaming_name; + if self.has_normal_args { + let parsers = self + .args + .iter() + .filter(|a| !a.is_special()) + .map(|a| a.expand_parse()); + quote! { + Self::#screaming_name => return Ok(Some(Self::#pascal_name { + #( + #parsers, + )* + })) + } + } else { + quote! { Self::#screaming_name => return Ok(Some(Self::#pascal_name)) } + } + } + + fn expand_variant_call(&self) -> proc_macro2::TokenStream { + let pascal_name = &self.pascal_name; + let name = &self.name; + + let matcher = if self.has_normal_args { + let names = self + .args + .iter() + .filter(|a| !a.is_special()) + .map(|a| &a.name); + + quote! {{ + #( + #names, + )* + }} + } else { + quote! {} + }; + + let receiver = match self.mutability { + Mutability::Mutable | Mutability::View => quote! {self.}, + Mutability::Pure => quote! {Self::}, + }; + let args = self.args.iter().map(|a| a.expand_call_arg()); + + quote! { + InternalCall::#pascal_name #matcher => { + let result = #receiver #name( + #( + #args, + )* + )?; + (&result).abi_write(&mut writer); + } + } + } + + fn solidity_def(&self) -> String { + let mut out = format!("function {}(", self.camel_name); + for (i, arg) in self.args.iter().filter(|a| !a.is_special()).enumerate() { + if i != 0 { + out.push_str(", "); + } + out.push_str(&arg.solidity_def()); + } + out.push(')'); + match self.mutability { + Mutability::Mutable => {} + Mutability::View => write!(out, " view").unwrap(), + Mutability::Pure => write!(out, " pure").unwrap(), + } + if self.result != "void" { + write!(out, " returns ({})", format_ty(&self.result)).unwrap(); + } + out.push(';'); + out + } +} + +pub struct SolidityInterface { + vis: Visibility, + name: Ident, + info: InterfaceInfo, + methods: Vec, + items: Vec, +} +impl SolidityInterface { + pub fn try_from(info: InterfaceInfo, value: &ItemTrait) -> syn::Result { + let mut found_error = false; + let mut methods = Vec::new(); + + for item in &value.items { + match item { + TraitItem::Type(ty) => { + if ty.ident == "Error" { + found_error = true; + } + } + TraitItem::Method(method) => methods.push(Method::try_from(&method)?), + _ => {} + } + } + if !found_error { + return Err(syn::Error::new( + value.span(), + "expected associated type called Error, which should implement From<&str>", + )); + } + Ok(Self { + vis: value.vis.clone(), + name: value.ident.clone(), + info, + methods, + items: value.items.clone(), + }) + } + pub fn expand(self) -> proc_macro2::TokenStream { + let vis = self.vis; + let name = self.name; + let items = self.items; + + let call_name = pascal_ident_to_call(&name); + + let call_sub = self + .info + .inline_is + .0 + .iter() + .chain(self.info.is.0.iter()) + .map(Is::expand_call_def); + let call_inner = self + .info + .inline_is + .0 + .iter() + .chain(self.info.is.0.iter()) + .map(Is::expand_call_inner); + let call_parse = self + .info + .inline_is + .0 + .iter() + .chain(self.info.is.0.iter()) + .map(Is::expand_parse); + let call_variants = self + .info + .inline_is + .0 + .iter() + .chain(self.info.is.0.iter()) + .map(Is::expand_variant_call); + + let inline_interface_id = self.info.inline_is.0.iter().map(Is::expand_interface_id); + let supports_interface = self.info.is.0.iter().map(Is::expand_supports_interface); + + let calls = self.methods.iter().map(Method::expand_call_def); + let consts = self.methods.iter().map(Method::expand_const); + let interface_id = self.methods.iter().map(Method::expand_interface_id); + let parsers = self.methods.iter().map(Method::expand_parse); + let call_variants_this = self.methods.iter().map(Method::expand_variant_call); + + // let methods = self.methods.iter().map(Method::solidity_def); + + quote! { + #[derive(Debug)] + #vis enum #call_name { + #( + #calls, + )* + #( + #call_sub, + )* + } + impl #call_name { + #( + #consts + )* + pub fn parse(method_id: u32, reader: &mut ::evm_coder::abi::AbiReader) -> ::evm_coder::abi::Result> { + use ::evm_coder::abi::AbiRead; + match method_id { + #( + #parsers, + )* + _ => {}, + } + #( + #call_parse + )else* + return Ok(None); + } + pub const fn interface_id() -> u32 { + let mut interface_id = 0; + #(#interface_id)* + #(#inline_interface_id)* + interface_id + } + pub fn supports_interface(interface_id: u32) -> bool { + interface_id != 0xffffff && ( + interface_id == Self::interface_id() + #( + || #supports_interface + )* + ) + } + } + #vis trait #name { + #( + #items + )* + #( + #call_inner + )* + fn call(&mut self, c: Msg<#call_name>) -> ::core::result::Result<::evm_coder::abi::AbiWriter, Self::Error> { + use ::evm_coder::abi::AbiWrite; + type InternalCall = #call_name; + match c.call { + #( + #call_variants, + )* + _ => {}, + } + let mut writer = ::evm_coder::abi::AbiWriter::default(); + match c.call { + #( + #call_variants_this, + )* + _ => unreachable!() + } + Ok(writer) + } + } + } + } +} diff --git a/crates/evm-coder-macros/src/to_log.rs b/crates/evm-coder-macros/src/to_log.rs new file mode 100644 index 0000000000..9e616f6c82 --- /dev/null +++ b/crates/evm-coder-macros/src/to_log.rs @@ -0,0 +1,170 @@ +use syn::{Data, DeriveInput, Field, Fields, Ident, Variant, spanned::Spanned}; +use std::fmt::Write; +use quote::quote; + +use crate::{parse_ident_from_path, parse_ident_from_type, snake_ident_to_screaming}; + +struct EventField { + name: Ident, + ty: Ident, + indexed: bool, +} + +impl EventField { + fn try_from(field: &Field) -> syn::Result { + let name = field.ident.as_ref().unwrap(); + let ty = parse_ident_from_type(&field.ty)?; + let mut indexed = false; + for attr in &field.attrs { + if let Ok(ident) = parse_ident_from_path(&attr.path) { + if ident == "indexed" { + indexed = true; + } + } + } + Ok(Self { + name: name.to_owned(), + ty: ty.to_owned(), + indexed, + }) + } +} + +struct Event { + name: Ident, + name_screaming: Ident, + fields: Vec, + selector: [u8; 32], + selector_str: String, +} + +impl Event { + fn try_from(variant: &Variant) -> syn::Result { + let name = &variant.ident; + let name_screaming = snake_ident_to_screaming(&name); + + let named = match &variant.fields { + Fields::Named(named) => named, + _ => { + return Err(syn::Error::new( + variant.fields.span(), + "expected named fields", + )) + } + }; + let mut fields = Vec::new(); + for field in &named.named { + fields.push(EventField::try_from(&field)?); + } + let mut selector_str = format!("{}(", name); + for (i, arg) in fields.iter().enumerate() { + if i != 0 { + write!(selector_str, ",").unwrap(); + } + write!(selector_str, "{}", arg.ty).unwrap(); + } + selector_str.push(')'); + let selector = crate::event_selector_str(&selector_str); + + Ok(Self { + name: name.to_owned(), + name_screaming, + fields, + selector, + selector_str, + }) + } + + fn expand_serializers(&self) -> proc_macro2::TokenStream { + let name = &self.name; + let name_screaming = &self.name_screaming; + let fields = self.fields.iter().map(|f| &f.name); + + let indexed = self.fields.iter().filter(|f| f.indexed).map(|f| &f.name); + let plain = self.fields.iter().filter(|f| !f.indexed).map(|f| &f.name); + + quote! { + Self::#name {#( + #fields, + )*} => { + topics.push(topic::from(Self::#name_screaming)); + #( + topics.push(#indexed.to_topic()); + )* + #( + #plain.abi_write(&mut writer); + )* + } + } + } + + fn expand_consts(&self) -> proc_macro2::TokenStream { + let name_screaming = &self.name_screaming; + let selector_str = &self.selector_str; + let selector = &self.selector; + + quote! { + #[doc = #selector_str] + const #name_screaming: [u8; 32] = [#( + #selector, + )*]; + } + } +} + +pub struct Events { + name: Ident, + events: Vec, +} + +impl Events { + pub fn try_from(data: &DeriveInput) -> syn::Result { + let name = &data.ident; + let en = match &data.data { + Data::Enum(en) => en, + _ => return Err(syn::Error::new(data.span(), "expected enum")), + }; + let mut events = Vec::new(); + for variant in &en.variants { + events.push(Event::try_from(variant)?); + } + Ok(Self { + name: name.to_owned(), + events, + }) + } + pub fn expand(&self) -> proc_macro2::TokenStream { + let name = &self.name; + + let consts = self.events.iter().map(Event::expand_consts); + let serializers = self.events.iter().map(Event::expand_serializers); + + quote! { + impl #name { + #( + #consts + )* + } + + #[automatically_derived] + impl ::evm_coder::events::ToLog for #name { + fn to_log(&self, contract: address) -> ::ethereum::Log { + use ::evm_coder::events::ToTopic; + use ::evm_coder::abi::AbiWrite; + let mut writer = ::evm_coder::abi::AbiWriter::new(); + let mut topics = Vec::new(); + match self { + #( + #serializers, + )* + } + ::ethereum::Log { + address: contract, + topics, + data: writer.finish(), + } + } + } + } + } +} From e7090813beb3174d9e855cd385b922c53a4b6912 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Wed, 2 Jun 2021 17:48:41 +0000 Subject: [PATCH 50/66] refactor: move evm-coder impl to its own crate Signed-off-by: Yaroslav Bolyukin --- crates/evm-coder/Cargo.toml | 17 ++ crates/evm-coder/src/abi.rs | 311 +++++++++++++++++++++++++++++++++ crates/evm-coder/src/events.rs | 42 +++++ crates/evm-coder/src/lib.rs | 69 ++++++++ crates/evm-coder/tests/a.rs | 69 ++++++++ pallets/nft/src/eth/abi.rs | 204 --------------------- 6 files changed, 508 insertions(+), 204 deletions(-) create mode 100644 crates/evm-coder/Cargo.toml create mode 100644 crates/evm-coder/src/abi.rs create mode 100644 crates/evm-coder/src/events.rs create mode 100644 crates/evm-coder/src/lib.rs create mode 100644 crates/evm-coder/tests/a.rs delete mode 100644 pallets/nft/src/eth/abi.rs diff --git a/crates/evm-coder/Cargo.toml b/crates/evm-coder/Cargo.toml new file mode 100644 index 0000000000..5463445a2a --- /dev/null +++ b/crates/evm-coder/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "evm-coder" +version = "0.1.0" +edition = "2018" + +[dependencies] +evm-coder-macros = { path = "../evm-coder-macros" } +primitive-types = { version = "0.9", default-features = false } +hex-literal = "0.3" +ethereum = { version = "0.7.1", default-features = false } + +[dev-dependencies] +hex = "0.4.3" + +[features] +default = ["std"] +std = ["ethereum/std", "primitive-types/std"] \ No newline at end of file diff --git a/crates/evm-coder/src/abi.rs b/crates/evm-coder/src/abi.rs new file mode 100644 index 0000000000..e737367657 --- /dev/null +++ b/crates/evm-coder/src/abi.rs @@ -0,0 +1,311 @@ +//! TODO: I misunterstood therminology, abi IS rlp encoded, so +//! this module should be replaced with rlp crate + +#![allow(dead_code)] + +#[cfg(not(feature = "std"))] +use alloc::{ + string::{String, ToString}, + vec::Vec, +}; +use primitive_types::{H160, U256}; + +use crate::types::string; + +const ABI_ALIGNMENT: usize = 32; + +pub type Result = core::result::Result; + +#[derive(Clone)] +pub struct AbiReader<'i> { + buf: &'i [u8], + offset: usize, +} +impl<'i> AbiReader<'i> { + pub fn new(buf: &'i [u8]) -> Self { + Self { buf, offset: 0 } + } + pub fn new_call(buf: &'i [u8]) -> Result<(u32, Self)> { + if buf.len() < 4 { + return Err("missing method id"); + } + let mut method_id = [0; 4]; + method_id.copy_from_slice(&buf[0..4]); + + Ok((u32::from_be_bytes(method_id), Self { buf, offset: 4 })) + } + + fn read_padleft(&mut self) -> Result<[u8; S]> { + if self.buf.len() - self.offset < 32 { + return Err("missing padding"); + } + let mut block = [0; S]; + // Verify padding is empty + if !self.buf[self.offset..self.offset + ABI_ALIGNMENT - S] + .iter() + .all(|&v| v == 0) + { + return Err("non zero padding (wrong types?)"); + } + block.copy_from_slice( + &self.buf[self.offset + ABI_ALIGNMENT - S..self.offset + ABI_ALIGNMENT], + ); + self.offset += ABI_ALIGNMENT; + Ok(block) + } + + pub fn address(&mut self) -> Result { + Ok(H160(self.read_padleft()?)) + } + + pub fn bool(&mut self) -> Result { + let data: [u8; 1] = self.read_padleft()?; + match data[0] { + 0 => Ok(false), + 1 => Ok(true), + _ => Err("wrong bool value"), + } + } + + pub fn bytes4(&mut self) -> Result<[u8; 4]> { + self.read_padleft() + } + + pub fn bytes(&mut self) -> Result> { + let mut subresult = self.subresult()?; + let length = subresult.read_usize()?; + if subresult.buf.len() <= subresult.offset + length { + return Err("bytes out of bounds"); + } + Ok(subresult.buf[subresult.offset..subresult.offset + length].into()) + } + + pub fn uint32(&mut self) -> Result { + Ok(u32::from_be_bytes(self.read_padleft()?)) + } + + pub fn uint128(&mut self) -> Result { + Ok(u128::from_be_bytes(self.read_padleft()?)) + } + + pub fn uint256(&mut self) -> Result { + let buf: [u8; 32] = self.read_padleft()?; + Ok(U256::from_big_endian(&buf)) + } + + pub fn uint64(&mut self) -> Result { + Ok(u64::from_be_bytes(self.read_padleft()?)) + } + + pub fn read_usize(&mut self) -> Result { + Ok(usize::from_be_bytes(self.read_padleft()?)) + } + + fn subresult(&mut self) -> Result> { + let offset = self.read_usize()?; + Ok(AbiReader { + buf: &self.buf, + offset: offset + self.offset, + }) + } + + pub fn is_finished(&self) -> bool { + self.buf.len() == self.offset + } +} + +#[derive(Default)] +pub struct AbiWriter { + static_part: Vec, + dynamic_part: Vec<(usize, AbiWriter)>, +} +impl AbiWriter { + pub fn new() -> Self { + Self::default() + } + pub fn new_call(method_id: u32) -> Self { + let mut val = Self::new(); + val.static_part.extend(&method_id.to_be_bytes()); + val + } + + fn write_padleft(&mut self, block: &[u8]) { + assert!(block.len() <= ABI_ALIGNMENT); + self.static_part + .extend(&[0; ABI_ALIGNMENT][0..ABI_ALIGNMENT - block.len()]); + self.static_part.extend(block); + } + + fn write_padright(&mut self, bytes: &[u8]) { + assert!(bytes.len() <= ABI_ALIGNMENT); + self.static_part.extend(bytes); + self.static_part + .extend(&[0; ABI_ALIGNMENT][0..ABI_ALIGNMENT - bytes.len()]); + } + + pub fn address(&mut self, address: &H160) { + self.write_padleft(&address.0) + } + + pub fn bool(&mut self, value: &bool) { + self.write_padleft(&[if *value { 1 } else { 0 }]) + } + + pub fn uint8(&mut self, value: &u8) { + self.write_padleft(&[*value]) + } + + pub fn uint32(&mut self, value: &u32) { + self.write_padleft(&u32::to_be_bytes(*value)) + } + + pub fn uint128(&mut self, value: &u128) { + self.write_padleft(&u128::to_be_bytes(*value)) + } + + /// This method writes u128, and exists only for convenience, because there is + /// no u256 support in rust + pub fn uint256(&mut self, value: &U256) { + let mut out = [0; 32]; + value.to_big_endian(&mut out); + self.write_padleft(&out) + } + + pub fn write_usize(&mut self, value: &usize) { + self.write_padleft(&usize::to_be_bytes(*value)) + } + + pub fn write_subresult(&mut self, result: Self) { + self.dynamic_part.push((self.static_part.len(), result)); + // Empty block, to be filled later + self.write_padleft(&[]); + } + + pub fn memory(&mut self, value: &[u8]) { + let mut sub = Self::new(); + sub.write_usize(&value.len()); + for chunk in value.chunks(ABI_ALIGNMENT) { + sub.write_padright(chunk); + } + self.write_subresult(sub); + } + + pub fn string(&mut self, value: &str) { + self.memory(value.as_bytes()) + } + + pub fn finish(mut self) -> Vec { + for (static_offset, part) in self.dynamic_part { + let part_offset = self.static_part.len(); + + let encoded_dynamic_offset = usize::to_be_bytes(part_offset - static_offset); + self.static_part[static_offset + ABI_ALIGNMENT - encoded_dynamic_offset.len() + ..static_offset + ABI_ALIGNMENT] + .copy_from_slice(&encoded_dynamic_offset); + self.static_part.extend(part.finish()) + } + self.static_part + } +} + +pub trait AbiRead { + fn abi_read(&mut self) -> Result; +} + +macro_rules! impl_abi_readable { + ($ty:ty, $method:ident) => { + impl AbiRead<$ty> for AbiReader<'_> { + fn abi_read(&mut self) -> Result<$ty> { + self.$method() + } + } + }; +} + +impl_abi_readable!(u32, uint32); +impl_abi_readable!(u128, uint128); +impl_abi_readable!(U256, uint256); +impl_abi_readable!(H160, address); +impl_abi_readable!(Vec, bytes); +impl_abi_readable!(bool, bool); + +pub trait AbiWrite { + fn abi_write(&self, writer: &mut AbiWriter); +} + +macro_rules! impl_abi_writeable { + ($ty:ty, $method:ident) => { + impl AbiWrite for $ty { + fn abi_write(&self, writer: &mut AbiWriter) { + writer.$method(&self) + } + } + }; +} + +impl_abi_writeable!(u8, uint8); +impl_abi_writeable!(u32, uint32); +impl_abi_writeable!(u128, uint128); +impl_abi_writeable!(U256, uint256); +impl_abi_writeable!(H160, address); +impl_abi_writeable!(bool, bool); +impl_abi_writeable!(&str, string); +impl AbiWrite for &string { + fn abi_write(&self, writer: &mut AbiWriter) { + writer.string(&self) + } +} + +impl AbiWrite for () { + fn abi_write(&self, _writer: &mut AbiWriter) {} +} + +/// Error, which can be constructed from any ToString type +/// Encoded to Abi as Error(string) +#[derive(Debug)] +pub struct StringError(String); + +impl From for StringError +where + E: ToString, +{ + fn from(e: E) -> Self { + Self(e.to_string()) + } +} + +impl From for AbiWriter { + fn from(v: StringError) -> Self { + let mut out = AbiWriter::new_call(crate::fn_selector!(Error(string))); + out.string(&v.0); + out + } +} + +#[macro_export] +macro_rules! abi_decode { + ($reader:expr, $($name:ident: $typ:ident),+ $(,)?) => { + $( + let $name = $reader.$typ()?; + )+ + } +} +#[macro_export] +macro_rules! abi_encode { + ($($typ:ident($value:expr)),* $(,)?) => {{ + #[allow(unused_mut)] + let mut writer = ::evm_coder::abi::AbiWriter::new(); + $( + writer.$typ($value); + )* + writer + }}; + (call $val:expr; $($typ:ident($value:expr)),* $(,)?) => {{ + #[allow(unused_mut)] + let mut writer = ::evm_coder::abi::AbiWriter::new_call($val); + $( + writer.$typ($value); + )* + writer + }} +} diff --git a/crates/evm-coder/src/events.rs b/crates/evm-coder/src/events.rs new file mode 100644 index 0000000000..ca93f43ac3 --- /dev/null +++ b/crates/evm-coder/src/events.rs @@ -0,0 +1,42 @@ +use ethereum::Log; +use primitive_types::{H160, H256}; + +use crate::types::*; + +pub trait ToLog { + fn to_log(&self, contract: H160) -> Log; +} + +pub trait ToTopic { + fn to_topic(&self) -> H256; +} + +impl ToTopic for H256 { + fn to_topic(&self) -> H256 { + *self + } +} + +impl ToTopic for uint256 { + fn to_topic(&self) -> H256 { + let mut out = [0u8; 32]; + self.to_big_endian(&mut out); + H256(out) + } +} + +impl ToTopic for address { + fn to_topic(&self) -> H256 { + let mut out = [0u8; 32]; + out[12..32].copy_from_slice(&self.0); + H256(out) + } +} + +impl ToTopic for uint32 { + fn to_topic(&self) -> H256 { + let mut out = [0u8; 32]; + out[28..32].copy_from_slice(&self.to_be_bytes()); + H256(out) + } +} diff --git a/crates/evm-coder/src/lib.rs b/crates/evm-coder/src/lib.rs new file mode 100644 index 0000000000..55a25e5ed0 --- /dev/null +++ b/crates/evm-coder/src/lib.rs @@ -0,0 +1,69 @@ +#![cfg_attr(not(feature = "std"), no_std)] +#[cfg(not(feature = "std"))] +extern crate alloc; + +pub use evm_coder_macros::{event_topic, fn_selector, solidity_interface, solidity, ToLog}; +pub mod abi; +pub mod events; +pub use events::ToLog; + +/// Solidity type definitions +pub mod types { + #![allow(non_camel_case_types)] + + #[cfg(not(feature = "std"))] + use alloc::{vec::Vec}; + use primitive_types::{U256, H160, H256}; + + pub type address = H160; + + pub type uint8 = u8; + pub type uint16 = u16; + pub type uint32 = u32; + pub type uint64 = u64; + pub type uint128 = u128; + pub type uint256 = U256; + + pub type bytes4 = u32; + + pub type topic = H256; + + #[cfg(not(feature = "std"))] + pub type string = ::alloc::string::String; + #[cfg(feature = "std")] + pub type string = ::std::string::String; + pub type bytes = Vec; + + pub type void = (); + + //#region Special types + /// Makes function payable + pub type value = U256; + /// Makes function caller-sensitive + pub type caller = address; + //#endregion + + pub struct Msg { + pub call: C, + pub caller: H160, + pub value: U256, + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn function_selector_generation() { + assert_eq!(fn_selector!(transfer(address, uint256)), 0xa9059cbb); + } + + #[test] + fn event_topic_generation() { + assert_eq!( + hex::encode(&event_topic!(Transfer(address, address, uint256))[..]), + "ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + ); + } +} diff --git a/crates/evm-coder/tests/a.rs b/crates/evm-coder/tests/a.rs new file mode 100644 index 0000000000..331b4664c1 --- /dev/null +++ b/crates/evm-coder/tests/a.rs @@ -0,0 +1,69 @@ +use evm_coder::{solidity_interface, types::*, ToLog}; +use evm_coder_macros::solidity; + +#[solidity_interface] +trait OurInterface { + type Error; + fn fn_a(&self, input: uint256) -> Result; +} + +#[solidity_interface] +trait OurInterface1 { + type Error; + fn fn_b(&self, input: uint128) -> Result; +} + +#[solidity_interface(is(OurInterface), inline_is(OurInterface1), events(ERC721Log))] +trait OurInterface2 { + type Error; + #[solidity(rename_selector = "fnK")] + fn fn_c(&self, input: uint32) -> Result; + fn fn_d(&self, value: uint32) -> Result; + + fn caller_sensitive(&self, caller: caller) -> Result; + fn payable(&mut self, value: value) -> Result; +} + +#[derive(ToLog)] +enum ERC721Log { + Transfer { + #[indexed] + from: address, + #[indexed] + to: address, + value: uint256, + }, + Eee { + #[indexed] + aaa: address, + bbb: uint256, + }, +} + +#[solidity_interface] +trait ERC20 { + type Error; + + fn decimals(&self) -> Result; + fn balance_of(&self, owner: address) -> Result; + fn transfer( + &mut self, + caller: caller, + to: address, + value: uint256, + ) -> Result; + fn transfer_from( + &mut self, + caller: caller, + from: address, + to: address, + value: uint256, + ) -> Result; + fn approve( + &mut self, + caller: caller, + spender: address, + value: uint256, + ) -> Result; + fn allowance(&self, owner: address, spender: address) -> Result; +} diff --git a/pallets/nft/src/eth/abi.rs b/pallets/nft/src/eth/abi.rs deleted file mode 100644 index b546aed59c..0000000000 --- a/pallets/nft/src/eth/abi.rs +++ /dev/null @@ -1,204 +0,0 @@ -//! TODO: I misunterstood therminology, abi IS rlp encoded, so -//! this module should be replaced with rlp crate - -use sp_core::H160; - -#[cfg(feature = "std")] -use std; -#[cfg(not(feature = "std"))] -use sp_std as std; - -use std::vec::Vec; - -const ABI_ALIGNMENT: usize = 32; - -type Result = std::result::Result; - -pub struct AbiReader<'i> { - buf: &'i [u8], - offset: usize, -} -impl<'i> AbiReader<'i> { - pub fn new_call(buf: &'i [u8]) -> Result<(u32, Self)> { - if buf.len() < 4 { - return Err("missing method id") - } - let mut method_id = [0; 4]; - method_id.copy_from_slice(&buf[0..4]); - - Ok((u32::from_be_bytes(method_id), Self { - buf, - offset: 4, - })) - } - - fn read_padleft(&mut self) -> Result<[u8; S]> { - if self.buf.len() - self.offset < 32 { - return Err("missing padding") - } - let mut block = [0; S]; - // Verify padding is empty - if !self.buf[self.offset..self.offset + ABI_ALIGNMENT - S].iter().all(|&v| v == 0) { - return Err("non zero padding (wrong types?)") - } - block.copy_from_slice(&self.buf[self.offset + ABI_ALIGNMENT - S..self.offset + ABI_ALIGNMENT]); - self.offset += ABI_ALIGNMENT; - Ok(block) - } - - pub fn address(&mut self) -> Result { - Ok(H160(self.read_padleft()?)) - } - - pub fn uint32(&mut self) -> Result { - Ok(u32::from_be_bytes(self.read_padleft()?)) - } - - pub fn uint128(&mut self) -> Result { - Ok(u128::from_be_bytes(self.read_padleft()?)) - } - - pub fn uint256(&mut self) -> Result { - self.uint128() - } - - pub fn uint64(&mut self) -> Result { - Ok(usize::from_be_bytes(self.read_padleft()?)) - } - - fn subresult(&mut self) -> Result> { - let offset = self.uint64()?; - if offset > usize::MAX { - return Err("subresult overflow"); - } - Ok(AbiReader { - buf: &self.buf, - offset: offset + self.offset, - }) - } - - pub fn is_finished(&self) -> bool { - self.buf.len() == self.offset - } -} - -pub struct AbiWriter { - static_part: Vec, - dynamic_part: Vec<(usize, AbiWriter)>, -} -impl AbiWriter { - pub fn new() -> Self { - Self { - static_part: Vec::new(), - dynamic_part: Vec::new(), - } - } - pub fn new_call(method_id: u32) -> Self { - let mut val = Self::new(); - val.static_part.extend(&method_id.to_be_bytes()); - val - } - - fn write_padleft(&mut self, block: &[u8]) { - assert!(block.len() <= ABI_ALIGNMENT); - self.static_part.extend(&[0; ABI_ALIGNMENT][0..ABI_ALIGNMENT - block.len()]); - self.static_part.extend(block); - } - - fn write_padright(&mut self, bytes: &[u8]) { - assert!(bytes.len() <= ABI_ALIGNMENT); - self.static_part.extend(bytes); - self.static_part.extend(&[0; ABI_ALIGNMENT][0..ABI_ALIGNMENT - bytes.len()]); - } - - pub fn address(&mut self, address: H160) { - self.write_padleft(&address.0) - } - - pub fn bool(&mut self, value: bool) { - self.write_padleft(&[if value { 1 } else { 0 }]) - } - - pub fn uint8(&mut self, value: u8) { - self.write_padleft(&[value]) - } - - pub fn uint128(&mut self, value: u128) { - self.write_padleft(&u128::to_be_bytes(value)) - } - - /// This method writes u128, and exists only for convenience, because there is - /// no u256 support in rust - pub fn uint256(&mut self, value: u128) { - self.uint128(value) - } - - pub fn write_usize(&mut self, value: usize) { - self.write_padleft(&usize::to_be_bytes(value)) - } - - pub fn write_u8(&mut self, value: u8) { - self.write_padleft(&[value]) - } - - pub fn write_subresult(&mut self, result: Self) { - self.dynamic_part.push((self.static_part.len(), result)); - // Empty block, to be filled later - self.write_padleft(&[]); - } - - pub fn memory(&mut self, value: &[u8]) { - let mut sub = Self::new(); - sub.write_usize(value.len()); - for chunk in value.chunks(ABI_ALIGNMENT) { - sub.write_padright(chunk); - } - self.write_subresult(sub); - } - - pub fn string(&mut self, value: &str) { - self.memory(value.as_bytes()) - } - - pub fn finish(mut self) -> Vec { - for (static_offset, part) in self.dynamic_part { - let part_offset = self.static_part.len(); - - let encoded_dynamic_offset = usize::to_be_bytes(part_offset - static_offset); - self.static_part - [static_offset + ABI_ALIGNMENT - encoded_dynamic_offset.len()..static_offset + ABI_ALIGNMENT] - .copy_from_slice(&encoded_dynamic_offset); - self.static_part.extend(part.finish()) - } - self.static_part - } -} - -#[macro_export] -macro_rules! abi_decode { - ($reader:expr, $($name:ident: $typ:ident),+ $(,)?) => { - $( - let $name = $reader.$typ()?; - )+ - } -} - -#[macro_export] -macro_rules! abi_encode { - ($($typ:ident($value:expr)),* $(,)?) => {{ - #[allow(unused_mut)] - let mut writer = crate::eth::abi::AbiWriter::new(); - $( - writer.$typ($value); - )* - writer - }}; - (call $val:expr; $($typ:ident($value:expr)),* $(,)?) => {{ - #[allow(unused_mut)] - let mut writer = AbiWriter::new_call($val); - $( - writer.$typ($value); - )* - writer - }} -} \ No newline at end of file From 5e83d89cfacd7815a00e3c3afcb0cebbe5026301 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Wed, 2 Jun 2021 17:49:59 +0000 Subject: [PATCH 51/66] feat: describe ERCs in terms of new proc-macro Signed-off-by: Yaroslav Bolyukin --- pallets/nft/src/eth/erc.rs | 134 +++++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 pallets/nft/src/eth/erc.rs diff --git a/pallets/nft/src/eth/erc.rs b/pallets/nft/src/eth/erc.rs new file mode 100644 index 0000000000..dcd441c86a --- /dev/null +++ b/pallets/nft/src/eth/erc.rs @@ -0,0 +1,134 @@ +use evm_coder::{solidity_interface, solidity, types::*, ToLog}; +use sp_std::vec::Vec; + +#[solidity_interface] +pub trait InlineNameSymbol { + type Error; + + fn name(&self) -> Result; + fn symbol(&self) -> Result; +} + +#[solidity_interface] +pub trait InlineTotalSupply { + type Error; + + fn total_supply(&self) -> Result; +} + +#[solidity_interface] +pub trait ERC165 { + type Error; + + fn supports_interface(&self, interface_id: bytes4) -> Result; +} + +#[solidity_interface(inline_is(InlineNameSymbol))] +pub trait ERC721Metadata { + type Error; + + #[solidity(rename_selector = "tokenURI")] + fn token_uri(&self, token_id: uint256) -> Result; +} + +#[solidity_interface(inline_is(InlineTotalSupply))] +pub trait ERC721Enumerable { + type Error; + + fn token_by_index(&self, index: uint256) -> Result; + fn token_of_owner_by_index(&self, owner: address, index: uint256) -> Result; +} + + +#[derive(ToLog)] +pub enum ERC721Events { + Transfer { + #[indexed] from: address, + #[indexed] to: address, + #[indexed] token_id: uint256, + }, + Approval { + #[indexed] owner: address, + #[indexed] approved: address, + #[indexed] token_id: uint256, + }, + #[allow(dead_code)] + ApprovalForAll { + #[indexed] owner: address, + #[indexed] operator: address, + approved: bool, + } +} + +#[solidity_interface(is(ERC165), events(ERC721Events))] +pub trait ERC721 { + type Error; + + fn balance_of(&self, owner: address) -> Result; + fn owner_of(&self, token_id: uint256) -> Result; + + #[solidity(rename_selector = "safeTransferFrom")] + fn safe_transfer_from_with_data(&mut self, from: address, to: address, token_id: uint256, data: bytes, value: value) -> Result; + fn safe_transfer_from(&mut self, from: address, to: address, token_id: uint256, value: value) -> Result; + + fn transfer_from(&mut self, caller: caller, from: address, to: address, token_id: uint256, value: value) -> Result; + fn approve(&mut self, caller: caller, approved: address, token_id: uint256, value: value) -> Result; + fn set_approval_for_all(&mut self, caller: caller, operator: address, approved: bool) -> Result; + + fn get_approved(&self, token_id: uint256) -> Result; + fn is_approved_for_all(&self, owner: address, operator: address) -> Result; +} + +#[solidity_interface] +pub trait ERC721UniqueExtensions { + type Error; + + fn transfer(&mut self, caller: caller, to: address, token_id: uint256, value: value) -> Result; +} + +#[solidity_interface(is(ERC165, ERC721, ERC721Metadata, ERC721Enumerable, ERC721UniqueExtensions))] +pub trait UniqueNFT { + type Error; +} + +#[derive(ToLog)] +pub enum ERC20Events { + Transfer { + #[indexed] from: address, + #[indexed] to: address, + value: uint256, + }, + Approval { + #[indexed] owner: address, + #[indexed] spender: address, + value: uint256, + } +} + +#[solidity_interface(inline_is(InlineNameSymbol, InlineTotalSupply), events(ERC20Events))] +pub trait ERC20 { + type Error; + + fn decimals(&self) -> Result; + fn balance_of(&self, owner: address) -> Result; + fn transfer(&mut self, caller: caller, to: address, value: uint256) -> Result; + fn transfer_from(&mut self, caller: caller, from: address, to: address, value: uint256) -> Result; + fn approve(&mut self, caller: caller, spender: address, value: uint256) -> Result; + fn allowance(&self, owner: address, spender: address) -> Result; +} + +#[solidity_interface(is(ERC165, ERC20, ERC20UniqueExtensions))] +pub trait UniqueFungible { + type Error; +} + +/// Runtime metadata like helpers for evm +#[solidity_interface] +trait UniqueHelpers { + type Error; + + /// Returns interface for NFT collections + fn nft_interface(&self) -> Result; + /// Returns interface for Fungible collections + fn fungible_interface(&self) -> Result; +} \ No newline at end of file From 4a53d88957b687e431a3ffb94e33ecc8fd65df52 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Wed, 2 Jun 2021 17:55:41 +0000 Subject: [PATCH 52/66] fix: serde no_std usage Signed-off-by: Yaroslav Bolyukin --- pallets/inflation/Cargo.toml | 2 +- pallets/inflation/src/lib.rs | 3 +-- pallets/nft/Cargo.toml | 2 +- pallets/nft/src/eth/account.rs | 3 +-- pallets/nft/src/lib.rs | 6 +++--- pallets/nft/src/types.rs | 3 +-- 6 files changed, 8 insertions(+), 11 deletions(-) diff --git a/pallets/inflation/Cargo.toml b/pallets/inflation/Cargo.toml index 4c01a63fcf..9ec5f288d4 100644 --- a/pallets/inflation/Cargo.toml +++ b/pallets/inflation/Cargo.toml @@ -19,7 +19,7 @@ package = 'parity-scale-codec' version = '2.0.0' [dependencies] -serde = { version = "1.0.119" } +serde = { default-features = false, version = "1.0.119", features = ["derive"] } frame-support = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } frame-system = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } pallet-balances = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } diff --git a/pallets/inflation/src/lib.rs b/pallets/inflation/src/lib.rs index 80dbeedbeb..164bac8b04 100644 --- a/pallets/inflation/src/lib.rs +++ b/pallets/inflation/src/lib.rs @@ -10,8 +10,7 @@ #[cfg(feature = "std")] pub use std::*; -#[cfg(feature = "std")] -pub use serde::*; +pub use serde::{Serialize, Deserialize}; #[cfg(feature = "runtime-benchmarks")] mod benchmarking; diff --git a/pallets/nft/Cargo.toml b/pallets/nft/Cargo.toml index 477ca9713a..167b71024b 100644 --- a/pallets/nft/Cargo.toml +++ b/pallets/nft/Cargo.toml @@ -19,7 +19,7 @@ package = 'parity-scale-codec' version = '2.0.0' [dependencies] -serde = { version = "1.0.119" } +serde = { default-features = false, version = "1.0.119", features = ["derive"] } frame-support = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } frame-system = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } pallet-balances = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } diff --git a/pallets/nft/src/eth/account.rs b/pallets/nft/src/eth/account.rs index 67598ddfca..f8f45ea864 100644 --- a/pallets/nft/src/eth/account.rs +++ b/pallets/nft/src/eth/account.rs @@ -2,7 +2,6 @@ use crate::Config; use codec::{Encode, EncodeLike, Decode}; use sp_core::{H160, H256, crypto::AccountId32}; use core::cmp::Ordering; -#[cfg(feature = "std")] use serde::{Serialize, Deserialize}; use pallet_evm::AddressMapping; use sp_std::vec::Vec; @@ -21,7 +20,7 @@ pub trait CrossAccountId: } #[derive(Eq)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] pub struct BasicCrossAccountId { /// If true - then ethereum is canonical encoding from_ethereum: bool, diff --git a/pallets/nft/src/lib.rs b/pallets/nft/src/lib.rs index e2f9913620..3131156dcb 100644 --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -7,8 +7,8 @@ #![cfg_attr(not(feature = "std"), no_std)] -#[cfg(feature = "std")] -pub use serde::*; + +pub use serde::{Serialize, Deserialize}; use core::ops::{Deref, DerefMut}; use codec::{Decode, Encode}; @@ -71,7 +71,7 @@ pub type TokenId = u32; pub type DecimalPoints = u8; #[derive(Encode, Decode, Eq, Debug, Clone, PartialEq)] -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] +#[derive(Serialize, Deserialize)] pub enum CollectionMode { Invalid, NFT, diff --git a/pallets/nft/src/types.rs b/pallets/nft/src/types.rs index e54d0c89c8..c2bae445c2 100644 --- a/pallets/nft/src/types.rs +++ b/pallets/nft/src/types.rs @@ -1,8 +1,7 @@ #[cfg(feature = "std")] pub use std::*; -#[cfg(feature = "std")] -pub use serde::*; +pub use serde::{Serealize, Deserialize}; use codec::{Decode, Encode}; From 1a0920c2b43222921db3b94cba66ba8e1a08691b Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Wed, 2 Jun 2021 17:56:34 +0000 Subject: [PATCH 53/66] build: specify evm-coder dependencies Signed-off-by: Yaroslav Bolyukin --- Cargo.lock | 75 +++++++++++++++++++++++++++++++++++++++++- Cargo.toml | 2 ++ pallets/nft/Cargo.toml | 5 +++ 3 files changed, 81 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 8c8a736470..c023de43b8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -827,7 +827,7 @@ dependencies = [ "ansi_term 0.11.0", "atty", "bitflags", - "strsim", + "strsim 0.8.0", "textwrap", "unicode-width", "vec_map", @@ -1182,6 +1182,41 @@ dependencies = [ "zeroize", ] +[[package]] +name = "darling" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "757c0ded2af11d8e739c4daea1ac623dd1624b06c844cf3f5a39f1bdbd99bb12" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c34d8efb62d0c2d7f60ece80f75e5c63c1588ba68032740494b0b9a996466e3" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade7bff147130fe5e6d39f089c6bd49ec0250f35d70b2eebf72afdfc919f15cc" +dependencies = [ + "darling_core", + "quote", + "syn", +] + [[package]] name = "data-encoding" version = "2.3.2" @@ -1527,6 +1562,30 @@ dependencies = [ "sha3 0.8.2", ] +[[package]] +name = "evm-coder" +version = "0.1.0" +dependencies = [ + "ethereum", + "evm-coder-macros", + "hex", + "hex-literal", + "primitive-types 0.9.0", +] + +[[package]] +name = "evm-coder-macros" +version = "0.1.0" +dependencies = [ + "Inflector", + "darling", + "hex", + "proc-macro2", + "quote", + "sha3 0.9.1", + "syn", +] + [[package]] name = "evm-core" version = "0.26.0" @@ -2677,6 +2736,12 @@ dependencies = [ "webpki", ] +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + [[package]] name = "idna" version = "0.1.5" @@ -4527,6 +4592,7 @@ version = "3.0.0" dependencies = [ "ethereum", "ethereum-tx-sign", + "evm-coder", "fp-evm", "frame-benchmarking", "frame-support", @@ -4540,6 +4606,7 @@ dependencies = [ "pallet-timestamp", "pallet-transaction-payment", "parity-scale-codec 2.1.1", + "primitive-types 0.9.0", "rlp 0.5.0", "serde", "sp-api", @@ -7781,6 +7848,12 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + [[package]] name = "structopt" version = "0.3.21" diff --git a/Cargo.toml b/Cargo.toml index 185f987585..9772016e8a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,6 +4,8 @@ members = [ 'node', 'pallets/nft', 'runtime', + 'crates/evm-coder', + 'crates/evm-coder-macros', ] [profile.release] panic = 'unwind' diff --git a/pallets/nft/Cargo.toml b/pallets/nft/Cargo.toml index 167b71024b..6bf0f739ed 100644 --- a/pallets/nft/Cargo.toml +++ b/pallets/nft/Cargo.toml @@ -41,6 +41,9 @@ ethereum-tx-sign = { version = "3.0.4", optional = true } ethereum = { default-features = false, version = "0.7.1" } rlp = { default-features = false, version = "0.5.0" } +evm-coder = { default-features = false, path = "../../crates/evm-coder" } +primitive-types = { version = "0.9.0", default-features = false } + hex-literal = "0.3.1" [features] @@ -64,5 +67,7 @@ std = [ 'rlp/std', 'ethereum-tx-sign', + 'primitive-types/std', + 'evm-coder/std', ] runtime-benchmarks = ["frame-benchmarking"] From d612b7eed2eb588f18f351239245b2846ce979f8 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Wed, 2 Jun 2021 19:18:45 +0000 Subject: [PATCH 54/66] refactor: switch to macro-based ERC impls Signed-off-by: Yaroslav Bolyukin --- pallets/nft/src/eth/erc_impl.rs | 283 ++++++++++++++++++++++++++++++ pallets/nft/src/eth/mod.rs | 300 ++++++++------------------------ 2 files changed, 359 insertions(+), 224 deletions(-) create mode 100644 pallets/nft/src/eth/erc_impl.rs diff --git a/pallets/nft/src/eth/erc_impl.rs b/pallets/nft/src/eth/erc_impl.rs new file mode 100644 index 0000000000..fc6c3527ca --- /dev/null +++ b/pallets/nft/src/eth/erc_impl.rs @@ -0,0 +1,283 @@ +use core::char::{decode_utf16, REPLACEMENT_CHARACTER}; +use evm_coder::{ + abi::{AbiWriter, StringError}, + types::*, +}; +use core::convert::TryInto; +use alloc::format; +use crate::{Allowances, Module, Balance, CollectionHandle, CollectionMode, Config, NftItemList}; +use frame_support::storage::StorageDoubleMap; +use pallet_evm::AddressMapping; +use super::erc::*; +use super::account::CrossAccountId; + +type Result = core::result::Result; + +impl InlineNameSymbol for CollectionHandle { + type Error = StringError; + + fn name(&self) -> Result { + Ok(decode_utf16(self.name.iter().copied()) + .map(|r| r.unwrap_or(REPLACEMENT_CHARACTER)) + .collect::()) + } + + fn symbol(&self) -> Result { + Ok(string::from_utf8_lossy(&self.token_prefix).into()) + } +} + +impl InlineTotalSupply for CollectionHandle { + type Error = StringError; + + fn total_supply(&self) -> Result { + // TODO: we do not track total amount of all tokens + Ok(0.into()) + } +} + +impl ERC721Metadata for CollectionHandle { + type Error = StringError; + + fn token_uri(&self, token_id: uint256) -> Result { + // TODO: We should standartize url prefix, maybe via offchain schema? + Ok(format!("unique.network/{}/{}", self.id, token_id)) + } + + fn call_inline_name_symbol(&mut self, c: Msg) -> Result { + ::call(self, c) + } +} + +impl ERC721Enumerable for CollectionHandle { + type Error = StringError; + + fn token_by_index(&self, index: uint256) -> Result { + Ok(index) + } + + fn token_of_owner_by_index(&self, owner: address, index: uint256) -> Result { + // TODO: Not implemetable + Err("not implemented".into()) + } + + fn call_inline_total_supply(&mut self, c: Msg) -> Result { + ::call(self, c) + } +} + +impl ERC721 for CollectionHandle { + type Error = StringError; + + fn balance_of(&self, owner: address) -> Result { + let owner = T::EvmAddressMapping::into_account_id(owner); + let balance = >::get(self.id, owner); + Ok(balance.into()) + } + fn owner_of(&self, token_id: uint256) -> Result

{ + let token_id: u32 = token_id.try_into().map_err(|_| "token id overflow")?; + let token = >::get(self.id, token_id).ok_or("unknown token")?; + Ok(token.owner.as_eth().clone()) + } + fn safe_transfer_from_with_data( + &mut self, + _from: address, + _to: address, + _token_id: uint256, + _data: bytes, + _value: value, + ) -> Result { + // TODO: Not implemetable + Err("not implemented".into()) + } + fn safe_transfer_from( + &mut self, + _from: address, + _to: address, + _token_id: uint256, + _value: value, + ) -> Result { + // TODO: Not implemetable + Err("not implemented".into()) + } + + fn transfer_from( + &mut self, + caller: caller, + from: address, + to: address, + token_id: uint256, + _value: value, + ) -> Result { + let caller = T::CrossAccountId::from_eth(caller); + let from = T::CrossAccountId::from_eth(from); + let to = T::CrossAccountId::from_eth(to); + let token_id = token_id.try_into().map_err(|_| "token_id overflow")?; + + >::transfer_from_internal(&caller, &from, &to, &self, token_id, 1) + .map_err(|_| "transferFrom error")?; + Ok(()) + } + + fn approve( + &mut self, + caller: caller, + approved: address, + token_id: uint256, + _value: value, + ) -> Result { + let caller = T::CrossAccountId::from_eth(caller); + let approved = T::CrossAccountId::from_eth(approved); + let token_id = token_id.try_into().map_err(|_| "token_id overflow")?; + + >::approve_internal(&caller, &approved, &self, token_id, 1) + .map_err(|_| "approve internal")?; + Ok(()) + } + + fn set_approval_for_all( + &mut self, + _caller: caller, + _operator: address, + _approved: bool, + ) -> Result { + // TODO: Not implemetable + Err("not implemented".into()) + } + + fn get_approved(&self, _token_id: uint256) -> Result
{ + // TODO: Not implemetable + Err("not implemented".into()) + } + + fn is_approved_for_all(&self, _owner: address, _operator: address) -> Result
{ + // TODO: Not implemetable + Err("not implemented".into()) + } + + fn call_erc165(&mut self, c: Msg) -> Result { + let ERC165Call::SupportsInterface { interface_id } = c.call; + Ok(evm_coder::abi_encode!(bool( + &ERC721Call::supports_interface(interface_id) + ))) + } +} + +impl ERC721UniqueExtensions for CollectionHandle { + type Error = StringError; + fn transfer( + &mut self, + caller: caller, + to: address, + token_id: uint256, + value: value, + ) -> Result { + let caller = T::CrossAccountId::from_eth(caller); + let to = T::CrossAccountId::from_eth(to); + let token_id = token_id.try_into().map_err(|_| "amount overflow")?; + + >::transfer_internal(&caller, &to, &self, token_id, 1) + .map_err(|_| "transfer error")?; + Ok(()) + } +} + +impl UniqueNFT for CollectionHandle { + type Error = StringError; + fn call_erc165(&mut self, c: Msg) -> Result { + let ERC165Call::SupportsInterface { interface_id } = c.call; + Ok(evm_coder::abi_encode!(bool( + &UniqueNFTCall::supports_interface(interface_id) + ))) + } + fn call_erc721(&mut self, c: Msg) -> Result { + ::call(self, c) + } + fn call_erc721_metadata(&mut self, c: Msg) -> Result { + ::call(self, c) + } + fn call_erc721_enumerable(&mut self, c: Msg) -> Result { + ::call(self, c) + } + fn call_erc721_unique_extensions( + &mut self, + c: Msg, + ) -> Result { + ::call(self, c) + } +} + +impl ERC20 for CollectionHandle { + type Error = StringError; + fn decimals(&self) -> Result { + Ok(if let CollectionMode::Fungible(decimals) = &self.mode { + *decimals + } else { + unreachable!() + }) + } + fn balance_of(&self, owner: address) -> Result { + let owner = T::EvmAddressMapping::into_account_id(owner); + let balance = >::get(self.id, owner); + Ok(balance.into()) + } + fn transfer(&mut self, caller: caller, to: address, amount: uint256) -> Result { + let caller = T::CrossAccountId::from_eth(caller); + let to = T::CrossAccountId::from_eth(to); + let amount = amount.try_into().map_err(|_| "amount overflow")?; + + >::transfer_internal(&caller, &to, &self, 1, amount) + .map_err(|_| "transfer error")?; + Ok(true) + } + fn transfer_from( + &mut self, + caller: caller, + from: address, + to: address, + amount: uint256, + ) -> Result { + let caller = T::CrossAccountId::from_eth(caller); + let from = T::CrossAccountId::from_eth(from); + let to = T::CrossAccountId::from_eth(to); + let amount = amount.try_into().map_err(|_| "amount overflow")?; + + >::transfer_from_internal(&caller, &from, &to, &self, 1, amount) + .map_err(|_| "transferFrom error")?; + Ok(true) + } + fn approve(&mut self, caller: caller, spender: address, amount: uint256) -> Result { + let caller = T::CrossAccountId::from_eth(caller); + let spender = T::CrossAccountId::from_eth(spender); + let amount = amount.try_into().map_err(|_| "amount overflow")?; + + >::approve_internal(&caller, &spender, &self, 1, amount) + .map_err(|_| "approve internal")?; + Ok(true) + } + fn allowance(&self, owner: address, spender: address) -> Result { + let owner = T::CrossAccountId::from_eth(owner); + let spender = T::CrossAccountId::from_eth(spender); + + Ok(>::get(self.id, (1, owner.as_sub(), spender.as_sub())).into()) + } + fn call_inline_name_symbol(&mut self, c: Msg) -> Result { + ::call(self, c) + } + fn call_inline_total_supply(&mut self, c: Msg) -> Result { + ::call(self, c) + } +} + +impl UniqueFungible for CollectionHandle { + type Error = StringError; + fn call_erc165(&mut self, c: Msg) -> Result { + let ERC165Call::SupportsInterface { interface_id } = c.call; + Ok(evm_coder::abi_encode!(bool( + &UniqueNFTCall::supports_interface(interface_id) + ))) + } + fn call_erc20(&mut self, c: Msg) -> Result { + ::call(self, c) + } +} diff --git a/pallets/nft/src/eth/mod.rs b/pallets/nft/src/eth/mod.rs index e38989db00..fda9035ee1 100644 --- a/pallets/nft/src/eth/mod.rs +++ b/pallets/nft/src/eth/mod.rs @@ -36,209 +36,63 @@ pub fn collection_id_to_address(id: u32) -> H160 { H160(out) } -fn result_to_output(result: Result>, logs: Vec) -> PrecompileOutput { - sp_io::storage::start_transaction(); - match result { - Ok(result) => { - sp_io::storage::commit_transaction(); - // TODO: weight - PrecompileOutput(ExitReason::Succeed(ExitSucceed::Returned), result.finish(), 0, logs) - } - Err(Some(s)) => { - sp_io::storage::rollback_transaction(); - // Error(string) - let mut out = AbiWriter::new_call(0x08c379a0); - out.string(&s); - PrecompileOutput(ExitReason::Revert(ExitRevert::Reverted), out.finish(), 0, Vec::new()) - } - Err(None) => { - sp_io::storage::rollback_transaction(); - PrecompileOutput(ExitReason::Revert(ExitRevert::Reverted), Vec::new(), 0, Vec::new()) - } - } -} - -fn call_internal(sender: H160, collection: &CollectionHandle, method_id: u32, mut input: AbiReader) -> Result> { - let erc20 = matches!(collection.mode, CollectionMode::Fungible(_)); - let erc721 = matches!(collection.mode, CollectionMode::NFT); - - Ok(match method_id { - // function name() external view returns (string memory) - fn_selector!(name()) => { - let name = collection.name.iter() - .map(|&e| e.try_into().ok() as Option) - .collect::>>() - .ok_or(Some("non-ascii name"))?; - - crate::abi_encode!(memory(&name)) - } - // function symbol() external view returns (string memory) - fn_selector!(symbol()) => { - let name = collection.token_prefix.iter() - .map(|&e| e.is_ascii_uppercase().then(|| e)) - .collect::>>() - .ok_or(Some("non-uppercase prefix"))?; - - crate::abi_encode!(memory(&name)) - } - // function decimals() external view returns (uint8 decimals) - fn_selector!(decimals()) if erc20 => { - if let CollectionMode::Fungible(decimals) = &collection.mode { - crate::abi_encode!(uint8(*decimals)) - } else { - unreachable!() +fn call_internal( + collection: &mut CollectionHandle, + caller: caller, + method_id: u32, + mut input: AbiReader, + value: U256, +) -> Result, evm_coder::abi::StringError> { + match collection.mode.clone() { + CollectionMode::Fungible(_) => { + #[cfg(feature = "std")] + { + println!("Parse fungible call {:x}", method_id); } - } - // function totalSupply() external view returns (uint256) - fn_selector!(totalSupply()) if erc20 || erc721 => { - // TODO: can't be implemented, as we don't track total amount of fungibles - crate::abi_encode!(uint256(0)) - } - // function balanceOf(address account) external view returns (uint256) - fn_selector!(balanceOf(address)) if erc20 || erc721 => { - crate::abi_decode!(input, account: address); - let account = T::EvmAddressMapping::into_account_id(account); - let balance = >::get(collection.id, account); - crate::abi_encode!(uint256(balance)) - } - // function ownerOf(uint256 tokenId) external view returns (address) - fn_selector!(ownerOf(uint256)) if erc721 => { - crate::abi_decode!(input, token_id: uint256); - let token_id: u32 = token_id.try_into().map_err(|_| "bad token id")?; - - let token = >::get(collection.id, token_id).ok_or("unknown token")?; - - crate::abi_encode!(address(token.owner.as_eth().clone())) - } - // function transfer(address recipient, uint256 amount) external returns (bool) { - fn_selector!(transfer(address, uint256)) if erc20 => { - crate::abi_decode!(input, recipient: address, amount: uint256); - let sender = T::CrossAccountId::from_eth(sender); - let recipient = T::CrossAccountId::from_eth(recipient); - - >::transfer_internal( - &sender, - &recipient, - &collection, - 1, - amount, - ).map_err(|_| "transfer error")?; - - crate::abi_encode!(bool(true)) - } - - fn_selector!(transfer(address, uint256)) if erc721 => { - crate::abi_decode!(input, recipient: address, token_id: uint256); - let sender = T::CrossAccountId::from_eth(sender); - let recipient = T::CrossAccountId::from_eth(recipient); - let token_id: u32 = token_id.try_into().map_err(|_| "bad token id")?; - - >::transfer_internal( - &sender, - &recipient, - &collection, - token_id, - 1, - ).map_err(|_| "transfer error")?; - - crate::abi_encode!(bool(true)) - } - - // function allowance(address owner, address spender) external view returns (uint256) - fn_selector!(allowance(address, address)) if erc20 => { - crate::abi_decode!(input, owner: address, spender: address); - let owner = T::EvmAddressMapping::into_account_id(owner); - let spender = T::EvmAddressMapping::into_account_id(spender); - let allowance = >::get(collection.id, (1, &owner, &spender)); - crate::abi_encode!(uint256(allowance)) - } - // function approve(address spender, uint256 amount) external returns (bool) - // FIXME: All current implementations resets amount to specified value, ours - adds it - // FIXME: Our implementation doesn't handle resets (approve with zero amount) - fn_selector!(approve(address, uint256)) if erc20 => { - crate::abi_decode!(input, spender: address, amount: uint256); - let sender = T::CrossAccountId::from_eth(sender); - let spender = T::CrossAccountId::from_eth(spender); - - >::approve_internal( - &sender, - &spender, - &collection, - 1, - amount, - ).map_err(|_| "approve error")?; - - crate::abi_encode!(bool(true)) - } - // function approve(address approved, uint256 tokenId) external payable - fn_selector!(approve(address, uint256)) if erc721 => { - crate::abi_decode!(input, approved: address, token_id: uint256); - let sender = T::CrossAccountId::from_eth(sender); - let approved = T::CrossAccountId::from_eth(approved); - let token_id = token_id.try_into().map_err(|_| "bad token id")?; - - >::approve_internal( - &sender, - &approved, - &collection, - token_id, - 1, - ).map_err(|_| "approve error")?; - crate::abi_encode!() - } - // function transferFrom(address sender, address recipient, uint256 amount) external returns (bool) - fn_selector!(transferFrom(address, address, uint256)) if erc20 => { - crate::abi_decode!(input, from: address, recipient: address, amount: uint256); - let sender = T::CrossAccountId::from_eth(sender); - let from = T::CrossAccountId::from_eth(from); - let recipient = T::CrossAccountId::from_eth(recipient); - - >::transfer_from_internal( - &sender, - &from, - &recipient, - &collection, - 1, - amount, - ).map_err(|_| "transfer_from error")?; - - crate::abi_encode!(bool(true)) - } - // function transferFrom(address from, address to, uint256 tokenId) external payable - fn_selector!(transferFrom(address, address, uint256)) if erc721 => { - crate::abi_decode!(input, from: address, recipient: address, token_id: uint256); - let sender = T::CrossAccountId::from_eth(sender); - let from = T::CrossAccountId::from_eth(from); - let recipient = T::CrossAccountId::from_eth(recipient); - let token_id = token_id.try_into().map_err(|_| "bad token id")?; - - >::transfer_from_internal( - &sender, - &from, - &recipient, - &collection, - token_id, - 1, - ).map_err(|_| "transfer_from error")?; - - crate::abi_encode!() - } - // function supportsInterface(bytes4 interfaceID) public pure returns (bool) - fn_selector!(supportsInterface(bytes4)) => { - crate::abi_decode!(input, interface_id: uint32); - let supports = match interface_id { - // ERC165 - 0x01ffc9a7 => true, - // ERC20 - 0x36372b07 if erc20 => true, - // ERC721 - 0x80ac58cd if erc721 => true, - _ => false, + let call = match UniqueFungibleCall::parse(method_id, &mut input)? { + Some(v) => v, + None => { + #[cfg(feature = "std")] + { + println!("Method not found"); + } + return Ok(None); + } + }; + #[cfg(feature = "std")] + { + dbg!(&call); + } + Ok(Some( as UniqueFungible>::call( + collection, + Msg { + call, + caller, + value, + }, + )?)) + } + CollectionMode::NFT => { + let call = match UniqueNFTCall::parse(method_id, &mut input)? { + Some(v) => v, + None => return Ok(None), }; - crate::abi_encode!(bool(supports)) + Ok(Some( as UniqueNFT>::call( + collection, + Msg { + call, + caller, + value, + }, + )?)) + } + _ => { + return Err(StringError::from( + "erc calls only supported to fungible and nft collections for now", + ) + .into()) } - _ => return Err(None) - }) + } } impl pallet_evm::OnMethodCall for NftErcSupport { @@ -265,36 +119,34 @@ impl pallet_evm::OnMethodCall for NftErcSupport { fn call( source: &H160, target: &H160, + gas_limit: u64, input: &[u8], + value: U256, ) -> Option { - let collection = map_eth_to_id(&target) - .and_then(>::get)?; + let mut collection = map_eth_to_id(&target) + .and_then(|id| >::get_with_gas_limit(id, gas_limit))?; let (method_id, input) = AbiReader::new_call(input).unwrap(); - let result = call_internal(*source, &collection, method_id, input); - Some(result_to_output(result, collection.logs.retrieve_logs_for_contract(*target))) + let result = call_internal(&mut collection, *source, method_id, input, value); + let cost = gas_limit - collection.gas_left(); + let logs = collection.logs.retrieve_logs(); + match result { + Ok(Some(v)) => Some(PrecompileOutput { + exit_status: ExitReason::Succeed(ExitSucceed::Returned), + cost, + logs, + output: v.finish(), + }), + Ok(None) => None, + Err(e) => Some(PrecompileOutput { + exit_status: ExitReason::Revert(ExitRevert::Reverted), + cost: 0, + logs: Default::default(), + output: AbiWriter::from(e).finish(), + }), + } } } -pub const TRANSFER_NFT_TOPIC: H256 = event_topic!(Transfer(address, address, uint256)); -pub const APPROVAL_NFT_TOPIC: H256 = event_topic!(Approval(address, address, uint256)); -// TODO: event ApprovalForAll(address indexed owner, address indexed operator, bool approved); - -pub const TRANSFER_FUNGIBLE_TOPIC: H256 = event_topic!(Transfer(address, address, uint256)); -pub const APPROVAL_FUNGIBLE_TOPIC: H256 = event_topic!(Approval(address, address, uint256)); - -pub fn address_to_topic(address: &H160) -> H256 { - let mut output = [0; 32]; - output[12..32].copy_from_slice(&address.0); - H256(output) -} - -pub fn u32_to_topic(id: u32) -> H256 { - let mut output = [0; 32]; - output[28..32].copy_from_slice(&id.to_be_bytes()); - H256(output) -} - - // TODO: This function is slow, and output can be memoized pub fn generate_transaction(collection_id: u32, chain_id: u64) -> ethereum::Transaction { let contract = collection_id_to_address(collection_id); From 8e8a175523283f9208dae6da134efd4343b8a16b Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Wed, 2 Jun 2021 19:20:42 +0000 Subject: [PATCH 55/66] refactor: switch to macro-based ERC logs Signed-off-by: Yaroslav Bolyukin --- pallets/nft/src/eth/log.rs | 34 +++---------- pallets/nft/src/lib.rs | 101 ++++++++++++++----------------------- 2 files changed, 45 insertions(+), 90 deletions(-) diff --git a/pallets/nft/src/eth/log.rs b/pallets/nft/src/eth/log.rs index 2a292843a2..ccab25ab77 100644 --- a/pallets/nft/src/eth/log.rs +++ b/pallets/nft/src/eth/log.rs @@ -1,41 +1,19 @@ -use pallet_evm::PrecompileLog; use sp_std::cell::RefCell; use sp_std::vec::Vec; use sp_core::{H160, H256}; +use ethereum::Log; #[derive(Default)] -pub struct LogRecorder(RefCell, Vec)>>); +pub struct LogRecorder(RefCell>); impl LogRecorder { pub fn is_empty(&self) -> bool { self.0.borrow().is_empty() } - pub fn log(&self, topics: Vec, data: super::abi::AbiWriter) { - self.0.borrow_mut().push((topics, data.finish())); + pub fn log(&self, log: Log) { + self.0.borrow_mut().push(log); } - fn retrieve_logs(self) -> Vec<(Vec, Vec)> { - self.0.replace(Vec::new()) - } - pub fn retrieve_logs_for_contract(self, contract: H160) -> Vec { - // TODO: Remove reallocation - self.retrieve_logs().into_iter() - .map(|(topics, data)| PrecompileLog(contract.clone(), topics, data)) - .collect() - } -} -impl Drop for LogRecorder { - fn drop(&mut self) { - #[cfg(feature = "std")] - { - // In debug mode, log recorder panics if dropped with logs left - let logs = self.0.borrow(); - if !logs.is_empty() { - eprintln!("Logs lost:"); - for line in logs.iter() { - eprintln!("{:?} {:?}", line.0, line.1); - } - panic!(); - } - } + pub fn retrieve_logs(self) -> Vec { + self.0.into_inner() } } diff --git a/pallets/nft/src/lib.rs b/pallets/nft/src/lib.rs index 3131156dcb..c64362c492 100644 --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -57,6 +57,7 @@ mod eth; pub use eth::NftErcSupport; pub use eth::account::*; +use eth::erc::{ERC20Events, ERC721Events}; pub const MAX_DECIMAL_POINTS: DecimalPoints = 30; pub const MAX_REFUNGIBLE_PIECES: u128 = 1_000_000_000_000_000_000_000; @@ -197,8 +198,8 @@ impl CollectionHandle { logs: eth::log::LogRecorder::default(), }) } - pub fn log(&self, topics: Vec, data: eth::abi::AbiWriter) { - self.logs.log(topics, data) + pub fn log(&self, log: impl evm_coder::ToLog) { + self.logs.log(log.to_log(self.evm_address)) } pub fn into_inner(self) -> Collection { self.collection.clone() @@ -1758,27 +1759,20 @@ impl Module { if matches!(collection.mode, CollectionMode::NFT) { // TODO: NFT: only one owner may exist for token in ERC721 - collection.log( - Vec::from([ - eth::APPROVAL_NFT_TOPIC, - eth::address_to_topic(sender.as_eth()), - eth::address_to_topic(spender.as_eth()), - eth::u32_to_topic(item_id), - ]), - abi_encode!(), - ); + collection.log(ERC721Events::Approval { + owner: *sender.as_eth(), + approved: *spender.as_eth(), + token_id: item_id.into(), + }); } if matches!(collection.mode, CollectionMode::Fungible(_)) { // TODO: NFT: only one owner may exist for token in ERC20 - collection.log( - Vec::from([ - eth::APPROVAL_FUNGIBLE_TOPIC, - eth::address_to_topic(sender.as_eth()), - eth::address_to_topic(spender.as_eth()), - ]), - abi_encode!(uint256(allowance.into())), - ); + collection.log(ERC20Events::Approval { + owner: *sender.as_eth(), + spender: *spender.as_eth(), + value: allowance.into() + }); } Self::deposit_event(RawEvent::Approved(collection.id, item_id, sender.clone(), spender.clone(), allowance)); @@ -1836,14 +1830,11 @@ impl Module { }; if matches!(collection.mode, CollectionMode::Fungible(_)) { - collection.log( - Vec::from([ - eth::APPROVAL_FUNGIBLE_TOPIC, - eth::address_to_topic(from.as_eth()), - eth::address_to_topic(sender.as_eth()), - ]), - abi_encode!(uint256(allowance.into())), - ); + collection.log(ERC20Events::Approval { + owner: *from.as_eth(), + spender: *sender.as_eth(), + value: allowance.into() + }); } Ok(()) @@ -2115,15 +2106,11 @@ impl Module { .ok_or(Error::::NumOverflow)?; >::insert(collection_id, item_owner.as_sub(), new_balance); - collection.log( - Vec::from([ - eth::TRANSFER_NFT_TOPIC, - eth::address_to_topic(&H160::default()), - eth::address_to_topic(item_owner.as_eth()), - eth::u32_to_topic(current_index), - ]), - abi_encode!(), - ); + collection.log(ERC721Events::Transfer { + from: H160::default(), + to: *item_owner.as_eth(), + token_id: current_index.into(), + }); Self::deposit_event(RawEvent::ItemCreated(collection_id, current_index, item_owner)); Ok(()) } @@ -2210,14 +2197,11 @@ impl Module { >::remove(collection_id, owner.as_sub()); } - collection.log( - Vec::from([ - eth::TRANSFER_FUNGIBLE_TOPIC, - eth::address_to_topic(owner.as_eth()), - eth::address_to_topic(&H160::default()), - ]), - abi_encode!(uint256(value.into())), - ); + collection.log(ERC20Events::Transfer { + from: *owner.as_eth(), + to: H160::default(), + value: value.into(), + }); Ok(()) } @@ -2236,7 +2220,7 @@ impl Module { } T::EthereumTransactionSender::submit_logs_transaction( eth::generate_transaction(collection.id, T::EthereumChainId::get()), - collection.logs.retrieve_logs_for_contract(eth::collection_id_to_address(collection.id)), + collection.logs.retrieve_logs(), ) } @@ -2344,14 +2328,11 @@ impl Module { >::insert(collection_id, owner.as_sub(), balance); } - collection.log( - Vec::from([ - eth::TRANSFER_FUNGIBLE_TOPIC, - eth::address_to_topic(owner.as_eth()), - eth::address_to_topic(recipient.as_eth()), - ]), - abi_encode!(uint256(value.into())), - ); + collection.log(ERC20Events::Transfer { + from: *owner.as_eth(), + to: *recipient.as_eth(), + value: value.into(), + }); Self::deposit_event(RawEvent::Transfer(collection.id, 1, owner.clone(), recipient.clone(), value)); Ok(()) @@ -2476,15 +2457,11 @@ impl Module { // update index collection Self::move_token_index(collection_id, item_id, &old_owner, &new_owner)?; - collection.log( - Vec::from([ - eth::TRANSFER_NFT_TOPIC, - eth::address_to_topic(sender.as_eth()), - eth::address_to_topic(new_owner.as_eth()), - eth::u32_to_topic(item_id), - ]), - abi_encode!(), - ); + collection.log(ERC721Events::Transfer { + from: *sender.as_eth(), + to: *new_owner.as_eth(), + token_id: item_id.into(), + }); Self::deposit_event(RawEvent::Transfer(collection.id, item_id, sender, new_owner, 1)); Ok(()) From f56d8764ed3cb8e43d94638b89217af738e8dffe Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Wed, 2 Jun 2021 19:21:25 +0000 Subject: [PATCH 56/66] docs: update tx generation comment Signed-off-by: Yaroslav Bolyukin --- pallets/nft/src/eth/mod.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pallets/nft/src/eth/mod.rs b/pallets/nft/src/eth/mod.rs index fda9035ee1..72575bf1fc 100644 --- a/pallets/nft/src/eth/mod.rs +++ b/pallets/nft/src/eth/mod.rs @@ -151,8 +151,7 @@ impl pallet_evm::OnMethodCall for NftErcSupport { pub fn generate_transaction(collection_id: u32, chain_id: u64) -> ethereum::Transaction { let contract = collection_id_to_address(collection_id); - // TODO: Make it work without native runtime by forking ethereum_tx_sign, and - // switching to pure-rust implementation of secp256k1 + // FIXME: Can be done on wasm runtime with https://github.com/paritytech/substrate/pull/8728 #[cfg(feature = "std")] { let signed = ethereum_tx_sign::RawTransaction { From 6bc566cd335b8160407ca260e04d2c12bfd21dea Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Wed, 2 Jun 2021 19:22:52 +0000 Subject: [PATCH 57/66] feat(pallet): evm gas metering Signed-off-by: Yaroslav Bolyukin --- pallets/nft/src/lib.rs | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/pallets/nft/src/lib.rs b/pallets/nft/src/lib.rs index c64362c492..c03cd27fd4 100644 --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -7,10 +7,12 @@ #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; pub use serde::{Serialize, Deserialize}; use core::ops::{Deref, DerefMut}; +use core::cell::RefCell; use codec::{Decode, Encode}; pub use frame_support::{ construct_runtime, decl_event, decl_module, decl_storage, decl_error, @@ -30,7 +32,7 @@ pub use frame_support::{ }; use frame_system::{self as system, ensure_signed, ensure_root}; -use sp_core::{H160, H256}; +use sp_core::H160; use sp_runtime::sp_std::prelude::Vec; use sp_runtime::{ traits::{ @@ -188,16 +190,34 @@ pub struct CollectionHandle { pub id: CollectionId, collection: Collection, logs: eth::log::LogRecorder, + evm_address: H160, + gas_limit: RefCell, } impl CollectionHandle { - pub fn get(id: CollectionId) -> Option { + pub fn get_with_gas_limit(id: CollectionId, gas_limit: u64) -> Option { >::get(id) .map(|collection| Self { id, collection, logs: eth::log::LogRecorder::default(), + evm_address: eth::collection_id_to_address(id), + gas_limit: RefCell::new(gas_limit), }) } + pub fn get(id: CollectionId) -> Option { + Self::get_with_gas_limit(id, u64::MAX) + } + pub fn gas_left(&self) -> u64 { + *self.gas_limit.borrow() + } + pub fn consume_gas(&self, gas: u64) -> DispatchResult { + let mut gas_limit = self.gas_limit.borrow_mut(); + if *gas_limit < gas { + fail!(Error::::OutOfGas); + } + *gas_limit -= gas; + Ok(()) + } pub fn log(&self, log: impl evm_coder::ToLog) { self.logs.log(log.to_log(self.evm_address)) } @@ -473,6 +493,8 @@ decl_error! { WrongRefungiblePieces, /// createRefungible should be called with one owner BadCreateRefungibleCall, + /// Gas limit exceeded + OutOfGas, } } @@ -1690,6 +1712,7 @@ impl Module { } pub fn transfer_internal(sender: &T::CrossAccountId, recipient: &T::CrossAccountId, target_collection: &CollectionHandle, item_id: TokenId, value: u128) -> DispatchResult { + target_collection.consume_gas(2000000)?; // Limits check Self::is_correct_transfer(target_collection, &recipient)?; @@ -1723,6 +1746,7 @@ impl Module { item_id: TokenId, amount: u128 ) -> DispatchResult { + collection.consume_gas(2000000)?; Self::token_exists(&collection, item_id)?; // Transfer permissions check @@ -1787,6 +1811,7 @@ impl Module { item_id: TokenId, amount: u128, ) -> DispatchResult { + collection.consume_gas(2000000)?; // Check approval let approval: u128 = >::get(collection.id, (item_id, from.as_sub(), sender.as_sub())); From 35f0b49c19be1a3dd168a86ba203847a73749a40 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Wed, 2 Jun 2021 19:23:49 +0000 Subject: [PATCH 58/66] style: reformat code Signed-off-by: Yaroslav Bolyukin --- pallets/nft/Cargo.toml | 2 +- pallets/nft/src/eth/account.rs | 3 ++- pallets/nft/src/eth/mod.rs | 42 +++++++++++++++++++++------------- 3 files changed, 29 insertions(+), 18 deletions(-) diff --git a/pallets/nft/Cargo.toml b/pallets/nft/Cargo.toml index 6bf0f739ed..e46ebb0a21 100644 --- a/pallets/nft/Cargo.toml +++ b/pallets/nft/Cargo.toml @@ -42,7 +42,7 @@ ethereum = { default-features = false, version = "0.7.1" } rlp = { default-features = false, version = "0.5.0" } evm-coder = { default-features = false, path = "../../crates/evm-coder" } -primitive-types = { version = "0.9.0", default-features = false } +primitive-types = { version = "0.9.0", default-features = false, features = ["serde_no_std"] } hex-literal = "0.3.1" diff --git a/pallets/nft/src/eth/account.rs b/pallets/nft/src/eth/account.rs index f8f45ea864..9b26fafd52 100644 --- a/pallets/nft/src/eth/account.rs +++ b/pallets/nft/src/eth/account.rs @@ -1,6 +1,7 @@ use crate::Config; use codec::{Encode, EncodeLike, Decode}; -use sp_core::{H160, H256, crypto::AccountId32}; +use sp_core::crypto::AccountId32; +use primitive_types::H160; use core::cmp::Ordering; use serde::{Serialize, Deserialize}; use pallet_evm::AddressMapping; diff --git a/pallets/nft/src/eth/mod.rs b/pallets/nft/src/eth/mod.rs index 72575bf1fc..04049ae345 100644 --- a/pallets/nft/src/eth/mod.rs +++ b/pallets/nft/src/eth/mod.rs @@ -1,25 +1,31 @@ pub mod account; -use account::CrossAccountId; -pub mod abi; -use abi::{AbiReader, AbiWriter}; +pub mod erc; +mod erc_impl; pub mod log; +pub mod sponsoring; +use evm_coder::abi::AbiWriter; +use evm_coder::abi::StringError; +use sp_std::prelude::*; use sp_std::borrow::ToOwned; use sp_std::vec::Vec; -use sp_std::convert::TryInto; -use codec::{Decode, Encode}; -use pallet_evm::{AddressMapping, PrecompileLog, PrecompileOutput, ExitReason, ExitRevert, ExitSucceed}; -use sp_core::{H160, H256}; -use frame_support::storage::{StorageMap, StorageDoubleMap}; +use pallet_evm::{PrecompileOutput, ExitReason, ExitRevert, ExitSucceed}; +use sp_core::{H160, U256}; +use frame_support::storage::StorageMap; -use crate::{Allowances, NftItemList, Module, Balance, Config, CollectionById, CollectionHandle, CollectionId, CollectionMode}; +use crate::{Config, CollectionById, CollectionHandle, CollectionId, CollectionMode}; + +use erc::{UniqueFungible, UniqueFungibleCall, UniqueNFT, UniqueNFTCall}; +use evm_coder::{types::*, abi::AbiReader}; pub struct NftErcSupport(core::marker::PhantomData); // 0x17c4e6453Cc49AAAaEACA894e6D9683e00000001 - collection // TODO: Unhardcode prefix -const ETH_ACCOUNT_PREFIX: [u8; 16] = [0x17, 0xc4, 0xe6, 0x45, 0x3c, 0xc4, 0x9a, 0xaa, 0xae, 0xac, 0xa8, 0x94, 0xe6, 0xd9, 0x68, 0x3e]; +const ETH_ACCOUNT_PREFIX: [u8; 16] = [ + 0x17, 0xc4, 0xe6, 0x45, 0x3c, 0xc4, 0x9a, 0xaa, 0xae, 0xac, 0xa8, 0x94, 0xe6, 0xd9, 0x68, 0x3e, +]; fn map_eth_to_id(eth: &H160) -> Option { if ð[0..16] != ETH_ACCOUNT_PREFIX { @@ -113,7 +119,8 @@ impl pallet_evm::OnMethodCall for NftErcSupport { CollectionMode::Fungible(_) => include_bytes!("stubs/ERC20.bin") as &[u8], CollectionMode::ReFungible => include_bytes!("stubs/ERC1633.bin") as &[u8], CollectionMode::Invalid => include_bytes!("stubs/Invalid.bin") as &[u8], - }.to_owned() + } + .to_owned() }) } fn call( @@ -162,17 +169,20 @@ pub fn generate_transaction(collection_id: u32, chain_id: u64) -> ethereum::Tran gas: 0.into(), // zero selector, this transaction always have same sender, so all data should be acquired from logs data: Vec::from([0, 0, 0, 0]), - }.sign( + } + .sign( // TODO: move to pallet config // 0xF70631E55faff9f3FD3681545aa6c724226a3853 // 9dbaef9b3ebc00e53f67c6a77bcfbf2c4f2aebe4d70d94af4f2df01744b7a91a - &hex_literal::hex!("9dbaef9b3ebc00e53f67c6a77bcfbf2c4f2aebe4d70d94af4f2df01744b7a91a").into(), - &chain_id + &hex_literal::hex!("9dbaef9b3ebc00e53f67c6a77bcfbf2c4f2aebe4d70d94af4f2df01744b7a91a") + .into(), + &chain_id, ); - rlp::decode::(&signed).expect("transaction is just created, it can't be broken") + rlp::decode::(&signed) + .expect("transaction is just created, it can't be broken") } #[cfg(not(feature = "std"))] { panic!("transaction generation not yet supported by wasm runtime") } -} \ No newline at end of file +} From 655273ca5d443d7daccf833612b0f62c10fc48bd Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Wed, 2 Jun 2021 19:54:34 +0000 Subject: [PATCH 59/66] feat: sponsor evm transactions Signed-off-by: Yaroslav Bolyukin --- pallets/nft/src/eth/sponsoring.rs | 142 ++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 pallets/nft/src/eth/sponsoring.rs diff --git a/pallets/nft/src/eth/sponsoring.rs b/pallets/nft/src/eth/sponsoring.rs new file mode 100644 index 0000000000..ae663c4222 --- /dev/null +++ b/pallets/nft/src/eth/sponsoring.rs @@ -0,0 +1,142 @@ +//! Implements EVM sponsoring logic via OnChargeEVMTransaction + +use crate::{Collection, ChainLimit, CollectionById, Config, NftTransferBasket, FungibleTransferBasket, eth::account::EvmBackwardsAddressMapping}; +use evm_coder::abi::AbiReader; +use frame_support::{storage::{StorageMap, StorageDoubleMap, StorageValue}, traits::Currency}; +use pallet_evm::{EVMCurrencyAdapter, WithdrawReason}; +use sp_core::{H160, U256}; +use sp_std::prelude::*; +use super::{account::CrossAccountId, erc::{UniqueFungibleCall, UniqueNFTCall, ERC721Call, ERC20Call, ERC721UniqueExtensionsCall}}; +use core::convert::TryInto; + +type NegativeImbalanceOf = + ::AccountId>>::NegativeImbalance; + +pub struct ChargeEvmTransaction; +pub struct ChargeEvmLiquidityInfo +where + T: Config, + T: pallet_evm::Config, +{ + who: H160, + negative_imbalance: NegativeImbalanceOf<::Currency, T>, +} + +struct AnyError; + +fn try_sponsor(caller: &H160, collection_id: u32, collection: &Collection, call: &[u8]) -> Result<(), AnyError> { + let (method_id, mut reader) = AbiReader::new_call(call).map_err(|_| AnyError)?; + match &collection.mode { + crate::CollectionMode::NFT => { + let call: UniqueNFTCall = UniqueNFTCall::parse(method_id, &mut reader).map_err(|_| AnyError)?.ok_or(AnyError)?; + match call { + UniqueNFTCall::ERC721UniqueExtensions(ERC721UniqueExtensionsCall::Transfer {token_id, ..}) | UniqueNFTCall::ERC721(ERC721Call::TransferFrom {token_id, ..}) => { + let token_id: u32 = token_id.try_into().map_err(|_| AnyError)?; + let block_number = >::block_number() as T::BlockNumber; + let collection_limits = &collection.limits; + let limit: u32 = if collection_limits.sponsor_transfer_timeout > 0 { + collection_limits.sponsor_transfer_timeout + } else { + ChainLimit::get().nft_sponsor_transfer_timeout + }; + + let mut sponsor = true; + if >::contains_key(collection_id, token_id) { + let last_tx_block = >::get(collection_id, token_id); + let limit_time = last_tx_block + limit.into(); + if block_number <= limit_time { + sponsor = false; + } + } + if sponsor { + >::insert(collection_id, token_id, block_number); + return Ok(()) + } + }, + _ => {}, + } + }, + crate::CollectionMode::Fungible(_) => { + let call: UniqueFungibleCall = UniqueFungibleCall::parse(method_id, &mut reader).map_err(|_| AnyError)?.ok_or(AnyError)?; + match call { + UniqueFungibleCall::ERC20(ERC20Call::Transfer {..}) => { + let who = T::CrossAccountId::from_eth(caller.clone()); + let collection_limits = &collection.limits; + let limit: u32 = if collection_limits.sponsor_transfer_timeout > 0 { + collection_limits.sponsor_transfer_timeout + } else { + ChainLimit::get().fungible_sponsor_transfer_timeout + }; + + let block_number = >::block_number() as T::BlockNumber; + let mut sponsored = true; + if >::contains_key(collection_id, who.as_sub()) { + let last_tx_block = >::get(collection_id, who.as_sub()); + let limit_time = last_tx_block + limit.into(); + if block_number <= limit_time { + sponsored = false; + } + } + if sponsored { + >::insert(collection_id, who.as_sub(), block_number); + return Ok(()) + } + }, + _ => {}, + } + }, + _ => {}, + } + return Err(AnyError) +} + +impl pallet_evm::OnChargeEVMTransaction for ChargeEvmTransaction +where + T: Config, + T: pallet_evm::Config, +{ + type LiquidityInfo = Option>; + + fn withdraw_fee( + who: &H160, + reason: WithdrawReason, + fee: U256, + ) -> Result> { + let mut who_pays_fee = *who; + if let WithdrawReason::Call { target, input } = &reason { + if let Some(collection_id) = crate::eth::map_eth_to_id(&target) { + if let Some(collection) = >::get(collection_id) { + if let Some(sponsor) = collection.sponsorship.sponsor() { + if try_sponsor(who, collection_id, &collection, &input).is_ok() { + who_pays_fee = + T::EvmBackwardsAddressMapping::from_account_id(sponsor.clone()); + } + } + } + } + } + + // TODO: Pay fee from substrate address + let negative_imbalance = EVMCurrencyAdapter::<::Currency, ()>::withdraw_fee( + &who_pays_fee, + reason, + fee, + )?; + Ok(negative_imbalance.map(|i| ChargeEvmLiquidityInfo { + who: who_pays_fee, + negative_imbalance: i, + })) + } + + fn correct_and_deposit_fee( + who: &H160, + corrected_fee: U256, + already_withdrawn: Self::LiquidityInfo, + ) -> Result<(), pallet_evm::Error> { + EVMCurrencyAdapter::<::Currency, ()>::correct_and_deposit_fee( + &already_withdrawn.as_ref().map(|e| e.who).unwrap_or(*who), + corrected_fee, + already_withdrawn.map(|e| e.negative_imbalance), + ) + } +} From 6d61ee2847b488a455514637020bff704169f8c4 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Wed, 2 Jun 2021 19:55:12 +0000 Subject: [PATCH 60/66] test: basic evm integration tests Signed-off-by: Yaroslav Bolyukin --- tests/src/eth/fungible.test.ts | 289 ++++++++++++++++++ tests/src/eth/fungibleAbi.json | 175 +++++++++++ tests/src/eth/fungibleMetadataAbi.json | 41 +++ tests/src/eth/metadata.test.ts | 53 ++++ tests/src/eth/nonFungible.test.ts | 280 +++++++++++++++++ tests/src/eth/nonFungibleAbi.json | 406 +++++++++++++++++++++++++ tests/src/eth/util/helpers.ts | 116 +++++++ 7 files changed, 1360 insertions(+) create mode 100644 tests/src/eth/fungible.test.ts create mode 100644 tests/src/eth/fungibleAbi.json create mode 100644 tests/src/eth/fungibleMetadataAbi.json create mode 100644 tests/src/eth/metadata.test.ts create mode 100644 tests/src/eth/nonFungible.test.ts create mode 100644 tests/src/eth/nonFungibleAbi.json create mode 100644 tests/src/eth/util/helpers.ts diff --git a/tests/src/eth/fungible.test.ts b/tests/src/eth/fungible.test.ts new file mode 100644 index 0000000000..bf780168ea --- /dev/null +++ b/tests/src/eth/fungible.test.ts @@ -0,0 +1,289 @@ +import privateKey from "../substrate/privateKey"; +import { approveExpectSuccess, createCollectionExpectSuccess, createFungibleItemExpectSuccess, transferExpectSuccess, transferFromExpectSuccess } from "../util/helpers"; +import { collectionIdToAddress, createEthAccount, itWeb3, normalizeEvents, recordEvents, subToEth, transferBalanceToEth } from "./util/helpers" +import fungibleAbi from './fungibleAbi.json'; +import { expect } from "chai"; + +describe('Information getting', () => { + itWeb3('totalSupply', async ({ web3 }) => { + const collection = await createCollectionExpectSuccess({ + name: 'token name', + mode: { type: 'Fungible', decimalPoints: 0 } + }); + const alice = privateKey('//Alice'); + + await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { substrate: alice.address }); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(fungibleAbi as any, address); + const totalSupply = await contract.methods.totalSupply().call(); + + // FIXME: always equals to 0, because this method is not implemented + expect(totalSupply).to.equal('0'); + }); + + itWeb3('balanceOf', async ({ web3 }) => { + const collection = await createCollectionExpectSuccess({ + name: 'token name', + mode: { type: 'Fungible', decimalPoints: 0 } + }); + const alice = privateKey('//Alice'); + + const caller = createEthAccount(web3); + await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: caller }); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(fungibleAbi as any, address); + const balance = await contract.methods.balanceOf(caller).call(); + + expect(balance).to.equal('200'); + }); +}); + +describe('Plain calls', () => { + itWeb3('Can perform approve()', async ({ web3, api }) => { + const collection = await createCollectionExpectSuccess({ + name: 'token name', + mode: { type: 'Fungible', decimalPoints: 0 } + }); + const alice = privateKey('//Alice'); + + const owner = createEthAccount(web3); + await transferBalanceToEth(api, alice, owner, 999999999999999); + + await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: owner }); + + const spender = createEthAccount(web3); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(fungibleAbi as any, address); + + { + const result = await contract.methods.approve(spender, 100).send({ from: owner, gas: '0x1000000', gasPrice: '0x01' }); + const events = normalizeEvents(result.events); + + expect(events).to.be.deep.equal([ + { + address, + event: 'Approval', + args: { + owner, + spender, + value: '100', + } + } + ]); + } + + { + const allowance = await contract.methods.allowance(owner, spender).call(); + expect(+allowance).to.equal(100); + } + }); + + itWeb3('Can perform transferFrom()', async ({ web3, api }) => { + const collection = await createCollectionExpectSuccess({ + name: 'token name', + mode: { type: 'Fungible', decimalPoints: 0 } + }); + const alice = privateKey('//Alice'); + + const owner = createEthAccount(web3); + await transferBalanceToEth(api, alice, owner, 999999999999999); + + await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: owner }); + + const spender = createEthAccount(web3); + await transferBalanceToEth(api, alice, spender, 999999999999999); + + const receiver = createEthAccount(web3); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(fungibleAbi as any, address); + + await contract.methods.approve(spender, 100).send({ from: owner, gas: '0x1000000', gasPrice: '0x01' }); + + { + const result = await contract.methods.transferFrom(owner, receiver, 49).send({ from: spender, gas: '0x1000000', gasPrice: '0x01' }); + const events = normalizeEvents(result.events); + expect(events).to.be.deep.equal([ + { + address, + event: 'Transfer', + args: { + from: owner, + to: receiver, + value: '49', + } + }, + { + address, + event: 'Approval', + args: { + owner, + spender, + value: '51', + } + } + ]); + } + + { + const balance = await contract.methods.balanceOf(receiver).call(); + expect(+balance).to.equal(49); + } + + { + const balance = await contract.methods.balanceOf(owner).call(); + expect(+balance).to.equal(151); + } + }); + + itWeb3('Can perform transfer()', async ({ web3, api }) => { + const collection = await createCollectionExpectSuccess({ + name: 'token name', + mode: { type: 'Fungible', decimalPoints: 0 } + }); + const alice = privateKey('//Alice'); + + const owner = createEthAccount(web3); + await transferBalanceToEth(api, alice, owner, 999999999999999); + + await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: owner }); + + const receiver = createEthAccount(web3); + await transferBalanceToEth(api, alice, receiver, 999999999999999); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(fungibleAbi as any, address); + + { + const result = await contract.methods.transfer(receiver, 50).send({ from: owner, gas: '0x1000000', gasPrice: '0x01' }); + const events = normalizeEvents(result.events); + expect(events).to.be.deep.equal([ + { + address, + event: 'Transfer', + args: { + from: owner, + to: receiver, + value: '50', + } + }, + ]) + } + + { + const balance = await contract.methods.balanceOf(owner).call(); + expect(+balance).to.equal(150); + } + + { + const balance = await contract.methods.balanceOf(receiver).call(); + expect(+balance).to.equal(50); + } + }); +}); + +describe('Substrate calls', () => { + itWeb3('Events emitted for approve()', async ({ web3 }) => { + const collection = await createCollectionExpectSuccess({ + mode: { type: 'Fungible', decimalPoints: 0 } + }); + const alice = privateKey('//Alice'); + + const receiver = createEthAccount(web3); + + await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(fungibleAbi as any, address); + + const events = await recordEvents(contract, async () => { + await approveExpectSuccess(collection, 1, alice, { ethereum: receiver }, 100); + }); + + expect(events).to.be.deep.equal([ + { + address, + event: 'Approval', + args: { + owner: subToEth(alice.address), + spender: receiver, + value: '100', + } + } + ]); + }); + + itWeb3('Events emitted for transferFrom()', async ({ web3 }) => { + const collection = await createCollectionExpectSuccess({ + mode: { type: 'Fungible', decimalPoints: 0 } + }); + const alice = privateKey('//Alice'); + const bob = privateKey('//Bob'); + + const receiver = createEthAccount(web3); + + await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }); + await approveExpectSuccess(collection, 1, alice, bob, 100); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(fungibleAbi as any, address); + + const events = await recordEvents(contract, async () => { + await transferFromExpectSuccess(collection, 1, bob, alice, { ethereum: receiver }, 51, 'Fungible'); + }); + + expect(events).to.be.deep.equal([ + { + address, + event: 'Transfer', + args: { + from: subToEth(alice.address), + to: receiver, + value: '51', + } + }, + { + address, + event: 'Approval', + args: { + owner: subToEth(alice.address), + spender: subToEth(bob.address), + value: '49', + } + } + ]); + }); + + itWeb3('Events emitted for transfer()', async ({ web3 }) => { + const collection = await createCollectionExpectSuccess({ + mode: { type: 'Fungible', decimalPoints: 0 } + }); + const alice = privateKey('//Alice'); + + const receiver = createEthAccount(web3); + + await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(fungibleAbi as any, address); + + const events = await recordEvents(contract, async () => { + await transferExpectSuccess(collection, 1, alice, { ethereum: receiver }, 51, 'Fungible'); + }); + + expect(events).to.be.deep.equal([ + { + address, + event: 'Transfer', + args: { + from: subToEth(alice.address), + to: receiver, + value: '51', + } + }, + ]); + }); +}); \ No newline at end of file diff --git a/tests/src/eth/fungibleAbi.json b/tests/src/eth/fungibleAbi.json new file mode 100644 index 0000000000..6f5c298923 --- /dev/null +++ b/tests/src/eth/fungibleAbi.json @@ -0,0 +1,175 @@ +[ + { + "constant": false, + "inputs": [ + { + "name": "_spender", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_from", + "type": "address" + }, + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "name": "balance", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_owner", + "type": "address" + }, + { + "name": "_spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "from", + "type": "address" + }, + { + "indexed": true, + "name": "to", + "type": "address" + }, + { + "indexed": false, + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + } +] \ No newline at end of file diff --git a/tests/src/eth/fungibleMetadataAbi.json b/tests/src/eth/fungibleMetadataAbi.json new file mode 100644 index 0000000000..57fe968178 --- /dev/null +++ b/tests/src/eth/fungibleMetadataAbi.json @@ -0,0 +1,41 @@ +[ + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + } +] \ No newline at end of file diff --git a/tests/src/eth/metadata.test.ts b/tests/src/eth/metadata.test.ts new file mode 100644 index 0000000000..ecf81b6a1b --- /dev/null +++ b/tests/src/eth/metadata.test.ts @@ -0,0 +1,53 @@ +import { expect } from "chai"; +import privateKey from "../substrate/privateKey"; +import { createCollectionExpectSuccess } from "../util/helpers"; +import { collectionIdToAddress, createEthAccount, itWeb3, transferBalanceToEth } from "./util/helpers"; +import fungibleMetadataAbi from './fungibleMetadataAbi.json'; + +describe('Common metadata', () => { + itWeb3('Returns collection name', async ({ api, web3 }) => { + const collection = await createCollectionExpectSuccess({ + name: 'token name', + mode: { type: 'NFT' } + }); + const caller = createEthAccount(web3); + await transferBalanceToEth(api, privateKey('//Alice'), caller, 999999); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(fungibleMetadataAbi as any, address); + const name = await contract.methods.name().call({ from: caller }); + + expect(name).to.equal('token name'); + }); + + itWeb3('Returns symbol name', async ({ api, web3 }) => { + const collection = await createCollectionExpectSuccess({ + tokenPrefix: 'TOK', + mode: { type: 'NFT' } + }); + const caller = createEthAccount(web3); + await transferBalanceToEth(api, privateKey('//Alice'), caller, 999999); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(fungibleMetadataAbi as any, address); + const symbol = await contract.methods.symbol().call({ from: caller }); + + expect(symbol).to.equal('TOK'); + }); +}); + +describe('Fungible metadata', () => { + itWeb3('Returns fungible decimals', async ({ api, web3 }) => { + const collection = await createCollectionExpectSuccess({ + mode: { type: 'Fungible', decimalPoints: 6 } + }); + const caller = createEthAccount(web3); + await transferBalanceToEth(api, privateKey('//Alice'), caller, 999999); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(fungibleMetadataAbi as any, address); + const decimals = await contract.methods.decimals().call({ from: caller }); + + expect(+decimals).to.equal(6); + }) +}) \ No newline at end of file diff --git a/tests/src/eth/nonFungible.test.ts b/tests/src/eth/nonFungible.test.ts new file mode 100644 index 0000000000..7aa931d1ab --- /dev/null +++ b/tests/src/eth/nonFungible.test.ts @@ -0,0 +1,280 @@ +import privateKey from "../substrate/privateKey"; +import { approveExpectSuccess, createCollectionExpectSuccess, createFungibleItemExpectSuccess, createItemExpectSuccess, transferExpectSuccess, transferFromExpectSuccess } from "../util/helpers"; +import { collectionIdToAddress, createEthAccount, itWeb3, normalizeEvents, recordEvents, subToEth, transferBalanceToEth } from "./util/helpers" +import nonFungibleAbi from './nonFungibleAbi.json'; +import { expect } from "chai"; + +describe('Information getting', () => { + itWeb3('totalSupply', async ({ web3 }) => { + const collection = await createCollectionExpectSuccess({ + mode: { type: 'NFT' } + }); + const alice = privateKey('//Alice'); + + await createItemExpectSuccess(alice, collection, 'NFT', { substrate: alice.address }); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(nonFungibleAbi as any, address); + const totalSupply = await contract.methods.totalSupply().call(); + + // FIXME: always equals to 0, because this method is not implemented + expect(totalSupply).to.equal('0'); + }); + + itWeb3('balanceOf', async ({ web3 }) => { + const collection = await createCollectionExpectSuccess({ + mode: { type: 'NFT' } + }); + const alice = privateKey('//Alice'); + + const caller = createEthAccount(web3); + await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: caller }); + await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: caller }); + await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: caller }); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(nonFungibleAbi as any, address); + const balance = await contract.methods.balanceOf(caller).call(); + + expect(balance).to.equal('3'); + }); + + itWeb3('ownerOf', async ({ web3 }) => { + const collection = await createCollectionExpectSuccess({ + mode: { type: 'NFT' } + }); + const alice = privateKey('//Alice'); + + const caller = createEthAccount(web3); + const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: caller }); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(nonFungibleAbi as any, address); + const owner = await contract.methods.ownerOf(tokenId).call(); + + expect(owner).to.equal(caller); + }); +}); + +describe.only('Plain calls', () => { + itWeb3('Can perform approve()', async ({ web3, api }) => { + const collection = await createCollectionExpectSuccess({ + mode: { type: 'NFT' } + }); + const alice = privateKey('//Alice'); + + const owner = createEthAccount(web3); + await transferBalanceToEth(api, alice, owner, 999999999999999); + + const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: owner }); + + const spender = createEthAccount(web3); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(nonFungibleAbi as any, address); + + { + const result = await contract.methods.approve(spender, tokenId).send({ from: owner, gas: '0x1000000', gasPrice: '0x01' }); + const events = normalizeEvents(result.events); + + expect(events).to.be.deep.equal([ + { + address, + event: 'Approval', + args: { + owner, + approved: spender, + tokenId: tokenId.toString(), + } + } + ]); + } + }); + + itWeb3('Can perform transferFrom()', async ({ web3, api }) => { + const collection = await createCollectionExpectSuccess({ + mode: { type: 'NFT' } + }); + const alice = privateKey('//Alice'); + + const owner = createEthAccount(web3); + await transferBalanceToEth(api, alice, owner, 999999999999999); + + const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: owner }); + + const spender = createEthAccount(web3); + await transferBalanceToEth(api, alice, spender, 999999999999999); + + const receiver = createEthAccount(web3); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(nonFungibleAbi as any, address); + + await contract.methods.approve(spender, tokenId).send({ from: owner, gas: '0x1000000', gasPrice: '0x01' }); + + { + const result = await contract.methods.transferFrom(owner, receiver, tokenId).send({ from: spender, gas: '0x1000000', gasPrice: '0x01' }); + const events = normalizeEvents(result.events); + expect(events).to.be.deep.equal([ + { + address, + event: 'Transfer', + args: { + from: owner, + to: receiver, + tokenId: tokenId.toString(), + }, + }, + ]); + } + + { + const balance = await contract.methods.balanceOf(receiver).call(); + expect(+balance).to.equal(1); + } + + { + const balance = await contract.methods.balanceOf(owner).call(); + expect(+balance).to.equal(0); + } + }); + + itWeb3('Can perform transfer()', async ({ web3, api }) => { + const collection = await createCollectionExpectSuccess({ + mode: { type: 'NFT' } + }); + const alice = privateKey('//Alice'); + + const owner = createEthAccount(web3); + await transferBalanceToEth(api, alice, owner, 999999999999999); + + const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: owner }); + + const receiver = createEthAccount(web3); + await transferBalanceToEth(api, alice, receiver, 999999999999999); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(nonFungibleAbi as any, address); + + { + const result = await contract.methods.transfer(receiver, tokenId).send({ from: owner, gas: '0x1000000', gasPrice: '0x01' }); + console.log(result); + const events = normalizeEvents(result.events); + expect(events).to.be.deep.equal([ + { + address, + event: 'Transfer', + args: { + from: owner, + to: receiver, + tokenId: tokenId.toString(), + } + }, + ]) + } + + { + const balance = await contract.methods.balanceOf(owner).call(); + expect(+balance).to.equal(0); + } + + { + const balance = await contract.methods.balanceOf(receiver).call(); + expect(+balance).to.equal(1); + } + }); +}); + +describe('Substrate calls', () => { + itWeb3('Events emitted for approve()', async ({ web3 }) => { + const collection = await createCollectionExpectSuccess({ + mode: { type: 'NFT' } + }); + const alice = privateKey('//Alice'); + + const receiver = createEthAccount(web3); + + const tokenId = await createItemExpectSuccess(alice, collection, 'NFT'); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(nonFungibleAbi as any, address); + + const events = await recordEvents(contract, async () => { + await approveExpectSuccess(collection, tokenId, alice, { ethereum: receiver }, 1); + }); + + expect(events).to.be.deep.equal([ + { + address, + event: 'Approval', + args: { + owner: subToEth(alice.address), + approved: receiver, + tokenId: tokenId.toString(), + } + } + ]); + }); + + itWeb3('Events emitted for transferFrom()', async ({ web3 }) => { + const collection = await createCollectionExpectSuccess({ + mode: { type: 'NFT' } + }); + const alice = privateKey('//Alice'); + const bob = privateKey('//Bob'); + + const receiver = createEthAccount(web3); + + const tokenId = await createItemExpectSuccess(alice, collection, 'NFT'); + await approveExpectSuccess(collection, tokenId, alice, bob, 1); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(nonFungibleAbi as any, address); + + const events = await recordEvents(contract, async () => { + await transferFromExpectSuccess(collection, tokenId, bob, alice, { ethereum: receiver }, 1, 'NFT'); + }); + + expect(events).to.be.deep.equal([ + { + address, + event: 'Transfer', + args: { + from: subToEth(alice.address), + to: receiver, + tokenId: tokenId.toString(), + } + }, + ]); + }); + + itWeb3('Events emitted for transfer()', async ({ web3 }) => { + const collection = await createCollectionExpectSuccess({ + mode: { type: 'NFT' } + }); + const alice = privateKey('//Alice'); + + const receiver = createEthAccount(web3); + + const tokenId = await createItemExpectSuccess(alice, collection, 'NFT'); + + const address = collectionIdToAddress(collection); + const contract = new web3.eth.Contract(nonFungibleAbi as any, address); + + const events = await recordEvents(contract, async () => { + await transferExpectSuccess(collection, tokenId, alice, { ethereum: receiver }, 1, 'NFT'); + }); + + expect(events).to.be.deep.equal([ + { + address, + event: 'Transfer', + args: { + from: subToEth(alice.address), + to: receiver, + tokenId: tokenId.toString(), + } + }, + ]); + }); +}); \ No newline at end of file diff --git a/tests/src/eth/nonFungibleAbi.json b/tests/src/eth/nonFungibleAbi.json new file mode 100644 index 0000000000..384c37aa84 --- /dev/null +++ b/tests/src/eth/nonFungibleAbi.json @@ -0,0 +1,406 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "res_name", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceID", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "res_symbol", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenOfOwnerByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } +] \ No newline at end of file diff --git a/tests/src/eth/util/helpers.ts b/tests/src/eth/util/helpers.ts new file mode 100644 index 0000000000..ed341bf1dd --- /dev/null +++ b/tests/src/eth/util/helpers.ts @@ -0,0 +1,116 @@ +import { ApiPromise } from "@polkadot/api"; +import { addressToEvm, evmToAddress } from "@polkadot/util-crypto"; +import Web3 from "web3"; +import usingApi, { submitTransactionAsync } from "../../substrate/substrate-api"; +import { IKeyringPair } from '@polkadot/types/types'; +import { expect } from "chai"; +import { getGenericResult } from "../../util/helpers"; + +let web3Connected = false; +export async function usingWeb3(cb: (web3: Web3) => Promise | T): Promise { + if (web3Connected) throw new Error('do not nest usingWeb3 calls'); + web3Connected = true; + + const provider = new Web3.providers.WebsocketProvider("http://localhost:9944"); + const web3 = new Web3(provider); + + try { + return await cb(web3); + } finally { + // provider.disconnect(3000, 'normal disconnect'); + provider.connection.close(); + web3Connected = false; + } +} + +export function collectionIdToAddress(address: number): string { + if (address >= 0xffffffff || address < 0) throw new Error('id overflow'); + const buf = Buffer.from([0x17, 0xc4, 0xe6, 0x45, 0x3c, 0xc4, 0x9a, 0xaa, 0xae, 0xac, 0xa8, 0x94, 0xe6, 0xd9, 0x68, 0x3e, + address >> 24, + (address >> 16) & 0xff, + (address >> 8) & 0xff, + address & 0xff, + ]); + return Web3.utils.toChecksumAddress('0x' + buf.toString('hex')); +} + +export function createEthAccount(web3: Web3) { + const account = web3.eth.accounts.create(); + web3.eth.accounts.wallet.add(account.privateKey); + return account.address; +} + +export async function transferBalanceToEth(api: ApiPromise, source: IKeyringPair, target: string, amount: number) { + const tx = api.tx.balances.transfer(evmToAddress(target), amount); + const events = await submitTransactionAsync(source, tx); + const result = getGenericResult(events); + expect(result.success).to.be.true; +} + +export async function itWeb3(name: string, cb: (apis: { web3: Web3, api: ApiPromise }) => any, opts: { only?: boolean, skip?: boolean } = {}) { + let i: any = it; + if (opts.only) i = i.only; + else if (opts.skip) i = i.skip; + i(name, async () => { + await usingApi(async api => { + await usingWeb3(async web3 => { + await cb({ api, web3 }); + }); + }); + }); +} +itWeb3.only = (name: string, cb: (apis: { web3: Web3, api: ApiPromise }) => any) => itWeb3(name, cb, { only: true }); +itWeb3.skip = (name: string, cb: (apis: { web3: Web3, api: ApiPromise }) => any) => itWeb3(name, cb, { skip: true }); + +export async function generateSubstrateEthPair(web3: Web3) { + let account = web3.eth.accounts.create(); + const evm = evmToAddress(account.address); +} + +type NormalizedEvent = { + address: string, + event: string, + args: { [key: string]: string } +}; + +export function normalizeEvents(events: any): NormalizedEvent[] { + const output = []; + for (let key of Object.keys(events)) { + if (key.match(/^[0-9]+$/)) { + output.push(events[key]); + } else if (Array.isArray(events[key])) { + output.push(...events[key]); + } else { + output.push(events[key]); + } + } + output.sort((a, b) => a.logIndex - b.logIndex); + return output.map(({ address, event, returnValues }) => { + const args: { [key: string]: string } = {}; + for (let key of Object.keys(returnValues)) { + if (!key.match(/^[0-9]+$/)) { + args[key] = returnValues[key]; + } + } + return { + address, + event, + args, + }; + }); +} + +export async function recordEvents(contract: any, action: () => Promise): Promise { + const out: any = []; + contract.events.allEvents((_: any, event: any) => { + out.push(event); + }); + await action(); + return normalizeEvents(out); +} + +export function subToEth(eth: string): string { + const bytes = addressToEvm(eth); + const string = '0x' + Buffer.from(bytes).toString('hex'); + return Web3.utils.toChecksumAddress(string); +} \ No newline at end of file From 0b721357bf73d16c88eecabbea57c45b8995c9eb Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 4 Jun 2021 17:17:08 +0000 Subject: [PATCH 61/66] fix: perform transfers on behalf of current contract Signed-off-by: Yaroslav Bolyukin --- runtime/src/chain_extension.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/src/chain_extension.rs b/runtime/src/chain_extension.rs index d811f9fb46..d692fd0641 100644 --- a/runtime/src/chain_extension.rs +++ b/runtime/src/chain_extension.rs @@ -96,7 +96,7 @@ impl ChainExtension for NFTExtension { let collection = pallet_nft::Module::::get_collection(input.collection_id)?; pallet_nft::Module::::transfer_internal( - env.ext().caller().clone(), + env.ext().address().clone(), input.recipient, &collection, input.token_id, From 0a7b60da8a0b6a1cefc726c2df3a8b25cb67cb83 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 4 Jun 2021 17:18:05 +0000 Subject: [PATCH 62/66] feat: implement all CE calls in test contract Signed-off-by: Yaroslav Bolyukin --- smart_contracs/transfer/Cargo.toml | 17 +- smart_contracs/transfer/lib.rs | 75 +++- tests/src/transfer_contract/metadata.json | 350 +++++++++++++++++- tests/src/transfer_contract/nft_transfer.wasm | Bin 2277 -> 17076 bytes 4 files changed, 427 insertions(+), 15 deletions(-) diff --git a/smart_contracs/transfer/Cargo.toml b/smart_contracs/transfer/Cargo.toml index b84e6e241d..aa25aec3d8 100755 --- a/smart_contracs/transfer/Cargo.toml +++ b/smart_contracs/transfer/Cargo.toml @@ -4,15 +4,17 @@ version = "0.1.0" authors = ["[Greg Zaitsev] <[your_email]>"] edition = "2018" +[workspace] + [dependencies] -ink_primitives = { git = "https://github.com/usetech-llc/ink", branch = "unique", default-features = false } -ink_metadata = { git = "https://github.com/usetech-llc/ink", branch = "unique", default-features = false, features = ["derive"], optional = true } -ink_env = { git = "https://github.com/usetech-llc/ink", branch = "unique", default-features = false } -ink_storage = { git = "https://github.com/usetech-llc/ink", branch = "unique", default-features = false } -ink_lang = { git = "https://github.com/usetech-llc/ink", branch = "unique", default-features = false } +ink_primitives = { default-features = false } +ink_metadata = { default-features = false, features = ["derive"], optional = true } +ink_env = { default-features = false } +ink_storage = { default-features = false } +ink_lang = { default-features = false } -scale = { package = "parity-scale-codec", version = "1.3", default-features = false, features = ["derive"] } -scale-info = { version = "0.4.1", default-features = false, features = ["derive"], optional = true } +scale = { package = "parity-scale-codec", version = "2.1.1", default-features = false, features = ["derive"] } +scale-info = { version = "0.6.0", default-features = false, features = ["derive"] } [lib] name = "nft_transfer" @@ -28,6 +30,7 @@ std = [ "ink_metadata/std", "ink_env/std", "ink_storage/std", + "ink_lang/std", "ink_primitives/std", "scale/std", "scale-info/std", diff --git a/smart_contracs/transfer/lib.rs b/smart_contracs/transfer/lib.rs index d848bd7606..1a71fef2ca 100755 --- a/smart_contracs/transfer/lib.rs +++ b/smart_contracs/transfer/lib.rs @@ -1,4 +1,6 @@ #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; +use alloc::vec::Vec; use ink_lang as ink; use ink_env::{Environment, DefaultEnvironment}; @@ -36,6 +38,24 @@ impl ink_env::chain_extension::FromStatusCode for NftErrorCode { } } +#[derive(scale::Encode, scale::Decode, scale_info::TypeInfo)] +pub enum CreateItemData { + Nft { + const_data: Vec, + variable_data: Vec, + }, + Fungible { + value: u128, + }, + ReFungible { + const_data: Vec, + variable_data: Vec, + pieces: u128, + }, +} + +type DefaultAccountId = ::AccountId; + #[ink::chain_extension] pub trait NftChainExtension { type ErrorCode = NftErrorCode; @@ -43,11 +63,26 @@ pub trait NftChainExtension { /// Transfer one NFT token from sender /// #[ink(extension = 0, returns_result = false)] - fn transfer(recipient: ::AccountId, collection_id: u32, token_id: u32, amount: u128); + fn transfer(recipient: DefaultAccountId, collection_id: u32, token_id: u32, amount: u128); + #[ink(extension = 1, returns_result = false)] + fn create_item(owner: DefaultAccountId, collection_id: u32, data: CreateItemData); + #[ink(extension = 2, returns_result = false)] + fn create_multiple_items(owner: DefaultAccountId, collection_id: u32, data: Vec); + #[ink(extension = 3, returns_result = false)] + fn approve(spender: DefaultAccountId, collection_id: u32, item_id: u32, amount: u128); + #[ink(extension = 4, returns_result = false)] + fn transfer_from(owner: DefaultAccountId, recipient: DefaultAccountId, collection_id: u32, item_id: u32, amount: u128); + #[ink(extension = 5, returns_result = false)] + fn set_variable_meta_data(collection_id: u32, item_id: u32, data: Vec); + #[ink(extension = 6, returns_result = false)] + fn toggle_white_list(collection_id: u32, address: DefaultAccountId, whitelisted: bool); } -#[ink::contract(env = crate::NftEnvironment)] +#[ink::contract(env = crate::NftEnvironment, dynamic_storage_allocator = true)] mod nft_transfer { + use alloc::vec::Vec; + // use ink_storage::Vec; + use crate::CreateItemData; #[ink(storage)] pub struct NftTransfer { @@ -69,6 +104,42 @@ mod nft_transfer { .extension() .transfer(recipient, collection_id, token_id, amount); } + #[ink(message)] + pub fn create_item(&mut self, recipient: AccountId, collection_id: u32, data: CreateItemData) { + let _ = self.env() + .extension() + .create_item(recipient, collection_id, data); + } + #[ink(message)] + pub fn create_multiple_items(&mut self, owner: AccountId, collection_id: u32, data: Vec) { + let _ = self.env() + .extension() + .create_multiple_items(owner, collection_id, data); + } + #[ink(message)] + pub fn approve(&mut self, spender: AccountId, collection_id: u32, item_id: u32, amount: u128) { + let _ = self.env() + .extension() + .approve(spender, collection_id, item_id, amount); + } + #[ink(message)] + pub fn transfer_from(&mut self, owner: AccountId, recipient: AccountId, collection_id: u32, item_id: u32, amount: u128) { + let _ = self.env() + .extension() + .transfer_from(owner, recipient, collection_id, item_id, amount); + } + #[ink(message)] + pub fn set_variable_meta_data(&mut self, collection_id: u32, item_id: u32, data: Vec) { + let _ = self.env() + .extension() + .set_variable_meta_data(collection_id, item_id, data); + } + #[ink(message)] + pub fn toggle_white_list(&mut self, collection_id: u32, address: AccountId, whitelisted: bool) { + let _ = self.env() + .extension() + .toggle_white_list(collection_id, address, whitelisted); + } } diff --git a/tests/src/transfer_contract/metadata.json b/tests/src/transfer_contract/metadata.json index de854c7770..297746fd15 100644 --- a/tests/src/transfer_contract/metadata.json +++ b/tests/src/transfer_contract/metadata.json @@ -1,9 +1,9 @@ { "metadataVersion": "0.1.0", "source": { - "hash": "0xfbbc0729acefed9d99f93f6cbb751d12e317958fd0fe183f5781329b37f1bf6e", - "language": "ink! 3.0.0-rc2", - "compiler": "rustc 1.51.0-nightly" + "hash": "0xc6c3f47adeafe86d1674ed72c7179605787842f2f05a2d7da0dbabf3c4fa1aa8", + "language": "ink! 3.0.0-rc3", + "compiler": "rustc 1.52.0-nightly" }, "contract": { "name": "nft_transfer", @@ -24,7 +24,7 @@ "name": [ "default" ], - "selector": "0x6a3712e2" + "selector": "0xed4b9d1b" } ], "docs": [], @@ -78,7 +78,268 @@ ], "payable": false, "returnType": null, - "selector": "0xfae3a09d" + "selector": "0x84a15da1" + }, + { + "args": [ + { + "name": "recipient", + "type": { + "displayName": [ + "AccountId" + ], + "type": 1 + } + }, + { + "name": "collection_id", + "type": { + "displayName": [ + "u32" + ], + "type": 4 + } + }, + { + "name": "data", + "type": { + "displayName": [ + "CreateItemData" + ], + "type": 6 + } + } + ], + "docs": [], + "mutates": true, + "name": [ + "create_item" + ], + "payable": false, + "returnType": null, + "selector": "0xd7c3f083" + }, + { + "args": [ + { + "name": "owner", + "type": { + "displayName": [ + "AccountId" + ], + "type": 1 + } + }, + { + "name": "collection_id", + "type": { + "displayName": [ + "u32" + ], + "type": 4 + } + }, + { + "name": "data", + "type": { + "displayName": [ + "Vec" + ], + "type": 8 + } + } + ], + "docs": [], + "mutates": true, + "name": [ + "create_multiple_items" + ], + "payable": false, + "returnType": null, + "selector": "0x15f9a1eb" + }, + { + "args": [ + { + "name": "spender", + "type": { + "displayName": [ + "AccountId" + ], + "type": 1 + } + }, + { + "name": "collection_id", + "type": { + "displayName": [ + "u32" + ], + "type": 4 + } + }, + { + "name": "item_id", + "type": { + "displayName": [ + "u32" + ], + "type": 4 + } + }, + { + "name": "amount", + "type": { + "displayName": [ + "u128" + ], + "type": 5 + } + } + ], + "docs": [], + "mutates": true, + "name": [ + "approve" + ], + "payable": false, + "returnType": null, + "selector": "0x681266a0" + }, + { + "args": [ + { + "name": "owner", + "type": { + "displayName": [ + "AccountId" + ], + "type": 1 + } + }, + { + "name": "recipient", + "type": { + "displayName": [ + "AccountId" + ], + "type": 1 + } + }, + { + "name": "collection_id", + "type": { + "displayName": [ + "u32" + ], + "type": 4 + } + }, + { + "name": "item_id", + "type": { + "displayName": [ + "u32" + ], + "type": 4 + } + }, + { + "name": "amount", + "type": { + "displayName": [ + "u128" + ], + "type": 5 + } + } + ], + "docs": [], + "mutates": true, + "name": [ + "transfer_from" + ], + "payable": false, + "returnType": null, + "selector": "0x0b396f18" + }, + { + "args": [ + { + "name": "collection_id", + "type": { + "displayName": [ + "u32" + ], + "type": 4 + } + }, + { + "name": "item_id", + "type": { + "displayName": [ + "u32" + ], + "type": 4 + } + }, + { + "name": "data", + "type": { + "displayName": [ + "Vec" + ], + "type": 7 + } + } + ], + "docs": [], + "mutates": true, + "name": [ + "set_variable_meta_data" + ], + "payable": false, + "returnType": null, + "selector": "0xb0b26da2" + }, + { + "args": [ + { + "name": "collection_id", + "type": { + "displayName": [ + "u32" + ], + "type": 4 + } + }, + { + "name": "address", + "type": { + "displayName": [ + "AccountId" + ], + "type": 1 + } + }, + { + "name": "whitelisted", + "type": { + "displayName": [ + "bool" + ], + "type": 9 + } + } + ], + "docs": [], + "mutates": true, + "name": [ + "toggle_white_list" + ], + "payable": false, + "returnType": null, + "selector": "0x98574dac" } ] }, @@ -93,7 +354,8 @@ "composite": { "fields": [ { - "type": 2 + "type": 2, + "typeName": "[u8; 32]" } ] } @@ -126,6 +388,82 @@ "def": { "primitive": "u128" } + }, + { + "def": { + "variant": { + "variants": [ + { + "fields": [ + { + "name": "const_data", + "type": 7, + "typeName": "Vec" + }, + { + "name": "variable_data", + "type": 7, + "typeName": "Vec" + } + ], + "name": "Nft" + }, + { + "fields": [ + { + "name": "value", + "type": 5, + "typeName": "u128" + } + ], + "name": "Fungible" + }, + { + "fields": [ + { + "name": "const_data", + "type": 7, + "typeName": "Vec" + }, + { + "name": "variable_data", + "type": 7, + "typeName": "Vec" + }, + { + "name": "pieces", + "type": 5, + "typeName": "u128" + } + ], + "name": "ReFungible" + } + ] + } + }, + "path": [ + "nft_transfer", + "CreateItemData" + ] + }, + { + "def": { + "sequence": { + "type": 3 + } + } + }, + { + "def": { + "sequence": { + "type": 6 + } + } + }, + { + "def": { + "primitive": "bool" + } } ] } \ No newline at end of file diff --git a/tests/src/transfer_contract/nft_transfer.wasm b/tests/src/transfer_contract/nft_transfer.wasm index 87e15928b744a84e985df96f6ecdeb78b61e5ebc..fd5eace8c84595fff2367e5cbea56f7313d7430b 100644 GIT binary patch literal 17076 zcmds;Ym8l2b;tMK=iJB4oogSzf)kr??!gV$)W$oG1ZBQG^h&OI*UW zacsw=L<;sKSe0AR${+f{s#?iuquS5_DUFKTM#U9KjnqKh7Kx}2;SY#L&LP`0+jAqV0`?=n0?X~xDyC3~TId71s2TJ%>jPjnr^$8nb)f zz6U=1(C&}!e_+oi4)59j$VVUE@4BhSr1kjd{sSLBJX|Qv_Q=?5A=|V6(dNhYeC**v zj|Cr!Z0iiP2_5e|L~1POWr9C`T3O3^m;0&QP3Fy}3t^edT-NrDJZt#SY=d%KSjaoA z6`}dyo&)#e{f zJG!BCF)Lc7FI~}|$~vW^EgUXdQ=wA^D@T85)-R(W#ASmRiis)TNe$tUM$s=8gAK0p zZdPV7*AMNAdHW&1yX*91=%Do5oxQXxAN_z10769>W*Xv_HOgFAX0bge^Rkha792&t%=%0hZU=WtZB1OvrlAxKoV&XL zFq}vrn3%?}diw}27A&*UZ_Q{c-PVkL>I7_c*Ei8sbLN!?3`5)(Q=Lv*c>3aPopnY5 z7ya#OkNKcrHI^wlozBxfWJq&joo6Y=x8wA_9&16uUdX`Au$$gXT`0PcWO~pGu%i>0 zPV0tS>ER=^bK+9?-2C*BDxWWp-=q36e^1D1ZVzIc9#m-N)YoYa&nt7l7fN~MRDu)W zz$l}}^)-sXlZLk|S2QWA+eGKV5RPUw4u~HRwg*)}2}8T4oZ z@x1TlVn9{Dk&pkcbPtuy+Q8jg)j4fN6A% z=sS|P6CPN{>FotyJLWy=!yMEG_}h$}xx~S5%-U6UIwI5oAz^`HRp~c7xOp&99jTL? zZ+0f?0Vz++iM|)2_z^|53~rq6^Z?JWfk&nL+j94oaPB#ruNyxs;+boj0O0a!mjQWC#>MJ8?P8=~vZL6`~B2?-Cc{(L14-q?wtE zYt-(l{8p?3rCbauvzf4#2c#%?G-kr;5_u{!_}E1n!37~6E|iTFX=7Nu)mXqls1{-= zOYu~=62R*qR3_*^7z8DIU|cm~cCgB0hR)RB=h5$7h8bnTMts#DjN#E<4skOXFo4_c z*02&>Sk0R^h@+eJ>kUl)t(O^_5q4Yrdd$&}{aw6Z_lDD$?Yr_cGhuw1oM|9jKWG{m zR5UZqBlQFFou)y)sEnr3-EI^GodtgK9fx{mav_ey6dHqbBGJ7LN_Z(CN-x|>)+uhN zLOzFRV#Q=aV9OvnNdlZ3fIp_7qm|Y7tv%2{R?^&7Z9 z|HkQMCVbG|zM9_L1GKzA84Eg@7T&+zeL$rxe&4LWpOTb#ySp#dJv8g@Wyn7o^!YgG z56=2~X!&{qX|wy#2&oUw`a1>l13e*r!=P#k!4Hhu@1OM>Xs8BNOAYsp8t$F-B@NdP zD(uVnTK6Pry-p-t0>quO9yN^Dh%C+V5gTSb(jHf8@z!`lIqT6_TsMoi#~aqqdOTvB zylnBcvmWD%cS6k(Edm7GX+0A8+~QZyI!|?HfUsBxS-vg4n6;P5!3Z)3Jmo~{v)uYj zr9LYLBOo2fXmmTZtR0M?bn(rDax#s+c2IUGMb|OnA;GdEwPU@uGl`r7QHcxsVFN#! z%LkqCLn)ueEEnqn3bWZwV_M84O4|_CFt_wqecrh&b3T(5hznk0A#Fb_ppG(iuOI<> z9w&^+lLM9PY|Ivj4Gvs7Mrs;ga*$9)6>Wrs@nznLLtK?qJ`JvLa!8n74pex+U0@`; zUCJNIKoANg8?opTU4&pZsl%)>G;G_d5pe@Aac=L%;L`ghy(dKw-b8KiH30)Hi_TO_ zrqdV53eNbnJerL9$UnDxO-9r!!EfNxGOSMjZA<+$jHp-7%=5e0uUBU}x@xVo`c!jN zYKYp~M#SEBYgg6-TJwKyZzXCOxb=FX^OD{&0dT~~I^JB{YBJDP)jVa z^~TsFw%M#pS#_Xli90pVtG3u?I9ilq*w^Hd)rEbn5&LQa645ZKCZGu-=#LnJ%)txOEG-5botYS?GwbWio~3o=29{ z%3{37+)yJdK9nv5`Vv;MQ82sUi{%tRg2HmOcx!2krq-aRFD9)mTxk@&%DT64LcKek zH3)ohJ^mP%epvogcDwVNb795NhBSI1-&+wH10E6DrN5;^W^IQv6Taaoef3HF>UovU zL(pDHX=8RC9bF(eFh{)*2F1#1<>^ZPt=lSB&i`0HZ~0WUQc)Vw+RFL0JR3XJXo{`RgmF;CgEZ8)ZK!^;2W)b8UM zj4en2*qeC%C0i3Hx!L`RF^Gmtw#Ua8vY|%=t1a#`*{nZ{`qFYP6J57vukgCroxw@p z24+4!o0$`AP<$>G*SS21hK9*_mGaaZ1~1fEHmqm+fo}@V{7&T zW$AkYy3$0Y7VL)&+9R0i89vsuHZ`qR{96wx#1?njfJ_F5xSC+QM}!%FB=akfh9JaO ztOl?~HQ%OYm8_gd0c^AWRZ5!U1>n1=GC}CSdKtYCKLrEYWn#crtehBd(aM)HfR&dr zfQ7HdfJBuM14Ni11K1(Geg=GY2?Neu$^apFhPj6bitjS8V+`nbS+E~A83Pt2>N@qQ z1qd0CZ;+nG1mOAX2eEzm&tzUY*0w8QDi178iybmR`MX75n2Q96og^ho1w{ zr)v(M0lAanu$f-n7WEX3*kh_EZWJJ(q{V3kZ; zw^Oc?*<<6UZ7C^}UJGX-6G~7L+r?X}79QBF{!BP0U|KW5OiX4I&V=U$6|~d_qR<@K zoJ?}rH8Z?OWTZ|KWU}!Js1|V(TlHm3C8jXa zRPNOD$_{CLJjmAM_=LU@ewAZN5G(hi$MNWy#t%aQ(gRy(Ry??K9Wg4-E$ zaWAornk2o$+GTU+I!M7DH|9gqohHIJq{>I&^SolPuZNRFeeDfnBnOP6|1Y&<>eeS58`bjFM7(sV8+7n5fA@P8)bhT?Ysi zABde7%zyTS)Xw}L#DZ?{vyY*zlBh^fuoFmz_~)1MtjxOk6zQ+UYQiANSsy7=<_TxG z5gzwe#lQw{Xh6`Mk-10)1nn8s$Yl6S7^@ zJhKFT7?Q|-;iqL>(VAlA{1ZR2AY^{wpTF?kzsTO-owyFk*^rFeGZ?W(ZQQ;|%+Mgq zpm^zPR%Qkx!2+{arguJBgJ;M=rTO`t=NuOZU{w8L2L?aMjloUXXs(+BQdMGGN7UiAxxzJ zp?8%)_V@5Ci-9awVQC;M=E}1|%IqvEc>Hn&K|olCuxLa!1caIt_#`oDTAOrw5l{n> zeLmPJP_odP4qNs87jNtp%Q51rOn?XL;Ade?{u2YQQv8nhd-rjEFw->4>u69Tp* zSTlTvmaX+s5&nPKG>#x(x^)b>F;6qwsP&ZfE3YK!L+n`~or#~Z#e ziW!_pDFHctAHQyrM94nk_zPBpVHwtlzpwgP{~}T(;kn4Z`kW++-544n7&j6M;J%g6 z1@o7D4;Pzt)#tAXm%yghuA%y1$5emH;Nb2%j zV7IkH@sF&%h{rjL<0MNFL`i_mIo2ydR3Ky^15r=?OL#%=2sp^8)l_&1tX8Kj-WMs3 zw(;@Hyw&6prE2nsQZ;!*DbUp1e@k(UQh(3uBBcnU&I`brQWjGac^SoODqev+rg z_Yf~qw2;xq|Df1SwJ%fDi5QE1gW_azC1Wx+E_y?GgRn;IpG4S8q-~M5wi%av8CBQU zRK*Dm<;_wywY-t)y`sEv>~uL**_w0-gWd?uGh(nWtx0qKry-40Q3v|*Aw$|+O87=tkk8-YIJ-JW#zE$3dFN~344reNWfoEr6pi{ zO{LYYc1Z6o7{5~t>N{ajVFD8ao{3b=0?BYLB45|1J z6k9sJT51UK57JjN4A+=pkbSr)ImIHFjl>*WRbGj8Yi-4AD3vyPQ?QrZi}G!$w5BA6 zyPCx`xAGd|Ns8bK#2#3B2_@NWaMD1)w(Jfy`K&%s+Uou1gHg@vNn z(rbsK(Zx?ck@q!L5B6qJO$OabtXsig@8TP-6eVvt)-6f0+9~``*d4Z zH6Q}3@@V&*9=Wc9Xc+jH?k)z~d8yJ{u+=h3Io6t>G2cmEnr;f8Tj>r&3FA9uQ>_za zb4SmGxl)Na?(B^b0f>zV5W|Q-8g+~aH!>Z-P4{x3(BMUagVK_LcDgwt_@*?lPudb+ zAvsh~?O<8fBOTNb?b^DXrnFqc(rszoQuoT5oP4oi=Jfrh;EG>1uOk6rBio1iPS;xC zrU ztkAh^(nmw*;h9;tKl5$Jik{FC< ztr2FjKg`mpJLFm-?YtY;IC>i6+J+?UrFd|ev=0@8)8Mfo>yxyvtuuBsT_WHXjr<}A zI0v?4c&|=!TD%ScH_;gh_*5F${`m;FOtpW%>7O9Ds(_m~o0#hw$WJHLkmVa;fWZ!k zO*~`8%t=~#JtaGpj>k{Z!X8weE_(I1BB``t2NEO04$oKzn~)?+-9ban5~k|8peM6& zlR>X{WK!x^yiA=bSV?-zDLJ#UbhO||uyu99C5zAMwW;P+G@jL4OK+=rJEymX-qw^k zUK=QNQ^Q6xTb{NlI>1j=>Senj8Hu#!YSy$}5l7z|-%4Yesb9u{Z?d%U%#&shhN&Q_ zwH98f0(g)su?d+&N=?m6!>+8Lsf!zh+Ptn#$oUfIY*3KxI!LxI88(CL2Sp&C4Z!_(@$)&mY^g^;AcDO?Pgd^ZW zGD5_fN#g9<#k)q=KfMlFY&PA2);vT{Q-gxZ6dO%}M|~alvO6CP2y+asuT7^r9}HP~ z=ObMS#2iYJZSgkHa|h!FT|zw)=E8WCE%jQGr)`@pFkHF6X9~>cu zfiGyxdE>4@LP0)`K}h6j?JtFN8Ye^A%GnGT0qN$@zFQ(ThoSXTwfId$AXCkTThx@%Hwt->6USUh^0 z#bV6D?76OtYeve+m zMxr8gjvNFIBUv6FKgdFk_)u2HY9pRIT<4T)bAhok!0GvYSCpVnE(gZkgFgV z1uSwICwgA=y7aen%O-RcicDjxJ<*AiC{>%yDUVi%Q%bMQTgHPlQ_h2&NP`DhG#(-X?j0P+y>#sMYrtjrRK2R+y`u794=Z6v<6wDs2}KC8?>uyGvpd z(A5(HCIJzr&8|W!f`3F#?&E}K($cTvlZ9U$M=)bHX3R9l+N5H5O5L0+s0245%!Wxy zNQ#~ZTw<+yS%{ugIOz<%4cT4dog4~7SaoYws-J3H+hEkIcdhD>Iy4^`VlHN}=X_L4XKS*I)B$>f$dzme(9cTa=G zCW!+T)Ahb&Tg6*H+-R!KUaa1ZVChphAg?9JI(I-DfVM!*T|Z3j6rWv zfShS+@BC4ge9;23iyIDea=(erCXj?oa`40cMhKbIMe=Gfgw`#t>BU!|f$frT6AvJT zZ}M5?Fs8FBKDvA>t@6-d@h+5*V}d@_5N#&hNx_JA2Zg@ap$*wa#DPmS0y>M6<`t!3 zv~mx4IBhz5+BT$z9WBvgdQ_pc`h=qh8<0Fy&;3rGw)9~Nw)6oCx`Db8Z#tU0(X$~zdHvPeqrzZZj?>#7p!bxRK{lx_-CCPc77 z#b#9=^OfDYr?|is7F)SAGl$n_8ughIiOZXAaIhH}s#K8lCT zV1{v*j=ckrd7IzEHdhs0ZaolThaZ2q((1A1tU zNg(20p^q!5Za->H)2gv#K<@VzD>^B5k@+A2qg^q-3dp%xpt9dDN2>TKvhnSFKIg+g z%HeRYiSOhZ;{anV%0n#Kek*%(3&8i}(gfx&31QS5!uI#1CZ1<~#4qN{#~Cp$dw%F5RX|hfAcxH Y=K_Bje>r~*{+j%?_-i|bgB>6K7taM5cK`qY literal 2277 zcmZWqL1?2z6n^i`pX6`;pqnfJc;%{OnT zwY$kg#I>na>Gf#U^z@&&x5{X980naMFz6JT%;p#HJy{EKyY1G-!pr)DL3go zDr)n-gh-+Rkiiu|NsOf=BZp^c!ndR zbRj4(S);MRt&;Q-QjJ56>ts)lECmPAp9Kkec|D+G=_JTo8q&iLe0q5OKG)zbTD1W1chnb<;=3^*N1m&CmZiJw1K%i)R0?Z@>EW#ZOA?r~-E&jxA6R1P5oY z;2_v7fEmBbleRD+?EsXKXYHaQ2b*byJYjT}uz^zUp0Ij3;&hI@oY+0}mS4_Te)5*% z|15w_L#~?v`*YLnaB?Uq1ebVCvBRbW6uO7rsyg$o6P&kuaK;7ziOGcM={OMeFhpOC z15NZH+!I`9P99*S%FafI7^&R-Na-8^*MaV;j_HB?s!~b0)^UV)tD6Rb1o9?!;SwZDKk07T_CObo&9&U3Zkx=4J7RV)eQ> z(cTGEFcQXzW}=vIpmEN}Jr;=2g)VQ;DCOthzWd?zk6$Z8w^4R&j(liq2TnCjO&GkMOxMjN%shpVP%`x72I!6);Xv(ZKhDvP_Tj9a0IS8;Lv5ud zUu#P>(Hxq{wJy&lx$614;aE1##wDv^V2Nie){lCu@trCxO4wSJAqoMu7)zbR)I=GEcS#dmK6PSY9O7aj5Q^a_7<*;FapobO7Tn$$LG_MY zs6`>K*To-z*12y+b#9@P5b7ME7T}K0qT|ofjxALkV^B?FU1gzUh%uf From 9351b9f9756d3e95ce9b6d439ad56c260ba5da98 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 4 Jun 2021 17:18:32 +0000 Subject: [PATCH 63/66] build(devcontainer): add cargo-contract Signed-off-by: Yaroslav Bolyukin --- .devcontainer/Dockerfile | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 47379a1014..d9c8f9e365 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -3,6 +3,9 @@ FROM mcr.microsoft.com/vscode/devcontainers/rust:0-1 RUN apt-get update && export DEBIAN_FRONTEND=noninteractive && \ apt-get -y install --no-install-recommends libssl-dev pkg-config libclang-dev clang +RUN curl -L -o- https://github.com/WebAssembly/binaryen/releases/download/version_101/binaryen-version_101-x86_64-linux.tar.gz | \ + tar xz --strip-components=1 -C /usr + USER vscode RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash && \ @@ -11,4 +14,5 @@ RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | b nvm install v12.20.1 && \ rustup toolchain install nightly-2021-03-01 && \ rustup default nightly-2021-03-01 && \ - rustup target add wasm32-unknown-unknown \ No newline at end of file + rustup target add wasm32-unknown-unknown && \ + cargo install cargo-contract From a0285b638ba39d49cc17f615c001a010209fa1ee Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 4 Jun 2021 17:19:21 +0000 Subject: [PATCH 64/66] test: support alternative forms of addresses in helpers Signed-off-by: Yaroslav Bolyukin --- tests/src/util/helpers.ts | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/tests/src/util/helpers.ts b/tests/src/util/helpers.ts index bb5281eaa6..ccc9e6924e 100644 --- a/tests/src/util/helpers.ts +++ b/tests/src/util/helpers.ts @@ -634,17 +634,19 @@ export async function burnItemExpectSuccess(owner: IKeyringPair, collectionId: n export async function approveExpectSuccess(collectionId: number, - tokenId: number, owner: IKeyringPair, approved: IKeyringPair, amount: number | bigint = 1) { + tokenId: number, owner: IKeyringPair, approved: IKeyringPair | string, amount: number | bigint = 1) { + if (typeof approved !== 'string') + approved = approved.address; await usingApi(async (api: ApiPromise) => { const allowanceBefore = - await api.query.nft.allowances(collectionId, [tokenId, owner.address, approved.address]) as unknown as BN; - const approveNftTx = await api.tx.nft.approve(approved.address, collectionId, tokenId, amount); + await api.query.nft.allowances(collectionId, [tokenId, owner.address, approved] as any) as unknown as BN; + const approveNftTx = await api.tx.nft.approve(approved, collectionId, tokenId, amount); const events = await submitTransactionAsync(owner, approveNftTx); const result = getCreateItemResult(events); // tslint:disable-next-line:no-unused-expression expect(result.success).to.be.true; const allowanceAfter = - await api.query.nft.allowances(collectionId, [tokenId, owner.address, approved.address]) as unknown as BN; + await api.query.nft.allowances(collectionId, [tokenId, owner.address, approved] as any) as unknown as BN; expect(allowanceAfter.sub(allowanceBefore).toString()).to.be.equal(amount.toString()); }); } @@ -653,17 +655,19 @@ export async function transferFromExpectSuccess(collectionId: number, tokenId: number, accountApproved: IKeyringPair, - accountFrom: IKeyringPair, + accountFrom: IKeyringPair | string, accountTo: IKeyringPair, value: number | bigint = 1, type: string = 'NFT') { + if (typeof accountFrom !== 'string') + accountFrom = accountFrom.address; await usingApi(async (api: ApiPromise) => { let balanceBefore = new BN(0); if (type === 'Fungible') { balanceBefore = await api.query.nft.balance(collectionId, accountTo.address) as unknown as BN; } const transferFromTx = await api.tx.nft.transferFrom( - accountFrom.address, accountTo.address, collectionId, tokenId, value); + accountFrom, accountTo.address, collectionId, tokenId, value); const events = await submitTransactionAsync(accountApproved, transferFromTx); const result = getCreateItemResult(events); // tslint:disable-next-line:no-unused-expression @@ -799,17 +803,13 @@ export async function createFungibleItemExpectSuccess( } export async function createItemExpectSuccess( - sender: IKeyringPair, collectionId: number, createMode: string, owner: string = '') { + sender: IKeyringPair, collectionId: number, createMode: string, owner: string | AccountId = sender.address) { let newItemId: number = 0; await usingApi(async (api) => { const AItemCount = parseInt((await api.query.nft.itemListIndex(collectionId)).toString(), 10); const Aitem: any = (await api.query.nft.fungibleItemList(collectionId, owner)).toJSON(); const AItemBalance = new BigNumber(Aitem.Value); - if (owner === '') { - owner = sender.address; - } - let tx; if (createMode === 'Fungible') { const createData = {fungible: {value: 10}}; @@ -837,7 +837,7 @@ export async function createItemExpectSuccess( } expect(collectionId).to.be.equal(result.collectionId); expect(BItemCount).to.be.equal(result.itemId); - expect(owner).to.be.equal(result.recipient); + expect(owner.toString()).to.be.equal(result.recipient); newItemId = result.itemId; }); return newItemId; @@ -924,7 +924,7 @@ export async function isWhitelisted(collectionId: number, address: string) { return whitelisted; } -export async function addToWhiteListExpectSuccess(sender: IKeyringPair, collectionId: number, address: string) { +export async function addToWhiteListExpectSuccess(sender: IKeyringPair, collectionId: number, address: string | AccountId) { await usingApi(async (api) => { const whiteListedBefore = (await api.query.nft.whiteList(collectionId, address)).toJSON(); From 6df0cdabe849e643ba73c455191eaa54756e44d7 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 4 Jun 2021 17:19:55 +0000 Subject: [PATCH 65/66] test: basic tests for CE Signed-off-by: Yaroslav Bolyukin --- tests/src/contracts.test.ts | 178 +++++++++++++++++++++++++++++++++++- 1 file changed, 175 insertions(+), 3 deletions(-) diff --git a/tests/src/contracts.test.ts b/tests/src/contracts.test.ts index a1c6398ca0..4af7f283c0 100644 --- a/tests/src/contracts.test.ts +++ b/tests/src/contracts.test.ts @@ -16,9 +16,15 @@ import { } from "./util/contracthelpers"; import { + addToWhiteListExpectSuccess, + approveExpectSuccess, createCollectionExpectSuccess, createItemExpectSuccess, - getGenericResult + enablePublicMintingExpectSuccess, + enableWhiteListExpectSuccess, + getGenericResult, + isWhitelisted, + transferFromExpectSuccess } from "./util/helpers"; @@ -26,7 +32,7 @@ chai.use(chaiAsPromised); const expect = chai.expect; const value = 0; -const gasLimit = 3000n * 1000000n; +const gasLimit = 9000n * 1000000n; const marketContractAddress = '5CYN9j3YvRkqxewoxeSvRbhAym4465C57uMmX5j4yz99L5H6'; describe('Contracts', () => { @@ -53,8 +59,10 @@ describe('Contracts', () => { expect(newContractInstance.address.toString()).to.equal(marketContractAddress); }); }); +}); - it('Can transfer NFT using smart contract.', async () => { +describe.only('Chain extensions', () => { + it('Transfer CE', async () => { await usingApi(async api => { const alice = privateKey("//Alice"); const bob = privateKey("//Bob"); @@ -63,6 +71,9 @@ describe('Contracts', () => { const collectionId = await createCollectionExpectSuccess(); const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT'); const [contract, deployer] = await deployTransferContract(api); + const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, contract.address); + await submitTransactionAsync(alice, changeAdminTx); + const tokenBefore: any = (await api.query.nft.nftItemList(collectionId, tokenId) as any).unwrap(); // Transfer @@ -77,4 +88,165 @@ describe('Contracts', () => { expect(tokenAfter.Owner.toString()).to.be.equal(bob.address); }); }); + + it('Mint CE', async () => { + await usingApi(async api => { + const alice = privateKey('//Alice'); + const bob = privateKey('//Bob'); + + const collectionId = await createCollectionExpectSuccess(); + const [contract, deployer] = await deployTransferContract(api); + await enablePublicMintingExpectSuccess(alice, collectionId); + await enableWhiteListExpectSuccess(alice, collectionId); + await addToWhiteListExpectSuccess(alice, collectionId, contract.address); + await addToWhiteListExpectSuccess(alice, collectionId, bob.address); + + const transferTx = contract.tx.createItem(value, gasLimit, bob.address, collectionId, { Nft: {const_data: '0x010203', variable_data: '0x020304' }}); + const events = await submitTransactionAsync(alice, transferTx); + const result = getGenericResult(events); + expect(result.success).to.be.true; + + const tokensAfter: any = (await api.query.nft.nftItemList.entries(collectionId) as any).map((kv: any) => kv[1].toJSON()); + expect(tokensAfter).to.be.deep.equal([ + { + Owner: bob.address, + ConstData: '0x010203', + VariableData: '0x020304', + }, + ]); + }); + }); + + it('Bulk mint CE', async () => { + await usingApi(async api => { + const alice = privateKey('//Alice'); + const bob = privateKey('//Bob'); + + const collectionId = await createCollectionExpectSuccess(); + const [contract, deployer] = await deployTransferContract(api); + await enablePublicMintingExpectSuccess(alice, collectionId); + await enableWhiteListExpectSuccess(alice, collectionId); + await addToWhiteListExpectSuccess(alice, collectionId, contract.address); + await addToWhiteListExpectSuccess(alice, collectionId, bob.address); + + const transferTx = contract.tx.createMultipleItems(value, gasLimit, bob.address, collectionId, [ + { Nft: { const_data: '0x010203', variable_data: '0x020304' } }, + { Nft: { const_data: '0x010204', variable_data: '0x020305' } }, + { Nft: { const_data: '0x010205', variable_data: '0x020306' } } + ]); + const events = await submitTransactionAsync(alice, transferTx); + const result = getGenericResult(events); + expect(result.success).to.be.true; + + const tokensAfter: any = (await api.query.nft.nftItemList.entries(collectionId) as any) + .map((kv: any) => kv[1].toJSON()) + .sort((a: any, b: any) => a.ConstData.localeCompare(b.ConstData)); + expect(tokensAfter).to.be.deep.equal([ + { + Owner: bob.address, + ConstData: '0x010203', + VariableData: '0x020304', + }, + { + Owner: bob.address, + ConstData: '0x010204', + VariableData: '0x020305', + }, + { + Owner: bob.address, + ConstData: '0x010205', + VariableData: '0x020306', + }, + ]); + }); + }); + + it('Approve CE', async () => { + await usingApi(async api => { + const alice = privateKey('//Alice'); + const bob = privateKey('//Bob'); + const charlie = privateKey('//Charlie'); + + const collectionId = await createCollectionExpectSuccess(); + const [contract, deployer] = await deployTransferContract(api); + const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT', contract.address); + + const transferTx = contract.tx.approve(value, gasLimit, bob.address, collectionId, tokenId, 1); + const events = await submitTransactionAsync(alice, transferTx); + const result = getGenericResult(events); + expect(result.success).to.be.true; + + await transferFromExpectSuccess(collectionId, tokenId, bob, contract.address.toString(), charlie, 1, 'NFT'); + }); + }); + + it('TransferFrom CE', async () => { + await usingApi(async api => { + const alice = privateKey('//Alice'); + const bob = privateKey('//Bob'); + const charlie = privateKey('//Charlie'); + + const collectionId = await createCollectionExpectSuccess(); + const [contract, deployer] = await deployTransferContract(api); + const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT', bob.address); + await approveExpectSuccess(collectionId, tokenId, bob, contract.address.toString(), 1); + + const transferTx = contract.tx.transferFrom(value, gasLimit, bob.address, charlie.address, collectionId, tokenId, 1); + const events = await submitTransactionAsync(alice, transferTx); + const result = getGenericResult(events); + expect(result.success).to.be.true; + + const token: any = (await api.query.nft.nftItemList(collectionId, tokenId) as any).unwrap() + expect(token.Owner.toString()).to.be.equal(charlie.address); + }); + }); + + it('SetVariableMetaData CE', async () => { + await usingApi(async api => { + const alice = privateKey('//Alice'); + + const collectionId = await createCollectionExpectSuccess(); + const [contract, deployer] = await deployTransferContract(api); + const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT', contract.address); + + const transferTx = contract.tx.setVariableMetaData(value, gasLimit, collectionId, tokenId, '0x121314'); + const events = await submitTransactionAsync(alice, transferTx); + const result = getGenericResult(events); + expect(result.success).to.be.true; + + const token: any = (await api.query.nft.nftItemList(collectionId, tokenId) as any).unwrap() + expect(token.VariableData.toString()).to.be.equal('0x121314'); + }); + }); + + it('ToggleWhiteList CE', async () => { + await usingApi(async api => { + const alice = privateKey('//Alice'); + const bob = privateKey('//Bob'); + + const collectionId = await createCollectionExpectSuccess(); + const [contract, deployer] = await deployTransferContract(api); + const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, contract.address); + await submitTransactionAsync(alice, changeAdminTx); + + expect(await isWhitelisted(collectionId, bob.address)).to.be.false; + + { + const transferTx = contract.tx.toggleWhiteList(value, gasLimit, collectionId, bob.address, true); + const events = await submitTransactionAsync(alice, transferTx); + const result = getGenericResult(events); + expect(result.success).to.be.true; + + expect(await isWhitelisted(collectionId, bob.address)).to.be.true; + } + { + const transferTx = contract.tx.toggleWhiteList(value, gasLimit, collectionId, bob.address, false); + const events = await submitTransactionAsync(alice, transferTx); + const result = getGenericResult(events); + expect(result.success).to.be.true; + + expect(await isWhitelisted(collectionId, bob.address)).to.be.false; + } + }); + }); }); From e2828aa19f8932298302e1ae6607e92227acaf16 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Fri, 4 Jun 2021 17:32:07 +0000 Subject: [PATCH 66/66] fix: remove unfinished code Signed-off-by: Yaroslav Bolyukin --- crates/evm-coder-macros/src/solidity_interface.rs | 2 +- pallets/nft/src/eth/erc.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/evm-coder-macros/src/solidity_interface.rs b/crates/evm-coder-macros/src/solidity_interface.rs index f9fa931fcf..d9a4e9d9a6 100644 --- a/crates/evm-coder-macros/src/solidity_interface.rs +++ b/crates/evm-coder-macros/src/solidity_interface.rs @@ -103,7 +103,7 @@ pub struct InterfaceInfo { #[darling(default)] inline_is: IsList, #[darling(default)] - _events: IsList, + events: IsList, } #[derive(FromMeta)] diff --git a/pallets/nft/src/eth/erc.rs b/pallets/nft/src/eth/erc.rs index dcd441c86a..8fc2c8477a 100644 --- a/pallets/nft/src/eth/erc.rs +++ b/pallets/nft/src/eth/erc.rs @@ -117,7 +117,7 @@ pub trait ERC20 { fn allowance(&self, owner: address, spender: address) -> Result; } -#[solidity_interface(is(ERC165, ERC20, ERC20UniqueExtensions))] +#[solidity_interface(is(ERC165, ERC20))] pub trait UniqueFungible { type Error; }