git.delta.rocks / unique-network / refs/commits / 5e168aa12a6c

difftreelog

Updated to rc4

str-mv2020-07-22parent: #21c779f.patch.diff
in: master

7 files changed

modifiedCargo.lockdiffbeforeafterboth
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -854,17 +854,6 @@
 [[package]]
 name = "ed25519-dalek"
 version = "1.0.0-pre.3"
-source = "git+https://github.com/usetech-llc/ed25519-dalek?tag=1.0.0-pre.3#29a06e494ddd4f370256596b7103125295073435"
-dependencies = [
- "clear_on_drop",
- "curve25519-dalek",
- "rand 0.7.3",
- "sha2 0.8.2",
-]
-
-[[package]]
-name = "ed25519-dalek"
-version = "1.0.0-pre.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "978710b352437433c97b2bff193f2fb1dfd58a093f863dd95e225a19baa599a2"
 dependencies = [
@@ -1019,16 +1008,16 @@
 
 [[package]]
 name = "fork-tree"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "parity-scale-codec",
 ]
 
 [[package]]
 name = "frame-benchmarking"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -1044,8 +1033,8 @@
 
 [[package]]
 name = "frame-executive"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -1059,8 +1048,8 @@
 
 [[package]]
 name = "frame-metadata"
-version = "11.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "11.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "parity-scale-codec",
  "serde",
@@ -1070,8 +1059,8 @@
 
 [[package]]
 name = "frame-support"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "bitmask",
  "frame-metadata",
@@ -1095,8 +1084,8 @@
 
 [[package]]
 name = "frame-support-procedural"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "frame-support-procedural-tools",
  "proc-macro2",
@@ -1106,8 +1095,8 @@
 
 [[package]]
 name = "frame-support-procedural-tools"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "frame-support-procedural-tools-derive",
  "proc-macro-crate",
@@ -1118,8 +1107,8 @@
 
 [[package]]
 name = "frame-support-procedural-tools-derive"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "proc-macro2",
  "quote 1.0.7",
@@ -1128,8 +1117,8 @@
 
 [[package]]
 name = "frame-system"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "frame-support",
  "impl-trait-for-tuples",
@@ -1843,6 +1832,15 @@
 ]
 
 [[package]]
+name = "itertools"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b"
+dependencies = [
+ "either",
+]
+
+[[package]]
 name = "itoa"
 version = "0.4.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1932,6 +1930,20 @@
 ]
 
 [[package]]
+name = "jsonrpc-ipc-server"
+version = "14.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dedccd693325d833963b549e959137f30a7a0ea650cde92feda81dc0c1393cb5"
+dependencies = [
+ "jsonrpc-core",
+ "jsonrpc-server-utils",
+ "log",
+ "parity-tokio-ipc",
+ "parking_lot 0.10.2",
+ "tokio-service",
+]
+
+[[package]]
 name = "jsonrpc-pubsub"
 version = "14.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2129,7 +2141,7 @@
 dependencies = [
  "asn1_der",
  "bs58",
- "ed25519-dalek 1.0.0-pre.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "ed25519-dalek",
  "either",
  "fnv",
  "futures 0.3.5",
@@ -2513,9 +2525,9 @@
 
 [[package]]
 name = "memory-db"
-version = "0.20.1"
+version = "0.21.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be512cb2ccb4ecbdca937fdd4a62ea5f09f8e7195466a85e4632b3d5bcce82e6"
+checksum = "fb2999ff7a65d5a1d72172f6d51fa2ea03024b51aee709ba5ff81c3c629a2410"
 dependencies = [
  "ahash",
  "hash-db",
@@ -2563,7 +2575,7 @@
  "kernel32-sys",
  "libc",
  "log",
- "miow",
+ "miow 0.2.1",
  "net2",
  "slab",
  "winapi 0.2.8",
@@ -2582,6 +2594,18 @@
 ]
 
 [[package]]
+name = "mio-named-pipes"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0840c1c50fd55e521b247f949c241c9997709f23bd7f023b9762cd561e935656"
+dependencies = [
+ "log",
+ "mio",
+ "miow 0.3.5",
+ "winapi 0.3.9",
+]
+
+[[package]]
 name = "mio-uds"
 version = "0.6.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2605,6 +2629,16 @@
 ]
 
 [[package]]
+name = "miow"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07b88fb9795d4d36d62a012dfbf49a8f5cf12751f36d31a9dbe66d528e58979e"
+dependencies = [
+ "socket2",
+ "winapi 0.3.9",
+]
+
+[[package]]
 name = "multihash"
 version = "0.11.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2692,7 +2726,7 @@
 
 [[package]]
 name = "nft"
