--- a/Cargo.lock +++ b/Cargo.lock @@ -248,13 +248,13 @@ [[package]] name = "async-process" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8cea09c1fb10a317d1b5af8024eeba256d6554763e85ecd90ff8df31c7bbda" +checksum = "ef37b86e2fa961bae5a4d212708ea0154f904ce31d1a4a7f47e1bbc33a0c040b" dependencies = [ "async-io", "blocking", - "cfg-if 0.1.10", + "cfg-if 1.0.0", "event-listener", "futures-lite", "once_cell", @@ -534,9 +534,9 @@ [[package]] name = "bstr" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "473fc6b38233f9af7baa94fb5852dca389e3d95b8e21c8e3719301462c5d9faf" +checksum = "a40b47ad93e1a5404e6c18dec46b628214fee441c70f4ab5d6942142cc268a3d" dependencies = [ "memchr", ] @@ -1378,7 +1378,7 @@ [[package]] name = "fork-tree" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "parity-scale-codec", ] @@ -1396,7 +1396,7 @@ [[package]] name = "frame-benchmarking" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "frame-support", "frame-system", @@ -1414,7 +1414,7 @@ [[package]] name = "frame-benchmarking-cli" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "Inflector", "chrono", @@ -1437,7 +1437,7 @@ [[package]] name = "frame-executive" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "frame-support", "frame-system", @@ -1453,7 +1453,7 @@ [[package]] name = "frame-metadata" version = "12.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "parity-scale-codec", "serde", @@ -1464,12 +1464,12 @@ [[package]] name = "frame-support" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "bitflags", "frame-metadata", "frame-support-procedural", - "impl-trait-for-tuples 0.2.0", + "impl-trait-for-tuples 0.2.1", "log", "once_cell", "parity-scale-codec", @@ -1489,7 +1489,7 @@ [[package]] name = "frame-support-procedural" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "Inflector", "frame-support-procedural-tools", @@ -1501,7 +1501,7 @@ [[package]] name = "frame-support-procedural-tools" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -1513,7 +1513,7 @@ [[package]] name = "frame-support-procedural-tools-derive" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "proc-macro2", "quote", @@ -1523,10 +1523,10 @@ [[package]] name = "frame-system" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "frame-support", - "impl-trait-for-tuples 0.2.0", + "impl-trait-for-tuples 0.2.1", "parity-scale-codec", "serde", "sp-core", @@ -1539,7 +1539,7 @@ [[package]] name = "frame-system-benchmarking" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "frame-benchmarking", "frame-support", @@ -1553,7 +1553,7 @@ [[package]] name = "frame-system-rpc-runtime-api" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "parity-scale-codec", "sp-api", @@ -2115,9 +2115,9 @@ [[package]] name = "hyper" -version = "0.13.9" +version = "0.13.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ad767baac13b44d4529fcf58ba2cd0995e36e7b435bc5b039de6f47e880dbf" +checksum = "8a6f157065790a3ed2f88679250419b5cdd96e714a0d65f7797fd337186e96bb" dependencies = [ "bytes 0.5.6", "futures-channel", @@ -2146,7 +2146,7 @@ "bytes 0.5.6", "ct-logs", "futures-util", - "hyper 0.13.9", + "hyper 0.13.10", "log", "rustls 0.18.1", "rustls-native-certs", @@ -2168,9 +2168,9 @@ [[package]] name = "idna" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9" +checksum = "de910d521f7cc3135c4de8db1cb910e0b5ed1dc6f57c381cd07e8e661ce10094" dependencies = [ "matches", "unicode-bidi", @@ -2245,9 +2245,9 @@ [[package]] name = "impl-trait-for-tuples" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f65a8ecf74feeacdab8d38cb129e550ca871cccaa7d1921d8636ecd75534903" +checksum = "d5dacb10c5b3bb92d46ba347505a9041e676bb20ad220101326bffb0c93031ee" dependencies = [ "proc-macro2", "quote", @@ -2553,9 +2553,9 @@ [[package]] name = "libc" -version = "0.2.85" +version = "0.2.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ccac4b00700875e6a07c6cde370d44d32fa01c5a65cdd2fca6858c479d28bb3" +checksum = "b7282d924be3275cec7f6756ff4121987bc6481325397dde6ba3e7802b1a8b1c" [[package]] name = "libloading" @@ -3631,7 +3631,7 @@ [[package]] name = "pallet-aura" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "frame-support", "frame-system", @@ -3650,11 +3650,11 @@ [[package]] name = "pallet-authorship" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "frame-support", "frame-system", - "impl-trait-for-tuples 0.2.0", + "impl-trait-for-tuples 0.2.1", "parity-scale-codec", "sp-authorship", "sp-inherents", @@ -3665,7 +3665,7 @@ [[package]] name = "pallet-balances" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "frame-benchmarking", "frame-support", @@ -3679,7 +3679,7 @@ [[package]] name = "pallet-contracts" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "frame-support", "frame-system", @@ -3700,7 +3700,7 @@ [[package]] name = "pallet-contracts-primitives" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "bitflags", "parity-scale-codec", @@ -3711,7 +3711,7 @@ [[package]] name = "pallet-contracts-proc-macro" version = "0.1.0" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "proc-macro2", "quote", @@ -3721,7 +3721,7 @@ [[package]] name = "pallet-contracts-rpc" version = "0.8.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -3740,7 +3740,7 @@ [[package]] name = "pallet-contracts-rpc-runtime-api" version = "0.8.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "pallet-contracts-primitives", "parity-scale-codec", @@ -3752,7 +3752,7 @@ [[package]] name = "pallet-grandpa" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "frame-benchmarking", "frame-support", @@ -3794,7 +3794,7 @@ [[package]] name = "pallet-randomness-collective-flip" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "frame-support", "frame-system", @@ -3807,7 +3807,7 @@ [[package]] name = "pallet-session" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "frame-support", "frame-system", @@ -3827,7 +3827,7 @@ [[package]] name = "pallet-sudo" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "frame-support", "frame-system", @@ -3841,12 +3841,12 @@ [[package]] name = "pallet-timestamp" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "frame-benchmarking", "frame-support", "frame-system", - "impl-trait-for-tuples 0.2.0", + "impl-trait-for-tuples 0.2.1", "parity-scale-codec", "serde", "sp-inherents", @@ -3859,7 +3859,7 @@ [[package]] name = "pallet-transaction-payment" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "frame-support", "frame-system", @@ -3875,7 +3875,7 @@ [[package]] name = "pallet-transaction-payment-rpc" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -3892,7 +3892,7 @@ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -3903,11 +3903,11 @@ [[package]] name = "pallet-treasury" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "frame-support", "frame-system", - "impl-trait-for-tuples 0.2.0", + "impl-trait-for-tuples 0.2.1", "pallet-balances", "parity-scale-codec", "serde", @@ -3918,7 +3918,7 @@ [[package]] name = "pallet-vesting" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "enumflags2", "frame-support", @@ -4019,7 +4019,7 @@ dependencies = [ "cfg-if 1.0.0", "hashbrown", - "impl-trait-for-tuples 0.2.0", + "impl-trait-for-tuples 0.2.1", "parity-util-mem-derive", "parking_lot 0.11.1", "primitive-types", @@ -5010,7 +5010,7 @@ [[package]] name = "sc-basic-authorship" version = "0.8.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "futures 0.3.12", "futures-timer 3.0.2", @@ -5033,7 +5033,7 @@ [[package]] name = "sc-block-builder" version = "0.8.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -5050,9 +5050,9 @@ [[package]] name = "sc-chain-spec" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ - "impl-trait-for-tuples 0.2.0", + "impl-trait-for-tuples 0.2.1", "parity-scale-codec", "sc-chain-spec-derive", "sc-consensus-babe", @@ -5071,7 +5071,7 @@ [[package]] name = "sc-chain-spec-derive" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -5082,7 +5082,7 @@ [[package]] name = "sc-cli" version = "0.8.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "chrono", "fdlimit", @@ -5120,7 +5120,7 @@ [[package]] name = "sc-client-api" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "derive_more", "fnv", @@ -5154,7 +5154,7 @@ [[package]] name = "sc-client-db" version = "0.8.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "blake2-rfc", "hash-db", @@ -5184,7 +5184,7 @@ [[package]] name = "sc-consensus" version = "0.8.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "sc-client-api", "sp-blockchain", @@ -5195,7 +5195,7 @@ [[package]] name = "sc-consensus-aura" version = "0.8.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "derive_more", "futures 0.3.12", @@ -5226,7 +5226,7 @@ [[package]] name = "sc-consensus-babe" version = "0.8.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "derive_more", "fork-tree", @@ -5271,7 +5271,7 @@ [[package]] name = "sc-consensus-epochs" version = "0.8.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "fork-tree", "parity-scale-codec", @@ -5284,7 +5284,7 @@ [[package]] name = "sc-consensus-slots" version = "0.8.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "futures 0.3.12", "futures-timer 3.0.2", @@ -5310,7 +5310,7 @@ [[package]] name = "sc-consensus-uncles" version = "0.8.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "log", "sc-client-api", @@ -5324,7 +5324,7 @@ [[package]] name = "sc-executor" version = "0.8.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "derive_more", "lazy_static", @@ -5353,7 +5353,7 @@ [[package]] name = "sc-executor-common" version = "0.8.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "derive_more", "parity-scale-codec", @@ -5369,7 +5369,7 @@ [[package]] name = "sc-executor-wasmi" version = "0.8.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "log", "parity-scale-codec", @@ -5384,7 +5384,7 @@ [[package]] name = "sc-executor-wasmtime" version = "0.8.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "log", "parity-scale-codec", @@ -5402,7 +5402,7 @@ [[package]] name = "sc-finality-grandpa" version = "0.8.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "derive_more", "finality-grandpa", @@ -5440,7 +5440,7 @@ [[package]] name = "sc-informant" version = "0.8.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "ansi_term 0.12.1", "futures 0.3.12", @@ -5458,7 +5458,7 @@ [[package]] name = "sc-keystore" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "async-trait", "derive_more", @@ -5478,7 +5478,7 @@ [[package]] name = "sc-light" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "hash-db", "lazy_static", @@ -5497,7 +5497,7 @@ [[package]] name = "sc-network" version = "0.8.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "async-std", "async-trait", @@ -5549,7 +5549,7 @@ [[package]] name = "sc-network-gossip" version = "0.8.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "futures 0.3.12", "futures-timer 3.0.2", @@ -5565,13 +5565,13 @@ [[package]] name = "sc-offchain" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "bytes 0.5.6", "fnv", "futures 0.3.12", "futures-timer 3.0.2", - "hyper 0.13.9", + "hyper 0.13.10", "hyper-rustls", "log", "num_cpus", @@ -5592,7 +5592,7 @@ [[package]] name = "sc-peerset" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "futures 0.3.12", "libp2p", @@ -5605,7 +5605,7 @@ [[package]] name = "sc-proposer-metrics" version = "0.8.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -5614,7 +5614,7 @@ [[package]] name = "sc-rpc" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "futures 0.3.12", "hash-db", @@ -5648,7 +5648,7 @@ [[package]] name = "sc-rpc-api" version = "0.8.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "derive_more", "futures 0.3.12", @@ -5672,7 +5672,7 @@ [[package]] name = "sc-rpc-server" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "futures 0.1.30", "jsonrpc-core", @@ -5690,7 +5690,7 @@ [[package]] name = "sc-service" version = "0.8.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "directories 3.0.1", "exit-future", @@ -5753,7 +5753,7 @@ [[package]] name = "sc-state-db" version = "0.8.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "log", "parity-scale-codec", @@ -5768,7 +5768,7 @@ [[package]] name = "sc-telemetry" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "chrono", "futures 0.3.12", @@ -5790,7 +5790,7 @@ [[package]] name = "sc-tracing" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "ansi_term 0.12.1", "atty", @@ -5818,7 +5818,7 @@ [[package]] name = "sc-tracing-proc-macro" version = "2.0.0" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -5829,7 +5829,7 @@ [[package]] name = "sc-transaction-graph" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "derive_more", "futures 0.3.12", @@ -5851,7 +5851,7 @@ [[package]] name = "sc-transaction-pool" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "futures 0.3.12", "futures-diagnose", @@ -6014,9 +6014,9 @@ [[package]] name = "serde_json" -version = "1.0.61" +version = "1.0.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fceb2595057b6891a4ee808f70054bd2d12f0e97f1cbb78689b59f676df325a" +checksum = "ea1c6153794552ea7cf7cf63b1231a25de00ec90db326ba6264440fa08e31486" dependencies = [ "itoa", "ryu", @@ -6102,9 +6102,9 @@ [[package]] name = "signal-hook" -version = "0.1.17" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e31d442c16f047a671b5a71e2161d6e68814012b7f5379d269ebd915fac2729" +checksum = "780f5e3fe0c66f67197236097d89de1e86216f1f6fdeaf47c442f854ab46c240" dependencies = [ "libc", "signal-hook-registry", @@ -6206,7 +6206,7 @@ [[package]] name = "sp-allocator" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "log", "sp-core", @@ -6218,7 +6218,7 @@ [[package]] name = "sp-api" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "hash-db", "parity-scale-codec", @@ -6234,7 +6234,7 @@ [[package]] name = "sp-api-proc-macro" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "blake2-rfc", "proc-macro-crate", @@ -6246,7 +6246,7 @@ [[package]] name = "sp-application-crypto" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "parity-scale-codec", "serde", @@ -6258,7 +6258,7 @@ [[package]] name = "sp-arithmetic" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "integer-sqrt", "num-traits", @@ -6271,7 +6271,7 @@ [[package]] name = "sp-authorship" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -6282,7 +6282,7 @@ [[package]] name = "sp-block-builder" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "parity-scale-codec", "sp-api", @@ -6294,7 +6294,7 @@ [[package]] name = "sp-blockchain" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "futures 0.3.12", "log", @@ -6312,7 +6312,7 @@ [[package]] name = "sp-chain-spec" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "serde", "serde_json", @@ -6321,7 +6321,7 @@ [[package]] name = "sp-consensus" version = "0.8.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "futures 0.3.12", "futures-timer 3.0.2", @@ -6347,7 +6347,7 @@ [[package]] name = "sp-consensus-aura" version = "0.8.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "parity-scale-codec", "sp-api", @@ -6361,7 +6361,7 @@ [[package]] name = "sp-consensus-babe" version = "0.8.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "merlin", "parity-scale-codec", @@ -6381,7 +6381,7 @@ [[package]] name = "sp-consensus-slots" version = "0.8.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -6390,7 +6390,7 @@ [[package]] name = "sp-consensus-vrf" version = "0.8.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -6402,7 +6402,7 @@ [[package]] name = "sp-core" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "base58", "blake2-rfc", @@ -6446,7 +6446,7 @@ [[package]] name = "sp-database" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "kvdb", "parking_lot 0.11.1", @@ -6455,7 +6455,7 @@ [[package]] name = "sp-debug-derive" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "proc-macro2", "quote", @@ -6465,7 +6465,7 @@ [[package]] name = "sp-externalities" version = "0.8.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "environmental", "parity-scale-codec", @@ -6476,7 +6476,7 @@ [[package]] name = "sp-finality-grandpa" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "finality-grandpa", "log", @@ -6493,7 +6493,7 @@ [[package]] name = "sp-inherents" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "parity-scale-codec", "parking_lot 0.11.1", @@ -6505,7 +6505,7 @@ [[package]] name = "sp-io" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "futures 0.3.12", "hash-db", @@ -6529,7 +6529,7 @@ [[package]] name = "sp-keyring" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "lazy_static", "sp-core", @@ -6540,7 +6540,7 @@ [[package]] name = "sp-keystore" version = "0.8.0" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "async-trait", "derive_more", @@ -6557,7 +6557,7 @@ [[package]] name = "sp-offchain" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "sp-api", "sp-core", @@ -6567,7 +6567,7 @@ [[package]] name = "sp-panic-handler" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "backtrace", ] @@ -6575,7 +6575,7 @@ [[package]] name = "sp-rpc" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "serde", "sp-core", @@ -6584,11 +6584,11 @@ [[package]] name = "sp-runtime" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "either", "hash256-std-hasher", - "impl-trait-for-tuples 0.2.0", + "impl-trait-for-tuples 0.2.1", "log", "parity-scale-codec", "parity-util-mem", @@ -6605,9 +6605,9 @@ [[package]] name = "sp-runtime-interface" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ - "impl-trait-for-tuples 0.2.0", + "impl-trait-for-tuples 0.2.1", "parity-scale-codec", "primitive-types", "sp-externalities", @@ -6622,7 +6622,7 @@ [[package]] name = "sp-runtime-interface-proc-macro" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "Inflector", "proc-macro-crate", @@ -6634,7 +6634,7 @@ [[package]] name = "sp-sandbox" version = "0.8.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "parity-scale-codec", "sp-core", @@ -6647,7 +6647,7 @@ [[package]] name = "sp-serializer" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "serde", "serde_json", @@ -6656,7 +6656,7 @@ [[package]] name = "sp-session" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "parity-scale-codec", "sp-api", @@ -6669,7 +6669,7 @@ [[package]] name = "sp-staking" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -6679,7 +6679,7 @@ [[package]] name = "sp-state-machine" version = "0.8.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "hash-db", "log", @@ -6701,12 +6701,12 @@ [[package]] name = "sp-std" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" [[package]] name = "sp-storage" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "impl-serde", "parity-scale-codec", @@ -6719,7 +6719,7 @@ [[package]] name = "sp-tasks" version = "2.0.0" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "log", "sp-core", @@ -6732,9 +6732,9 @@ [[package]] name = "sp-timestamp" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ - "impl-trait-for-tuples 0.2.0", + "impl-trait-for-tuples 0.2.1", "parity-scale-codec", "sp-api", "sp-inherents", @@ -6746,7 +6746,7 @@ [[package]] name = "sp-tracing" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "log", "parity-scale-codec", @@ -6759,7 +6759,7 @@ [[package]] name = "sp-transaction-pool" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "derive_more", "futures 0.3.12", @@ -6775,7 +6775,7 @@ [[package]] name = "sp-trie" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "hash-db", "memory-db", @@ -6789,7 +6789,7 @@ [[package]] name = "sp-utils" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "futures 0.3.12", "futures-core", @@ -6801,7 +6801,7 @@ [[package]] name = "sp-version" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "impl-serde", "parity-scale-codec", @@ -6813,9 +6813,9 @@ [[package]] name = "sp-wasm-interface" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ - "impl-trait-for-tuples 0.2.0", + "impl-trait-for-tuples 0.2.1", "parity-scale-codec", "sp-std", "wasmi", @@ -6934,7 +6934,7 @@ [[package]] name = "substrate-build-script-utils" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "platforms", ] @@ -6942,7 +6942,7 @@ [[package]] name = "substrate-frame-rpc-system" version = "2.0.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.12", @@ -6965,12 +6965,12 @@ [[package]] name = "substrate-prometheus-endpoint" version = "0.8.1" -source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f" +source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#c8641b52ea9acfd2cee6df8653b453edbe0bbed7" dependencies = [ "async-std", "derive_more", "futures-util", - "hyper 0.13.9", + "hyper 0.13.10", "log", "prometheus", "tokio 0.2.25", @@ -7599,9 +7599,9 @@ [[package]] name = "unicode-normalization" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a13e63ab62dbe32aeee58d1c5408d35c36c392bba5d9d3142287219721afe606" +checksum = "07fbfce1c8a97d547e8b5334978438d9d6ec8c20e38f56d4a4374d181493eaef" dependencies = [ "tinyvec", ] @@ -7676,7 +7676,7 @@ checksum = "5909f2b0817350449ed73e8bcd81c8c3c8d9a7a5d8acba4b27db277f1868976e" dependencies = [ "form_urlencoded", - "idna 0.2.0", + "idna 0.2.1", "matches", "percent-encoding 2.1.0", ] --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,9 @@ # ===== BUILD ====== -FROM phusion/baseimage:0.10.2 as builder +FROM phusion/baseimage:18.04-1.0.0 as builder LABEL maintainer="gz@usetech.com" -ENV WASM_TOOLCHAIN=nightly-2020-10-01 +ENV WASM_TOOLCHAIN=nightly-2021-01-27 ARG PROFILE=release @@ -37,7 +37,7 @@ # ===== RUN ====== -FROM phusion/baseimage:0.10.2 +FROM phusion/baseimage:18.04-1.0.0 ARG PROFILE=release COPY --from=builder /nft_parachain/target/$PROFILE/nft /usr/local/bin --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -54,6 +54,7 @@ mod default_weights; pub const MAX_DECIMAL_POINTS: DecimalPoints = 30; +pub const MAX_REFUNGIBLE_PIECES: u128 = 1_000_000_000_000_000_000_000; pub const MAX_SPONSOR_TIMEOUT: u32 = 10_368_000; pub const MAX_TOKEN_OWNERSHIP: u32 = 10_000_000; @@ -71,8 +72,7 @@ NFT, // decimal points Fungible(DecimalPoints), - // decimal points - ReFungible(DecimalPoints), + ReFungible, } impl Default for CollectionMode { @@ -87,7 +87,7 @@ CollectionMode::Invalid => 0, CollectionMode::NFT => 1, CollectionMode::Fungible(_) => 2, - CollectionMode::ReFungible(_) => 3, + CollectionMode::ReFungible => 3, } } } @@ -185,6 +185,8 @@ // Timeouts for item types in passed blocks pub sponsor_transfer_timeout: u32, + pub owner_can_transfer: bool, + pub owner_can_destroy: bool, } impl Default for CollectionLimits { @@ -193,7 +195,10 @@ account_token_ownership_limit: 10_000_000, token_limit: u32::max_value(), sponsored_data_size: u32::max_value(), - sponsor_transfer_timeout: 14400 } + sponsor_transfer_timeout: 14400, + owner_can_transfer: true, + owner_can_destroy: true + } } } @@ -266,6 +271,7 @@ pub struct CreateReFungibleData { pub const_data: Vec, pub variable_data: Vec, + pub pieces: u128, } #[derive(Encode, Decode, Debug, Clone, PartialEq)] @@ -377,7 +383,9 @@ /// Collection limit bounds per collection exceeded CollectionLimitBoundsExceeded, /// Schema data size limit bound exceeded - SchemaDataLimitExceeded + SchemaDataLimitExceeded, + /// Maximum refungibility exceeded + WrongRefungiblePieces } } @@ -548,7 +556,6 @@ let decimal_points = match mode { CollectionMode::Fungible(points) => points, - CollectionMode::ReFungible(points) => points, _ => 0 }; @@ -590,7 +597,7 @@ sponsor_confirmed: false, variable_on_chain_schema: Vec::new(), const_on_chain_schema: Vec::new(), - limits: CollectionLimits::default(), + limits: CollectionLimits::default() }; // Add new collection to map @@ -933,7 +940,7 @@ Self::can_create_items_in_collection(collection_id, &target_collection, &sender, &owner)?; Self::validate_create_item_args(&target_collection, &data)?; - Self::create_item_no_validation(collection_id, &target_collection, owner, data)?; + Self::create_item_no_validation(collection_id, owner, data)?; Ok(()) } @@ -973,7 +980,7 @@ Self::validate_create_item_args(&target_collection, data)?; } for data in &items_data { - Self::create_item_no_validation(collection_id, &target_collection, owner.clone(), data.clone())?; + Self::create_item_no_validation(collection_id, owner.clone(), data.clone())?; } Ok(()) @@ -1012,7 +1019,7 @@ { CollectionMode::NFT => Self::burn_nft_item(collection_id, item_id)?, CollectionMode::Fungible(_) => Self::burn_fungible_item(&sender, collection_id, value)?, - CollectionMode::ReFungible(_) => Self::burn_refungible_item(collection_id, item_id, &sender)?, + CollectionMode::ReFungible => Self::burn_refungible_item(collection_id, item_id, &sender)?, _ => () }; @@ -1154,7 +1161,7 @@ { CollectionMode::NFT => Self::transfer_nft(collection_id, item_id, from, recipient)?, CollectionMode::Fungible(_) => Self::transfer_fungible(collection_id, value, &from, &recipient)?, - CollectionMode::ReFungible(_) => Self::transfer_refungible(collection_id, item_id, value, from.clone(), recipient)?, + CollectionMode::ReFungible => Self::transfer_refungible(collection_id, item_id, value, from.clone(), recipient)?, _ => () }; @@ -1211,7 +1218,7 @@ match target_collection.mode { CollectionMode::NFT => Self::set_nft_variable_data(collection_id, item_id, data)?, - CollectionMode::ReFungible(_) => Self::set_re_fungible_variable_data(collection_id, item_id, data)?, + CollectionMode::ReFungible => Self::set_re_fungible_variable_data(collection_id, item_id, data)?, CollectionMode::Fungible(_) => fail!(Error::::CantStoreMetadataInFungibleTokens), _ => fail!(Error::::UnexpectedCollectionType) }; @@ -1551,7 +1558,7 @@ { CollectionMode::NFT => Self::transfer_nft(collection_id, item_id, sender.clone(), recipient)?, CollectionMode::Fungible(_) => Self::transfer_fungible(collection_id, value, &sender, &recipient)?, - CollectionMode::ReFungible(_) => Self::transfer_refungible(collection_id, item_id, value, sender.clone(), recipient)?, + CollectionMode::ReFungible => Self::transfer_refungible(collection_id, item_id, value, sender.clone(), recipient)?, _ => () }; @@ -1603,12 +1610,16 @@ fail!(Error::::NotFungibleDataUsedToMintFungibleCollectionToken); } }, - CollectionMode::ReFungible(_) => { + CollectionMode::ReFungible => { if let CreateItemData::ReFungible(data) = data { // check sizes ensure!(ChainLimit::get().custom_data_limit >= data.const_data.len() as u32, Error::::TokenConstDataLimitExceeded); ensure!(ChainLimit::get().custom_data_limit >= data.variable_data.len() as u32, Error::::TokenVariableDataLimitExceeded); + + // Check refungibility limits + ensure!(data.pieces <= MAX_REFUNGIBLE_PIECES, Error::::WrongRefungiblePieces); + ensure!(data.pieces > 0, Error::::WrongRefungiblePieces); } else { fail!(Error::::NotReFungibleDataUsedToMintReFungibleCollectionToken); } @@ -1619,7 +1630,7 @@ Ok(()) } - fn create_item_no_validation(collection_id: CollectionId, collection: &CollectionType, owner: T::AccountId, data: CreateItemData) -> DispatchResult { + fn create_item_no_validation(collection_id: CollectionId, owner: T::AccountId, data: CreateItemData) -> DispatchResult { match data { CreateItemData::NFT(data) => { @@ -1636,8 +1647,7 @@ }, CreateItemData::ReFungible(data) => { let mut owner_list = Vec::new(); - let value = (10 as u128).pow(collection.decimal_points as u32); - owner_list.push(Ownership {owner: owner.clone(), fraction: value}); + owner_list.push(Ownership {owner: owner.clone(), fraction: data.pieces}); let item = ReFungibleItemType { owner: owner_list, @@ -1866,7 +1876,7 @@ CollectionMode::Fungible(_) => { >::contains_key(collection_id, &subject) } - CollectionMode::ReFungible(_) => { + CollectionMode::ReFungible => { >::get(collection_id, item_id) .owner .iter() @@ -1895,7 +1905,7 @@ { CollectionMode::NFT => >::contains_key(collection_id, item_id), CollectionMode::Fungible(_) => >::contains_key(collection_id, owner), - CollectionMode::ReFungible(_) => >::contains_key(collection_id, item_id), + CollectionMode::ReFungible => >::contains_key(collection_id, item_id), _ => false }; @@ -2421,7 +2431,7 @@ sponsored } - CollectionMode::ReFungible(_) => { + CollectionMode::ReFungible => { // get correct limit let limit: u32 = if collection_limits.sponsor_transfer_timeout > 0 { --- a/pallets/nft/src/tests.rs +++ b/pallets/nft/src/tests.rs @@ -35,7 +35,7 @@ } fn default_re_fungible_data () -> CreateReFungibleData { - CreateReFungibleData { const_data: vec![1, 2, 3], variable_data: vec![3, 2, 1] } + CreateReFungibleData { const_data: vec![1, 2, 3], variable_data: vec![3, 2, 1], pieces: 1023 } } fn create_test_collection_for_owner(mode: &CollectionMode, owner: u64, id: CollectionId) -> CollectionId { @@ -114,26 +114,6 @@ } #[test] -fn create_re_fungible_collection_fails_with_large_decimal_numbers() { - new_test_ext().execute_with(|| { - default_limits(); - - let col_name1: Vec = "Test1\0".encode_utf16().collect::>(); - let col_desc1: Vec = "TestDescription1\0".encode_utf16().collect::>(); - let token_prefix1: Vec = b"token_prefix1\0".to_vec(); - - let origin1 = Origin::signed(1); - assert_noop!(TemplateModule::create_collection( - origin1, - col_name1, - col_desc1, - token_prefix1, - CollectionMode::ReFungible(MAX_DECIMAL_POINTS + 1) - ), Error::::CollectionDecimalPointLimitExceeded); - }); -} - -#[test] fn create_nft_item() { new_test_ext().execute_with(|| { default_limits(); @@ -176,7 +156,7 @@ fn create_refungible_item() { new_test_ext().execute_with(|| { default_limits(); - let collection_id = create_test_collection(&CollectionMode::ReFungible(3), 1); + let collection_id = create_test_collection(&CollectionMode::ReFungible, 1); let data = default_re_fungible_data(); create_test_item(collection_id, &data.clone().into()); @@ -192,7 +172,7 @@ TemplateModule::refungible_item_id(collection_id, 1).owner[0], Ownership { owner: 1, - fraction: 1000 + fraction: 1023 } ); }); @@ -203,7 +183,7 @@ new_test_ext().execute_with(|| { default_limits(); - create_test_collection(&CollectionMode::ReFungible(3), 1); + create_test_collection(&CollectionMode::ReFungible, 1); let origin1 = Origin::signed(1); @@ -224,7 +204,7 @@ item.owner[0], Ownership { owner: 1, - fraction: 1000 + fraction: 1023 } ); } @@ -312,7 +292,7 @@ new_test_ext().execute_with(|| { default_limits(); - let collection_id = create_test_collection(&CollectionMode::ReFungible(3), 1); + let collection_id = create_test_collection(&CollectionMode::ReFungible, 1); let data = default_re_fungible_data(); create_test_item(collection_id, &data.clone().into()); @@ -331,23 +311,23 @@ TemplateModule::refungible_item_id(collection_id, 1).owner[0], Ownership { owner: 1, - fraction: 1000 + fraction: 1023 } ); - assert_eq!(TemplateModule::balance_count(1, 1), 1000); + assert_eq!(TemplateModule::balance_count(1, 1), 1023); assert_eq!(TemplateModule::address_tokens(1, 1), [1]); // change owner scenario - assert_ok!(TemplateModule::transfer(origin1.clone(), 2, 1, 1, 1000)); + assert_ok!(TemplateModule::transfer(origin1.clone(), 2, 1, 1, 1023)); assert_eq!( TemplateModule::refungible_item_id(1, 1).owner[0], Ownership { owner: 2, - fraction: 1000 + fraction: 1023 } ); assert_eq!(TemplateModule::balance_count(1, 1), 0); - assert_eq!(TemplateModule::balance_count(1, 2), 1000); + assert_eq!(TemplateModule::balance_count(1, 2), 1023); // assert_eq!(TemplateModule::address_tokens(1, 1), []); assert_eq!(TemplateModule::address_tokens(1, 2), [1]); @@ -357,7 +337,7 @@ TemplateModule::refungible_item_id(1, 1).owner[0], Ownership { owner: 2, - fraction: 500 + fraction: 523 } ); assert_eq!( @@ -367,7 +347,7 @@ fraction: 500 } ); - assert_eq!(TemplateModule::balance_count(1, 2), 500); + assert_eq!(TemplateModule::balance_count(1, 2), 523); assert_eq!(TemplateModule::balance_count(1, 3), 500); assert_eq!(TemplateModule::address_tokens(1, 2), [1]); assert_eq!(TemplateModule::address_tokens(1, 3), [1]); @@ -378,7 +358,7 @@ TemplateModule::refungible_item_id(1, 1).owner[0], Ownership { owner: 2, - fraction: 300 + fraction: 323 } ); assert_eq!( @@ -388,7 +368,7 @@ fraction: 700 } ); - assert_eq!(TemplateModule::balance_count(1, 2), 300); + assert_eq!(TemplateModule::balance_count(1, 2), 323); assert_eq!(TemplateModule::balance_count(1, 3), 700); assert_eq!(TemplateModule::address_tokens(1, 2), [1]); assert_eq!(TemplateModule::address_tokens(1, 3), [1]); @@ -517,7 +497,7 @@ new_test_ext().execute_with(|| { default_limits(); - let collection_id = create_test_collection(&CollectionMode::ReFungible(3), 1); + let collection_id = create_test_collection(&CollectionMode::ReFungible, 1); let origin1 = Origin::signed(1); let origin2 = Origin::signed(2); @@ -525,7 +505,7 @@ let data = default_re_fungible_data(); create_test_item(collection_id, &data.into()); - assert_eq!(TemplateModule::balance_count(1, 1), 1000); + assert_eq!(TemplateModule::balance_count(1, 1), 1023); assert_eq!(TemplateModule::address_tokens(1, 1), [1]); assert_ok!(TemplateModule::set_mint_permission( @@ -543,8 +523,8 @@ assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 3)); // do approve - assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1, 1000)); - assert_eq!(TemplateModule::approved(1, (1, 1, 2)), 1000); + assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1, 1023)); + assert_eq!(TemplateModule::approved(1, (1, 1, 2)), 1023); assert_ok!(TemplateModule::transfer_from( origin2.clone(), @@ -554,14 +534,14 @@ 1, 100 )); - assert_eq!(TemplateModule::balance_count(1, 1), 900); + assert_eq!(TemplateModule::balance_count(1, 1), 923); assert_eq!(TemplateModule::balance_count(1, 3), 100); assert_eq!(TemplateModule::address_tokens(1, 1), [1]); assert_eq!(TemplateModule::address_tokens(1, 3), [1]); assert_eq!( TemplateModule::approved(1, (1, 1, 2)), - 900 + 923 ); }); } @@ -717,7 +697,7 @@ new_test_ext().execute_with(|| { default_limits(); - let collection_id = create_test_collection(&CollectionMode::ReFungible(3), 1); + let collection_id = create_test_collection(&CollectionMode::ReFungible, 1); let origin1 = Origin::signed(1); assert_ok!(TemplateModule::set_mint_permission( @@ -738,12 +718,12 @@ create_test_item(collection_id, &data.into()); // check balance (collection with id = 1, user id = 2) - assert_eq!(TemplateModule::balance_count(1, 1), 1000); + assert_eq!(TemplateModule::balance_count(1, 1), 1023); // burn item - assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 1, 1000)); + assert_ok!(TemplateModule::burn_item(origin1.clone(), 1, 1, 1023)); assert_noop!( - TemplateModule::burn_item(origin1.clone(), 1, 1, 1000), + TemplateModule::burn_item(origin1.clone(), 1, 1, 1023), Error::::TokenNotFound ); @@ -807,7 +787,7 @@ let nft_collection_id = create_test_collection(&CollectionMode::NFT, 1); let fungible_collection_id = create_test_collection(&CollectionMode::Fungible(3), 2); - let re_fungible_collection_id = create_test_collection(&CollectionMode::ReFungible(3), 3); + let re_fungible_collection_id = create_test_collection(&CollectionMode::ReFungible, 3); // check balance before assert_eq!(TemplateModule::balance_count(nft_collection_id, 1), 0); @@ -826,7 +806,7 @@ // check balance (collection with id = 1, user id = 1) assert_eq!(TemplateModule::balance_count(nft_collection_id, 1), 1); assert_eq!(TemplateModule::balance_count(fungible_collection_id, 1), 5); - assert_eq!(TemplateModule::balance_count(re_fungible_collection_id, 1), 1000); + assert_eq!(TemplateModule::balance_count(re_fungible_collection_id, 1), 1023); assert_eq!(TemplateModule::nft_item_id(nft_collection_id, 1).owner, 1); assert_eq!(TemplateModule::fungible_item_id(fungible_collection_id, 1).value, 5); assert_eq!(TemplateModule::refungible_item_id(re_fungible_collection_id, 1).owner[0].owner, 1); @@ -1905,7 +1885,7 @@ new_test_ext().execute_with(|| { default_limits(); - let collection_id = create_test_collection(&CollectionMode::ReFungible(3), 1); + let collection_id = create_test_collection(&CollectionMode::ReFungible, 1); let origin1 = Origin::signed(1); @@ -1982,7 +1962,7 @@ })); - let collection_id = create_test_collection(&CollectionMode::ReFungible(3), 1); + let collection_id = create_test_collection(&CollectionMode::ReFungible, 1); let origin1 = Origin::signed(1); --- a/runtime_types.json +++ b/runtime_types.json @@ -1,27 +1,4 @@ { - "Schedule": { - "version": "u32", - "put_code_per_byte_cost": "Gas", - "grow_mem_cost": "Gas", - "regular_op_cost": "Gas", - "return_data_per_byte_cost": "Gas", - "event_data_per_byte_cost": "Gas", - "event_per_topic_cost": "Gas", - "event_base_cost": "Gas", - "call_base_cost": "Gas", - "instantiate_base_cost": "Gas", - "dispatch_base_cost": "Gas", - "sandbox_data_read_cost": "Gas", - "sandbox_data_write_cost": "Gas", - "transfer_cost": "Gas", - "instantiate_cost": "Gas", - "max_event_topics": "u32", - "max_stack_height": "u32", - "max_memory_pages": "u32", - "max_table_size": "u32", - "enable_println": "bool", - "max_subject_len": "u32" - }, "AccessMode": { "_enum": [ "Normal", @@ -34,7 +11,7 @@ "Invalid": null, "NFT": null, "Fungible": "DecimalPoints", - "ReFungible": "DecimalPoints" + "ReFungible": null } }, "Ownership": { @@ -84,7 +61,8 @@ }, "CreateReFungibleData": { "const_data": "Vec", - "variable_data": "Vec" + "variable_data": "Vec", + "pieces": "u128" }, "CreateItemData": { "_enum": { @@ -117,15 +95,8 @@ "AccountTokenOwnershipLimit": "u32", "SponsoredMintSize": "u32", "TokenLimit": "u32", - "SponsorTimeout": "u32" - }, - "AccountInfo": "AccountInfoWithProviders", - "AccountInfoWithProviders": { - "nonce": "Index", - "consumers": "RefCount", - "providers": "RefCount", - "data": "AccountData" + "SponsorTimeout": "u32", + "OwnerCanTransfer": "bool", + "OwnerCanDestroy": "bool" } - - } - \ No newline at end of file +} \ No newline at end of file --- a/tests/src/addCollectionAdmin.test.ts +++ b/tests/src/addCollectionAdmin.test.ts @@ -1,4 +1,9 @@ -import { ApiPromise } from '@polkadot/api'; +// +// This file is subject to the terms and conditions defined in +// file 'LICENSE', which is part of this source code package. +// + +import { ApiPromise } from '@polkadot/api'; import BN from 'bn.js'; import chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; @@ -112,18 +117,18 @@ ]; const collectionId = await createCollectionExpectSuccess(); - const chainLimit = await api.query.nft.chainLimit() as unknown as { collections_admins_limit: BN }; - const chainLimitNumber = chainLimit.collections_admins_limit.toNumber(); - expect(chainLimitNumber).to.be.equal(5); + const chainLimit = await api.query.nft.chainLimit() as unknown as { CollectionAdminsLimit: BN }; + const chainAdminLimit = chainLimit.CollectionAdminsLimit.toNumber(); + expect(chainAdminLimit).to.be.equal(5); - for (let i = 0; i < chainLimitNumber; i++) { + for (let i = 0; i < chainAdminLimit; i++) { const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, accounts[i]); await submitTransactionAsync(Alice, changeAdminTx); const adminListAfterAddAdmin: any = (await api.query.nft.adminList(collectionId)); expect(adminListAfterAddAdmin).to.be.contains(accounts[i]); } - const tx = api.tx.nft.addCollectionAdmin(collectionId, accounts[chainLimitNumber]); + const tx = api.tx.nft.addCollectionAdmin(collectionId, accounts[chainAdminLimit]); await expect(submitTransactionExpectFailAsync(Alice, tx)).to.be.rejected; }); }); --- a/tests/src/addToContractWhiteList.test.ts +++ b/tests/src/addToContractWhiteList.test.ts @@ -1,3 +1,8 @@ +// +// 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 usingApi, { submitTransactionAsync, submitTransactionExpectFailAsync } from "./substrate/substrate-api"; --- a/tests/src/addToWhiteList.test.ts +++ b/tests/src/addToWhiteList.test.ts @@ -1,3 +1,8 @@ +// +// This file is subject to the terms and conditions defined in +// file 'LICENSE', which is part of this source code package. +// + import { IKeyringPair } from '@polkadot/types/types'; import chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; --- a/tests/src/approve.test.ts +++ b/tests/src/approve.test.ts @@ -34,7 +34,7 @@ await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob); // reFungible const reFungibleCollectionId = - await createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}}); + await createCollectionExpectSuccess({mode: {type: 'ReFungible'}}); const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible'); await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob); }); @@ -56,7 +56,7 @@ await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 0); // reFungible const reFungibleCollectionId = - await createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}}); + await createCollectionExpectSuccess({mode: {type: 'ReFungible'}}); const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible'); await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob, 1); await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob, 0); @@ -95,7 +95,7 @@ await approveExpectFail(fungibleCollectionId, 1, Alice, Bob); // reFungible const reFungibleCollectionId = - await createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}}); + await createCollectionExpectSuccess({mode: {type: 'ReFungible'}}); await destroyCollectionExpectSuccess(reFungibleCollectionId); await approveExpectFail(reFungibleCollectionId, 1, Alice, Bob); }); @@ -113,7 +113,7 @@ await approveExpectFail(fungibleCollectionId, 2, Alice, Bob); // reFungible const reFungibleCollectionId = - await createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}}); + await createCollectionExpectSuccess({mode: {type: 'ReFungible'}}); await approveExpectFail(reFungibleCollectionId, 2, Alice, Bob); }); }); @@ -132,7 +132,7 @@ await approveExpectFail(fungibleCollectionId, newFungibleTokenId, Bob, Alice); // reFungible const reFungibleCollectionId = - await createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}}); + await createCollectionExpectSuccess({mode: {type: 'ReFungible'}}); const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible'); await approveExpectFail(reFungibleCollectionId, newReFungibleTokenId, Bob, Alice); }); --- a/tests/src/burnItem.test.ts +++ b/tests/src/burnItem.test.ts @@ -1,3 +1,8 @@ +// +// This file is subject to the terms and conditions defined in +// file 'LICENSE', which is part of this source code package. +// + import { default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync } from './substrate/substrate-api'; import { Keyring } from "@polkadot/api"; import { IKeyringPair } from "@polkadot/types/types"; @@ -70,7 +75,7 @@ }); it('Burn item in ReFungible collection', async () => { const createMode = 'ReFungible'; - const collectionId = await createCollectionExpectSuccess({mode: {type: createMode, decimalPoints: 2 }}); + const collectionId = await createCollectionExpectSuccess({mode: {type: createMode }}); const tokenId = await createItemExpectSuccess(alice, collectionId, createMode); await usingApi(async (api) => { @@ -91,7 +96,7 @@ it('Burn owned portion of item in ReFungible collection', async () => { const createMode = 'ReFungible'; - const collectionId = await createCollectionExpectSuccess({mode: {type: createMode, decimalPoints: 2 }}); + const collectionId = await createCollectionExpectSuccess({mode: {type: createMode}}); const tokenId = await createItemExpectSuccess(alice, collectionId, createMode); await usingApi(async (api) => { @@ -107,7 +112,7 @@ const tx = api.tx.nft.burnItem(collectionId, tokenId, 0); const events2 = await submitTransactionAsync(bob, tx); const result2 = getGenericResult(events2); - + // Get balances const balance: any = (await api.query.nft.reFungibleItemList(collectionId, tokenId)).toJSON(); // console.log(balance); --- a/tests/src/change-collection-owner.test.ts +++ b/tests/src/change-collection-owner.test.ts @@ -1,4 +1,9 @@ -import chai from 'chai'; +// +// 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 privateKey from './substrate/privateKey'; import { default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync } from "./substrate/substrate-api"; --- a/tests/src/confirmSponsorship.test.ts +++ b/tests/src/confirmSponsorship.test.ts @@ -115,7 +115,7 @@ }); it('ReFungible: Transfer fees are paid by the sponsor after confirmation', async () => { - const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0 }}); + const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}}); await setCollectionSponsorExpectSuccess(collectionId, bob.address); await confirmSponsorshipExpectSuccess(collectionId, '//Bob'); @@ -247,7 +247,7 @@ }); it('ReFungible: Sponsoring is rate limited', async () => { - const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0 }}); + const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}}); await setCollectionSponsorExpectSuccess(collectionId, bob.address); await confirmSponsorshipExpectSuccess(collectionId, '//Bob'); --- a/tests/src/contracts.test.ts +++ b/tests/src/contracts.test.ts @@ -1,3 +1,8 @@ +// +// 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 usingApi, { submitTransactionAsync, submitTransactionExpectFailAsync } from "./substrate/substrate-api"; --- a/tests/src/createCollection.test.ts +++ b/tests/src/createCollection.test.ts @@ -28,7 +28,7 @@ await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}}); }); it('Create new ReFungible collection', async () => { - await createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}}); + await createCollectionExpectSuccess({mode: {type: 'ReFungible'}}); }); }); --- a/tests/src/createItem.test.ts +++ b/tests/src/createItem.test.ts @@ -1,3 +1,8 @@ +// +// This file is subject to the terms and conditions defined in +// file 'LICENSE', which is part of this source code package. +// + import { default as usingApi } from './substrate/substrate-api'; import { Keyring } from "@polkadot/api"; import { IKeyringPair } from "@polkadot/types/types"; @@ -28,7 +33,7 @@ }); it('Create new item in ReFungible collection', async () => { const createMode = 'ReFungible'; - const newCollectionID = await createCollectionExpectSuccess({mode: {type: createMode, decimalPoints: 0}}); + const newCollectionID = await createCollectionExpectSuccess({mode: {type: createMode}}); await createItemExpectSuccess(alice, newCollectionID, createMode); }); }); --- a/tests/src/createMultipleItems.test.ts +++ b/tests/src/createMultipleItems.test.ts @@ -56,14 +56,14 @@ it('Create 0x31, 0x32, 0x33 items in active ReFungible collection and verify tokens data in chain', async () => { await usingApi(async (api: ApiPromise) => { - const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}}); + const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}}); const itemsListIndexBefore = await api.query.nft.itemListIndex(collectionId) as unknown as BN; expect(itemsListIndexBefore.toNumber()).to.be.equal(0); const Alice = privateKey('//Alice'); const args = [ - { Refungible: ['0x31', '0x31'] }, - { Refungible: ['0x32', '0x32'] }, - { Refungible: ['0x33', '0x33'] }, + {refungible: {const_data: [0x31], variable_data: [0x31], pieces: 1}}, + {refungible: {const_data: [0x32], variable_data: [0x32], pieces: 1}}, + {refungible: {const_data: [0x33], variable_data: [0x33], pieces: 1}}, ]; const createMultipleItemsTx = await api.tx.nft .createMultipleItems(collectionId, Alice.address, args); @@ -137,7 +137,7 @@ // ReFungible const collectionIdReFungible = - await createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}}); + await createCollectionExpectSuccess({mode: {type: 'ReFungible'}}); const argsReFungible = [ { ReFungible: ['1'.repeat(2049), '1'.repeat(2049)] }, { ReFungible: ['2'.repeat(2049), '2'.repeat(2049)] }, --- a/tests/src/creditFeesToTreasury.test.ts +++ b/tests/src/creditFeesToTreasury.test.ts @@ -17,6 +17,8 @@ transferExpectSuccess } from './util/helpers'; +import { default as waitNewBlocks } from './substrate/wait-new-blocks'; + chai.use(chaiAsPromised); const expect = chai.expect; @@ -37,6 +39,8 @@ it('Total issuance does not change', async () => { await usingApi(async (api) => { + await waitNewBlocks(api, 1); + const totalBefore = new BigNumber((await api.query.balances.totalIssuance()).toString()); const alicePrivateKey = privateKey('//Alice'); @@ -54,6 +58,8 @@ it('Sender balance decreased by fee+sent amount, Treasury balance increased by fee', async () => { await usingApi(async (api) => { + await waitNewBlocks(api, 1); + const alicePrivateKey = privateKey('//Alice'); const treasuryBalanceBefore = new BigNumber((await api.query.system.account(Treasury)).data.free.toString()); const aliceBalanceBefore = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString()); @@ -74,6 +80,8 @@ it('Treasury balance increased by failed tx fee', async () => { await usingApi(async (api) => { + await waitNewBlocks(api, 1); + const bobPrivateKey = privateKey('//Bob'); const treasuryBalanceBefore = new BigNumber((await api.query.system.account(Treasury)).data.free.toString()); const bobBalanceBefore = new BigNumber((await api.query.system.account(bobsPublicKey)).data.free.toString()); @@ -92,6 +100,8 @@ it('NFT Transactions also send fees to Treasury', async () => { await usingApi(async (api) => { + await waitNewBlocks(api, 1); + const treasuryBalanceBefore = new BigNumber((await api.query.system.account(Treasury)).data.free.toString()); const aliceBalanceBefore = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString()); @@ -108,15 +118,12 @@ it('Fees are sane', async () => { await usingApi(async (api) => { - const treasuryBalanceBefore = new BigNumber((await api.query.system.account(Treasury)).data.free.toString()); const aliceBalanceBefore = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString()); await createCollectionExpectSuccess(); - const treasuryBalanceAfter = new BigNumber((await api.query.system.account(Treasury)).data.free.toString()); const aliceBalanceAfter = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString()); const fee = aliceBalanceBefore.minus(aliceBalanceAfter); - const treasuryIncrease = treasuryBalanceAfter.minus(treasuryBalanceBefore); expect(fee.dividedBy(1e15).toNumber()).to.be.lessThan(saneMaximumFee); expect(fee.dividedBy(1e15).toNumber()).to.be.greaterThan(saneMinimumFee); --- a/tests/src/destroyCollection.test.ts +++ b/tests/src/destroyCollection.test.ts @@ -1,12 +1,14 @@ +// +// 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, submitTransactionAsync } from "./substrate/substrate-api"; -import { createCollectionExpectSuccess, createCollectionExpectFailure, destroyCollectionExpectSuccess, destroyCollectionExpectFailure } from "./util/helpers"; -import type { AccountId, EventRecord } from '@polkadot/types/interfaces'; -import privateKey from './substrate/privateKey'; +import { default as usingApi } from "./substrate/substrate-api"; +import { createCollectionExpectSuccess, destroyCollectionExpectSuccess, destroyCollectionExpectFailure } from "./util/helpers"; chai.use(chaiAsPromised); -const expect = chai.expect; describe('integration test: ext. destroyCollection():', () => { it('NFT collection can be destroyed', async () => { @@ -18,7 +20,7 @@ await destroyCollectionExpectSuccess(collectionId); }); it('ReFungible collection can be destroyed', async () => { - const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}}); + const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}}); await destroyCollectionExpectSuccess(collectionId); }); }); --- a/tests/src/enableContractSponsoring.test.ts +++ b/tests/src/enableContractSponsoring.test.ts @@ -1,3 +1,8 @@ +// +// This file is subject to the terms and conditions defined in +// file 'LICENSE', which is part of this source code package. +// + import { IKeyringPair } from '@polkadot/types/types'; import chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; --- a/tests/src/removeCollectionAdmin.test.ts +++ b/tests/src/removeCollectionAdmin.test.ts @@ -1,5 +1,9 @@ +// +// This file is subject to the terms and conditions defined in +// file 'LICENSE', which is part of this source code package. +// + import { ApiPromise } from '@polkadot/api'; -import BN from 'bn.js'; import chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; import privateKey from './substrate/privateKey'; --- /dev/null +++ b/tests/src/removeFromContractWhiteList.test.ts @@ -0,0 +1,72 @@ +import privateKey from "./substrate/privateKey"; +import usingApi from "./substrate/substrate-api"; +import { deployFlipper, toggleFlipValueExpectFailure, toggleFlipValueExpectSuccess } from "./util/contracthelpers"; +import { addToContractWhiteListExpectSuccess, isWhitelistedInContract, removeFromContractWhiteListExpectFailure, removeFromContractWhiteListExpectSuccess, toggleContractWhitelistExpectSuccess } from "./util/helpers"; +import { IKeyringPair } from '@polkadot/types/types'; +import { expect } from "chai"; + +describe('Integration Test removeFromContractWhiteList', () => { + let bob: IKeyringPair; + + before(() => { + bob = privateKey('//Bob'); + }); + + it('user is no longer whitelisted after removal', async () => { + await usingApi(async (api) => { + const [flipper, deployer] = await deployFlipper(api); + + await addToContractWhiteListExpectSuccess(deployer, flipper.address, bob.address); + await removeFromContractWhiteListExpectSuccess(deployer, flipper.address, bob.address); + + expect(await isWhitelistedInContract(flipper.address, bob.address)).to.be.false; + }); + }); + + it('user can\'t execute contract after removal', async () => { + await usingApi(async (api) => { + const [flipper, deployer] = await deployFlipper(api); + await toggleContractWhitelistExpectSuccess(deployer, flipper.address, true); + + await addToContractWhiteListExpectSuccess(deployer, flipper.address, bob.address); + await toggleFlipValueExpectSuccess(bob, flipper); + + await removeFromContractWhiteListExpectSuccess(deployer, flipper.address, bob.address); + await toggleFlipValueExpectFailure(bob, flipper); + }); + }); + + it('can be called twice', async () => { + await usingApi(async (api) => { + const [flipper, deployer] = await deployFlipper(api); + + await addToContractWhiteListExpectSuccess(deployer, flipper.address, bob.address); + await removeFromContractWhiteListExpectSuccess(deployer, flipper.address, bob.address); + await removeFromContractWhiteListExpectSuccess(deployer, flipper.address, bob.address); + }); + }); +}); + +describe('Negative Integration Test removeFromContractWhiteList', () => { + let alice: IKeyringPair; + let bob: IKeyringPair; + + before(() => { + alice = privateKey('//Alice'); + bob = privateKey('//Bob'); + }); + + it('fails when called with non-contract address', async () => { + await usingApi(async () => { + await removeFromContractWhiteListExpectFailure(alice, alice.address, bob.address); + }); + }); + + it('fails when executed by non owner', async () => { + await usingApi(async (api) => { + const [flipper, _] = await deployFlipper(api); + + await removeFromContractWhiteListExpectFailure(alice, flipper.address, bob.address); + }); + }); +}); --- a/tests/src/removeFromWhiteList.test.ts +++ b/tests/src/removeFromWhiteList.test.ts @@ -1,3 +1,8 @@ +// +// 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'; --- a/tests/src/setCollectionLimits.test.ts +++ b/tests/src/setCollectionLimits.test.ts @@ -1,3 +1,8 @@ +// +// This file is subject to the terms and conditions defined in +// file 'LICENSE', which is part of this source code package. +// + // https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits import { ApiPromise, Keyring } from '@polkadot/api'; import { IKeyringPair } from '@polkadot/types/types'; --- a/tests/src/setCollectionSponsor.test.ts +++ b/tests/src/setCollectionSponsor.test.ts @@ -9,7 +9,6 @@ import { createCollectionExpectSuccess, setCollectionSponsorExpectSuccess, destroyCollectionExpectSuccess, setCollectionSponsorExpectFailure } from "./util/helpers"; import { Keyring } from "@polkadot/api"; import { IKeyringPair } from "@polkadot/types/types"; -import type { AccountId } from '@polkadot/types/interfaces'; chai.use(chaiAsPromised); const expect = chai.expect; @@ -34,7 +33,7 @@ await setCollectionSponsorExpectSuccess(collectionId, bob.address); }); it('Set ReFungible collection sponsor', async () => { - const collectionId = await createCollectionExpectSuccess({ mode: {type: 'ReFungible', decimalPoints: 0} }); + const collectionId = await createCollectionExpectSuccess({ mode: {type: 'ReFungible'} }); await setCollectionSponsorExpectSuccess(collectionId, bob.address); }); --- a/tests/src/setConstOnChainSchema.test.ts +++ b/tests/src/setConstOnChainSchema.test.ts @@ -1,3 +1,8 @@ +// +// This file is subject to the terms and conditions defined in +// file 'LICENSE', which is part of this source code package. +// + import { Keyring } from '@polkadot/api'; import { IKeyringPair } from '@polkadot/types/types'; import chai from 'chai'; --- a/tests/src/setContractSponsoringRateLimit.test.ts +++ b/tests/src/setContractSponsoringRateLimit.test.ts @@ -1,3 +1,8 @@ +// +// This file is subject to the terms and conditions defined in +// file 'LICENSE', which is part of this source code package. +// + import { IKeyringPair } from '@polkadot/types/types'; import privateKey from './substrate/privateKey'; import usingApi from './substrate/substrate-api'; --- a/tests/src/setMintPermission.test.ts +++ b/tests/src/setMintPermission.test.ts @@ -1,3 +1,8 @@ +// +// This file is subject to the terms and conditions defined in +// file 'LICENSE', which is part of this source code package. +// + import { IKeyringPair } from '@polkadot/types/types'; import privateKey from './substrate/privateKey'; import usingApi from './substrate/substrate-api'; --- a/tests/src/setPublicAccessMode.test.ts +++ b/tests/src/setPublicAccessMode.test.ts @@ -1,3 +1,8 @@ +// +// This file is subject to the terms and conditions defined in +// file 'LICENSE', which is part of this source code package. +// + // https://unique-network.readthedocs.io/en/latest/jsapi.html#setschemaversion import { ApiPromise, Keyring } from '@polkadot/api'; import { IKeyringPair } from '@polkadot/types/types'; --- a/tests/src/setSchemaVersion.test.ts +++ b/tests/src/setSchemaVersion.test.ts @@ -1,7 +1,11 @@ +// +// This file is subject to the terms and conditions defined in +// file 'LICENSE', which is part of this source code package. +// + // https://unique-network.readthedocs.io/en/latest/jsapi.html#setschemaversion import { ApiPromise, Keyring } from '@polkadot/api'; import { IKeyringPair } from '@polkadot/types/types'; -import BN from 'bn.js'; import chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; import usingApi, {submitTransactionAsync, submitTransactionExpectFailAsync} from './substrate/substrate-api'; --- a/tests/src/setVariableMetaData.test.ts +++ b/tests/src/setVariableMetaData.test.ts @@ -1,3 +1,8 @@ +// +// This file is subject to the terms and conditions defined in +// file 'LICENSE', which is part of this source code package. +// + import { IKeyringPair } from '@polkadot/types/types'; import chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; --- a/tests/src/setVariableOnChainSchema.test.ts +++ b/tests/src/setVariableOnChainSchema.test.ts @@ -1,3 +1,8 @@ +// +// This file is subject to the terms and conditions defined in +// file 'LICENSE', which is part of this source code package. +// + import { Keyring } from '@polkadot/api'; import { IKeyringPair } from '@polkadot/types/types'; import chai from 'chai'; --- a/tests/src/toggleContractWhiteList.test.ts +++ b/tests/src/toggleContractWhiteList.test.ts @@ -1,3 +1,8 @@ +// +// 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 usingApi, { submitTransactionAsync, submitTransactionExpectFailAsync } from "./substrate/substrate-api"; --- a/tests/src/transfer.test.ts +++ b/tests/src/transfer.test.ts @@ -63,7 +63,7 @@ }); }); - it('Create collection, balance transfers and check balance', async () => { + it('User can transfer owned token', async () => { await usingApi(async (api) => { const Alice = privateKey('//Alice'); const Bob = privateKey('//Bob'); @@ -77,10 +77,10 @@ await transferExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 1, 'Fungible'); // reFungible const reFungibleCollectionId = await - createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}}); + createCollectionExpectSuccess({mode: {type: 'ReFungible'}}); const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible'); await transferExpectSuccess(reFungibleCollectionId, - newReFungibleTokenId, Alice, Bob, 1, 'ReFungible'); + newReFungibleTokenId, Alice, Bob, 100, 'ReFungible'); }); }); }); @@ -119,7 +119,7 @@ await transferExpectFail(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 1, 'Fungible'); // reFungible const reFungibleCollectionId = await - createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}}); + createCollectionExpectSuccess({mode: {type: 'ReFungible'}}); const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible'); await destroyCollectionExpectSuccess(reFungibleCollectionId); await transferExpectFail(reFungibleCollectionId, @@ -134,7 +134,7 @@ await transferExpectFail(fungibleCollectionId, 2, Alice, Bob, 1, 'Fungible'); // reFungible const reFungibleCollectionId = await - createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}}); + createCollectionExpectSuccess({mode: {type: 'ReFungible'}}); await transferExpectFail(reFungibleCollectionId, 2, Alice, Bob, 1, 'ReFungible'); }); @@ -151,7 +151,7 @@ await transferExpectFail(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 1, 'Fungible'); // reFungible const reFungibleCollectionId = await - createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}}); + createCollectionExpectSuccess({mode: {type: 'ReFungible'}}); const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible'); await burnItemExpectSuccess(Alice, reFungibleCollectionId, newReFungibleTokenId, 1); await transferExpectFail(reFungibleCollectionId, @@ -168,7 +168,7 @@ await transferExpectFail(fungibleCollectionId, newFungibleTokenId, Charlie, Bob, 1, 'Fungible'); // reFungible const reFungibleCollectionId = await - createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}}); + createCollectionExpectSuccess({mode: {type: 'ReFungible'}}); const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible'); await transferExpectFail(reFungibleCollectionId, newReFungibleTokenId, Charlie, Bob, 1, 'ReFungible'); --- a/tests/src/transferFrom.test.ts +++ b/tests/src/transferFrom.test.ts @@ -15,6 +15,7 @@ destroyCollectionExpectSuccess, transferFromExpectFail, transferFromExpectSuccess, + burnItemExpectSuccess, } from './util/helpers'; chai.use(chaiAsPromised); @@ -25,7 +26,7 @@ await usingApi(async (api: ApiPromise) => { const Alice = privateKey('//Alice'); const Bob = privateKey('//Bob'); - const Charlie = privateKey('//CHARLIE'); + const Charlie = privateKey('//Charlie'); // nft const nftCollectionId = await createCollectionExpectSuccess(); const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT'); @@ -40,11 +41,11 @@ await transferFromExpectSuccess(fungibleCollectionId, newFungibleTokenId, Bob, Alice, Charlie, 1, 'Fungible'); // reFungible const reFungibleCollectionId = await - createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}}); + createCollectionExpectSuccess({mode: {type: 'ReFungible'}}); const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible'); - await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob); + await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob, 100); await transferFromExpectSuccess(reFungibleCollectionId, - newReFungibleTokenId, Bob, Alice, Charlie, 1, 'ReFungible'); + newReFungibleTokenId, Bob, Alice, Charlie, 100, 'ReFungible'); }); }); }); @@ -54,7 +55,7 @@ await usingApi(async (api: ApiPromise) => { const Alice = privateKey('//Alice'); const Bob = privateKey('//Bob'); - const Charlie = privateKey('//CHARLIE'); + const Charlie = privateKey('//Charlie'); // nft const nftCollectionCount = await api.query.nft.createdCollectionCount() as unknown as number; await approveExpectFail(nftCollectionCount + 1, 1, Alice, Bob); @@ -96,7 +97,7 @@ await usingApi(async (api: ApiPromise) => { const Alice = privateKey('//Alice'); const Bob = privateKey('//Bob'); - const Charlie = privateKey('//CHARLIE'); + const Charlie = privateKey('//Charlie'); // nft const nftCollectionId = await createCollectionExpectSuccess(); const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT'); @@ -109,7 +110,7 @@ await transferFromExpectFail(fungibleCollectionId, newFungibleTokenId, Bob, Alice, Charlie, 1); // reFungible const reFungibleCollectionId = await - createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}}); + createCollectionExpectSuccess({mode: {type: 'ReFungible'}}); const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible'); await transferFromExpectFail(reFungibleCollectionId, newReFungibleTokenId, Bob, Alice, Charlie, 1); @@ -120,7 +121,7 @@ await usingApi(async (api: ApiPromise) => { const Alice = privateKey('//Alice'); const Bob = privateKey('//Bob'); - const Charlie = privateKey('//CHARLIE'); + const Charlie = privateKey('//Charlie'); // nft const nftCollectionId = await createCollectionExpectSuccess(); const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT'); @@ -135,7 +136,7 @@ await transferFromExpectFail(fungibleCollectionId, newFungibleTokenId, Bob, Alice, Charlie, 2); // reFungible const reFungibleCollectionId = await - createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}}); + createCollectionExpectSuccess({mode: {type: 'ReFungible'}}); const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible'); await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob); await transferFromExpectFail(reFungibleCollectionId, @@ -147,8 +148,8 @@ await usingApi(async (api: ApiPromise) => { const Alice = privateKey('//Alice'); const Bob = privateKey('//Bob'); - const Charlie = privateKey('//CHARLIE'); - const Dave = privateKey('//DAVE'); + const Charlie = privateKey('//Charlie'); + const Dave = privateKey('//Dave'); // nft const nftCollectionId = await createCollectionExpectSuccess(); const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT'); @@ -174,7 +175,7 @@ } // reFungible const reFungibleCollectionId = await - createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}}); + createCollectionExpectSuccess({mode: {type: 'ReFungible'}}); const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible'); try { await approveExpectFail(reFungibleCollectionId, newReFungibleTokenId, Dave, Bob); @@ -185,4 +186,83 @@ } }); }); + it( 'transferFrom burnt token before approve NFT', async () => { + await usingApi(async (api: ApiPromise) => { + const Alice = privateKey('//Alice'); + const Bob = privateKey('//Bob'); + const Charlie = privateKey('//Charlie'); + // nft + const nftCollectionId = await createCollectionExpectSuccess(); + const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT'); + await burnItemExpectSuccess(Alice, nftCollectionId, newNftTokenId, 1); + await approveExpectFail(nftCollectionId, newNftTokenId, Alice, Bob); + await transferFromExpectFail(nftCollectionId, newNftTokenId, Bob, Alice, Charlie, 1); + }); + }); + it( 'transferFrom burnt token before approve Fungible', async () => { + await usingApi(async (api: ApiPromise) => { + const Alice = privateKey('//Alice'); + const Bob = privateKey('//Bob'); + const Charlie = privateKey('//Charlie'); + const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}}); + const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible'); + await burnItemExpectSuccess(Alice, fungibleCollectionId, 1, 10); + await approveExpectFail(fungibleCollectionId, newFungibleTokenId, Alice, Bob); + await transferFromExpectFail(fungibleCollectionId, newFungibleTokenId, Bob, Alice, Charlie, 1); + + }); + }); + it( 'transferFrom burnt token before approve ReFungible', async () => { + await usingApi(async (api: ApiPromise) => { + const Alice = privateKey('//Alice'); + const Bob = privateKey('//Bob'); + const Charlie = privateKey('//Charlie'); + const reFungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}}); + const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible'); + await burnItemExpectSuccess(Alice, reFungibleCollectionId, newReFungibleTokenId, 1); + await approveExpectFail(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob); + await transferFromExpectFail(reFungibleCollectionId, newReFungibleTokenId, Bob, Alice, Charlie, 1); + + }); + }); + + it( 'transferFrom burnt token after approve NFT', async () => { + await usingApi(async (api: ApiPromise) => { + const Alice = privateKey('//Alice'); + const Bob = privateKey('//Bob'); + const Charlie = privateKey('//Charlie'); + // nft + const nftCollectionId = await createCollectionExpectSuccess(); + const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT'); + await approveExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob); + await burnItemExpectSuccess(Alice, nftCollectionId, newNftTokenId, 1); + await transferFromExpectFail(nftCollectionId, newNftTokenId, Bob, Alice, Charlie, 1); + }); + }); + it( 'transferFrom burnt token after approve Fungible', async () => { + await usingApi(async (api: ApiPromise) => { + const Alice = privateKey('//Alice'); + const Bob = privateKey('//Bob'); + const Charlie = privateKey('//Charlie'); + const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}}); + const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible'); + await approveExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob); + await burnItemExpectSuccess(Alice, fungibleCollectionId, 1, 10); + await transferFromExpectFail(fungibleCollectionId, newFungibleTokenId, Bob, Alice, Charlie, 1); + + }); + }); + it( 'transferFrom burnt token after approve ReFungible', async () => { + await usingApi(async (api: ApiPromise) => { + const Alice = privateKey('//Alice'); + const Bob = privateKey('//Bob'); + const Charlie = privateKey('//Charlie'); + const reFungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}}); + const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible'); + await approveExpectSuccess(reFungibleCollectionId, newReFungibleTokenId, Alice, Bob); + await burnItemExpectSuccess(Alice, reFungibleCollectionId, newReFungibleTokenId, 1); + await transferFromExpectFail(reFungibleCollectionId, newReFungibleTokenId, Bob, Alice, Charlie, 1); + + }); + }); }); --- a/tests/src/types.ts +++ b/tests/src/types.ts @@ -1,3 +1,8 @@ +// +// This file is subject to the terms and conditions defined in +// file 'LICENSE', which is part of this source code package. +// + import BN from 'bn.js'; export interface ICollectionInterface { --- a/tests/src/util/helpers.ts +++ b/tests/src/util/helpers.ts @@ -126,23 +126,8 @@ interface ReFungible { type: 'ReFungible'; - decimalPoints: number; -} - -interface Nft { - type: 'NFT' -} - -interface Fungible { - type: 'Fungible', - decimalPoints: number } -interface ReFungible { - type: 'ReFungible', - decimalPoints: number -} - type CollectionMode = Nft | Fungible | ReFungible | Invalid; export type CreateCollectionParams = { @@ -176,7 +161,7 @@ } else if (mode.type === 'Fungible') { modeprm = {fungible: mode.decimalPoints}; } else if (mode.type === 'ReFungible') { - modeprm = {refungible: mode.decimalPoints}; + modeprm = {refungible: null}; } else if (mode.type === 'Invalid') { modeprm = {invalid: null}; } @@ -218,7 +203,7 @@ } else if (mode.type === 'Fungible') { modeprm = {fungible: mode.decimalPoints}; } else if (mode.type === 'ReFungible') { - modeprm = {refungible: mode.decimalPoints}; + modeprm = {refungible: null}; } else if (mode.type === 'Invalid') { modeprm = {invalid: null}; } @@ -383,6 +368,7 @@ }); } + export async function confirmSponsorshipExpectFailure(collectionId: number, senderSeed: string = '//Alice') { await usingApi(async (api) => { @@ -433,6 +419,54 @@ }); } +export async function toggleContractWhitelistExpectSuccess(sender: IKeyringPair, contractAddress: AccountId | string, enabled: boolean) { + await usingApi(async (api) => { + const tx = api.tx.nft.toggleContractWhiteList(contractAddress, true); + const events = await submitTransactionAsync(sender, tx); + const result = getGenericResult(events); + + expect(result.success).to.be.true; + }); +} + +export async function isWhitelistedInContract(contractAddress: AccountId | string, user: string) { + let whitelisted: boolean = false; + await usingApi(async (api) => { + whitelisted = (await api.query.nft.contractWhiteList(contractAddress, user)).toJSON() as boolean; + }); + return whitelisted; +} + +export async function addToContractWhiteListExpectSuccess(sender: IKeyringPair, contractAddress: AccountId | string, user: string) { + await usingApi(async (api) => { + const tx = api.tx.nft.addToContractWhiteList(contractAddress, user); + const events = await submitTransactionAsync(sender, tx); + const result = getGenericResult(events); + + expect(result.success).to.be.true; + }); +} + +export async function removeFromContractWhiteListExpectSuccess(sender: IKeyringPair, contractAddress: AccountId | string, user: string) { + await usingApi(async (api) => { + const tx = api.tx.nft.removeFromContractWhiteList(contractAddress, user); + const events = await submitTransactionAsync(sender, tx); + const result = getGenericResult(events); + + expect(result.success).to.be.true; + }); +} + +export async function removeFromContractWhiteListExpectFailure(sender: IKeyringPair, contractAddress: AccountId | string, user: string) { + await usingApi(async (api) => { + const tx = api.tx.nft.removeFromContractWhiteList(contractAddress, user); + const events = await expect(submitTransactionExpectFailAsync(sender, tx)).to.be.rejected; + const result = getGenericResult(events); + + expect(result.success).to.be.false; + }); +} + export async function setVariableMetaDataExpectSuccess(sender: IKeyringPair, collectionId: number, itemId: number, data: number[]) { await usingApi(async (api) => { const tx = api.tx.nft.setVariableMetaData(collectionId, itemId, '0x' + Buffer.from(data).toString('hex')); @@ -483,7 +517,7 @@ export async function approveExpectSuccess(collectionId: number, - tokenId: number, owner: IKeyringPair, approved: IKeyringPair, amount: number | bigint = 1) { + tokenId: number, owner: IKeyringPair, approved: IKeyringPair, amount: number | bigint = 1) { //alice,bob await usingApi(async (api: ApiPromise) => { const allowanceBefore = await api.query.nft.allowances(collectionId, [tokenId, owner.address, approved.address]) as unknown as BN; @@ -501,9 +535,9 @@ export async function transferFromExpectSuccess(collectionId: number, tokenId: number, - accountApproved: IKeyringPair, - accountFrom: IKeyringPair, - accountTo: IKeyringPair, + accountApproved: IKeyringPair, //bob + accountFrom: IKeyringPair, //alice + accountTo: IKeyringPair, //charlie value: number | bigint = 1, type: string = 'NFT') { await usingApi(async (api: ApiPromise) => { @@ -658,6 +692,9 @@ if (createMode === 'Fungible') { const createData = {fungible: {value: 10}}; tx = api.tx.nft.createItem(collectionId, owner, createData); + } else if (createMode === 'ReFungible') { + const createData = {refungible: {const_data: [], variable_data: [], pieces: 100}}; + tx = api.tx.nft.createItem(collectionId, owner, createData); } else { tx = api.tx.nft.createItem(collectionId, owner, createMode); }