From b9ed42b22673d31ae13de2ba45bb1c526e88f56c Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Tue, 04 May 2021 10:45:30 +0000 Subject: [PATCH] Merge remote-tracking branch 'origin/develop' into feature/NFTPAR-366_upstream_updates --- --- a/.github/workflows/node_build_test.yml +++ b/.github/workflows/node_build_test.yml @@ -31,14 +31,14 @@ username: ${{ secrets.SERVER_USERNAME }} key: ${{ secrets.KEY }} port: ${{ secrets.SERVER_PORT }} - # command_timeout: 200m + command_timeout: 240m script: | eval $(ssh-agent -s) - ssh-add /home/devops/.ssh/git_hub + ssh-add /home/polkadot/.ssh/git_hub git clone git@github.com:usetech-llc/nft_private.git cd nft_private git checkout develop # git pull --all chmod +x ci_node.sh ./ci_node.sh - rm -rf /home/polkadot/nft_private \ No newline at end of file + rm -rf /home/polkadot/nft_private --- a/Cargo.lock +++ b/Cargo.lock @@ -1583,14 +1583,14 @@ "log", "parity-scale-codec 2.0.1", "sc-client-api", - "sp-api", + "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-block-builder", "sp-blockchain", "sp-consensus", - "sp-core", - "sp-inherents", - "sp-runtime", - "sp-timestamp", + "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)", "substrate-prometheus-endpoint", ] @@ -1603,9 +1603,9 @@ "kvdb-rocksdb", "parity-scale-codec 2.0.1", "parking_lot 0.11.1", - "sp-core", + "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-database", - "sp-runtime", + "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", ] [[package]] @@ -1621,9 +1621,9 @@ "futures-timer 3.0.2", "log", "sc-client-api", - "sp-api", + "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-blockchain", - "sp-runtime", + "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", ] [[package]] @@ -1659,11 +1659,11 @@ "sc-rpc", "sc-service", "sha3 0.8.2", - "sp-api", + "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-blockchain", - "sp-io", - "sp-runtime", - "sp-storage", + "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-transaction-pool", ] @@ -1808,9 +1808,9 @@ "parity-scale-codec 2.0.1", "rlp 0.5.0", "sha3 0.8.2", - "sp-core", - "sp-runtime", - "sp-std", + "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)", ] [[package]] @@ -1822,8 +1822,8 @@ "impl-trait-for-tuples 0.1.3", "parity-scale-codec 2.0.1", "serde", - "sp-core", - "sp-std", + "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]] @@ -1835,11 +1835,11 @@ "ethereum-types 0.11.0", "fp-evm", "parity-scale-codec 2.0.1", - "sp-api", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", + "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)", ] [[package]] @@ -1851,10 +1851,10 @@ "ethereum-types 0.11.0", "fp-evm", "parity-scale-codec 2.0.1", - "sp-api", - "sp-core", - "sp-runtime", - "sp-std", + "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)", ] [[package]] @@ -1862,18 +1862,37 @@ version = "3.1.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "frame-support", - "frame-system", + "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)", "linregress", "log", "parity-scale-codec 2.0.1", "paste 1.0.4", - "sp-api", - "sp-io", - "sp-runtime", - "sp-runtime-interface", - "sp-std", - "sp-storage", + "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)", ] [[package]] @@ -1883,7 +1902,7 @@ dependencies = [ "Inflector", "chrono", - "frame-benchmarking", + "frame-benchmarking 3.1.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "handlebars", "parity-scale-codec 2.0.1", "sc-cli", @@ -1891,11 +1910,11 @@ "sc-executor", "sc-service", "serde", - "sp-core", - "sp-externalities", - "sp-keystore", - "sp-runtime", - "sp-state-machine", + "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)", "structopt", ] @@ -1904,15 +1923,15 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "frame-support", - "frame-system", + "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)", "parity-scale-codec 2.0.1", "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "sp-tracing", + "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)", ] [[package]] @@ -1922,18 +1941,30 @@ dependencies = [ "parity-scale-codec 2.0.1", "serde", - "sp-core", - "sp-std", + "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)", +] + +[[package]] name = "frame-support" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "bitflags", - "frame-metadata", - "frame-support-procedural", + "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)", "impl-trait-for-tuples 0.2.1", "log", "once_cell", @@ -1941,15 +1972,42 @@ "paste 1.0.4", "serde", "smallvec 1.6.1", - "sp-arithmetic", - "sp-core", - "sp-inherents", - "sp-io", - "sp-runtime", - "sp-staking", - "sp-state-machine", - "sp-std", - "sp-tracing", + "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)", ] [[package]] @@ -1958,18 +2016,31 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "Inflector", - "frame-support-procedural-tools", + "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)", + "proc-macro2", + "quote", + "syn", +] + +[[package]] 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", + "frame-support-procedural-tools-derive 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "proc-macro-crate 1.0.0", "proc-macro2", "quote", @@ -1977,6 +2048,19 @@ ] [[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" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" @@ -1987,34 +2071,62 @@ ] [[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", + "frame-support 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "impl-trait-for-tuples 0.2.1", "log", "parity-scale-codec 2.0.1", "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "sp-version", + "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)", +] + +[[package]] name = "frame-system-benchmarking" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", + "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)", "parity-scale-codec 2.0.1", - "sp-core", - "sp-runtime", - "sp-std", + "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)", ] [[package]] @@ -2023,7 +2135,7 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "parity-scale-codec 2.0.1", - "sp-api", + "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", ] [[package]] @@ -4012,7 +4124,7 @@ "fc-rpc-core", "flexi_logger", "fp-rpc", - "frame-benchmarking", + "frame-benchmarking 3.1.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "frame-benchmarking-cli", "futures 0.3.12", "jsonrpc-core 15.1.0", @@ -4040,16 +4152,16 @@ "sc-transaction-pool", "serde", "serde_json", - "sp-api", + "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-block-builder", "sp-blockchain", "sp-consensus", "sp-consensus-aura", - "sp-core", + "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-finality-grandpa", - "sp-inherents", - "sp-runtime", - "sp-timestamp", + "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-transaction-pool", "structopt", "substrate-build-script-utils", @@ -4061,25 +4173,26 @@ version = "3.0.0" dependencies = [ "fp-rpc", - "frame-benchmarking", + "frame-benchmarking 3.1.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "frame-executive", - "frame-support", - "frame-system", + "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-system-benchmarking", "frame-system-rpc-runtime-api", "hex-literal", "pallet-aura", - "pallet-balances", + "pallet-balances 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "pallet-contracts", "pallet-contracts-primitives", "pallet-contracts-rpc-runtime-api", "pallet-ethereum", "pallet-evm", "pallet-grandpa", + "pallet-inflation", "pallet-nft", - "pallet-randomness-collective-flip", + "pallet-randomness-collective-flip 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "pallet-sudo", - "pallet-timestamp", + "pallet-timestamp 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "pallet-transaction-payment", "pallet-transaction-payment-rpc-runtime-api", "pallet-treasury", @@ -4087,18 +4200,18 @@ "parity-scale-codec 2.0.1", "serde", "smallvec 1.6.1", - "sp-api", - "sp-arithmetic", + "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-block-builder", "sp-consensus-aura", - "sp-core", - "sp-inherents", + "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-offchain", - "sp-runtime", + "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-session", - "sp-std", + "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-transaction-pool", - "sp-version", + "sp-version 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "substrate-wasm-builder", ] @@ -4244,16 +4357,16 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "frame-support", - "frame-system", + "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)", "pallet-session", - "pallet-timestamp", + "pallet-timestamp 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "parity-scale-codec 2.0.1", "serde", - "sp-application-crypto", + "sp-application-crypto 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-consensus-aura", - "sp-runtime", - "sp-std", + "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]] @@ -4261,14 +4374,14 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "frame-support", - "frame-system", + "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)", "impl-trait-for-tuples 0.2.1", "parity-scale-codec 2.0.1", "sp-authorship", - "sp-inherents", - "sp-runtime", - "sp-std", + "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)", ] [[package]] @@ -4276,14 +4389,29 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", + "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)", "log", "parity-scale-codec 2.0.1", "serde", - "sp-runtime", - "sp-std", + "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)", ] [[package]] @@ -4291,8 +4419,8 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "frame-support", - "frame-system", + "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)", "log", "pallet-contracts-primitives", "pallet-contracts-proc-macro", @@ -4300,11 +4428,11 @@ "parity-wasm 0.41.0", "pwasm-utils 0.16.0", "serde", - "sp-core", - "sp-io", - "sp-runtime", + "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-sandbox", - "sp-std", + "sp-std 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "wasmi-validation", ] @@ -4315,8 +4443,8 @@ dependencies = [ "bitflags", "parity-scale-codec 2.0.1", - "sp-runtime", - "sp-std", + "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]] @@ -4341,11 +4469,11 @@ "pallet-contracts-rpc-runtime-api", "parity-scale-codec 2.0.1", "serde", - "sp-api", + "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-blockchain", - "sp-core", + "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-rpc", - "sp-runtime", + "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", ] [[package]] @@ -4355,9 +4483,9 @@ dependencies = [ "pallet-contracts-primitives", "parity-scale-codec 2.0.1", - "sp-api", - "sp-runtime", - "sp-std", + "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)", ] [[package]] @@ -4372,20 +4500,20 @@ "fp-evm", "fp-rpc", "fp-storage", - "frame-support", - "frame-system", + "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)", "libsecp256k1", - "pallet-balances", + "pallet-balances 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "pallet-evm", - "pallet-timestamp", + "pallet-timestamp 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "parity-scale-codec 2.0.1", "rlp 0.5.0", "rustc-hex", "serde", "sha3 0.8.2", - "sp-io", - "sp-runtime", - "sp-std", + "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)", ] [[package]] @@ -4397,21 +4525,21 @@ "evm-gasometer", "evm-runtime", "fp-evm", - "frame-support", - "frame-system", + "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)", "impl-trait-for-tuples 0.2.1", "log", - "pallet-balances", - "pallet-timestamp", + "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)", "parity-scale-codec 2.0.1", "primitive-types 0.9.0", "rlp 0.5.0", "serde", "sha3 0.8.2", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", + "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)", ] [[package]] @@ -4419,21 +4547,39 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", + "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)", "log", "pallet-authorship", "pallet-session", "parity-scale-codec 2.0.1", "serde", - "sp-application-crypto", - "sp-core", + "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-finality-grandpa", - "sp-runtime", + "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-session", - "sp-staking", - "sp-std", + "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)", +] + +[[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)", + "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)", ] [[package]] @@ -4443,25 +4589,25 @@ "ethereum", "ethereum-tx-sign", "fp-evm", - "frame-benchmarking", - "frame-support", - "frame-system", + "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)", "hex-literal", - "pallet-balances", + "pallet-balances 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "pallet-contracts", "pallet-ethereum", "pallet-evm", - "pallet-randomness-collective-flip", - "pallet-timestamp", + "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-transaction-payment", "parity-scale-codec 2.0.1", "rlp 0.5.0", "serde", - "sp-api", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", + "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)", ] [[package]] @@ -4469,12 +4615,26 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "frame-support", - "frame-system", + "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)", + "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", - "sp-std", + "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)", ] [[package]] @@ -4482,19 +4642,19 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "frame-support", - "frame-system", + "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)", "impl-trait-for-tuples 0.2.1", - "pallet-timestamp", + "pallet-timestamp 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "parity-scale-codec 2.0.1", "serde", - "sp-core", - "sp-io", - "sp-runtime", + "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-session", - "sp-staking", - "sp-std", - "sp-trie", + "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)", ] [[package]] @@ -4502,13 +4662,13 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "frame-support", - "frame-system", + "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)", "parity-scale-codec 2.0.1", "serde", - "sp-io", - "sp-runtime", - "sp-std", + "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)", ] [[package]] @@ -4516,18 +4676,36 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", + "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)", "impl-trait-for-tuples 0.2.1", "log", "parity-scale-codec 2.0.1", "serde", - "sp-inherents", - "sp-io", - "sp-runtime", - "sp-std", - "sp-timestamp", + "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)", ] [[package]] @@ -4535,15 +4713,15 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "frame-support", - "frame-system", + "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)", "parity-scale-codec 2.0.1", "serde", "smallvec 1.6.1", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", + "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)", ] [[package]] @@ -4556,11 +4734,11 @@ "jsonrpc-derive 15.1.0", "pallet-transaction-payment-rpc-runtime-api", "parity-scale-codec 2.0.1", - "sp-api", + "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-blockchain", - "sp-core", + "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-rpc", - "sp-runtime", + "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", ] [[package]] @@ -4570,8 +4748,8 @@ dependencies = [ "pallet-transaction-payment", "parity-scale-codec 2.0.1", - "sp-api", - "sp-runtime", + "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)", ] [[package]] @@ -4579,14 +4757,14 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "frame-support", - "frame-system", + "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)", "impl-trait-for-tuples 0.2.1", - "pallet-balances", + "pallet-balances 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "parity-scale-codec 2.0.1", "serde", - "sp-runtime", - "sp-std", + "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]] @@ -4595,12 +4773,12 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "enumflags2", - "frame-support", - "frame-system", + "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)", "parity-scale-codec 2.0.1", "serde", - "sp-runtime", - "sp-std", + "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]] @@ -5818,12 +5996,12 @@ "sc-client-api", "sc-proposer-metrics", "sc-telemetry", - "sp-api", + "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-blockchain", "sp-consensus", - "sp-core", - "sp-inherents", - "sp-runtime", + "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-transaction-pool", "substrate-prometheus-endpoint", ] @@ -5835,13 +6013,13 @@ dependencies = [ "parity-scale-codec 2.0.1", "sc-client-api", - "sp-api", + "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-block-builder", "sp-blockchain", - "sp-core", - "sp-inherents", - "sp-runtime", - "sp-state-machine", + "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)", ] [[package]] @@ -5861,8 +6039,8 @@ "serde_json", "sp-chain-spec", "sp-consensus-babe", - "sp-core", - "sp-runtime", + "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)", ] [[package]] @@ -5901,13 +6079,13 @@ "serde", "serde_json", "sp-blockchain", - "sp-core", + "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-keyring", - "sp-keystore", - "sp-panic-handler", - "sp-runtime", + "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-utils", - "sp-version", + "sp-version 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "structopt", "thiserror", "tiny-bip39", @@ -5929,22 +6107,22 @@ "parity-scale-codec 2.0.1", "parking_lot 0.11.1", "sc-executor", - "sp-api", + "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-blockchain", "sp-consensus", - "sp-core", + "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-database", - "sp-externalities", - "sp-inherents", - "sp-keystore", - "sp-runtime", - "sp-state-machine", - "sp-std", - "sp-storage", + "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-transaction-pool", - "sp-trie", + "sp-trie 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-utils", - "sp-version", + "sp-version 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "substrate-prometheus-endpoint", ] @@ -5967,14 +6145,14 @@ "sc-client-api", "sc-executor", "sc-state-db", - "sp-arithmetic", + "sp-arithmetic 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-blockchain", "sp-consensus", - "sp-core", + "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-database", - "sp-runtime", - "sp-state-machine", - "sp-trie", + "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)", "substrate-prometheus-endpoint", ] @@ -5986,7 +6164,7 @@ "sc-client-api", "sp-blockchain", "sp-consensus", - "sp-runtime", + "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", ] [[package]] @@ -6004,20 +6182,20 @@ "sc-client-api", "sc-consensus-slots", "sc-telemetry", - "sp-api", - "sp-application-crypto", + "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-block-builder", "sp-blockchain", "sp-consensus", "sp-consensus-aura", "sp-consensus-slots", - "sp-core", - "sp-inherents", - "sp-io", - "sp-keystore", - "sp-runtime", - "sp-timestamp", - "sp-version", + "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)", "substrate-prometheus-endpoint", ] @@ -6048,22 +6226,22 @@ "sc-telemetry", "schnorrkel", "serde", - "sp-api", - "sp-application-crypto", + "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-block-builder", "sp-blockchain", "sp-consensus", "sp-consensus-babe", "sp-consensus-slots", "sp-consensus-vrf", - "sp-core", - "sp-inherents", - "sp-io", - "sp-keystore", - "sp-runtime", - "sp-timestamp", + "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-utils", - "sp-version", + "sp-version 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "substrate-prometheus-endpoint", ] @@ -6077,7 +6255,7 @@ "parking_lot 0.11.1", "sc-client-api", "sp-blockchain", - "sp-runtime", + "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", ] [[package]] @@ -6092,17 +6270,17 @@ "parking_lot 0.11.1", "sc-client-api", "sc-telemetry", - "sp-api", - "sp-application-crypto", - "sp-arithmetic", + "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-blockchain", "sp-consensus", "sp-consensus-slots", - "sp-core", - "sp-inherents", - "sp-runtime", - "sp-state-machine", - "sp-trie", + "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)", "thiserror", ] @@ -6115,9 +6293,9 @@ "sc-client-api", "sp-authorship", "sp-consensus", - "sp-core", - "sp-inherents", - "sp-runtime", + "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)", ] [[package]] @@ -6135,17 +6313,17 @@ "sc-executor-common", "sc-executor-wasmi", "sc-executor-wasmtime", - "sp-api", - "sp-core", - "sp-externalities", - "sp-io", - "sp-panic-handler", - "sp-runtime-interface", + "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-serializer", "sp-tasks", - "sp-trie", - "sp-version", - "sp-wasm-interface", + "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)", "wasmi", ] @@ -6158,9 +6336,9 @@ "parity-scale-codec 2.0.1", "parity-wasm 0.41.0", "sp-allocator", - "sp-core", + "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-serializer", - "sp-wasm-interface", + "sp-wasm-interface 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "thiserror", "wasmi", ] @@ -6174,9 +6352,9 @@ "parity-scale-codec 2.0.1", "sc-executor-common", "sp-allocator", - "sp-core", - "sp-runtime-interface", - "sp-wasm-interface", + "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)", "wasmi", ] @@ -6192,9 +6370,9 @@ "sc-executor-common", "scoped-tls", "sp-allocator", - "sp-core", - "sp-runtime-interface", - "sp-wasm-interface", + "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)", "wasmtime", ] @@ -6223,16 +6401,16 @@ "sc-network-gossip", "sc-telemetry", "serde_json", - "sp-api", - "sp-application-crypto", - "sp-arithmetic", + "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-blockchain", "sp-consensus", - "sp-core", + "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-finality-grandpa", - "sp-inherents", - "sp-keystore", - "sp-runtime", + "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-utils", "substrate-prometheus-endpoint", ] @@ -6249,7 +6427,7 @@ "sc-client-api", "sc-network", "sp-blockchain", - "sp-runtime", + "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-transaction-pool", "sp-utils", "wasm-timer", @@ -6269,9 +6447,9 @@ "parking_lot 0.11.1", "rand 0.7.3", "serde_json", - "sp-application-crypto", - "sp-core", - "sp-keystore", + "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)", "subtle 2.4.0", ] @@ -6286,12 +6464,12 @@ "parking_lot 0.11.1", "sc-client-api", "sc-executor", - "sp-api", + "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-blockchain", - "sp-core", - "sp-externalities", - "sp-runtime", - "sp-state-machine", + "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)", ] [[package]] @@ -6333,11 +6511,11 @@ "serde", "serde_json", "smallvec 1.6.1", - "sp-arithmetic", + "sp-arithmetic 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-blockchain", "sp-consensus", - "sp-core", - "sp-runtime", + "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-utils", "substrate-prometheus-endpoint", "thiserror", @@ -6358,7 +6536,7 @@ "log", "lru", "sc-network", - "sp-runtime", + "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "substrate-prometheus-endpoint", "wasm-timer", ] @@ -6383,10 +6561,10 @@ "sc-client-api", "sc-keystore", "sc-network", - "sp-api", - "sp-core", + "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-offchain", - "sp-runtime", + "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-utils", "threadpool", ] @@ -6432,19 +6610,19 @@ "sc-rpc-api", "sc-tracing", "serde_json", - "sp-api", + "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-blockchain", "sp-chain-spec", - "sp-core", - "sp-keystore", + "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-offchain", "sp-rpc", - "sp-runtime", + "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-session", - "sp-state-machine", + "sp-state-machine 0.9.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-transaction-pool", "sp-utils", - "sp-version", + "sp-version 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", ] [[package]] @@ -6464,11 +6642,11 @@ "serde", "serde_json", "sp-chain-spec", - "sp-core", + "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-rpc", - "sp-runtime", + "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-transaction-pool", - "sp-version", + "sp-version 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", ] [[package]] @@ -6485,7 +6663,7 @@ "log", "serde", "serde_json", - "sp-runtime", + "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "substrate-prometheus-endpoint", ] @@ -6526,24 +6704,24 @@ "sc-transaction-pool", "serde", "serde_json", - "sp-api", - "sp-application-crypto", + "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-block-builder", "sp-blockchain", "sp-consensus", - "sp-core", - "sp-externalities", - "sp-inherents", - "sp-io", - "sp-keystore", - "sp-runtime", + "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-session", - "sp-state-machine", - "sp-tracing", + "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-transaction-pool", - "sp-trie", + "sp-trie 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-utils", - "sp-version", + "sp-version 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "substrate-prometheus-endpoint", "tempfile", "thiserror", @@ -6563,7 +6741,7 @@ "parity-util-mem-derive", "parking_lot 0.11.1", "sc-client-api", - "sp-core", + "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "thiserror", ] @@ -6604,7 +6782,7 @@ "sc-tracing-proc-macro", "serde", "serde_json", - "sp-tracing", + "sp-tracing 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "thiserror", "tracing", "tracing-core", @@ -6639,8 +6817,8 @@ "retain_mut", "serde", "sp-blockchain", - "sp-core", - "sp-runtime", + "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-transaction-pool", "sp-utils", "thiserror", @@ -6661,11 +6839,11 @@ "parking_lot 0.11.1", "sc-client-api", "sc-transaction-graph", - "sp-api", + "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-blockchain", - "sp-core", - "sp-runtime", - "sp-tracing", + "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-transaction-pool", "sp-utils", "substrate-prometheus-endpoint", @@ -7067,9 +7245,9 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "log", - "sp-core", - "sp-std", - "sp-wasm-interface", + "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)", "thiserror", ] @@ -7081,16 +7259,33 @@ "hash-db", "log", "parity-scale-codec 2.0.1", - "sp-api-proc-macro", - "sp-core", - "sp-runtime", - "sp-state-machine", - "sp-std", - "sp-version", + "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)", + "thiserror", +] + +[[package]] name = "sp-api-proc-macro" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" @@ -7103,15 +7298,41 @@ ] [[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" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "parity-scale-codec 2.0.1", "serde", - "sp-core", - "sp-io", - "sp-std", + "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)", ] [[package]] @@ -7123,19 +7344,33 @@ "num-traits", "parity-scale-codec 2.0.1", "serde", - "sp-debug-derive", - "sp-std", + "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)", +] + +[[package]] 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", - "sp-inherents", - "sp-runtime", - "sp-std", + "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)", ] [[package]] @@ -7144,10 +7379,10 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "parity-scale-codec 2.0.1", - "sp-api", - "sp-inherents", - "sp-runtime", - "sp-std", + "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)", ] [[package]] @@ -7160,11 +7395,11 @@ "lru", "parity-scale-codec 2.0.1", "parking_lot 0.11.1", - "sp-api", + "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-consensus", "sp-database", - "sp-runtime", - "sp-state-machine", + "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)", "thiserror", ] @@ -7189,15 +7424,15 @@ "parity-scale-codec 2.0.1", "parking_lot 0.11.1", "serde", - "sp-api", - "sp-core", - "sp-inherents", - "sp-runtime", - "sp-state-machine", - "sp-std", - "sp-trie", + "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-utils", - "sp-version", + "sp-version 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "substrate-prometheus-endpoint", "thiserror", "wasm-timer", @@ -7209,13 +7444,13 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "parity-scale-codec 2.0.1", - "sp-api", - "sp-application-crypto", + "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-consensus-slots", - "sp-inherents", - "sp-runtime", - "sp-std", - "sp-timestamp", + "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)", ] [[package]] @@ -7226,17 +7461,17 @@ "merlin", "parity-scale-codec 2.0.1", "serde", - "sp-api", - "sp-application-crypto", + "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-consensus", "sp-consensus-slots", "sp-consensus-vrf", - "sp-core", - "sp-inherents", - "sp-keystore", - "sp-runtime", - "sp-std", - "sp-timestamp", + "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)", ] [[package]] @@ -7245,8 +7480,8 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "parity-scale-codec 2.0.1", - "sp-arithmetic", - "sp-runtime", + "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)", ] [[package]] @@ -7256,9 +7491,9 @@ dependencies = [ "parity-scale-codec 2.0.1", "schnorrkel", - "sp-core", - "sp-runtime", - "sp-std", + "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)", ] [[package]] @@ -7291,11 +7526,56 @@ "secrecy", "serde", "sha2 0.9.3", - "sp-debug-derive", - "sp-externalities", - "sp-runtime-interface", - "sp-std", - "sp-storage", + "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)", "substrate-bip39", "thiserror", "tiny-bip39", @@ -7325,14 +7605,37 @@ ] [[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" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "environmental", "parity-scale-codec 2.0.1", - "sp-std", - "sp-storage", + "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)", ] [[package]] @@ -7344,12 +7647,12 @@ "log", "parity-scale-codec 2.0.1", "serde", - "sp-api", - "sp-application-crypto", - "sp-core", - "sp-keystore", - "sp-runtime", - "sp-std", + "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)", ] [[package]] @@ -7359,12 +7662,25 @@ dependencies = [ "parity-scale-codec 2.0.1", "parking_lot 0.11.1", - "sp-core", - "sp-std", + "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)", + "thiserror", +] + +[[package]] name = "sp-io" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" @@ -7375,27 +7691,52 @@ "log", "parity-scale-codec 2.0.1", "parking_lot 0.11.1", - "sp-core", - "sp-externalities", - "sp-keystore", - "sp-runtime-interface", - "sp-state-machine", - "sp-std", - "sp-tracing", - "sp-trie", - "sp-wasm-interface", + "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)", + "tracing", + "tracing-core", +] + +[[package]] name = "sp-keyring" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "lazy_static", - "sp-core", - "sp-runtime", + "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)", "strum", ] @@ -7412,8 +7753,25 @@ "parking_lot 0.11.1", "schnorrkel", "serde", - "sp-core", - "sp-externalities", + "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)", ] [[package]] @@ -7421,9 +7779,9 @@ version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ - "sp-api", - "sp-core", - "sp-runtime", + "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)", ] [[package]] @@ -7435,12 +7793,21 @@ ] [[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", + "sp-core 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", ] [[package]] @@ -7457,11 +7824,33 @@ "paste 1.0.4", "rand 0.7.3", "serde", - "sp-application-crypto", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-std", + "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)", ] [[package]] @@ -7472,12 +7861,30 @@ "impl-trait-for-tuples 0.2.1", "parity-scale-codec 2.0.1", "primitive-types 0.9.0", - "sp-externalities", - "sp-runtime-interface-proc-macro", - "sp-std", - "sp-storage", - "sp-tracing", - "sp-wasm-interface", + "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)", "static_assertions", ] @@ -7494,15 +7901,28 @@ ] [[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", - "sp-io", - "sp-std", - "sp-wasm-interface", + "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)", "wasmi", ] @@ -7521,11 +7941,11 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "parity-scale-codec 2.0.1", - "sp-api", - "sp-core", - "sp-runtime", - "sp-staking", - "sp-std", + "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)", ] [[package]] @@ -7534,8 +7954,19 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "parity-scale-codec 2.0.1", - "sp-runtime", - "sp-std", + "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)", ] [[package]] @@ -7550,22 +7981,51 @@ "parking_lot 0.11.1", "rand 0.7.3", "smallvec 1.6.1", - "sp-core", - "sp-externalities", - "sp-panic-handler", - "sp-std", - "sp-trie", + "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)", + "thiserror", + "trie-db", + "trie-root", +] + +[[package]] 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" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" @@ -7574,8 +8034,22 @@ "parity-scale-codec 2.0.1", "ref-cast", "serde", - "sp-debug-derive", - "sp-std", + "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)", ] [[package]] @@ -7584,11 +8058,11 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "log", - "sp-core", - "sp-externalities", - "sp-io", - "sp-runtime-interface", - "sp-std", + "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)", ] [[package]] @@ -7597,21 +8071,50 @@ source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "parity-scale-codec 2.0.1", - "sp-api", - "sp-inherents", - "sp-runtime", - "sp-std", + "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)", + "wasm-timer", +] + +[[package]] name = "sp-tracing" version = "3.0.0" source = "git+https://github.com/paritytech/substrate.git?branch=frontier#39b31316815ec6d709e7ad7c1a31c436d14c53e6" dependencies = [ "log", "parity-scale-codec 2.0.1", - "sp-std", + "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)", "tracing", "tracing-core", "tracing-subscriber", @@ -7627,9 +8130,9 @@ "log", "parity-scale-codec 2.0.1", "serde", - "sp-api", + "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-blockchain", - "sp-runtime", + "sp-runtime 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "thiserror", ] @@ -7641,8 +8144,23 @@ "hash-db", "memory-db", "parity-scale-codec 2.0.1", - "sp-core", - "sp-std", + "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)", "trie-db", "trie-root", ] @@ -7667,8 +8185,21 @@ "impl-serde", "parity-scale-codec 2.0.1", "serde", - "sp-runtime", - "sp-std", + "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)", ] [[package]] @@ -7678,11 +8209,23 @@ dependencies = [ "impl-trait-for-tuples 0.2.1", "parity-scale-codec 2.0.1", - "sp-std", + "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)", + "wasmi", +] + +[[package]] name = "spin" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -7816,11 +8359,11 @@ "sc-client-api", "sc-rpc-api", "serde", - "sp-api", + "sp-api 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=frontier)", "sp-block-builder", "sp-blockchain", - "sp-core", - "sp-runtime", + "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-transaction-pool", ] --- a/Dockerfile-tests +++ b/Dockerfile-tests @@ -20,11 +20,14 @@ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ nvm install v15.0.1 && \ nvm use v15.0.1 && \ - npm install --save @polkadot/api + npm install --save @polkadot/api && \ + npm install --save-dev mochawesome CMD export NVM_DIR="$HOME/.nvm" && \ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ cd tests && \ - npm install --global yarn && \ + npm install --global yarn && \ + yarn add mochawesome && \ yarn install && \ - yarn test + yarn test --reporter mochawesome + # yarn test --- a/ci_node.sh +++ b/ci_node.sh @@ -1,10 +1,12 @@ #!/bin/bash -docker-compose -f docker-compose-tests.yml up -d --build --force-recreate --no-deps +#docker-compose -f docker-compose-tests.yml up -d --build --force-recreate --no-deps + +docker-compose -f docker-compose-tests.yml up -d --build # validate if testing container finished -while [ "$(docker ps | grep unit_test | wc -l)" -ge 1 ]; do echo "Unit test in process" && date && sleep 60; done && docker logs unit_test &> /home/polkadot/unit_test.log & \ -while [ "$(docker ps | grep integration_test | wc -l)" -ge 1 ]; do echo "Integration test in process" && sleep 60; done && docker logs integration_test &> /home/polkadot/integration_test.log +while [ "$(docker ps | grep unit_test | wc -l)" -ge 1 ]; do echo "Unit tests in process" && sleep 600; done && docker logs unit_test &> /home/polkadot/report-log/unit_test.log & \ +while [ "$(docker ps | grep integration_test | wc -l)" -ge 1 ]; do echo "Integration tests in process" && sleep 600; done && docker logs integration_test &> /home/polkadot/report-log/integration_test.log docker-compose -f docker-compose-tests.yml down -v -echo "Wrokflow finished" -docker system prune --force \ No newline at end of file +echo "Workflow finished" +docker system prune --force --- a/docker-compose-tests.yml +++ b/docker-compose-tests.yml @@ -21,14 +21,16 @@ build: context: ./ dockerfile: Dockerfile-tests - volumes: + volumes: - ./tests/src/config_docker.ts:/nft_parachain/tests/src/config.ts + - /home/polkadot/mochawesome-report:/nft_parachain/tests/mochawesome-report + # command: bash -c 'while true; do sleep 20; df -h; done' networks: - node_test_network depends_on: - node_validator1 - unit_tests: + unit_tests: container_name: unit_test image: nft_unit_test build: @@ -43,4 +45,4 @@ networks: node_test_network: name: node_test_network - driver: bridge \ No newline at end of file + driver: bridge --- /dev/null +++ b/pallets/inflation/Cargo.toml @@ -0,0 +1,48 @@ +[package] +authors = ['Substrate DevHub '] +description = 'Unqiue pallet inflation' +edition = '2018' +homepage = 'https://substrate.io' +license = 'Unlicense' +name = 'pallet-inflation' +repository = 'https://github.com/usetech-llc/nft_private/' +version = '3.0.0' + +[package.metadata.docs.rs] +targets = ['x86_64-unknown-linux-gnu'] + +# alias "parity-scale-code" to "codec" +[dependencies.codec] +default-features = false +features = ['derive'] +package = 'parity-scale-codec' +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' } + +[features] +default = ['std'] +std = [ + 'codec/std', + 'serde/std', + 'frame-support/std', + 'frame-system/std', + 'pallet-balances/std', + 'pallet-timestamp/std', + 'pallet-randomness-collective-flip/std', + 'sp-std/std', + 'sp-runtime/std', + 'frame-benchmarking/std', +] +runtime-benchmarks = ["frame-benchmarking"] --- /dev/null +++ b/pallets/inflation/src/benchmarking.rs @@ -0,0 +1,19 @@ +#![cfg(feature = "runtime-benchmarks")] + +use super::*; +use crate::Module as Inflation; + +use sp_std::prelude::*; +use frame_system::RawOrigin; +use frame_benchmarking::{benchmarks}; +use frame_support::traits::OnInitialize; + +benchmarks! { + + on_initialize { + let block1: T::BlockNumber = T::BlockNumber::from(1u32); + let block2: T::BlockNumber = T::BlockNumber::from(2u32); + Inflation::::on_initialize(block1); // Create Treasury account + }: { Inflation::::on_initialize(block2); } // Benchmark deposit_into_existing path + +} --- /dev/null +++ b/pallets/inflation/src/lib.rs @@ -0,0 +1,130 @@ +// +// This file is subject to the terms and conditions defined in +// file 'LICENSE', which is part of this source code package. +// + +#![recursion_limit = "1024"] + +#![cfg_attr(not(feature = "std"), no_std)] + +#[cfg(feature = "std")] +pub use std::*; + +#[cfg(feature = "std")] +pub use serde::*; + +#[cfg(feature = "runtime-benchmarks")] +mod benchmarking; + +#[cfg(test)] +mod tests; + +pub use frame_support::{ + construct_runtime, decl_module, decl_storage, + ensure, + traits::{ + Currency, ExistenceRequirement, Get, Imbalance, KeyOwnerProofSystem, OnUnbalanced, + Randomness, IsSubType, WithdrawReasons, + }, + weights::{ + constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_PER_SECOND}, + DispatchInfo, GetDispatchInfo, IdentityFee, Pays, PostDispatchInfo, Weight, + WeightToFeePolynomial, DispatchClass, + }, + StorageValue, + transactional, +}; + +// #[cfg(feature = "runtime-benchmarks")] +pub use frame_support::dispatch::DispatchResult; + +use sp_runtime::{ + Perbill, + traits::{Zero} +}; +use sp_std::convert::TryInto; + +use frame_system::{self as system}; + +/// The balance type of this module. +pub type BalanceOf = + <::Currency as Currency<::AccountId>>::Balance; + +pub const YEAR: u32 = 5_259_600; +pub const TOTAL_YEARS_UNTIL_FLAT: u32 = 9; +pub const START_INFLATION_PERCENT: u32 = 10; +pub const END_INFLATION_PERCENT: u32 = 4; + +pub trait Config: system::Config { + type Currency: Currency; + type TreasuryAccountId: Get; + type InflationBlockInterval: Get; +} + +decl_storage! { + trait Store for Module as Inflation { + /// starting year total issuance + pub StartingYearTotalIssuance get(fn starting_year_total_issuance): BalanceOf; + + /// Current block inflation + pub BlockInflation get(fn block_inflation): BalanceOf; + } +} + +decl_module! { + pub struct Module for enum Call + where + origin: T::Origin, + { + const InflationBlockInterval: T::BlockNumber = T::InflationBlockInterval::get(); + + fn on_initialize(now: T::BlockNumber) -> Weight + { + let mut consumed_weight = 0; + let mut add_weight = |reads, writes, weight| { + consumed_weight += T::DbWeight::get().reads_writes(reads, writes); + consumed_weight += weight; + }; + + let block_interval: u32 = T::InflationBlockInterval::get().try_into().unwrap_or(0); + + // Recalculate inflation on the first block of the year (or if it is not initialized yet) + if (now % T::BlockNumber::from(YEAR)).is_zero() || >::get().is_zero() { + let current_year: u32 = (now / T::BlockNumber::from(YEAR)).try_into().unwrap_or(0); + + let one_percent = Perbill::from_percent(1); + + if current_year <= TOTAL_YEARS_UNTIL_FLAT { + let amount: BalanceOf = Perbill::from_rational_approximation( + block_interval * (START_INFLATION_PERCENT * TOTAL_YEARS_UNTIL_FLAT - current_year * (START_INFLATION_PERCENT - END_INFLATION_PERCENT)), + YEAR * TOTAL_YEARS_UNTIL_FLAT + ) * ( one_percent * T::Currency::total_issuance() ); + >::put(amount); + } + else { + let amount: BalanceOf = Perbill::from_rational_approximation( + block_interval * END_INFLATION_PERCENT, + YEAR + ) * (one_percent * T::Currency::total_issuance()); + >::put(amount); + } + >::set(T::Currency::total_issuance()); + + // First time deposit + T::Currency::deposit_creating(&T::TreasuryAccountId::get(), >::get()); + + add_weight(7, 6, 28_300_000); + } + + // Apply inflation every InflationBlockInterval blocks and in the 1st block to initialize Treasury account + else if (now % T::BlockNumber::from(block_interval)).is_zero() { + T::Currency::deposit_into_existing(&T::TreasuryAccountId::get(), >::get()).ok(); + + add_weight(3, 2, 12_900_000); + } + + consumed_weight + } + + } +} --- /dev/null +++ b/pallets/inflation/src/tests.rs @@ -0,0 +1,241 @@ +#[cfg(test)] +mod tests { + use crate as pallet_inflation; + + use frame_system; + use frame_support::{traits::{Currency}, parameter_types}; + use frame_support::{traits::OnInitialize}; + use sp_core::H256; + use sp_runtime::{traits::{BlakeTwo256, IdentityLookup}, testing::Header}; + + type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic; + type Block = frame_system::mocking::MockBlock; + + const YEAR: u64 = 5_259_600; + + parameter_types! { + pub const ExistentialDeposit: u64 = 1; + pub const MaxLocks: u32 = 50; + } + + impl pallet_balances::Config for Test { + type AccountStore = System; + type Balance = u64; + type DustRemoval = (); + type Event = (); + type ExistentialDeposit = ExistentialDeposit; + type WeightInfo = (); + type MaxLocks = MaxLocks; + } + + frame_support::construct_runtime!( + pub enum Test where + Block = Block, + NodeBlock = Block, + UncheckedExtrinsic = UncheckedExtrinsic, + { + Balances: pallet_balances::{Module, Call, Storage}, + System: frame_system::{Module, Call, Config, Storage, Event}, + Inflation: pallet_inflation::{Module, Call, Storage}, + } + ); + + parameter_types! { + pub const BlockHashCount: u64 = 250; + pub BlockWeights: frame_system::limits::BlockWeights = + frame_system::limits::BlockWeights::simple_max(1024); + pub const SS58Prefix: u8 = 42; + } + + impl frame_system::Config for Test { + type BaseCallFilter = (); + type BlockWeights = (); + type BlockLength = (); + type DbWeight = (); + type Origin = Origin; + type Call = Call; + type Index = u64; + type BlockNumber = u64; + type Hash = H256; + type Hashing = BlakeTwo256; + type AccountId = u64; + type Lookup = IdentityLookup; + type Header = Header; + type Event = (); + type BlockHashCount = BlockHashCount; + type Version = (); + type PalletInfo = PalletInfo; + type AccountData = pallet_balances::AccountData; + type OnNewAccount = (); + type OnKilledAccount = (); + type SystemWeightInfo = (); + type SS58Prefix = SS58Prefix; + } + + parameter_types! { + pub TreasuryAccountId: u64 = 1234; + pub const InflationBlockInterval: u32 = 100; // every time per how many blocks inflation is applied + } + + impl pallet_inflation::Config for Test { + type Currency = Balances; + type TreasuryAccountId = TreasuryAccountId; + type InflationBlockInterval = InflationBlockInterval; + } + + // Build genesis storage according to the mock runtime. + pub fn new_test_ext() -> sp_io::TestExternalities { + frame_system::GenesisConfig::default().build_storage::().unwrap().into() + } + + #[test] + fn inflation_works() { + new_test_ext().execute_with(|| { + // Total issuance = 1_000_000_000 + let initial_issuance: u64 = 1_000_000_000; + let _ = >::deposit_creating(&1234, initial_issuance); + assert_eq!(Balances::free_balance(1234), initial_issuance); + + // BlockInflation should be set after 1st block and + // first inflation deposit should be equal to BlockInflation + Inflation::on_initialize(1); + assert!(Inflation::block_inflation() > 0); + assert_eq!(Balances::free_balance(1234) - initial_issuance, Inflation::block_inflation()); + }); + } + + #[test] + fn inflation_second_deposit() { + new_test_ext().execute_with(|| { + // Total issuance = 1_000_000_000 + let initial_issuance: u64 = 1_000_000_000; + let _ = >::deposit_creating(&1234, initial_issuance); + assert_eq!(Balances::free_balance(1234), initial_issuance); + Inflation::on_initialize(1); + + // Next inflation deposit happens when block is multiple of InflationBlockInterval + let mut block: u32 = 2; + let balance_before: u64 = Balances::free_balance(1234); + while block % InflationBlockInterval::get() != 0 { + Inflation::on_initialize(block as u64); + block += 1; + } + let balance_just_before: u64 = Balances::free_balance(1234); + assert_eq!(balance_before, balance_just_before); + + // The block with inflation + Inflation::on_initialize(block as u64); + let balance_after: u64 = Balances::free_balance(1234); + assert_eq!(balance_after - balance_just_before, Inflation::block_inflation()); + }); + } + + #[test] + fn inflation_in_1_year() { + new_test_ext().execute_with(|| { + // Total issuance = 1_000_000_000 + let initial_issuance: u64 = 1_000_000_000; + let _ = >::deposit_creating(&1234, initial_issuance); + assert_eq!(Balances::free_balance(1234), initial_issuance); + Inflation::on_initialize(1); + let block_inflation_year_0 = Inflation::block_inflation(); + + Inflation::on_initialize(YEAR); + let block_inflation_year_1 = Inflation::block_inflation(); + + // Assert that year 1 inflation is less than year 0 + assert!(block_inflation_year_0 > block_inflation_year_1); + }); + } + + #[test] + fn inflation_in_1_to_9_years() { + new_test_ext().execute_with(|| { + // Total issuance = 1_000_000_000 + let initial_issuance: u64 = 1_000_000_000; + let _ = >::deposit_creating(&1234, initial_issuance); + assert_eq!(Balances::free_balance(1234), initial_issuance); + Inflation::on_initialize(1); + + for year in 1..=9 { + let block_inflation_year_before = Inflation::block_inflation(); + Inflation::on_initialize(YEAR * year); + let block_inflation_year_after = Inflation::block_inflation(); + + // Assert that next year inflation is less than previous year inflation + assert!(block_inflation_year_before > block_inflation_year_after); + } + + }); + } + + #[test] + fn inflation_after_year_10_is_flat() { + new_test_ext().execute_with(|| { + // Total issuance = 1_000_000_000 + let initial_issuance: u64 = 1_000_000_000; + let _ = >::deposit_creating(&1234, initial_issuance); + assert_eq!(Balances::free_balance(1234), initial_issuance); + Inflation::on_initialize(YEAR * 9); + + for year in 10..=20 { + let block_inflation_year_before = Inflation::block_inflation(); + Inflation::on_initialize(YEAR * year); + let block_inflation_year_after = Inflation::block_inflation(); + + // Assert that next year inflation is equal to previous year inflation + assert_eq!(block_inflation_year_before, block_inflation_year_after); + } + }); + } + + #[test] + fn inflation_rate_by_year() { + new_test_ext().execute_with(|| { + let payouts: u64 = YEAR / InflationBlockInterval::get() as u64; + + // Inflation starts at 10% and does down by 2/3% every year until year 9 (included), + // then it is flat. + let payout_by_year: [u64; 11] = [ + 1000, + 933, + 867, + 800, + 733, + 667, + 600, + 533, + 467, + 400, + 400 + ]; + + // For accuracy total issuance = payout0 * payouts * 10; + let initial_issuance: u64 = payout_by_year[0] * payouts * 10; + let _ = >::deposit_creating(&1234, initial_issuance); + assert_eq!(Balances::free_balance(1234), initial_issuance); + + for year in 0..=10 { + // Year first block + Inflation::on_initialize(year*YEAR); + let mut actual_payout = Inflation::block_inflation(); + assert_eq!(actual_payout, payout_by_year[year as usize]); + + // Year second block + Inflation::on_initialize(year*YEAR+1); + actual_payout = Inflation::block_inflation(); + assert_eq!(actual_payout, payout_by_year[year as usize]); + + // Year middle block + Inflation::on_initialize(year*YEAR + YEAR/2); + actual_payout = Inflation::block_inflation(); + assert_eq!(actual_payout, payout_by_year[year as usize]); + + // Year last block + Inflation::on_initialize((year + 1)*YEAR-1); + actual_payout = Inflation::block_inflation(); + assert_eq!(actual_payout, payout_by_year[year as usize]); + } + }); + } +} --- a/pallets/nft/src/benchmarking.rs +++ b/pallets/nft/src/benchmarking.rs @@ -1,420 +1,419 @@ -#[cfg(feature = "runtime-benchmarks")] -// mod benchmarking { - use super::*; - use sp_std::prelude::*; - use frame_system::RawOrigin; - // use frame_support::{ensure, traits::OnFinalize}; - use frame_benchmarking::{benchmarks, account, whitelisted_caller}; // , TrackedStorageKey, - use crate::Module as Nft; +#![cfg(feature = "runtime-benchmarks")] - const SEED: u32 = 1; +use super::*; +use crate::Module as Nft; - fn default_nft_data() -> CreateItemData { - CreateItemData::NFT(CreateNftData { const_data: vec![1, 2, 3], variable_data: vec![3, 2, 1] }) - } - - fn default_fungible_data () -> CreateItemData { - CreateItemData::Fungible(CreateFungibleData { }) - } - - fn default_re_fungible_data () -> CreateItemData { - CreateItemData::ReFungible(CreateReFungibleData { const_data: vec![1, 2, 3], variable_data: vec![3, 2, 1] }) - } +use sp_std::prelude::*; +use frame_system::RawOrigin; +use frame_benchmarking::{benchmarks, account, whitelisted_caller}; // , TrackedStorageKey, +const SEED: u32 = 1; +/* +fn default_nft_data() -> CreateItemData { + CreateItemData::NFT(CreateNftData { const_data: vec![1, 2, 3], variable_data: vec![3, 2, 1] }) +} - benchmarks! { +fn default_fungible_data () -> CreateItemData { + CreateItemData::Fungible(CreateFungibleData { }) +} - _ {} +fn default_re_fungible_data () -> CreateItemData { + CreateItemData::ReFungible(CreateReFungibleData { const_data: vec![1, 2, 3], variable_data: vec![3, 2, 1] }) +} +*/ - create_collection { - let col_name1: Vec = "Test1".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1".to_vec(); - let mode: CollectionMode = CollectionMode::NFT; - let caller: T::AccountId = account("caller", 0, SEED); - }: create_collection(RawOrigin::Signed(caller.clone()), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode) - verify { - assert_eq!(Nft::::collection(2).owner, caller); - } +benchmarks! { - destroy_collection { - let col_name1: Vec = "Test1".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1".to_vec(); - let mode: CollectionMode = CollectionMode::NFT; - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; - }: destroy_collection(RawOrigin::Signed(caller.clone()), 2) + create_collection { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT; + let caller: T::AccountId = account("caller", 0, SEED); + }: _(RawOrigin::Signed(caller.clone()), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode) +/* + verify { + assert_eq!(Nft::::collection_id(2).owner, caller); + } + destroy_collection { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT; + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + }: _(RawOrigin::Signed(caller.clone()), 2) - add_to_white_list { - let col_name1: Vec = "Test1".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1".to_vec(); - let mode: CollectionMode = CollectionMode::NFT; - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - let whitelist_account: T::AccountId = account("admin", 0, SEED); - Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; - }: add_to_white_list(RawOrigin::Signed(caller.clone()), 2, whitelist_account) + add_to_white_list { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT; + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + let whitelist_account: T::AccountId = account("admin", 0, SEED); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + }: add_to_white_list(RawOrigin::Signed(caller.clone()), 2, whitelist_account) - remove_from_white_list { - let col_name1: Vec = "Test1".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1".to_vec(); - let mode: CollectionMode = CollectionMode::NFT; - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - let whitelist_account: T::AccountId = account("admin", 0, SEED); - Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; - Nft::::add_to_white_list(RawOrigin::Signed(caller.clone()).into(), 2, whitelist_account.clone())?; - }: remove_from_white_list(RawOrigin::Signed(caller.clone()), 2, whitelist_account) + remove_from_white_list { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT; + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + let whitelist_account: T::AccountId = account("admin", 0, SEED); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + Nft::::add_to_white_list(RawOrigin::Signed(caller.clone()).into(), 2, whitelist_account.clone())?; + }: remove_from_white_list(RawOrigin::Signed(caller.clone()), 2, whitelist_account) - set_public_access_mode { - let col_name1: Vec = "Test1".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1".to_vec(); - let mode: CollectionMode = CollectionMode::NFT; - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; - }: set_public_access_mode(RawOrigin::Signed(caller.clone()), 2, AccessMode::WhiteList) + set_public_access_mode { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT; + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + }: set_public_access_mode(RawOrigin::Signed(caller.clone()), 2, AccessMode::WhiteList) - set_mint_permission { - let col_name1: Vec = "Test1".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1".to_vec(); - let mode: CollectionMode = CollectionMode::NFT; - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; - }: set_mint_permission(RawOrigin::Signed(caller.clone()), 2, true) + set_mint_permission { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT; + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + }: set_mint_permission(RawOrigin::Signed(caller.clone()), 2, true) - change_collection_owner { - let col_name1: Vec = "Test1".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1".to_vec(); - let mode: CollectionMode = CollectionMode::NFT; - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; - let new_owner: T::AccountId = account("admin", 0, SEED); - }: change_collection_owner(RawOrigin::Signed(caller.clone()), 2, new_owner) + change_collection_owner { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT; + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + let new_owner: T::AccountId = account("admin", 0, SEED); + }: change_collection_owner(RawOrigin::Signed(caller.clone()), 2, new_owner) - add_collection_admin { - let col_name1: Vec = "Test1".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1".to_vec(); - let mode: CollectionMode = CollectionMode::NFT; - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; - let new_admin: T::AccountId = account("admin", 0, SEED); - }: add_collection_admin(RawOrigin::Signed(caller.clone()), 2, new_admin) + add_collection_admin { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT; + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + let new_admin: T::AccountId = account("admin", 0, SEED); + }: add_collection_admin(RawOrigin::Signed(caller.clone()), 2, new_admin) - remove_collection_admin { - let col_name1: Vec = "Test1".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1".to_vec(); - let mode: CollectionMode = CollectionMode::NFT; - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; - let new_admin: T::AccountId = account("admin", 0, SEED); - Nft::::add_collection_admin(RawOrigin::Signed(caller.clone()).into(), 2, new_admin.clone())?; - }: remove_collection_admin(RawOrigin::Signed(caller.clone()), 2, new_admin) + remove_collection_admin { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT; + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + let new_admin: T::AccountId = account("admin", 0, SEED); + Nft::::add_collection_admin(RawOrigin::Signed(caller.clone()).into(), 2, new_admin.clone())?; + }: remove_collection_admin(RawOrigin::Signed(caller.clone()), 2, new_admin) - set_collection_sponsor { - let col_name1: Vec = "Test1".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1".to_vec(); - let mode: CollectionMode = CollectionMode::NFT; - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; - }: set_collection_sponsor(RawOrigin::Signed(caller.clone()), 2, caller.clone()) + set_collection_sponsor { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT; + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + }: set_collection_sponsor(RawOrigin::Signed(caller.clone()), 2, caller.clone()) - confirm_sponsorship { - let col_name1: Vec = "Test1".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1".to_vec(); - let mode: CollectionMode = CollectionMode::NFT; - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; - Nft::::set_collection_sponsor(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone())?; - }: confirm_sponsorship(RawOrigin::Signed(caller.clone()), 2) + confirm_sponsorship { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT; + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + Nft::::set_collection_sponsor(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone())?; + }: confirm_sponsorship(RawOrigin::Signed(caller.clone()), 2) - remove_collection_sponsor { - let col_name1: Vec = "Test1".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1".to_vec(); - let mode: CollectionMode = CollectionMode::NFT; - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; - Nft::::set_collection_sponsor(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone())?; - Nft::::confirm_sponsorship(RawOrigin::Signed(caller.clone()).into(), 2)?; - }: remove_collection_sponsor(RawOrigin::Signed(caller.clone()), 2) + remove_collection_sponsor { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT; + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + Nft::::set_collection_sponsor(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone())?; + Nft::::confirm_sponsorship(RawOrigin::Signed(caller.clone()).into(), 2)?; + }: remove_collection_sponsor(RawOrigin::Signed(caller.clone()), 2) - // nft item - create_item_nft { - let col_name1: Vec = "Test1".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1".to_vec(); - let mode: CollectionMode = CollectionMode::NFT; - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; - let data = default_nft_data(); - - }: create_item(RawOrigin::Signed(caller.clone()), 2, caller.clone(), data) + // nft item + create_item_nft { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT; + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + let data = default_nft_data(); + + }: create_item(RawOrigin::Signed(caller.clone()), 2, caller.clone(), data) - #[extra] - create_item_nft_large { - let col_name1: Vec = "Test1".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1".to_vec(); - let mode: CollectionMode = CollectionMode::NFT; - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - let mut nft_data = CreateNftData { - const_data: vec![], - variable_data: vec![] - }; - for i in 0..1998 { - nft_data.const_data.push(10); - nft_data.variable_data.push(10); - } - let data = CreateItemData::NFT(nft_data); - Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + #[extra] + create_item_nft_large { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT; + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + let mut nft_data = CreateNftData { + const_data: vec![], + variable_data: vec![] + }; + for i in 0..1998 { + nft_data.const_data.push(10); + nft_data.variable_data.push(10); + } + let data = CreateItemData::NFT(nft_data); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; - }: create_item(RawOrigin::Signed(caller.clone()), 2, caller.clone(), data) + }: create_item(RawOrigin::Signed(caller.clone()), 2, caller.clone(), data) - // fungible item - create_item_fungible { - let col_name1: Vec = "Test1".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1".to_vec(); - let mode: CollectionMode = CollectionMode::Fungible(3); - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; - let data = default_fungible_data(); + // fungible item + create_item_fungible { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::Fungible(3); + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + let data = default_fungible_data(); - }: create_item(RawOrigin::Signed(caller.clone()), 2, caller.clone(), data) + }: create_item(RawOrigin::Signed(caller.clone()), 2, caller.clone(), data) - // refungible item - create_item_refungible { - let col_name1: Vec = "Test1".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1".to_vec(); - let mode: CollectionMode = CollectionMode::ReFungible(3); - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; - let data = default_re_fungible_data(); + // refungible item + create_item_refungible { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::ReFungible(3); + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + let data = default_re_fungible_data(); - }: create_item(RawOrigin::Signed(caller.clone()), 2, caller.clone(), data) + }: create_item(RawOrigin::Signed(caller.clone()), 2, caller.clone(), data) - burn_item { - let col_name1: Vec = "Test1".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1".to_vec(); - let mode: CollectionMode = CollectionMode::NFT; - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; - let data = default_nft_data(); - Nft::::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?; + burn_item { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT; + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + let data = default_nft_data(); + Nft::::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?; - }: burn_item(RawOrigin::Signed(caller.clone()), 2, 1) + }: burn_item(RawOrigin::Signed(caller.clone()), 2, 1) - transfer_nft { - let col_name1: Vec = "Test1".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1".to_vec(); - let mode: CollectionMode = CollectionMode::NFT; - let recipient: T::AccountId = account("recipient", 0, SEED); - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; - let data = default_nft_data(); - Nft::::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?; + transfer_nft { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT; + let recipient: T::AccountId = account("recipient", 0, SEED); + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + let data = default_nft_data(); + Nft::::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?; - }: transfer(RawOrigin::Signed(caller.clone()), recipient.clone(), 2, 1, 1) - - transfer_fungible { - let col_name1: Vec = "Test1".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1".to_vec(); - let mode: CollectionMode = CollectionMode::Fungible(3); - let recipient: T::AccountId = account("recipient", 0, SEED); - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; - let data = default_fungible_data(); - Nft::::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?; + }: transfer(RawOrigin::Signed(caller.clone()), recipient.clone(), 2, 1, 1) + + transfer_fungible { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::Fungible(3); + let recipient: T::AccountId = account("recipient", 0, SEED); + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + let data = default_fungible_data(); + Nft::::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?; - }: transfer(RawOrigin::Signed(caller.clone()), recipient.clone(), 2, 1, 1) + }: transfer(RawOrigin::Signed(caller.clone()), recipient.clone(), 2, 1, 1) - transfer_refungible { - let col_name1: Vec = "Test1".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1".to_vec(); - let mode: CollectionMode = CollectionMode::ReFungible(3); - let recipient: T::AccountId = account("recipient", 0, SEED); - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; - let data = default_re_fungible_data(); - Nft::::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?; + transfer_refungible { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::ReFungible(3); + let recipient: T::AccountId = account("recipient", 0, SEED); + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + let data = default_re_fungible_data(); + Nft::::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?; - }: transfer(RawOrigin::Signed(caller.clone()), recipient.clone(), 2, 1, 1) + }: transfer(RawOrigin::Signed(caller.clone()), recipient.clone(), 2, 1, 1) - approve { - let col_name1: Vec = "Test1".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1".to_vec(); - let mode: CollectionMode = CollectionMode::ReFungible(3); - let recipient: T::AccountId = account("recipient", 0, SEED); - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; - let data = default_re_fungible_data(); - Nft::::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?; + approve { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::ReFungible(3); + let recipient: T::AccountId = account("recipient", 0, SEED); + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + let data = default_re_fungible_data(); + Nft::::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?; - }: approve(RawOrigin::Signed(caller.clone()), recipient.clone(), 2, 1) + }: approve(RawOrigin::Signed(caller.clone()), recipient.clone(), 2, 1) - // Nft - transfer_from_nft { - let col_name1: Vec = "Test1".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1".to_vec(); - let mode: CollectionMode = CollectionMode::NFT; - let recipient: T::AccountId = account("recipient", 0, SEED); - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; - let data = default_nft_data(); - Nft::::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?; - Nft::::approve(RawOrigin::Signed(caller.clone()).into(), recipient.clone(), 2, 1)?; + // Nft + transfer_from_nft { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT; + let recipient: T::AccountId = account("recipient", 0, SEED); + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + let data = default_nft_data(); + Nft::::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?; + Nft::::approve(RawOrigin::Signed(caller.clone()).into(), recipient.clone(), 2, 1)?; - }: transfer_from(RawOrigin::Signed(caller.clone()), caller.clone(), recipient.clone(), 2, 1, 1) + }: transfer_from(RawOrigin::Signed(caller.clone()), caller.clone(), recipient.clone(), 2, 1, 1) - // Fungible - transfer_from_fungible { - let col_name1: Vec = "Test1".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1".to_vec(); - let mode: CollectionMode = CollectionMode::Fungible(3); - let recipient: T::AccountId = account("recipient", 0, SEED); - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; - let data = default_fungible_data(); - Nft::::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?; - Nft::::approve(RawOrigin::Signed(caller.clone()).into(), recipient.clone(), 2, 1)?; + // Fungible + transfer_from_fungible { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::Fungible(3); + let recipient: T::AccountId = account("recipient", 0, SEED); + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + let data = default_fungible_data(); + Nft::::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?; + Nft::::approve(RawOrigin::Signed(caller.clone()).into(), recipient.clone(), 2, 1)?; - }: transfer_from(RawOrigin::Signed(caller.clone()), caller.clone(), recipient.clone(), 2, 1, 1) + }: transfer_from(RawOrigin::Signed(caller.clone()), caller.clone(), recipient.clone(), 2, 1, 1) - // ReFungible - transfer_from_refungible { - let col_name1: Vec = "Test1".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1".to_vec(); - let mode: CollectionMode = CollectionMode::ReFungible(3); - let recipient: T::AccountId = account("recipient", 0, SEED); - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; - let data = default_re_fungible_data(); - Nft::::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?; - Nft::::approve(RawOrigin::Signed(caller.clone()).into(), recipient.clone(), 2, 1)?; + // ReFungible + transfer_from_refungible { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::ReFungible(3); + let recipient: T::AccountId = account("recipient", 0, SEED); + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + let data = default_re_fungible_data(); + Nft::::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?; + Nft::::approve(RawOrigin::Signed(caller.clone()).into(), recipient.clone(), 2, 1)?; - }: transfer_from(RawOrigin::Signed(caller.clone()), caller.clone(), recipient.clone(), 2, 1, 1) + }: transfer_from(RawOrigin::Signed(caller.clone()), caller.clone(), recipient.clone(), 2, 1, 1) - enable_contract_sponsoring { - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + enable_contract_sponsoring { + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - }: enable_contract_sponsoring(RawOrigin::Signed(caller.clone()), caller.clone(), true) + }: enable_contract_sponsoring(RawOrigin::Signed(caller.clone()), caller.clone(), true) - set_offchain_schema { - let col_name1: Vec = "Test1".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1".to_vec(); - let mode: CollectionMode = CollectionMode::ReFungible(3); - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + set_offchain_schema { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::ReFungible(3); + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; - }: set_offchain_schema(RawOrigin::Signed(caller.clone()), 2, [1,2,3].to_vec()) + }: set_offchain_schema(RawOrigin::Signed(caller.clone()), 2, [1,2,3].to_vec()) - set_const_on_chain_schema { - let col_name1: Vec = "Test1".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1".to_vec(); - let mode: CollectionMode = CollectionMode::ReFungible(3); - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; - }: set_const_on_chain_schema(RawOrigin::Signed(caller.clone()), 2, [1,2,3].to_vec()) - - set_variable_on_chain_schema { - let col_name1: Vec = "Test1".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1".to_vec(); - let mode: CollectionMode = CollectionMode::ReFungible(3); - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; - }: set_variable_on_chain_schema(RawOrigin::Signed(caller.clone()), 2, [1,2,3].to_vec()) + set_const_on_chain_schema { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::ReFungible(3); + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + }: set_const_on_chain_schema(RawOrigin::Signed(caller.clone()), 2, [1,2,3].to_vec()) + + set_variable_on_chain_schema { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::ReFungible(3); + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + }: set_variable_on_chain_schema(RawOrigin::Signed(caller.clone()), 2, [1,2,3].to_vec()) - set_variable_meta_data { - let col_name1: Vec = "Test1".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1".to_vec(); - let mode: CollectionMode = CollectionMode::NFT; - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; - let data = default_nft_data(); - Nft::::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?; + set_variable_meta_data { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT; + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + let data = default_nft_data(); + Nft::::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?; - }: set_variable_meta_data(RawOrigin::Signed(caller.clone()), 2, 1, [1, 2, 3].to_vec()) + }: set_variable_meta_data(RawOrigin::Signed(caller.clone()), 2, 1, [1, 2, 3].to_vec()) - set_schema_version { - let col_name1: Vec = "Test1".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1".to_vec(); - let mode: CollectionMode = CollectionMode::NFT; - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; - }: set_schema_version(RawOrigin::Signed(caller.clone()), 2, SchemaVersion::Unique) + set_schema_version { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT; + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + }: set_schema_version(RawOrigin::Signed(caller.clone()), 2, SchemaVersion::Unique) - set_chain_limits { - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - let limits = ChainLimits { - collection_numbers_limit: 0, - account_token_ownership_limit: 0, - collections_admins_limit: 0, - custom_data_limit: 0, - nft_sponsor_transfer_timeout: 0, - fungible_sponsor_transfer_timeout: 0, - refungible_sponsor_transfer_timeout: 0 - }; - }: set_chain_limits(RawOrigin::Signed(caller.clone()), limits) + set_chain_limits { + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + let limits = ChainLimits { + collection_numbers_limit: 0, + account_token_ownership_limit: 0, + collections_admins_limit: 0, + custom_data_limit: 0, + nft_sponsor_transfer_timeout: 0, + fungible_sponsor_transfer_timeout: 0, + refungible_sponsor_transfer_timeout: 0 + }; + }: set_chain_limits(RawOrigin::Signed(caller.clone()), limits) - set_contract_sponsoring_rate_limit { - let col_name1: Vec = "Test1".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1".to_vec(); - let mode: CollectionMode = CollectionMode::NFT; - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; - let block_number: T::BlockNumber = 0.into(); - }: set_contract_sponsoring_rate_limit(RawOrigin::Signed(caller.clone()), caller.clone(), block_number) + set_contract_sponsoring_rate_limit { + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT; + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + let block_number: T::BlockNumber = 0.into(); + }: set_contract_sponsoring_rate_limit(RawOrigin::Signed(caller.clone()), caller.clone(), block_number) - set_collection_limits{ - let col_name1: Vec = "Test1".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1".to_vec(); - let mode: CollectionMode = CollectionMode::NFT; - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; - - let cl = CollectionLimits { - account_token_ownership_limit: 0, - sponsored_data_size: 0, - token_limit: 0, - sponsor_transfer_timeout: 0 - }; + set_collection_limits{ + let col_name1: Vec = "Test1".encode_utf16().collect::>(); + let col_desc1: Vec = "TestDescription1".encode_utf16().collect::>(); + let token_prefix1: Vec = b"token_prefix1".to_vec(); + let mode: CollectionMode = CollectionMode::NFT; + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?; + + let cl = CollectionLimits { + account_token_ownership_limit: 0, + sponsored_data_size: 0, + token_limit: 0, + sponsor_transfer_timeout: 0 + }; - }: set_collection_limits(RawOrigin::Signed(caller.clone()), 2, cl) + }: set_collection_limits(RawOrigin::Signed(caller.clone()), 2, cl) - add_to_contract_white_list{ - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - }: add_to_contract_white_list(RawOrigin::Signed(caller.clone()), caller.clone(), caller.clone()) + add_to_contract_white_list{ + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + }: add_to_contract_white_list(RawOrigin::Signed(caller.clone()), caller.clone(), caller.clone()) - remove_from_contract_white_list{ - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - Nft::::add_to_contract_white_list(RawOrigin::Signed(caller.clone()).into(), caller.clone(), caller.clone())?; - }: remove_from_contract_white_list(RawOrigin::Signed(caller.clone()), caller.clone(), caller.clone()) + remove_from_contract_white_list{ + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + Nft::::add_to_contract_white_list(RawOrigin::Signed(caller.clone()).into(), caller.clone(), caller.clone())?; + }: remove_from_contract_white_list(RawOrigin::Signed(caller.clone()), caller.clone(), caller.clone()) - toggle_contract_white_list{ - let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); - }: toggle_contract_white_list(RawOrigin::Signed(caller.clone()), caller.clone(), true) -} \ No newline at end of file + toggle_contract_white_list{ + let caller: T::AccountId = T::AccountId::from(whitelisted_caller()); + }: toggle_contract_white_list(RawOrigin::Signed(caller.clone()), caller.clone(), true) +*/ +} --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -26,6 +26,7 @@ # local dependencies pallet-nft = { path = '../pallets/nft', default-features = false, version = '3.0.0' } +pallet-inflation = { path = '../pallets/inflation', default-features = false, version = '3.0.0' } # Substrate dependencies frame-benchmarking = { default-features = false, optional = true, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "frontier" } @@ -75,6 +76,7 @@ 'pallet-balances/runtime-benchmarks', 'pallet-timestamp/runtime-benchmarks', 'pallet-nft/runtime-benchmarks', + 'pallet-inflation/runtime-benchmarks', 'sp-runtime/runtime-benchmarks', ] std = [ @@ -100,6 +102,7 @@ 'pallet-evm/std', 'pallet-ethereum/std', + 'pallet-inflation/std', 'pallet-nft/std', 'fp-rpc/std', 'sp-api/std', --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -576,7 +576,7 @@ pub const CollectionCreationPrice: Balance = 100 * UNIQUE; } -/// Used for the module nft in `./nft.rs` +/// Used for the pallet nft in `./nft.rs` impl pallet_nft::Config for Runtime { type Event = Event; type WeightInfo = nft_weights::WeightInfo; @@ -594,6 +594,21 @@ type EthereumTransactionSender = pallet_ethereum::Module; } +/// Reimport pallet inflation +extern crate pallet_inflation; +pub use pallet_inflation::*; + +parameter_types! { + pub const InflationBlockInterval: BlockNumber = 100; // every time per how many blocks inflation is applied +} + +/// Used for the pallet inflation +impl pallet_inflation::Config for Runtime { + type Currency = Balances; + type TreasuryAccountId = TreasuryAccountId; + type InflationBlockInterval = InflationBlockInterval; +} + construct_runtime!( pub enum Runtime where Block = Block, @@ -611,6 +626,7 @@ Balances: pallet_balances::{Module, Call, Storage, Config, Event}, TransactionPayment: pallet_transaction_payment::{Module, Storage}, Sudo: pallet_sudo::{Module, Call, Config, Storage, Event}, + Inflation: pallet_inflation::{Module, Call, Storage}, Nft: pallet_nft::{Module, Call, Config, Storage, Event}, Treasury: pallet_treasury::{Module, Call, Storage, Config, Event}, Vesting: pallet_vesting::{Module, Call, Config, Storage, Event}, @@ -954,6 +970,7 @@ let params = (&config, &whitelist); add_benchmark!(params, batches, pallet_nft, Nft); + add_benchmark!(params, batches, pallet_inflation, Inflation); if batches.is_empty() { return Err("Benchmark not found for this pallet.".into()) } Ok(batches) --- a/tests/package.json +++ b/tests/package.json @@ -21,6 +21,7 @@ "test": "mocha --timeout 9999999 -r ts-node/register ./**/*.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", "testAddCollectionAdmin": "mocha --timeout 9999999 -r ts-node/register ./**/addCollectionAdmin.test.ts", "testSetSchemaVersion": "mocha --timeout 9999999 -r ts-node/register ./**/setSchemaVersion.test.ts", "testSetVariableMetaData": "mocha --timeout 9999999 -r ts-node/register ./**/setVariableMetaData.test.ts", @@ -49,7 +50,9 @@ "testSetContractSponsoringRateLimit": "mocha --timeout 9999999 -r ts-node/register ./**/setContractSponsoringRateLimit.test.ts", "testSetOffchainSchema": "mocha --timeout 9999999 -r ts-node/register ./**/setOffchainSchema.test.ts", "testOverflow": "mocha --timeout 9999999 -r ts-node/register ./**/overflow.test.ts", - "testSetVariableMetadataSponsoringRateLimit": "mocha --timeout 9999999 -r ts-node/register ./**/setVariableMetadataSponsoringRateLimit.test.ts" + "testSetVariableMetadataSponsoringRateLimit": "mocha --timeout 9999999 -r ts-node/register ./**/setVariableMetadataSponsoringRateLimit.test.ts", + "testInflation": "mocha --timeout 9999999 -r ts-node/register ./**/inflation.test.ts", + "testPalletPresence": "mocha --timeout 9999999 -r ts-node/register ./**/pallet-presence.test.ts" }, "author": "", "license": "SEE LICENSE IN ../LICENSE", --- a/tests/src/check-event/createMultipleItemsEvent.test.ts +++ b/tests/src/check-event/createMultipleItemsEvent.test.ts @@ -17,7 +17,7 @@ describe('Create Multiple Items Event event ', () => { let Alice: IKeyringPair; - const checkSection = 'ItemCreated (x3)'; + const checkSection = 'ItemCreated'; const checkTreasury = 'Deposit'; const checkSystem = 'ExtrinsicSuccess'; before(async () => { --- /dev/null +++ b/tests/src/collision-tests/admVsOwnerChanges.test.ts @@ -0,0 +1,55 @@ +import { IKeyringPair } from '@polkadot/types/types'; +import chai from 'chai'; +import chaiAsPromised from 'chai-as-promised'; +import { alicesPublicKey, bobsPublicKey } from '../accounts'; +import getBalance from '../substrate/get-balance'; +import privateKey from '../substrate/privateKey'; +import usingApi, { submitTransactionAsync } from '../substrate/substrate-api'; +import waitNewBlocks from '../substrate/wait-new-blocks'; +import { + createCollectionExpectSuccess, + createItemExpectSuccess, + setCollectionSponsorExpectSuccess, +} from '../util/helpers'; + +chai.use(chaiAsPromised); +const expect = chai.expect; +let Alice: IKeyringPair; +let Bob: IKeyringPair; +let Ferdie: IKeyringPair; + +before(async () => { + await usingApi(async () => { + Alice = privateKey('//Alice'); + Bob = privateKey('//Bob'); + Ferdie = privateKey('//Ferdie'); + }); +}); + +describe('Admin vs Owner changes token: ', () => { + // tslint:disable-next-line: max-line-length + it('The collection admin changes the owner of the token and in the same block the current owner transfers the token to another address ', async () => { + await usingApi(async (api) => { + const collectionId = await createCollectionExpectSuccess(); + const changeAdminTxBob = api.tx.nft.addCollectionAdmin(collectionId, Bob.address); + await submitTransactionAsync(Alice, changeAdminTxBob); + const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout)); + const changeAdminTxFerdie = api.tx.nft.addCollectionAdmin(collectionId, Ferdie.address); + await submitTransactionAsync(Bob, changeAdminTxFerdie); + const itemId = await createItemExpectSuccess(Ferdie, collectionId, 'NFT'); + // + const changeOwner = api.tx.nft.transferFrom(Ferdie.address, Bob.address, collectionId, itemId, 1); + const approve = api.tx.nft.approve(Bob.address, collectionId, itemId, 1); + const sendItem = api.tx.nft.transfer(Alice.address, collectionId, itemId, 1); + await Promise.all + ([ + changeOwner.signAndSend(Alice), + approve.signAndSend(Bob), + sendItem.signAndSend(Ferdie), + ]); + const itemBefore: any = await api.query.nft.nftItemList(collectionId, itemId); + expect(itemBefore.Owner).not.to.be.eq(Bob.address); + await timeoutPromise(20000); + }); + }); +}); --- /dev/null +++ b/tests/src/collision-tests/admVsOwnerData.test.ts @@ -0,0 +1,54 @@ +import { IKeyringPair } from '@polkadot/types/types'; +import chai from 'chai'; +import chaiAsPromised from 'chai-as-promised'; +import { alicesPublicKey, bobsPublicKey } from '../accounts'; +import getBalance from '../substrate/get-balance'; +import privateKey from '../substrate/privateKey'; +import usingApi, { submitTransactionAsync } from '../substrate/substrate-api'; +import waitNewBlocks from '../substrate/wait-new-blocks'; +import { + createCollectionExpectSuccess, + createItemExpectSuccess, + setCollectionSponsorExpectSuccess, +} from '../util/helpers'; + +chai.use(chaiAsPromised); +const expect = chai.expect; +let Alice: IKeyringPair; +let Bob: IKeyringPair; +let Ferdie: IKeyringPair; + +before(async () => { + await usingApi(async () => { + Alice = privateKey('//Alice'); + Bob = privateKey('//Bob'); + Ferdie = privateKey('//Ferdie'); + }); +}); + +describe('Admin vs Owner changes the data in the token: ', () => { + it('The collection admin changes the data in the token and in the same block the token owner also changes the data in it ', async () => { + await usingApi(async (api) => { + const AliceData = 1; + const BobData = 2; + const collectionId = await createCollectionExpectSuccess(); + const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, Bob.address); + await submitTransactionAsync(Alice, changeAdminTx); + const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout)); + const itemId = await createItemExpectSuccess(Bob, collectionId, 'NFT'); + // + // tslint:disable-next-line: max-line-length + const AliceTx = api.tx.nft.setVariableMetaData(collectionId, itemId, AliceData.toString()); + // tslint:disable-next-line: max-line-length + const BobTx = api.tx.nft.setVariableMetaData(collectionId, itemId, BobData.toString()); + await Promise.all + ([ + AliceTx.signAndSend(Alice), + BobTx.signAndSend(Bob), + ]); + const item: any = await api.query.nft.nftItemList(collectionId, itemId); + expect(item.VariableData).not.to.be.eq(null); // Pseudo-random selection of one of two values + await timeoutPromise(20000); + }); + }); +}); --- /dev/null +++ b/tests/src/collision-tests/admVsOwnerTake.test.ts @@ -0,0 +1,54 @@ +import { IKeyringPair } from '@polkadot/types/types'; +import chai from 'chai'; +import chaiAsPromised from 'chai-as-promised'; +import { alicesPublicKey, bobsPublicKey } from '../accounts'; +import getBalance from '../substrate/get-balance'; +import privateKey from '../substrate/privateKey'; +import usingApi, { submitTransactionAsync } from '../substrate/substrate-api'; +import waitNewBlocks from '../substrate/wait-new-blocks'; +import { + createCollectionExpectSuccess, + createItemExpectSuccess, + setCollectionSponsorExpectSuccess, +} from '../util/helpers'; + +chai.use(chaiAsPromised); +const expect = chai.expect; +let Alice: IKeyringPair; +let Bob: IKeyringPair; +let Ferdie: IKeyringPair; + +before(async () => { + await usingApi(async () => { + Alice = privateKey('//Alice'); + Bob = privateKey('//Bob'); + Ferdie = privateKey('//Ferdie'); + }); +}); + +describe('Admin vs Owner take token: ', () => { + // tslint:disable-next-line: max-line-length + it('The collection admin burns the token and in the same block the token owner performs a transaction on it ', async () => { + await usingApi(async (api) => { + const collectionId = await createCollectionExpectSuccess(); + const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, Bob.address); + await submitTransactionAsync(Alice, changeAdminTx); + const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout)); + const itemId = await createItemExpectSuccess(Bob, collectionId, 'NFT'); + // + const sendItem = api.tx.nft.transfer(Ferdie.address, collectionId, itemId, 1); + const burnItem = api.tx.nft.burnItem(collectionId, itemId, 1); + await Promise.all + ([ + sendItem.signAndSend(Bob), + burnItem.signAndSend(Alice), + ]); + await timeoutPromise(10000); + let itemBurn: boolean = false; + itemBurn = (await (api.query.nft.nftItemList(collectionId, itemId))).toJSON() as boolean; + // tslint:disable-next-line: no-unused-expression + expect(itemBurn).to.be.null; + await timeoutPromise(20000); + }); + }); +}); --- /dev/null +++ b/tests/src/collision-tests/adminDestroyCollection.test.ts @@ -0,0 +1,61 @@ +import { IKeyringPair } from '@polkadot/types/types'; +import BN from 'bn.js'; +import chai from 'chai'; +import chaiAsPromised from 'chai-as-promised'; +import privateKey from '../substrate/privateKey'; +import usingApi, { submitTransactionAsync, submitTransactionExpectFailAsync } from '../substrate/substrate-api'; +import { + createCollectionExpectSuccess, +} from '../util/helpers'; + +chai.use(chaiAsPromised); +const expect = chai.expect; +interface ITokenDataType { + Owner: number[]; + ConstData: number[]; + VariableData: number[]; +} +let Alice: IKeyringPair; +let Bob: IKeyringPair; +let Ferdie: IKeyringPair; +let Charlie: IKeyringPair; +let Eve: IKeyringPair; +let Dave: IKeyringPair; + +before(async () => { + await usingApi(async () => { + Alice = privateKey('//Alice'); + Bob = privateKey('//Bob'); + Ferdie = privateKey('//Ferdie'); + Charlie = privateKey('//Charlie'); + Eve = privateKey('//Eve'); + Dave = privateKey('//Dave'); + }); +}); + +describe('Deleting a collection while add address to whitelist: ', () => { + // tslint:disable-next-line: max-line-length + it('Adding an address to the collection whitelist in a block by the admin, and deleting the collection by the owner ', async () => { + await usingApi(async (api) => { + const collectionId = await createCollectionExpectSuccess(); + const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, Bob.address); + await submitTransactionAsync(Alice, changeAdminTx); + const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout)); + await timeoutPromise(10000); + // + const addWhitelistAdm = api.tx.nft.addToWhiteList(collectionId, Ferdie.address); + const destroyCollection = api.tx.nft.destroyCollection(collectionId); + await Promise.all + ([ + addWhitelistAdm.signAndSend(Bob), + destroyCollection.signAndSend(Alice), + ]); + await timeoutPromise(10000); + let whiteList: boolean = false; + whiteList = (await api.query.nft.whiteList(collectionId, Ferdie.address)).toJSON() as boolean; + // tslint:disable-next-line: no-unused-expression + expect(whiteList).to.be.false; + await timeoutPromise(20000); + }); + }); +}); --- /dev/null +++ b/tests/src/collision-tests/adminLimitsOff.test.ts @@ -0,0 +1,74 @@ +import { IKeyringPair } from '@polkadot/types/types'; +import BN from 'bn.js'; +import chai from 'chai'; +import chaiAsPromised from 'chai-as-promised'; +import privateKey from '../substrate/privateKey'; +import usingApi, { submitTransactionAsync, submitTransactionExpectFailAsync } from '../substrate/substrate-api'; +import { + createCollectionExpectSuccess, +} from '../util/helpers'; + +chai.use(chaiAsPromised); +const expect = chai.expect; +interface ITokenDataType { + Owner: number[]; + ConstData: number[]; + VariableData: number[]; +} +let Alice: IKeyringPair; +let Bob: IKeyringPair; +let Ferdie: IKeyringPair; +let Charlie: IKeyringPair; +let Eve: IKeyringPair; +let Dave: IKeyringPair; + +before(async () => { + await usingApi(async () => { + Alice = privateKey('//Alice'); + Bob = privateKey('//Bob'); + Ferdie = privateKey('//Ferdie'); + Charlie = privateKey('//Charlie'); + Eve = privateKey('//Eve'); + Dave = privateKey('//Dave'); + }); +}); + +describe('Admin limit exceeded collection: ', () => { + // tslint:disable-next-line: max-line-length + it('In one block, the owner and admin add new admins to the collection more than the limit ', async () => { + await usingApi(async (api) => { + const collectionId = await createCollectionExpectSuccess(); + + const chainLimit = await api.query.nft.chainLimit() as unknown as { CollectionAdminsLimit: BN }; + const chainAdminLimit = chainLimit.CollectionAdminsLimit.toNumber(); + expect(chainAdminLimit).to.be.equal(5); + + const changeAdminTx1 = api.tx.nft.addCollectionAdmin(collectionId, Eve.address); + await submitTransactionAsync(Alice, changeAdminTx1); + const changeAdminTx2 = api.tx.nft.addCollectionAdmin(collectionId, Dave.address); + await submitTransactionAsync(Alice, changeAdminTx2); + const changeAdminTx3 = api.tx.nft.addCollectionAdmin(collectionId, Bob.address); + await submitTransactionAsync(Alice, changeAdminTx3); + + const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout)); + // + const addAdmOne = api.tx.nft.addCollectionAdmin(collectionId, Ferdie.address); + const addAdmTwo = api.tx.nft.addCollectionAdmin(collectionId, Charlie.address); + await Promise.all + ([ + addAdmOne.signAndSend(Bob), + addAdmTwo.signAndSend(Alice), + ]); + await timeoutPromise(10000); + const changeAdminTx4 = api.tx.nft.addCollectionAdmin(collectionId, Alice.address); + // tslint:disable-next-line: no-unused-expression + expect(submitTransactionExpectFailAsync(Alice, changeAdminTx4)).to.be.rejected; + + const adminListAfterAddAdmin: any = (await api.query.nft.adminList(collectionId)); + expect(adminListAfterAddAdmin).to.be.contains(Eve.address); + expect(adminListAfterAddAdmin).to.be.contains(Ferdie.address); + expect(adminListAfterAddAdmin).not.to.be.contains(Alice.address); + await timeoutPromise(20000); + }); + }); +}); --- /dev/null +++ b/tests/src/collision-tests/adminRightsOff.test.ts @@ -0,0 +1,62 @@ +import { IKeyringPair } from '@polkadot/types/types'; +import BN from 'bn.js'; +import chai from 'chai'; +import chaiAsPromised from 'chai-as-promised'; +import privateKey from '../substrate/privateKey'; +import usingApi, { submitTransactionAsync, submitTransactionExpectFailAsync } from '../substrate/substrate-api'; +import { + createCollectionExpectSuccess, +} from '../util/helpers'; + +chai.use(chaiAsPromised); +const expect = chai.expect; +interface ITokenDataType { + Owner: number[]; + ConstData: number[]; + VariableData: number[]; +} +let Alice: IKeyringPair; +let Bob: IKeyringPair; +let Ferdie: IKeyringPair; +let Charlie: IKeyringPair; +let Eve: IKeyringPair; +let Dave: IKeyringPair; + +before(async () => { + await usingApi(async () => { + Alice = privateKey('//Alice'); + Bob = privateKey('//Bob'); + Ferdie = privateKey('//Ferdie'); + Charlie = privateKey('//Charlie'); + Eve = privateKey('//Eve'); + Dave = privateKey('//Dave'); + }); +}); + +describe('Deprivation of admin rights: ', () => { + // tslint:disable-next-line: max-line-length + it('In the block, the collection admin adds a token or changes data, and the collection owner deprives the admin of rights ', async () => { + await usingApi(async (api) => { + const collectionId = await createCollectionExpectSuccess(); + const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, Bob.address); + await submitTransactionAsync(Alice, changeAdminTx); + const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout)); + await timeoutPromise(10000); + // + const args = [{ nft: ['0x31', '0x31'] }, { nft: ['0x32', '0x32'] }, { nft: ['0x33', '0x33'] }]; + const addItemAdm = api.tx.nft.createMultipleItems(collectionId, Bob.address, args); + const removeAdm = api.tx.nft.removeCollectionAdmin(collectionId, Bob.address); + await Promise.all + ([ + addItemAdm.signAndSend(Bob), + removeAdm.signAndSend(Alice), + ]); + await timeoutPromise(10000); + const itemsListIndex = await api.query.nft.itemListIndex(collectionId) as unknown as BN; + expect(itemsListIndex.toNumber()).to.be.equal(0); + const adminList: any = (await api.query.nft.adminList(collectionId)); + expect(adminList).not.to.be.contains(Bob.address); + await timeoutPromise(20000); + }); + }); +}); --- /dev/null +++ b/tests/src/collision-tests/setSponsorNewOwner.test.ts @@ -0,0 +1,53 @@ +import { IKeyringPair } from '@polkadot/types/types'; +import BN from 'bn.js'; +import chai from 'chai'; +import chaiAsPromised from 'chai-as-promised'; +import privateKey from '../substrate/privateKey'; +import usingApi, { submitTransactionAsync, submitTransactionExpectFailAsync } from '../substrate/substrate-api'; +import { + createCollectionExpectSuccess, createItemExpectSuccess, setCollectionSponsorExpectSuccess, +} from '../util/helpers'; + +chai.use(chaiAsPromised); +const expect = chai.expect; +interface ITokenDataType { + Owner: number[]; + ConstData: number[]; + VariableData: number[]; +} +let Alice: IKeyringPair; +let Bob: IKeyringPair; +let Ferdie: IKeyringPair; + +before(async () => { + await usingApi(async () => { + Alice = privateKey('//Alice'); + Bob = privateKey('//Bob'); + Ferdie = privateKey('//Ferdie'); + }); +}); + +describe('Sponsored with new owner ', () => { + // tslint:disable-next-line: max-line-length + it('Confirmation of sponsorship of a collection in a block with a change in the owner of the collection: ', async () => { + await usingApi(async (api) => { + const collectionId = await createCollectionExpectSuccess(); + await setCollectionSponsorExpectSuccess(collectionId, Bob.address); + const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout)); + await timeoutPromise(10000); + // + const confirmSponsorship = api.tx.nft.confirmSponsorship(collectionId); + const changeCollectionOwner = api.tx.nft.changeCollectionOwner(collectionId, Ferdie.address); + await Promise.all + ([ + confirmSponsorship.signAndSend(Bob), + changeCollectionOwner.signAndSend(Alice), + ]); + await timeoutPromise(10000); + const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON(); + expect(collection.Sponsorship.Confirmed).to.be.eq(Bob.address); + expect(collection.Owner).to.be.eq(Ferdie.address); + await timeoutPromise(20000); + }); + }); +}); --- /dev/null +++ b/tests/src/collision-tests/sponsorPayments.test.ts @@ -0,0 +1,58 @@ +import { IKeyringPair } from '@polkadot/types/types'; +import chai from 'chai'; +import chaiAsPromised from 'chai-as-promised'; +import { alicesPublicKey, bobsPublicKey } from '../accounts'; +import getBalance from '../substrate/get-balance'; +import privateKey from '../substrate/privateKey'; +import usingApi, { submitTransactionAsync } from '../substrate/substrate-api'; +import waitNewBlocks from '../substrate/wait-new-blocks'; +import { + confirmSponsorshipExpectSuccess, + createCollectionExpectSuccess, + createItemExpectSuccess, + setCollectionSponsorExpectSuccess, +} from '../util/helpers'; + +chai.use(chaiAsPromised); +const expect = chai.expect; +let Alice: IKeyringPair; +let Bob: IKeyringPair; +let Ferdie: IKeyringPair; + +before(async () => { + await usingApi(async () => { + Alice = privateKey('//Alice'); + Bob = privateKey('//Bob'); + Ferdie = privateKey('//Ferdie'); + }); +}); + +describe('Payment of commission if one block: ', () => { + // tslint:disable-next-line: max-line-length + it('Payment of commission if one block contains transactions for payment from the sponsor\'s balance and his (sponsor\'s) exclusion from the collection ', async () => { + await usingApi(async (api) => { + const collectionId = await createCollectionExpectSuccess(); + const changeAdminTxBob = api.tx.nft.addCollectionAdmin(collectionId, Bob.address); + await submitTransactionAsync(Alice, changeAdminTxBob); + const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout)); + const itemId = await createItemExpectSuccess(Bob, collectionId, 'NFT'); + await setCollectionSponsorExpectSuccess(collectionId, Bob.address); + await confirmSponsorshipExpectSuccess(collectionId, '//Bob'); + // + const [alicesBalanceBefore, bobsBalanceBefore] = await getBalance(api, [alicesPublicKey, bobsPublicKey]); + const sendItem = api.tx.nft.transfer(Alice.address, collectionId, itemId, 1); + const revokeSponsor = api.tx.nft.removeCollectionSponsor(collectionId); + await Promise.all + ([ + sendItem.signAndSend(Bob), + revokeSponsor.signAndSend(Alice), + ]); + const [alicesBalanceAfter, bobsBalanceAfter] = await getBalance(api, [alicesPublicKey, bobsPublicKey]); + // tslint:disable-next-line:no-unused-expression + expect(alicesBalanceAfter === alicesBalanceBefore).to.be.true; + // tslint:disable-next-line:no-unused-expression + expect(bobsBalanceAfter === bobsBalanceBefore).to.be.true; + await timeoutPromise(20000); + }); + }); +}); --- /dev/null +++ b/tests/src/collision-tests/tokenLimitsOff.test.ts @@ -0,0 +1,84 @@ +import { IKeyringPair } from '@polkadot/types/types'; +import BN from 'bn.js'; +import chai from 'chai'; +import chaiAsPromised from 'chai-as-promised'; +import privateKey from '../substrate/privateKey'; +import usingApi, { submitTransactionAsync } from '../substrate/substrate-api'; +import { + addToWhiteListExpectSuccess, + createCollectionExpectSuccess, + getCreateItemResult, + setMintPermissionExpectSuccess, +} from '../util/helpers'; + +chai.use(chaiAsPromised); +const expect = chai.expect; +interface ITokenDataType { + Owner: number[]; + ConstData: number[]; + VariableData: number[]; +} +let Alice: IKeyringPair; +let Bob: IKeyringPair; +let Ferdie: IKeyringPair; + +const AccountTokenOwnershipLimit = 4; +const SponsoredMintSize = 4294967295; +const TokenLimit = 4; +const SponsorTimeout = 14400; +const OwnerCanTransfer = false; +const OwnerCanDestroy = false; + +before(async () => { + await usingApi(async () => { + Alice = privateKey('//Alice'); + Bob = privateKey('//Bob'); + Ferdie = privateKey('//Ferdie'); + }); +}); + +describe('Token limit exceeded collection: ', () => { + // tslint:disable-next-line: max-line-length + it('The number of tokens created in the collection from different addresses exceeds the allowed collection limit ', async () => { + await usingApi(async (api) => { + const collectionId = await createCollectionExpectSuccess(); + await setMintPermissionExpectSuccess(Alice, collectionId, true); + await addToWhiteListExpectSuccess(Alice, collectionId, Ferdie.address); + await addToWhiteListExpectSuccess(Alice, collectionId, Bob.address); + const setCollectionLim = api.tx.nft.setCollectionLimits( + collectionId, + { + AccountTokenOwnershipLimit, + SponsoredMintSize, + TokenLimit, + // tslint:disable-next-line: object-literal-sort-keys + SponsorTimeout, + OwnerCanTransfer, + OwnerCanDestroy, + }, + ); + const subTx = await submitTransactionAsync(Alice, setCollectionLim); + const subTxTesult = getCreateItemResult(subTx); + // tslint:disable-next-line:no-unused-expression + expect(subTxTesult.success).to.be.true; + const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout)); + await timeoutPromise(10000); + // + const args = [{ nft: ['0x31', '0x31'] }, { nft: ['0x32', '0x32'] }, { nft: ['0x33', '0x33'] }]; + const mintItemOne = api.tx.nft + .createMultipleItems(collectionId, Ferdie.address, args); + const mintItemTwo = api.tx.nft + .createMultipleItems(collectionId, Bob.address, args); + await Promise.all + ([ + mintItemOne.signAndSend(Ferdie), + mintItemTwo.signAndSend(Bob), + ]); + await timeoutPromise(10000); + const itemsListIndexAfter = await api.query.nft.itemListIndex(collectionId) as unknown as BN; + expect(itemsListIndexAfter.toNumber()).to.be.equal(3); + // TokenLimit = 4. The first transaction is successful. The second should fail. + await timeoutPromise(10000); + }); + }); +}); --- /dev/null +++ b/tests/src/collision-tests/turnsOffMinting.test.ts @@ -0,0 +1,50 @@ +import { IKeyringPair } from '@polkadot/types/types'; +import chai from 'chai'; +import chaiAsPromised from 'chai-as-promised'; +import privateKey from '../substrate/privateKey'; +import usingApi, { submitTransactionAsync } from '../substrate/substrate-api'; +import waitNewBlocks from '../substrate/wait-new-blocks'; +import { + addToWhiteListExpectSuccess, + createCollectionExpectSuccess, + setMintPermissionExpectSuccess, +} from '../util/helpers'; + +chai.use(chaiAsPromised); +const expect = chai.expect; +let Alice: IKeyringPair; +let Bob: IKeyringPair; +let Ferdie: IKeyringPair; + +before(async () => { + await usingApi(async () => { + Alice = privateKey('//Alice'); + Bob = privateKey('//Bob'); + Ferdie = privateKey('//Ferdie'); + }); +}); + +describe('Turns off minting mode: ', () => { + // tslint:disable-next-line: max-line-length + it('The collection owner turns off minting mode and there are minting transactions in the same block ', async () => { + await usingApi(async (api) => { + const collectionId = await createCollectionExpectSuccess(); + const timeoutPromise = (timeout: number) => new Promise((resolve) => setTimeout(resolve, timeout)); + await setMintPermissionExpectSuccess(Alice, collectionId, true); + await addToWhiteListExpectSuccess(Alice, collectionId, Ferdie.address); + // + const mintItem = api.tx.nft.createItem(collectionId, Ferdie.address, 'NFT'); + const offMinting = api.tx.nft.setMintPermission(collectionId, false); + await Promise.all + ([ + mintItem.signAndSend(Ferdie), + offMinting.signAndSend(Alice), + ]); + let itemList: boolean = false; + itemList = (await (api.query.nft.nftItemList(collectionId, mintItem))).toJSON() as boolean; + // tslint:disable-next-line: no-unused-expression + expect(itemList).to.be.null; + await timeoutPromise(20000); + }); + }); +}); --- a/tests/src/creditFeesToTreasury.test.ts +++ b/tests/src/creditFeesToTreasury.test.ts @@ -18,6 +18,7 @@ } from './util/helpers'; import { default as waitNewBlocks } from './substrate/wait-new-blocks'; +import { ApiPromise } from '@polkadot/api'; chai.use(chaiAsPromised); const expect = chai.expect; @@ -30,6 +31,25 @@ let alice: IKeyringPair; let bob: IKeyringPair; +// Skip the inflation block pauses if the block is close to inflation block +// until the inflation happens +function skipInflationBlock(api: ApiPromise): Promise { + const promise = new Promise(async (resolve, reject) => { + const blockInterval = parseInt((await api.consts.inflation.inflationBlockInterval).toString()); + const unsubscribe = await api.rpc.chain.subscribeNewHeads(head => { + const currentBlock = parseInt(head.number.toString()); + if (currentBlock % blockInterval < blockInterval - 10) { + unsubscribe(); + resolve(); + } else { + console.log(`Skipping inflation block, current block: ${currentBlock}`); + } + }); + }); + + return promise; +} + describe('integration test: Fees must be credited to Treasury:', () => { before(async () => { await usingApi(async (api) => { @@ -40,6 +60,7 @@ it('Total issuance does not change', async () => { await usingApi(async (api) => { + await skipInflationBlock(api); await waitNewBlocks(api, 1); const totalBefore = new BigNumber((await api.query.balances.totalIssuance()).toString()); @@ -59,6 +80,7 @@ it('Sender balance decreased by fee+sent amount, Treasury balance increased by fee', async () => { await usingApi(async (api) => { + await skipInflationBlock(api); await waitNewBlocks(api, 1); const alicePrivateKey = privateKey('//Alice'); @@ -81,6 +103,7 @@ it('Treasury balance increased by failed tx fee', async () => { await usingApi(async (api) => { + await skipInflationBlock(api); await waitNewBlocks(api, 1); const bobPrivateKey = privateKey('//Bob'); @@ -101,6 +124,7 @@ it('NFT Transactions also send fees to Treasury', async () => { await usingApi(async (api) => { + await skipInflationBlock(api); await waitNewBlocks(api, 1); const treasuryBalanceBefore = new BigNumber((await api.query.system.account(Treasury)).data.free.toString()); @@ -119,6 +143,7 @@ it('Fees are sane', async () => { await usingApi(async (api) => { + await skipInflationBlock(api); await waitNewBlocks(api, 1); const aliceBalanceBefore = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString()); @@ -135,6 +160,7 @@ it('NFT Transfer fee is close to 0.1 Unique', async () => { await usingApi(async (api) => { + await skipInflationBlock(api); await waitNewBlocks(api, 1); const collectionId = await createCollectionExpectSuccess(); @@ -147,7 +173,7 @@ // console.log(fee.toString()); const expectedTransferFee = 0.1; - const tolerance = 0.00001; + const tolerance = 0.001; expect(fee.dividedBy(1e15).minus(expectedTransferFee).abs().toNumber()).to.be.lessThan(tolerance); }); }); --- /dev/null +++ b/tests/src/inflation.test.ts @@ -0,0 +1,43 @@ +// +// This file is subject to the terms and conditions defined in +// file 'LICENSE', which is part of this source code package. +// + +import chai from 'chai'; +import chaiAsPromised from 'chai-as-promised'; +import { default as usingApi } from "./substrate/substrate-api"; +import privateKey from "./substrate/privateKey"; +import { BigNumber } from 'bignumber.js'; +import { IKeyringPair } from '@polkadot/types/types'; + +chai.use(chaiAsPromised); +const expect = chai.expect; + +let alice: IKeyringPair; +let bob: IKeyringPair; + +describe('integration test: Inflation', () => { + before(async () => { + await usingApi(async (api) => { + alice = privateKey('//Alice'); + bob = privateKey('//Bob'); + }); + }); + + it('First year inflation is 10%', async () => { + await usingApi(async (api) => { + + const blockInterval = parseInt((await api.consts.inflation.inflationBlockInterval).toString()); + const totalIssuanceStart = new BigNumber((await api.query.inflation.startingYearTotalIssuance()).toString()); + const blockInflation = new BigNumber((await api.query.inflation.blockInflation()).toString()); + + const YEAR = 5259600; // Blocks in one year + const totalExpectedInflation = totalIssuanceStart.multipliedBy(0.1); + const totalActualInflation = blockInflation.multipliedBy(YEAR / blockInterval); + + const tolerance = 0.00001; // Relative difference per year between theoretical and actual inflation + expect(totalExpectedInflation.dividedBy(totalActualInflation).minus(1).abs().toNumber()).to.be.lessThan(tolerance); + }); + }); + +}); --- a/tests/src/pallet-presence.test.ts +++ b/tests/src/pallet-presence.test.ts @@ -13,7 +13,7 @@ // Pallets that must always be present const requiredPallets = [ - 'nft', 'balances', 'contracts', 'randomnesscollectiveflip', 'system', 'timestamp', 'transactionpayment', 'treasury', 'vesting' + 'nft', 'inflation', 'balances', 'contracts', 'randomnesscollectiveflip', 'system', 'timestamp', 'transactionpayment', 'treasury', 'vesting' ]; // Pallets that depend on consensus and governance configuration -- gitstuff