-version = "2.0.0-rc3"
+version = "2.0.0-rc4"
 dependencies = [
  "futures 0.3.5",
  "jsonrpc-core",
@@ -2724,7 +2758,7 @@
 
 [[package]]
 name = "nft-runtime"
-version = "2.0.0-rc3"
+version = "2.0.0-rc4"
 dependencies = [
  "frame-executive",
  "frame-support",
@@ -2917,8 +2951,8 @@
 
 [[package]]
 name = "pallet-aura"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -2936,8 +2970,8 @@
 
 [[package]]
 name = "pallet-balances"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -2950,13 +2984,12 @@
 
 [[package]]
 name = "pallet-contracts"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "frame-support",
  "frame-system",
  "pallet-contracts-primitives",
- "pallet-transaction-payment",
  "parity-scale-codec",
  "parity-wasm",
  "pwasm-utils",
@@ -2971,8 +3004,8 @@
 
 [[package]]
 name = "pallet-contracts-primitives"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "parity-scale-codec",
  "sp-runtime",
@@ -2981,8 +3014,8 @@
 
 [[package]]
 name = "pallet-contracts-rpc"
-version = "0.8.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "0.8.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "jsonrpc-core",
  "jsonrpc-core-client",
@@ -3000,8 +3033,8 @@
 
 [[package]]
 name = "pallet-contracts-rpc-runtime-api"
-version = "0.8.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "0.8.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "pallet-contracts-primitives",
  "parity-scale-codec",
@@ -3012,8 +3045,8 @@
 
 [[package]]
 name = "pallet-finality-tracker"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -3028,8 +3061,8 @@
 
 [[package]]
 name = "pallet-grandpa"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -3048,7 +3081,7 @@
 
 [[package]]
 name = "pallet-nft"
-version = "2.0.0-rc3"
+version = "2.0.0-rc4"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -3060,8 +3093,8 @@
 
 [[package]]
 name = "pallet-randomness-collective-flip"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -3073,8 +3106,8 @@
 
 [[package]]
 name = "pallet-session"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -3082,6 +3115,8 @@
  "pallet-timestamp",
  "parity-scale-codec",
  "serde",
+ "sp-core",
+ "sp-io",
  "sp-runtime",
  "sp-session",
  "sp-staking",
@@ -3091,8 +3126,8 @@
 
 [[package]]
 name = "pallet-sudo"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -3105,8 +3140,8 @@
 
 [[package]]
 name = "pallet-timestamp"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -3122,13 +3157,14 @@
 
 [[package]]
 name = "pallet-transaction-payment"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "frame-support",
  "frame-system",
  "pallet-transaction-payment-rpc-runtime-api",
  "parity-scale-codec",
+ "serde",
  "smallvec 1.4.1",
  "sp-runtime",
  "sp-std",
@@ -3136,8 +3172,8 @@
 
 [[package]]
 name = "pallet-transaction-payment-rpc-runtime-api"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "frame-support",
  "parity-scale-codec",
@@ -3244,6 +3280,25 @@
 checksum = "aa9777aa91b8ad9dd5aaa04a9b6bcb02c7f1deb952fca5a66034d5e63afc5c6f"
 
 [[package]]
+name = "parity-tokio-ipc"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e57fea504fea33f9fbb5f49f378359030e7e026a6ab849bb9e8f0787376f1bf"
+dependencies = [
+ "bytes 0.4.12",
+ "futures 0.1.29",
+ "libc",
+ "log",
+ "mio-named-pipes",
+ "miow 0.3.5",
+ "rand 0.7.3",
+ "tokio 0.1.22",
+ "tokio-named-pipes",
+ "tokio-uds",
+ "winapi 0.3.9",
+]
+
+[[package]]
 name = "parity-util-mem"
 version = "0.6.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3566,7 +3621,7 @@
 dependencies = [
  "bytes 0.5.6",
  "heck",
- "itertools",
+ "itertools 0.8.2",
  "log",
  "multimap",
  "petgraph",
@@ -3583,7 +3638,7 @@
 checksum = "537aa19b95acde10a12fec4301466386f757403de4cd4e5b4fa78fb5ecb18f72"
 dependencies = [
  "anyhow",
- "itertools",
+ "itertools 0.8.2",
  "proc-macro2",
  "quote 1.0.7",
  "syn 1.0.34",
@@ -3952,6 +4007,27 @@
 ]
 
 [[package]]
+name = "rental"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8545debe98b2b139fb04cad8618b530e9b07c152d99a5de83c860b877d67847f"
+dependencies = [
+ "rental-impl",
+ "stable_deref_trait",
+]
+
+[[package]]
+name = "rental-impl"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "475e68978dc5b743f2f40d8e0a8fdc83f1c5e78cbf4b8fa5e74e73beebc340de"
+dependencies = [
+ "proc-macro2",
+ "quote 1.0.7",
+ "syn 1.0.34",
+]
+
+[[package]]
 name = "ring"
 version = "0.16.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -4084,8 +4160,8 @@
 
 [[package]]
 name = "sc-basic-authorship"
-version = "0.8.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "0.8.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "futures 0.3.5",
  "futures-timer 3.0.2",
@@ -4108,8 +4184,8 @@
 
 [[package]]
 name = "sc-block-builder"
-version = "0.8.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "0.8.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "parity-scale-codec",
  "sc-client-api",
@@ -4124,8 +4200,8 @@
 
 [[package]]
 name = "sc-chain-spec"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "impl-trait-for-tuples",
  "sc-chain-spec-derive",
@@ -4140,8 +4216,8 @@
 
 [[package]]
 name = "sc-chain-spec-derive"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "proc-macro-crate",
  "proc-macro2",
@@ -4151,14 +4227,13 @@
 
 [[package]]
 name = "sc-cli"
-version = "0.8.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "0.8.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "ansi_term 0.12.1",
  "atty",
  "chrono",
  "derive_more",
- "directories",
  "env_logger",
  "fdlimit",
  "futures 0.3.5",
@@ -4192,8 +4267,8 @@
 
 [[package]]
 name = "sc-client-api"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "derive_more",
  "fnv",
@@ -4228,8 +4303,8 @@
 
 [[package]]
 name = "sc-client-db"
-version = "0.8.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "0.8.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "blake2-rfc",
  "hash-db",
@@ -4257,8 +4332,8 @@
 
 [[package]]
 name = "sc-consensus"
-version = "0.8.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "0.8.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "sc-client-api",
  "sp-blockchain",
@@ -4268,8 +4343,8 @@
 
 [[package]]
 name = "sc-consensus-aura"
-version = "0.8.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "0.8.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "derive_more",
  "futures 0.3.5",
@@ -4299,8 +4374,8 @@
 
 [[package]]
 name = "sc-consensus-slots"
-version = "0.8.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "0.8.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "futures 0.3.5",
  "futures-timer 3.0.2",
@@ -4321,8 +4396,8 @@
 
 [[package]]
 name = "sc-executor"
-version = "0.8.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "0.8.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "derive_more",
  "lazy_static",
@@ -4348,8 +4423,8 @@
 
 [[package]]
 name = "sc-executor-common"
-version = "0.8.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "0.8.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "derive_more",
  "log",
@@ -4365,8 +4440,8 @@
 
 [[package]]
 name = "sc-executor-wasmi"
-version = "0.8.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "0.8.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "log",
  "parity-scale-codec",
@@ -4380,8 +4455,8 @@
 
 [[package]]
 name = "sc-finality-grandpa"
-version = "0.8.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "0.8.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "assert_matches",
  "derive_more",
@@ -4403,6 +4478,7 @@
  "sc-telemetry",
  "serde_json",
  "sp-api",
+ "sp-application-crypto",
  "sp-arithmetic",
  "sp-blockchain",
  "sp-consensus",
@@ -4417,28 +4493,31 @@
 
 [[package]]
 name = "sc-informant"
-version = "0.8.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "0.8.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "ansi_term 0.12.1",
  "futures 0.3.5",
  "log",
  "parity-util-mem",
+ "parking_lot 0.10.2",
  "sc-client-api",
  "sc-network",
- "sc-service",
  "sp-blockchain",
  "sp-runtime",
+ "sp-transaction-pool",
+ "sp-utils",
  "wasm-timer",
 ]
 
 [[package]]
 name = "sc-keystore"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "derive_more",
  "hex",
+ "merlin",
  "parking_lot 0.10.2",
  "rand 0.7.3",
  "serde_json",
@@ -4448,9 +4527,28 @@
 ]
 
 [[package]]
+name = "sc-light"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
+dependencies = [
+ "hash-db",
+ "lazy_static",
+ "parity-scale-codec",
+ "parking_lot 0.10.2",
+ "sc-client-api",
+ "sc-executor",
+ "sp-api",
+ "sp-blockchain",
+ "sp-core",
+ "sp-externalities",
+ "sp-runtime",
+ "sp-state-machine",
+]
+
+[[package]]
 name = "sc-network"
-version = "0.8.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "0.8.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "bitflags",
  "bs58",
@@ -4501,8 +4599,8 @@
 
 [[package]]
 name = "sc-network-gossip"
-version = "0.8.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "0.8.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "futures 0.3.5",
  "futures-timer 3.0.2",
@@ -4516,8 +4614,8 @@
 
 [[package]]
 name = "sc-offchain"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "bytes 0.5.6",
  "fnv",
@@ -4543,8 +4641,8 @@
 
 [[package]]
 name = "sc-peerset"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "futures 0.3.5",
  "libp2p",
@@ -4556,8 +4654,8 @@
 
 [[package]]
 name = "sc-proposer-metrics"
-version = "0.8.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "0.8.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "log",
  "substrate-prometheus-endpoint",
@@ -4565,8 +4663,8 @@
 
 [[package]]
 name = "sc-rpc"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "futures 0.3.5",
  "hash-db",
@@ -4597,8 +4695,8 @@
 
 [[package]]
 name = "sc-rpc-api"
-version = "0.8.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "0.8.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "derive_more",
  "futures 0.3.5",
@@ -4621,11 +4719,12 @@
 
 [[package]]
 name = "sc-rpc-server"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "jsonrpc-core",
  "jsonrpc-http-server",
+ "jsonrpc-ipc-server",
  "jsonrpc-pubsub",
  "jsonrpc-ws-server",
  "log",
@@ -4636,10 +4735,11 @@
 
 [[package]]
 name = "sc-service"
-version = "0.8.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "0.8.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "derive_more",
+ "directories",
  "exit-future",
  "futures 0.1.29",
  "futures 0.3.5",
@@ -4661,7 +4761,9 @@
  "sc-client-api",
  "sc-client-db",
  "sc-executor",
+ "sc-informant",
  "sc-keystore",
+ "sc-light",
  "sc-network",
  "sc-offchain",
  "sc-rpc",
@@ -4689,14 +4791,15 @@
  "sp-version",
  "substrate-prometheus-endpoint",
  "sysinfo",
+ "tempfile",
  "tracing",
  "wasm-timer",
 ]
 
 [[package]]
 name = "sc-state-db"
-version = "0.8.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "0.8.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "log",
  "parity-scale-codec",
@@ -4709,8 +4812,8 @@
 
 [[package]]
 name = "sc-telemetry"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "bytes 0.5.6",
  "futures 0.3.5",
@@ -4731,23 +4834,25 @@
 
 [[package]]
 name = "sc-tracing"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "erased-serde",
  "log",
  "parking_lot 0.10.2",
+ "rustc-hash",
  "sc-telemetry",
  "serde",
  "serde_json",
  "slog",
+ "sp-tracing",
  "tracing-core",
 ]
 
 [[package]]
 name = "sc-transaction-graph"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "derive_more",
  "futures 0.3.5",
@@ -4766,8 +4871,8 @@
 
 [[package]]
 name = "sc-transaction-pool"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "derive_more",
  "futures 0.3.5",
@@ -5098,8 +5203,8 @@
 
 [[package]]
 name = "sp-allocator"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "derive_more",
  "log",
@@ -5110,8 +5215,8 @@
 
 [[package]]
 name = "sp-api"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "hash-db",
  "parity-scale-codec",
@@ -5125,8 +5230,8 @@
 
 [[package]]
 name = "sp-api-proc-macro"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "blake2-rfc",
  "proc-macro-crate",
@@ -5137,8 +5242,8 @@
 
 [[package]]
 name = "sp-application-crypto"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "parity-scale-codec",
  "serde",
@@ -5149,8 +5254,8 @@
 
 [[package]]
 name = "sp-arithmetic"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "integer-sqrt",
  "num-traits 0.2.12",
@@ -5162,8 +5267,8 @@
 
 [[package]]
 name = "sp-block-builder"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "parity-scale-codec",
  "sp-api",
@@ -5174,8 +5279,8 @@
 
 [[package]]
 name = "sp-blockchain"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "derive_more",
  "log",
@@ -5190,8 +5295,8 @@
 
 [[package]]
 name = "sp-chain-spec"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "serde",
  "serde_json",
@@ -5199,8 +5304,8 @@
 
 [[package]]
 name = "sp-consensus"
-version = "0.8.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "0.8.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "derive_more",
  "futures 0.3.5",
@@ -5218,12 +5323,13 @@
  "sp-utils",
  "sp-version",
  "substrate-prometheus-endpoint",
+ "wasm-timer",
 ]
 
 [[package]]
 name = "sp-consensus-aura"
-version = "0.8.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "0.8.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "parity-scale-codec",
  "sp-api",
@@ -5236,14 +5342,14 @@
 
 [[package]]
 name = "sp-core"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "base58",
  "blake2-rfc",
  "byteorder",
  "derive_more",
- "ed25519-dalek 1.0.0-pre.3 (git+https://github.com/usetech-llc/ed25519-dalek?tag=1.0.0-pre.3)",
+ "ed25519-dalek",
  "futures 0.3.5",
  "hash-db",
  "hash256-std-hasher",
@@ -5278,8 +5384,8 @@
 
 [[package]]
 name = "sp-database"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "kvdb",
  "parking_lot 0.10.2",
@@ -5287,8 +5393,8 @@
 
 [[package]]
 name = "sp-debug-derive"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "proc-macro2",
  "quote 1.0.7",
@@ -5297,8 +5403,8 @@
 
 [[package]]
 name = "sp-externalities"
-version = "0.8.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "0.8.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "environmental",
  "parity-scale-codec",
@@ -5308,8 +5414,8 @@
 
 [[package]]
 name = "sp-finality-grandpa"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "finality-grandpa",
  "log",
@@ -5324,8 +5430,8 @@
 
 [[package]]
 name = "sp-finality-tracker"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "parity-scale-codec",
  "sp-inherents",
@@ -5334,8 +5440,8 @@
 
 [[package]]
 name = "sp-inherents"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "derive_more",
  "parity-scale-codec",
@@ -5346,8 +5452,8 @@
 
 [[package]]
 name = "sp-io"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "futures 0.3.5",
  "hash-db",
@@ -5360,14 +5466,15 @@
  "sp-runtime-interface",
  "sp-state-machine",
  "sp-std",
+ "sp-tracing",
  "sp-trie",
  "sp-wasm-interface",
 ]
 
 [[package]]
 name = "sp-keyring"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "lazy_static",
  "sp-core",
@@ -5377,8 +5484,8 @@
 
 [[package]]
 name = "sp-offchain"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "sp-api",
  "sp-core",
@@ -5387,8 +5494,8 @@
 
 [[package]]
 name = "sp-panic-handler"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "backtrace",
  "log",
@@ -5396,8 +5503,8 @@
 
 [[package]]
 name = "sp-rpc"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "serde",
  "sp-core",
@@ -5405,9 +5512,10 @@
 
 [[package]]
 name = "sp-runtime"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
+ "either",
  "hash256-std-hasher",
  "impl-trait-for-tuples",
  "log",
@@ -5426,8 +5534,8 @@
 
 [[package]]
 name = "sp-runtime-interface"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "parity-scale-codec",
  "primitive-types",
@@ -5441,8 +5549,8 @@
 
 [[package]]
 name = "sp-runtime-interface-proc-macro"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "Inflector",
  "proc-macro-crate",
@@ -5453,8 +5561,8 @@
 
 [[package]]
 name = "sp-sandbox"
-version = "0.8.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "0.8.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "parity-scale-codec",
  "sp-core",
@@ -5466,8 +5574,8 @@
 
 [[package]]
 name = "sp-serializer"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "serde",
  "serde_json",
@@ -5475,8 +5583,8 @@
 
 [[package]]
 name = "sp-session"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "parity-scale-codec",
  "sp-api",
@@ -5488,8 +5596,8 @@
 
 [[package]]
 name = "sp-staking"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "parity-scale-codec",
  "sp-runtime",
@@ -5498,15 +5606,17 @@
 
 [[package]]
 name = "sp-state-machine"
-version = "0.8.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "0.8.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "hash-db",
+ "itertools 0.9.0",
  "log",
  "num-traits 0.2.12",
  "parity-scale-codec",
  "parking_lot 0.10.2",
  "rand 0.7.3",
+ "smallvec 1.4.1",
  "sp-core",
  "sp-externalities",
  "sp-panic-handler",
@@ -5517,13 +5627,13 @@
 
 [[package]]
 name = "sp-std"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 
 [[package]]
 name = "sp-storage"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "impl-serde 0.2.3",
  "ref-cast",
@@ -5534,8 +5644,8 @@
 
 [[package]]
 name = "sp-timestamp"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "impl-trait-for-tuples",
  "parity-scale-codec",
@@ -5548,16 +5658,18 @@
 
 [[package]]
 name = "sp-tracing"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
+ "log",
+ "rental",
  "tracing",
 ]
 
 [[package]]
 name = "sp-transaction-pool"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "derive_more",
  "futures 0.3.5",
@@ -5572,8 +5684,8 @@
 
 [[package]]
 name = "sp-trie"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "hash-db",
  "memory-db",
@@ -5586,19 +5698,20 @@
 
 [[package]]
 name = "sp-utils"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "futures 0.3.5",
  "futures-core",
+ "futures-timer 3.0.2",
  "lazy_static",
  "prometheus",
 ]
 
 [[package]]
 name = "sp-version"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "impl-serde 0.2.3",
  "parity-scale-codec",
@@ -5609,8 +5722,8 @@
 
 [[package]]
 name = "sp-wasm-interface"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "impl-trait-for-tuples",
  "parity-scale-codec",
@@ -5728,16 +5841,16 @@
 
 [[package]]
 name = "substrate-build-script-utils"
-version = "2.0.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "2.0.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "platforms",
 ]
 
 [[package]]
 name = "substrate-prometheus-endpoint"
-version = "0.8.0-rc3"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+version = "0.8.0-rc4"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 dependencies = [
  "async-std",
  "derive_more",
@@ -5751,7 +5864,7 @@
 [[package]]
 name = "substrate-wasm-builder-runner"
 version = "1.0.6"
-source = "git+https://github.com/usetech-llc/substrate.git?branch=nft_rc3#4945a9806adc58b5e8eef01697f5e77de43117f0"
+source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"
 
 [[package]]
 name = "subtle"
@@ -6073,6 +6186,19 @@
 ]
 
 [[package]]
+name = "tokio-named-pipes"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d282d483052288b2308ba5ee795f5673b159c9bdf63c385a05609da782a5eae"
+dependencies = [
+ "bytes 0.4.12",
+ "futures 0.1.29",
+ "mio",
+ "mio-named-pipes",
+ "tokio 0.1.22",
+]
+
+[[package]]
 name = "tokio-reactor"
 version = "0.1.12"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -6104,6 +6230,15 @@
 ]
 
 [[package]]
+name = "tokio-service"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24da22d077e0f15f55162bdbdc661228c1581892f52074fb242678d015b45162"
+dependencies = [
+ "futures 0.1.29",
+]
+
+[[package]]
 name = "tokio-sync"
 version = "0.1.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -6263,9 +6398,9 @@
 
 [[package]]
 name = "trie-db"
-version = "0.20.1"
+version = "0.21.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bcc309f34008563989045a4c4dbcc5770467f3a3785ee80a9b5cc0d83362475f"
+checksum = "cb230c24c741993b04cfccbabb45acff6f6480c5f00d3ed8794ea43db3a9d727"
 dependencies = [
  "hash-db",
  "hashbrown 0.6.3",
modifiednode/Cargo.tomldiffbeforeafterboth
--- a/node/Cargo.toml
+++ b/node/Cargo.toml
@@ -1,7 +1,7 @@
 [build-dependencies.substrate-build-script-utils]
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
 
 [[bin]]
 name = 'nft'
@@ -15,7 +15,7 @@
 license = 'Unlicense'
 name = 'nft'
 repository = 'https://github.com/substrate-developer-hub/nft/'
-version = '2.0.0-rc3'
+version = '2.0.0-rc4'
 
 [package.metadata.docs.rs]
 targets = ['x86_64-unknown-linux-gnu']
@@ -29,98 +29,98 @@
 
 [dependencies.nft-runtime]
 path = '../runtime'
-version = '2.0.0-rc3'
+version = '2.0.0-rc4'
 
 [dependencies.sc-basic-authorship]
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '0.8.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '0.8.0-rc4'
 
 [dependencies.sc-cli]
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '0.8.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '0.8.0-rc4'
 
 [dependencies.sc-client-api]
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
 
 [dependencies.sc-consensus]
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '0.8.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '0.8.0-rc4'
 
 [dependencies.pallet-contracts-rpc]
 git = 'https://github.com/usetech-llc/substrate.git'
-version = '0.8.0-rc3'
-branch = 'nft_rc3'
+version = '0.8.0-rc4'
+branch = 'rc4_ext_dispatch_reenabled'
 
 [dependencies.sc-rpc]
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
+branch = 'rc4_ext_dispatch_reenabled'
 
 [dependencies.sc-consensus-aura]
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '0.8.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '0.8.0-rc4'
 
 [dependencies.sc-executor]
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '0.8.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '0.8.0-rc4'
 
 [dependencies.sc-finality-grandpa]
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '0.8.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '0.8.0-rc4'
 
 [dependencies.sc-network]
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '0.8.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '0.8.0-rc4'
 
 [dependencies.sc-service]
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '0.8.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '0.8.0-rc4'
 
 [dependencies.sc-transaction-pool]
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
 
 [dependencies.sp-consensus]
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '0.8.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '0.8.0-rc4'
 
 [dependencies.sp-consensus-aura]
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '0.8.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '0.8.0-rc4'
 
 [dependencies.sp-core]
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
 
 [dependencies.sp-finality-grandpa]
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
 
 [dependencies.sp-inherents]
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
 
 [dependencies.sp-runtime]
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
 
 [dependencies.sp-transaction-pool]
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
modifiednode/src/service.rsdiffbeforeafterboth
--- a/node/src/service.rs
+++ b/node/src/service.rs
@@ -115,7 +115,7 @@
             let provider = client as Arc<dyn StorageAndProofProvider<_, _>>;
             Ok(Arc::new(GrandpaFinalityProofProvider::new(backend, provider)) as _)
         })?
-        .build()?;
+        .build_full()?;
 
     if role.is_authority() {
         let proposer = sc_basic_authorship::ProposerFactory::new(
@@ -147,13 +147,15 @@
 
         // the AURA authoring task is considered essential, i.e. if it
         // fails we take down the service with it.
-        service.spawn_essential_task("aura", aura);
+        service
+            .spawn_essential_task_handle()
+            .spawn_blocking("aura", aura);
     }
 
     // if the node isn't actively participating in consensus then it doesn't
     // need a keystore, regardless of which protocol we use below.
     let keystore = if role.is_authority() {
-        Some(service.keystore())
+        Some(service.keystore() as sp_core::traits::BareCryptoStorePtr)
     } else {
         None
     };
@@ -186,10 +188,10 @@
             prometheus_registry: service.prometheus_registry(),
             shared_voter_state: SharedVoterState::empty(),
         };
-
+        
         // the GRANDPA voter task is considered infallible, i.e.
         // if it fails we take down the service with it.
-        service.spawn_essential_task(
+        service.spawn_essential_task_handle().spawn_blocking(
             "grandpa-voter",
             sc_finality_grandpa::run_grandpa_voter(grandpa_config)?,
         );
@@ -268,5 +270,5 @@
             let provider = client as Arc<dyn StorageAndProofProvider<_, _>>;
             Ok(Arc::new(GrandpaFinalityProofProvider::new(backend, provider)) as _)
         })?
-        .build()
+        .build_light()
 }
modifiedpallets/nft/Cargo.tomldiffbeforeafterboth
--- a/pallets/nft/Cargo.toml
+++ b/pallets/nft/Cargo.toml
@@ -7,31 +7,31 @@
 [dependencies.frame-support]
 default-features = false
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
 
 [dependencies.frame-system]
 default-features = false
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
 [dev-dependencies.sp-core]
 default-features = false
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
 
 [dev-dependencies.sp-io]
 default-features = false
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
 
 [dependencies.sp-runtime]
 default-features = false
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
 
 [package]
 authors = ['Substrate DevHub <https://github.com/substrate-developer-hub>']
@@ -41,7 +41,7 @@
 license = 'Unlicense'
 name = 'pallet-nft'
 repository = 'https://github.com/substrate-developer-hub/nft/'
-version = '2.0.0-rc3'
+version = '2.0.0-rc4'
 [package.metadata.docs.rs]
 targets = ['x86_64-unknown-linux-gnu']
 
modifiedruntime/Cargo.tomldiffbeforeafterboth
--- a/runtime/Cargo.toml
+++ b/runtime/Cargo.toml
@@ -2,15 +2,15 @@
 default-features = false
 git = 'https://github.com/usetech-llc/substrate.git'
 package = 'pallet-aura'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
 
 [dependencies.balances]
 default-features = false
 git = 'https://github.com/usetech-llc/substrate.git'
 package = 'pallet-balances'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
 
 [dependencies.codec]
 default-features = false
@@ -22,48 +22,48 @@
 git = 'https://github.com/usetech-llc/substrate.git'
 default-features = false
 package = 'pallet-contracts'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
 
 [dependencies.contracts-primitives]
 git = 'https://github.com/usetech-llc/substrate.git'
 default-features = false
 package = 'pallet-contracts-primitives'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
 
 [dependencies.contracts-rpc-runtime-api]
 git = 'https://github.com/usetech-llc/substrate.git'
 default-features = false
 package = 'pallet-contracts-rpc-runtime-api'
-version = '0.8.0-rc3'
-branch = 'nft_rc3'
+version = '0.8.0-rc4'
+branch = 'rc4_ext_dispatch_reenabled'
 
 [dependencies.frame-executive]
 default-features = false
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
 
 [dependencies.frame-support]
 default-features = false
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
 
 [dependencies.grandpa]
 default-features = false
 git = 'https://github.com/usetech-llc/substrate.git'
 package = 'pallet-grandpa'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
 
 [dependencies.randomness-collective-flip]
 default-features = false
 git = 'https://github.com/usetech-llc/substrate.git'
 package = 'pallet-randomness-collective-flip'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
 
 [dependencies.serde]
 features = ['derive']
@@ -73,112 +73,112 @@
 [dependencies.sp-api]
 default-features = false
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
 
 [dependencies.sp-block-builder]
 default-features = false
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
 
 [dependencies.sp-consensus-aura]
 default-features = false
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '0.8.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '0.8.0-rc4'
 
 [dependencies.sp-core]
 default-features = false
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
 
 [dependencies.sp-inherents]
 default-features = false
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
 
 [dependencies.sp-io]
 default-features = false
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
 
 [dependencies.sp-offchain]
 default-features = false
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
 
 [dependencies.sp-runtime]
 default-features = false
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
 
 [dependencies.sp-session]
 default-features = false
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
 
 [dependencies.sp-std]
 default-features = false
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
 
 [dependencies.sp-transaction-pool]
 default-features = false
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
 
 [dependencies.sp-version]
 default-features = false
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
 
 [dependencies.sudo]
 default-features = false
 git = 'https://github.com/usetech-llc/substrate.git'
 package = 'pallet-sudo'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
 
 [dependencies.system]
 default-features = false
 git = 'https://github.com/usetech-llc/substrate.git'
 package = 'frame-system'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
 
 [dependencies.nft]
 default-features = false
 package = 'pallet-nft'
 path = '../pallets/nft'
-version = '2.0.0-rc3'
+version = '2.0.0-rc4'
 
 [dependencies.timestamp]
 default-features = false
 git = 'https://github.com/usetech-llc/substrate.git'
 package = 'pallet-timestamp'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
 
 [dependencies.transaction-payment]
 default-features = false
 git = 'https://github.com/usetech-llc/substrate.git'
 package = 'pallet-transaction-payment'
-branch = 'nft_rc3'
-version = '2.0.0-rc3'
+branch = 'rc4_ext_dispatch_reenabled'
+version = '2.0.0-rc4'
 [build-dependencies.wasm-builder-runner]
 git = 'https://github.com/usetech-llc/substrate.git'
 package = 'substrate-wasm-builder-runner'
-branch = 'nft_rc3'
+branch = 'rc4_ext_dispatch_reenabled'
 version = '1.0.5'
 
 [package]
@@ -188,7 +188,7 @@
 license = 'Unlicense'
 name = 'nft-runtime'
 repository = 'https://github.com/usetech-llc/nft_parachain/'
-version = '2.0.0-rc3'
+version = '2.0.0-rc4'
 [package.metadata.docs.rs]
 targets = ['x86_64-unknown-linux-gnu']
 
modifiedruntime/src/lib.rsdiffbeforeafterboth
--- a/runtime/src/lib.rs
+++ b/runtime/src/lib.rs
@@ -139,6 +139,8 @@
 }
 
 impl system::Trait for Runtime {
+    /// The basic call filter to use in dispatchable.
+    type BaseCallFilter = ();
     /// The identifier used to distinguish between accounts.
     type AccountId = AccountId;
     /// The aggregated dispatch type that is available for extrinsics.
@@ -251,9 +253,10 @@
 }
 
 impl contracts::Trait for Runtime {
+    type Call = Call;
     type Time = Timestamp;
     type Randomness = RandomnessCollectiveFlip;
-    type Call = Call;
+    type Currency = Balances;
     type Event = Event;
     type DetermineContractAddress = contracts::SimpleAddressDeterminer<Runtime>;
     type TrieIdGenerator = contracts::TrieIdFromParentCounter<Runtime>;
@@ -266,6 +269,7 @@
     type SurchargeReward = SurchargeReward;
     type MaxDepth = contracts::DefaultMaxDepth;
     type MaxValueSize = contracts::DefaultMaxValueSize;
+    type WeightPrice = transaction_payment::Module<Self>;
 }
 
 parameter_types! {
modifiedsmart_contract/ink-types-node-runtime/calls/lib.rsdiffbeforeafterboth
before · smart_contract/ink-types-node-runtime/calls/lib.rs
1#![cfg_attr(not(feature = "std"), no_std)]23use ink_lang as ink;45#[ink::contract(version = "0.1.0", env = NodeRuntimeTypes)]6mod calls {7    use ink_core::env;8    use ink_prelude::vec::Vec;9    use ink_prelude::*;10    use ink_types_node_runtime::{calls as runtime_calls, NodeRuntimeTypes};11    use scale::{12        Decode,13        Encode,14    };1516    #[derive(Encode, Decode)]17    pub struct NftItemType {18        pub collection: u64,19        pub owner: AccountId,20        pub data: Vec<u8>,21    }2223    /// This simple dummy contract dispatches substrate runtime calls24    #[ink(storage)]25    struct Calls {}2627    impl Calls {28        #[ink(constructor)]29        fn new(&mut self) {}3031        #[ink(message)]32        fn transfer(&self, collection_id: u64, item_id: u64, new_owner: AccountId) {33            env::println(&format!(34                "transfer invoke_runtime params {:?}, {:?}, {:?} ",35                collection_id, item_id, new_owner36            ));3738            let transfer_call = runtime_calls::transfer(collection_id, item_id, new_owner);39            // dispatch the call to the runtime40            let result = self.env().invoke_runtime(&transfer_call);4142            // report result to console43            // NOTE: println should only be used on a development chain)44            env::println(&format!("transfer invoke_runtime result {:?}", result));45        }4647        // SafeTransfer4849        #[ink(message)]50        fn approve(&self, approved: AccountId, collection_id: u64, item_id: u64) {51            env::println(&format!(52                "approve invoke_runtime params {:?}, {:?}, {:?} ",53                approved, collection_id, item_id54            ));5556            let approve_call = runtime_calls::approve(approved, collection_id, item_id);57            // dispatch the call to the runtime58            let result = self.env().invoke_runtime(&approve_call);5960            // report result to console61            // NOTE: println should only be used on a development chain)62            env::println(&format!("approve invoke_runtime result {:?}", result));63        }6465        #[ink(message)]66        fn get_approved(&self, collection_id: u64, item_id: u64) -> Vec<AccountId> {67            let mut key = vec![68                // Precomputed: Twox128("Nft")69                244, 63, 251, 230, 30, 244, 104, 116, 157, 54, 23, 172, 26, 99, 196, 183,70                // Precomputed: Twox128("ApprovedList")71                86, 163, 236, 207, 221, 111, 252, 227, 254, 40, 142, 38, 40, 224, 192, 18,72            ];7374            let key_ext = vec![75                146, 214, 40, 117, 20, 27, 72, 25, 232, 204, 175, 194, 112, 244, 140, 100,76            ];77            key.extend_from_slice(&key_ext);7879            // collection id 80            let mut collection_bytes: Vec<u8> =  collection_id.to_be_bytes().iter().cloned().collect();81            collection_bytes.reverse();82            key.extend_from_slice(&collection_bytes.as_slice());8384             // item id 85             let mut item_bytes: Vec<u8> =  item_id.to_be_bytes().iter().cloned().collect();86             item_bytes.reverse();87             key.extend_from_slice(&item_bytes.as_slice());           8889            // fetch from runtime storage90            let result = self.env().get_runtime_storage::<Vec<AccountId>>(&key[..]);91 92            match result {93                Some(Ok(accounts)) => { 94                    env::println(&format!("get_approved result {:?}", accounts));95                    accounts 96                },97                Some(Err(err)) => {98                    env::println(&format!("Error reading {:?}", err));99                    vec![]100                }101                None => {102                    env::println(&format!("No data at key {:?}", key));103                    vec![]104                }105            }106        }107108        #[ink(message)]109        fn transfer_from(&self, collection_id: u64, item_id: u64, new_owner: AccountId) {110            env::println(&format!(111                "transfer_from invoke_runtime params {:?}, {:?}, {:?} ",112                collection_id, item_id, new_owner113            ));114115            let transfer_from_call =116                runtime_calls::transfer_from(collection_id, item_id, new_owner);117            // dispatch the call to the runtime118            let result = self.env().invoke_runtime(&transfer_from_call);119120            // report result to console121            // NOTE: println should only be used on a development chain)122            env::println(&format!("transfer_from invoke_runtime result {:?}", result));123        }124125        // SafeTransferFrom126127        #[ink(message)]128        fn create_item(&self, collection_id: u64, properties: Vec<u8>) {129            env::println(&format!(130                "create_item invoke_runtime params {:?}, {:?} ",131                collection_id, properties132            ));133134            let create_item_call = runtime_calls::create_item(collection_id, properties);135            // dispatch the call to the runtime136            let result = self.env().invoke_runtime(&create_item_call);137138            // report result to console139            // NOTE: println should only be used on a development chain)140            env::println(&format!("create_item invoke_runtime result {:?}", result));141        }142143        #[ink(message)]144        fn burn_item(&self, collection_id: u64, item_id: u64) {145            env::println(&format!(146                "burn_item invoke_runtime params {:?}, {:?}",147                collection_id, item_id148            ));149150            let burn_item_call = runtime_calls::burn_item(collection_id, item_id);151            // dispatch the call to the runtime152            let result = self.env().invoke_runtime(&burn_item_call);153154            // report result to console155            // NOTE: println should only be used on a development chain)156            env::println(&format!("burn_item invoke_runtime result {:?}", result));157        }158159        // GetOwner160        #[ink(message)]161        fn get_owner(&self, collection_id: u64, token_id: u64) -> AccountId {162            let mut key = vec![163                // Precomputed: Twox128("Nft")164                244, 63, 251, 230, 30, 244, 104, 116, 157, 54, 23, 172, 26, 99, 196, 183,165                // Precomputed: Twox128("ItemList")166                116, 232, 175, 181, 237, 113, 149, 125, 139, 77, 55, 251, 115, 253, 29, 240,167            ];168169            let key_ext = vec![170                146, 214, 40, 117, 20, 27, 72, 25, 232, 204, 175, 194, 112, 244, 140, 100,171            ];172            key.extend_from_slice(&key_ext);173174            // collection id 175            let mut collection_bytes: Vec<u8> =  collection_id.to_be_bytes().iter().cloned().collect();176            collection_bytes.reverse();177            key.extend_from_slice(&collection_bytes.as_slice());178179             // token id 180             let mut token_bytes: Vec<u8> =  token_id.to_be_bytes().iter().cloned().collect();181             token_bytes.reverse();182             key.extend_from_slice(&token_bytes.as_slice());           183184            // fetch from runtime storage        185            let result = self.env().get_runtime_storage::<NftItemType>(&key[..]);186 187            match result {188                Some(Ok(item)) => { 189                    env::println(&format!("get_owner result {:?}", item.owner));190                    item.owner191                },192                Some(Err(err)) => {193                    env::println(&format!("Error reading {:?}", err));194                    AccountId::from([0u8; 32])195                }196                None => {197                    env::println(&format!("No data at key {:?}", key));198                    AccountId::from([0u8; 32])199                }200            }201        }202203        #[ink(message)]204        fn get_balance_of(&self, collection_id: u64, owner: AccountId) -> u64 {205            let mut key = vec![206                // Precomputed: Twox128("Nft")207                244, 63, 251, 230, 30, 244, 104, 116, 157, 54, 23, 172, 26, 99, 196, 183,208                // Precomputed: Twox128("Balance")209                78, 168, 234, 12, 1, 250, 164, 43, 110, 179, 68, 168, 92, 71, 179, 135,210            ];211212            let key_ext = vec![213                15, 97, 136, 0, 76, 187, 168, 28, 239, 85, 170, 23, 77, 81, 248, 159,214            ];215            key.extend_from_slice(&key_ext);216217            // collection id 218            let mut collection_bytes: Vec<u8> =  collection_id.to_be_bytes().iter().cloned().collect();219            collection_bytes.reverse();220            key.extend_from_slice(&collection_bytes.as_slice());221222             // owner223             key.extend_from_slice(&owner.encode());           224225            // fetch from runtime storage226            let result = self.env().get_runtime_storage::<u64>(&key[..]);227 228            match result {229                Some(Ok(balance)) => { 230                    env::println(&format!("get_balance_of result {:?}", balance));231                    balance232                },233                Some(Err(err)) => {234                    env::println(&format!("Error reading {:?}", err));235                    0236                }237                None => {238                    env::println(&format!("No data at key {:?}", key));239                    0240                }241            }242        }243    }244}
after · smart_contract/ink-types-node-runtime/calls/lib.rs
1#![cfg_attr(not(feature = "std"), no_std)]23use ink_lang as ink;45#[ink::contract(version = "0.1.0", env = NodeRuntimeTypes)]6mod calls {7    use ink_core::env;8    use ink_prelude::vec::Vec;9    use ink_prelude::*;10    use ink_types_node_runtime::{calls as runtime_calls, NodeRuntimeTypes};11    use scale::{12        Decode,13        Encode,14    };1516    #[derive(Encode, Decode)]17    pub struct NftItemType {18        pub collection: u64,19        pub owner: AccountId,20        pub data: Vec<u8>,21    }2223    /// This simple dummy contract dispatches substrate runtime calls24    #[ink(storage)]25    struct Calls {}2627    impl Calls {28        #[ink(constructor)]29        fn new(&mut self) {}3031        #[ink(message)]32        fn transfer(&self, collection_id: u64, item_id: u64, new_owner: AccountId) {33            env::println(&format!(34                "transfer invoke_runtime params {:?}, {:?}, {:?} ",35                collection_id, item_id, new_owner36            ));3738            let transfer_call = runtime_calls::transfer(collection_id, item_id, new_owner);39            // dispatch the call to the runtime40            let result = self.env().invoke_runtime(&transfer_call);4142            // report result to console43            // NOTE: println should only be used on a development chain)44            env::println(&format!("transfer invoke_runtime result {:?}", result));45        }4647        // SafeTransfer4849        #[ink(message)]50        fn approve(&self, approved: AccountId, collection_id: u64, item_id: u64) {51            env::println(&format!(52                "approve invoke_runtime params {:?}, {:?}, {:?} ",53                approved, collection_id, item_id54            ));5556            let approve_call = runtime_calls::approve(approved, collection_id, item_id);57            // dispatch the call to the runtime58            let result = self.env().invoke_runtime(&approve_call);5960            // report result to console61            // NOTE: println should only be used on a development chain)62            env::println(&format!("approve invoke_runtime result {:?}", result));63        }6465        #[ink(message)]66        fn get_approved(&self, collection_id: u64, item_id: u64) -> Vec<AccountId> {67            let mut key = vec![68                // Precomputed: Twox128("Nft")69                244, 63, 251, 230, 30, 244, 104, 116, 157, 54, 23, 172, 26, 99, 196, 183,70                // Precomputed: Twox128("ApprovedList")71                86, 163, 236, 207, 221, 111, 252, 227, 254, 40, 142, 38, 40, 224, 192, 18,72            ];7374            let key_ext = vec![75                146, 214, 40, 117, 20, 27, 72, 25, 232, 204, 175, 194, 112, 244, 140, 100,76            ];77            key.extend_from_slice(&key_ext);7879            // collection id 80            let mut collection_bytes: Vec<u8> =  collection_id.to_be_bytes().iter().cloned().collect();81            collection_bytes.reverse();82            key.extend_from_slice(&collection_bytes.as_slice());8384             // item id 85             let mut item_bytes: Vec<u8> =  item_id.to_be_bytes().iter().cloned().collect();86             item_bytes.reverse();87             key.extend_from_slice(&item_bytes.as_slice());           8889            // fetch from runtime storage90            let result = self.env().get_runtime_storage::<Vec<AccountId>>(&key[..]);91 92            match result {93                Some(Ok(accounts)) => { 94                    env::println(&format!("get_approved result {:?}", accounts));95                    accounts 96                },97                Some(Err(err)) => {98                    env::println(&format!("Error reading {:?}", err));99                    vec![]100                }101                None => {102                    env::println(&format!("No data at key {:?}", key));103                    vec![]104                }105            }106        }107108        #[ink(message)]109        fn get_test(&self) -> bool {110            true111        }112113        #[ink(message)]114        fn transfer_from(&self, collection_id: u64, item_id: u64, new_owner: AccountId) {115            env::println(&format!(116                "transfer_from invoke_runtime params {:?}, {:?}, {:?} ",117                collection_id, item_id, new_owner118            ));119120            let transfer_from_call =121                runtime_calls::transfer_from(collection_id, item_id, new_owner);122            // dispatch the call to the runtime123            let result = self.env().invoke_runtime(&transfer_from_call);124125            // report result to console126            // NOTE: println should only be used on a development chain)127            env::println(&format!("transfer_from invoke_runtime result {:?}", result));128        }129130        // SafeTransferFrom131132        #[ink(message)]133        fn create_item(&self, collection_id: u64, properties: Vec<u8>) {134            env::println(&format!(135                "create_item invoke_runtime params {:?}, {:?} ",136                collection_id, properties137            ));138139            let create_item_call = runtime_calls::create_item(collection_id, properties);140            // dispatch the call to the runtime141            let result = self.env().invoke_runtime(&create_item_call);142143            // report result to console144            // NOTE: println should only be used on a development chain)145            env::println(&format!("create_item invoke_runtime result {:?}", result));146        }147148        #[ink(message)]149        fn burn_item(&self, collection_id: u64, item_id: u64) {150            env::println(&format!(151                "burn_item invoke_runtime params {:?}, {:?}",152                collection_id, item_id153            ));154155            let burn_item_call = runtime_calls::burn_item(collection_id, item_id);156            // dispatch the call to the runtime157            let result = self.env().invoke_runtime(&burn_item_call);158159            // report result to console160            // NOTE: println should only be used on a development chain)161            env::println(&format!("burn_item invoke_runtime result {:?}", result));162        }163164        // GetOwner165        #[ink(message)]166        fn get_owner(&self, collection_id: u64, token_id: u64) -> AccountId {167            let mut key = vec![168                // Precomputed: Twox128("Nft")169                244, 63, 251, 230, 30, 244, 104, 116, 157, 54, 23, 172, 26, 99, 196, 183,170                // Precomputed: Twox128("ItemList")171                116, 232, 175, 181, 237, 113, 149, 125, 139, 77, 55, 251, 115, 253, 29, 240,172            ];173174            let key_ext = vec![175                146, 214, 40, 117, 20, 27, 72, 25, 232, 204, 175, 194, 112, 244, 140, 100,176            ];177            key.extend_from_slice(&key_ext);178179            // collection id 180            let mut collection_bytes: Vec<u8> =  collection_id.to_be_bytes().iter().cloned().collect();181            collection_bytes.reverse();182            key.extend_from_slice(&collection_bytes.as_slice());183184             // token id 185             let mut token_bytes: Vec<u8> =  token_id.to_be_bytes().iter().cloned().collect();186             token_bytes.reverse();187             key.extend_from_slice(&token_bytes.as_slice());           188189            // fetch from runtime storage        190            let result = self.env().get_runtime_storage::<NftItemType>(&key[..]);191 192            match result {193                Some(Ok(item)) => { 194                    env::println(&format!("get_owner result {:?}", item.owner));195                    item.owner196                },197                Some(Err(err)) => {198                    env::println(&format!("Error reading {:?}", err));199                    AccountId::from([0u8; 32])200                }201                None => {202                    env::println(&format!("No data at key {:?}", key));203                    AccountId::from([0u8; 32])204                }205            }206        }207208        #[ink(message)]209        fn get_balance_of(&self, collection_id: u64, owner: AccountId) -> u64 {210            let mut key = vec![211                // Precomputed: Twox128("Nft")212                244, 63, 251, 230, 30, 244, 104, 116, 157, 54, 23, 172, 26, 99, 196, 183,213                // Precomputed: Twox128("Balance")214                78, 168, 234, 12, 1, 250, 164, 43, 110, 179, 68, 168, 92, 71, 179, 135,215            ];216217            let key_ext = vec![218                15, 97, 136, 0, 76, 187, 168, 28, 239, 85, 170, 23, 77, 81, 248, 159,219            ];220            key.extend_from_slice(&key_ext);221222            // collection id 223            let mut collection_bytes: Vec<u8> =  collection_id.to_be_bytes().iter().cloned().collect();224            collection_bytes.reverse();225            key.extend_from_slice(&collection_bytes.as_slice());226227             // owner228             key.extend_from_slice(&owner.encode());           229230            // fetch from runtime storage231            let result = self.env().get_runtime_storage::<u64>(&key[..]);232 233            match result {234                Some(Ok(balance)) => { 235                    env::println(&format!("get_balance_of result {:?}", balance));236                    balance237                },238                Some(Err(err)) => {239                    env::println(&format!("Error reading {:?}", err));240                    0241                }242                None => {243                    env::println(&format!("No data at key {:?}", key));244                    0245                }246            }247        }248    }249}