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

difftreelog

Merge branch 'develop' into feature/NFTPAR-96

sotmorskiy2020-11-26parents: #31f6053 #eaea941.patch.diff
in: master
# Conflicts:
#	pallets/nft/src/lib.rs
#	pallets/nft/src/tests.rs

34 files changed

modified.dockerignorediffbeforeafterboth
--- a/.dockerignore
+++ b/.dockerignore
@@ -3,4 +3,4 @@
 doc/
 target/
 chain-data*/
-smart_contract/
\ No newline at end of file
+smart_contract/
modifiedCargo.lockdiffbeforeafterboth
16source = "registry+https://github.com/rust-lang/crates.io-index"16source = "registry+https://github.com/rust-lang/crates.io-index"
17checksum = "1b6a2d3371669ab3ca9797670853d61402b03d0b4b9ebf33d677dfa720203072"17checksum = "1b6a2d3371669ab3ca9797670853d61402b03d0b4b9ebf33d677dfa720203072"
18dependencies = [18dependencies = [
19 "gimli",19 "gimli 0.22.0",
20]20]
2121
22[[package]]22[[package]]
25source = "registry+https://github.com/rust-lang/crates.io-index"25source = "registry+https://github.com/rust-lang/crates.io-index"
26checksum = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e"26checksum = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e"
27
28[[package]]
29name = "adler32"
30version = "1.1.0"
31source = "registry+https://github.com/rust-lang/crates.io-index"
32checksum = "567b077b825e468cc974f0020d4082ee6e03132512f207ef1a02fd5d00d1f32d"
3327
34[[package]]28[[package]]
35name = "aead"29name = "aead"
36version = "0.3.2"30version = "0.3.2"
37source = "registry+https://github.com/rust-lang/crates.io-index"31source = "registry+https://github.com/rust-lang/crates.io-index"
38checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331"32checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331"
39dependencies = [33dependencies = [
40 "generic-array 0.14.3",34 "generic-array 0.14.4",
41]35]
4236
43[[package]]37[[package]]
44name = "aes"38name = "aes"
45version = "0.4.0"39version = "0.5.0"
46source = "registry+https://github.com/rust-lang/crates.io-index"40source = "registry+https://github.com/rust-lang/crates.io-index"
47checksum = "f7001367fde4c768a19d1029f0a8be5abd9308e1119846d5bd9ad26297b8faf5"41checksum = "dd2bc6d3f370b5666245ff421e231cba4353df936e26986d2918e61a8fd6aef6"
48dependencies = [42dependencies = [
49 "aes-soft",43 "aes-soft",
50 "aesni",44 "aesni",
5347
54[[package]]48[[package]]
55name = "aes-gcm"49name = "aes-gcm"
56version = "0.6.0"50version = "0.7.0"
57source = "registry+https://github.com/rust-lang/crates.io-index"51source = "registry+https://github.com/rust-lang/crates.io-index"
58checksum = "86f5007801316299f922a6198d1d09a0bae95786815d066d5880d13f7c45ead1"52checksum = "0301c9e9c443494d970a07885e8cf3e587bae8356a1d5abd0999068413f7205f"
59dependencies = [53dependencies = [
60 "aead",54 "aead",
61 "aes",55 "aes",
62 "block-cipher",56 "block-cipher",
63 "ghash",57 "ghash",
64 "subtle 2.2.3",58 "subtle 2.3.0",
65]59]
6660
67[[package]]61[[package]]
68name = "aes-soft"62name = "aes-soft"
69version = "0.4.0"63version = "0.5.0"
70source = "registry+https://github.com/rust-lang/crates.io-index"64source = "registry+https://github.com/rust-lang/crates.io-index"
71checksum = "4925647ee64e5056cf231608957ce7c81e12d6d6e316b9ce1404778cc1d35fa7"65checksum = "63dd91889c49327ad7ef3b500fd1109dbd3c509a03db0d4a9ce413b79f575cb6"
72dependencies = [66dependencies = [
73 "block-cipher",67 "block-cipher",
74 "byteorder",68 "byteorder 1.3.4",
75 "opaque-debug 0.2.3",69 "opaque-debug 0.3.0",
76]70]
7771
78[[package]]72[[package]]
79name = "aesni"73name = "aesni"
80version = "0.7.0"74version = "0.8.0"
81source = "registry+https://github.com/rust-lang/crates.io-index"75source = "registry+https://github.com/rust-lang/crates.io-index"
82checksum = "d050d39b0b7688b3a3254394c3e30a9d66c41dcf9b05b0e2dbdc623f6505d264"76checksum = "0a6fe808308bb07d393e2ea47780043ec47683fcf19cf5efc8ca51c50cc8c68a"
83dependencies = [77dependencies = [
84 "block-cipher",78 "block-cipher",
85 "opaque-debug 0.2.3",79 "opaque-debug 0.3.0",
86]80]
8781
88[[package]]82[[package]]
89name = "ahash"83name = "ahash"
90version = "0.2.18"84version = "0.2.19"
91source = "registry+https://github.com/rust-lang/crates.io-index"85source = "registry+https://github.com/rust-lang/crates.io-index"
92checksum = "6f33b5018f120946c1dcf279194f238a9f146725593ead1c08fa47ff22b0b5d3"86checksum = "29661b60bec623f0586702976ff4d0c9942dcb6723161c2df0eea78455cfedfb"
93dependencies = [87dependencies = [
94 "const-random",88 "const-random",
95]89]
90
91[[package]]
92name = "ahash"
93version = "0.3.8"
94source = "registry+https://github.com/rust-lang/crates.io-index"
95checksum = "e8fd72866655d1904d6b0997d0b07ba561047d070fbe29de039031c641b61217"
9696
97[[package]]97[[package]]
98name = "aho-corasick"98name = "aho-corasick"
99version = "0.7.13"99version = "0.7.14"
100source = "registry+https://github.com/rust-lang/crates.io-index"100source = "registry+https://github.com/rust-lang/crates.io-index"
101checksum = "043164d8ba5c4c3035fec9bbee8647c0261d788f3474306f93bb65901cae0e86"101checksum = "b476ce7103678b0c6d3d395dbbae31d48ff910bd28be979ba5d48c6351131d0d"
102dependencies = [102dependencies = [
103 "memchr",103 "memchr",
104]104]
111dependencies = [111dependencies = [
112 "approx",112 "approx",
113 "num-complex",113 "num-complex",
114 "num-traits 0.2.12",114 "num-traits",
115]115]
116116
117[[package]]117[[package]]
134134
135[[package]]135[[package]]
136name = "anyhow"136name = "anyhow"
137version = "1.0.31"137version = "1.0.33"
138source = "registry+https://github.com/rust-lang/crates.io-index"138source = "registry+https://github.com/rust-lang/crates.io-index"
139checksum = "85bb70cc08ec97ca5450e6eba421deeea5f172c0fc61f78b5357b2a8e8be195f"139checksum = "a1fd36ffbb1fb7c834eac128ea8d0e310c5aeb635548f9d58861e1308d46e71c"
140140
141[[package]]141[[package]]
142name = "approx"142name = "approx"
143version = "0.3.2"143version = "0.3.2"
144source = "registry+https://github.com/rust-lang/crates.io-index"144source = "registry+https://github.com/rust-lang/crates.io-index"
145checksum = "f0e60b75072ecd4168020818c0107f2857bb6c4e64252d8d3983f6263b40a5c3"145checksum = "f0e60b75072ecd4168020818c0107f2857bb6c4e64252d8d3983f6263b40a5c3"
146dependencies = [146dependencies = [
147 "num-traits 0.2.12",147 "num-traits",
148]148]
149149
150[[package]]150[[package]]
189source = "registry+https://github.com/rust-lang/crates.io-index"189source = "registry+https://github.com/rust-lang/crates.io-index"
190checksum = "0d0864d84b8e07b145449be9a8537db86bf9de5ce03b913214694643b4743502"190checksum = "0d0864d84b8e07b145449be9a8537db86bf9de5ce03b913214694643b4743502"
191dependencies = [191dependencies = [
192 "quote 1.0.7",192 "quote",
193 "syn 1.0.34",193 "syn",
194]194]
195
196[[package]]
197name = "async-channel"
198version = "1.5.1"
199source = "registry+https://github.com/rust-lang/crates.io-index"
200checksum = "59740d83946db6a5af71ae25ddf9562c2b176b2ca42cf99a455f09f4a220d6b9"
201dependencies = [
202 "concurrent-queue",
203 "event-listener",
204 "futures-core",
205]
195206
196[[package]]207[[package]]
197name = "assert_matches"208name = "async-executor"
198version = "1.3.0"209version = "1.3.0"
199source = "registry+https://github.com/rust-lang/crates.io-index"210source = "registry+https://github.com/rust-lang/crates.io-index"
200checksum = "7deb0a829ca7bcfaf5da70b073a8d128619259a7be8216a355e23f00763059e5"211checksum = "d373d78ded7d0b3fa8039375718cde0aace493f2e34fb60f51cbf567562ca801"
212dependencies = [
213 "async-task",
214 "concurrent-queue",
215 "fastrand",
216 "futures-lite",
217 "once_cell 1.4.1",
218 "vec-arena",
219]
220
221[[package]]
222name = "async-global-executor"
223version = "1.4.0"
224source = "registry+https://github.com/rust-lang/crates.io-index"
225checksum = "0659b83a146398616883aa5199cdd1b055ec088a83c9a338eab3534f33f0622e"
226dependencies = [
227 "async-executor",
228 "async-io",
229 "futures-lite",
230 "num_cpus",
231 "once_cell 1.4.1",
232]
233
234[[package]]
235name = "async-io"
236version = "1.1.10"
237source = "registry+https://github.com/rust-lang/crates.io-index"
238checksum = "d54bc4c1c7292475efb2253227dbcfad8fe1ca4c02bc62c510cc2f3da5c4704e"
239dependencies = [
240 "concurrent-queue",
241 "fastrand",
242 "futures-lite",
243 "libc",
244 "log",
245 "nb-connect",
246 "once_cell 1.4.1",
247 "parking",
248 "polling",
249 "vec-arena",
250 "waker-fn",
251 "winapi 0.3.9",
252]
253
254[[package]]
255name = "async-mutex"
256version = "1.4.0"
257source = "registry+https://github.com/rust-lang/crates.io-index"
258checksum = "479db852db25d9dbf6204e6cb6253698f175c15726470f78af0d918e99d6156e"
259dependencies = [
260 "event-listener",
261]
201262
202[[package]]263[[package]]
203name = "async-std"264name = "async-std"
204version = "1.5.0"265version = "1.6.5"
205source = "registry+https://github.com/rust-lang/crates.io-index"266source = "registry+https://github.com/rust-lang/crates.io-index"
206checksum = "538ecb01eb64eecd772087e5b6f7540cbc917f047727339a472dafed2185b267"267checksum = "a9fa76751505e8df1c7a77762f60486f60c71bbd9b8557f4da6ad47d083732ed"
207dependencies = [268dependencies = [
208 "async-task",269 "async-global-executor",
209 "broadcaster",270 "async-io",
210 "crossbeam-channel",271 "async-mutex",
211 "crossbeam-deque",272 "blocking",
212 "crossbeam-utils",273 "crossbeam-utils",
274 "futures-channel",
213 "futures-core",275 "futures-core",
214 "futures-io",276 "futures-io",
215 "futures-timer 2.0.2",277 "futures-lite",
278 "gloo-timers",
216 "kv-log-macro",279 "kv-log-macro",
217 "log",280 "log",
218 "memchr",281 "memchr",
219 "mio",
220 "mio-uds",
221 "num_cpus",282 "num_cpus",
222 "once_cell",283 "once_cell 1.4.1",
223 "pin-project-lite",284 "pin-project-lite",
224 "pin-utils",285 "pin-utils",
225 "slab",286 "slab",
287 "wasm-bindgen-futures",
226]288]
227289
228[[package]]290[[package]]
229name = "async-task"291name = "async-task"
230version = "1.3.1"292version = "4.0.2"
231source = "registry+https://github.com/rust-lang/crates.io-index"293source = "registry+https://github.com/rust-lang/crates.io-index"
232checksum = "0ac2c016b079e771204030951c366db398864f5026f84a44dafb0ff20f02085d"294checksum = "8ab27c1aa62945039e44edaeee1dc23c74cc0c303dd5fe0fb462a184f1c3a518"
233dependencies = [
234 "libc",
235 "winapi 0.3.9",
236]
237295
238[[package]]296[[package]]
239name = "async-tls"297name = "async-tls"
240version = "0.7.0"298version = "0.8.0"
241source = "registry+https://github.com/rust-lang/crates.io-index"299source = "registry+https://github.com/rust-lang/crates.io-index"
242checksum = "95fd83426b89b034bf4e9ceb9c533c2f2386b813fd3dcae0a425ec6f1837d78a"300checksum = "df097e3f506bec0e1a24f06bb3c962c228f36671de841ff579cb99f371772634"
243dependencies = [301dependencies = [
244 "futures 0.3.5",302 "futures 0.3.6",
245 "rustls",303 "rustls",
246 "webpki",304 "webpki",
247 "webpki-roots 0.19.0",305 "webpki-roots 0.19.0",
248]306]
307
308[[package]]
309name = "async-trait"
310version = "0.1.41"
311source = "registry+https://github.com/rust-lang/crates.io-index"
312checksum = "b246867b8b3b6ae56035f1eb1ed557c1d8eae97f0d53696138a50fa0e3a3b8c0"
313dependencies = [
314 "proc-macro2",
315 "quote",
316 "syn",
317]
318
319[[package]]
320name = "atomic"
321version = "0.4.6"
322source = "registry+https://github.com/rust-lang/crates.io-index"
323checksum = "64f46ca51dca4837f1520754d1c8c36636356b81553d928dc9c177025369a06e"
324
325[[package]]
326name = "atomic-waker"
327version = "1.0.0"
328source = "registry+https://github.com/rust-lang/crates.io-index"
329checksum = "065374052e7df7ee4047b1160cca5e1467a12351a40b3da123c870ba0b8eda2a"
249330
250[[package]]331[[package]]
251name = "atty"332name = "atty"
266347
267[[package]]348[[package]]
268name = "autocfg"349name = "autocfg"
269version = "1.0.0"350version = "1.0.1"
270source = "registry+https://github.com/rust-lang/crates.io-index"351source = "registry+https://github.com/rust-lang/crates.io-index"
271checksum = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d"352checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
272353
273[[package]]354[[package]]
274name = "backtrace"355name = "backtrace"
275version = "0.3.50"356version = "0.3.53"
276source = "registry+https://github.com/rust-lang/crates.io-index"357source = "registry+https://github.com/rust-lang/crates.io-index"
277checksum = "46254cf2fdcdf1badb5934448c1bcbe046a56537b3987d96c51a7afc5d03f293"358checksum = "707b586e0e2f247cbde68cdd2c3ce69ea7b7be43e1c5b426e37c9319c4b9838e"
278dependencies = [359dependencies = [
279 "addr2line",360 "addr2line",
280 "cfg-if",361 "cfg-if 1.0.0",
281 "libc",362 "libc",
282 "miniz_oxide",363 "miniz_oxide",
283 "object",364 "object 0.21.1",
284 "rustc-demangle",365 "rustc-demangle",
285]366]
286367
296source = "registry+https://github.com/rust-lang/crates.io-index"377source = "registry+https://github.com/rust-lang/crates.io-index"
297checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7"378checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7"
379
380[[package]]
381name = "base64"
382version = "0.12.3"
383source = "registry+https://github.com/rust-lang/crates.io-index"
384checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff"
385
386[[package]]
387name = "bincode"
388version = "1.3.1"
389source = "registry+https://github.com/rust-lang/crates.io-index"
390checksum = "f30d3a39baa26f9651f17b375061f3233dde33424a8b72b0dbe93a68a0bc896d"
391dependencies = [
392 "byteorder 1.3.4",
393 "serde",
394]
298395
299[[package]]396[[package]]
300name = "bindgen"397name = "bindgen"
301version = "0.53.3"398version = "0.54.0"
302source = "registry+https://github.com/rust-lang/crates.io-index"399source = "registry+https://github.com/rust-lang/crates.io-index"
303checksum = "c72a978d268b1d70b0e963217e60fdabd9523a941457a6c42a7315d15c7e89e5"400checksum = "66c0bb6167449588ff70803f4127f0684f9063097eca5016f37eb52b92c2cf36"
304dependencies = [401dependencies = [
305 "bitflags",402 "bitflags",
306 "cexpr",403 "cexpr",
307 "cfg-if",404 "cfg-if 0.1.10",
308 "clang-sys",405 "clang-sys",
309 "clap",406 "clap",
310 "env_logger",407 "env_logger",
313 "log",410 "log",
314 "peeking_take_while",411 "peeking_take_while",
315 "proc-macro2",412 "proc-macro2",
316 "quote 1.0.7",413 "quote",
317 "regex",414 "regex",
318 "rustc-hash",415 "rustc-hash",
319 "shlex",416 "shlex",
320 "which",417 "which",
321]418]
419
420[[package]]
421name = "bip39"
422version = "0.6.0-beta.1"
423source = "registry+https://github.com/rust-lang/crates.io-index"
424checksum = "7059804e226b3ac116519a252d7f5fb985a5ccc0e93255e036a5f7e7283323f4"
425dependencies = [
426 "failure",
427 "hashbrown 0.1.8",
428 "hmac",
429 "once_cell 0.1.8",
430 "pbkdf2",
431 "rand 0.6.5",
432 "sha2 0.8.2",
433]
322434
323[[package]]435[[package]]
324name = "bitflags"436name = "bitflags"
342 "radium",454 "radium",
343]455]
344
345[[package]]
346name = "blake2"
347version = "0.8.1"
348source = "registry+https://github.com/rust-lang/crates.io-index"
349checksum = "94cb07b0da6a73955f8fb85d24c466778e70cda767a568229b104f0264089330"
350dependencies = [
351 "byte-tools",
352 "crypto-mac 0.7.0",
353 "digest 0.8.1",
354 "opaque-debug 0.2.3",
355]
356456
357[[package]]457[[package]]
358name = "blake2"458name = "blake2"
361checksum = "84ce5b6108f8e154604bd4eb76a2f726066c3464d5a552a4229262a18c9bb471"461checksum = "84ce5b6108f8e154604bd4eb76a2f726066c3464d5a552a4229262a18c9bb471"
362dependencies = [462dependencies = [
363 "byte-tools",463 "byte-tools",
364 "byteorder",464 "byteorder 1.3.4",
365 "crypto-mac 0.8.0",465 "crypto-mac 0.8.0",
366 "digest 0.9.0",466 "digest 0.9.0",
367 "opaque-debug 0.2.3",467 "opaque-debug 0.2.3",
405source = "registry+https://github.com/rust-lang/crates.io-index"505source = "registry+https://github.com/rust-lang/crates.io-index"
406checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b"506checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b"
407dependencies = [507dependencies = [
408 "block-padding",508 "block-padding 0.1.5",
409 "byte-tools",509 "byte-tools",
410 "byteorder",510 "byteorder 1.3.4",
411 "generic-array 0.12.3",511 "generic-array 0.12.3",
412]512]
413513
417source = "registry+https://github.com/rust-lang/crates.io-index"517source = "registry+https://github.com/rust-lang/crates.io-index"
418checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"518checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
419dependencies = [519dependencies = [
520 "block-padding 0.2.1",
420 "generic-array 0.14.3",521 "generic-array 0.14.4",
421]522]
422523
423[[package]]524[[package]]
424name = "block-cipher"525name = "block-cipher"
425version = "0.7.1"526version = "0.8.0"
426source = "registry+https://github.com/rust-lang/crates.io-index"527source = "registry+https://github.com/rust-lang/crates.io-index"
427checksum = "fa136449e765dc7faa244561ccae839c394048667929af599b5d931ebe7b7f10"528checksum = "f337a3e6da609650eb74e02bc9fac7b735049f7623ab12f2e4c719316fcc7e80"
428dependencies = [529dependencies = [
429 "generic-array 0.14.3",530 "generic-array 0.14.4",
430]531]
431532
432[[package]]533[[package]]
438 "byte-tools",539 "byte-tools",
439]540]
541
542[[package]]
543name = "block-padding"
544version = "0.2.1"
545source = "registry+https://github.com/rust-lang/crates.io-index"
546checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae"
440547
441[[package]]548[[package]]
442name = "broadcaster"549name = "blocking"
443version = "1.0.0"550version = "1.0.2"
444source = "registry+https://github.com/rust-lang/crates.io-index"551source = "registry+https://github.com/rust-lang/crates.io-index"
445checksum = "d9c972e21e0d055a36cf73e4daae870941fe7a8abcd5ac3396aab9e4c126bd87"552checksum = "c5e170dbede1f740736619b776d7251cb1b9095c435c34d8ca9f57fcd2f335e9"
446dependencies = [553dependencies = [
447 "futures-channel",554 "async-channel",
448 "futures-core",555 "async-task",
449 "futures-sink",556 "atomic-waker",
450 "futures-util",557 "fastrand",
451 "parking_lot 0.10.2",558 "futures-lite",
452 "slab",559 "once_cell 1.4.1",
453]560]
454561
455[[package]]562[[package]]
485source = "registry+https://github.com/rust-lang/crates.io-index"592source = "registry+https://github.com/rust-lang/crates.io-index"
486checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7"593checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7"
594
595[[package]]
596name = "byteorder"
597version = "0.5.3"
598source = "registry+https://github.com/rust-lang/crates.io-index"
599checksum = "0fc10e8cc6b2580fda3f36eb6dc5316657f812a3df879a44a66fc9f0fdbc4855"
487600
488[[package]]601[[package]]
489name = "byteorder"602name = "byteorder"
497source = "registry+https://github.com/rust-lang/crates.io-index"610source = "registry+https://github.com/rust-lang/crates.io-index"
498checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c"611checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c"
499dependencies = [612dependencies = [
500 "byteorder",613 "byteorder 1.3.4",
501 "either",614 "either",
502 "iovec",615 "iovec",
503]616]
514source = "registry+https://github.com/rust-lang/crates.io-index"627source = "registry+https://github.com/rust-lang/crates.io-index"
515checksum = "4964518bd3b4a8190e832886cdc0da9794f12e8e6c1613a9e90ff331c4c8724b"628checksum = "4964518bd3b4a8190e832886cdc0da9794f12e8e6c1613a9e90ff331c4c8724b"
629
630[[package]]
631name = "cache-padded"
632version = "1.1.1"
633source = "registry+https://github.com/rust-lang/crates.io-index"
634checksum = "631ae5198c9be5e753e5cc215e1bd73c2b466a3565173db433f52bb9d3e66dba"
516635
517[[package]]636[[package]]
518name = "cc"637name = "cc"
519version = "1.0.58"638version = "1.0.61"
520source = "registry+https://github.com/rust-lang/crates.io-index"639source = "registry+https://github.com/rust-lang/crates.io-index"
521checksum = "f9a06fb2e53271d7c279ec1efea6ab691c35a2ae67ec0d91d7acec0caf13b518"640checksum = "ed67cbde08356238e75fc4656be4749481eeffb09e19f320a25237d5221c985d"
522dependencies = [641dependencies = [
523 "jobserver",642 "jobserver",
524]643]
538source = "registry+https://github.com/rust-lang/crates.io-index"657source = "registry+https://github.com/rust-lang/crates.io-index"
539checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"658checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
659
660[[package]]
661name = "cfg-if"
662version = "1.0.0"
663source = "registry+https://github.com/rust-lang/crates.io-index"
664checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
540665
541[[package]]666[[package]]
542name = "chacha20"667name = "chacha20"
543version = "0.4.3"668version = "0.5.0"
544source = "registry+https://github.com/rust-lang/crates.io-index"669source = "registry+https://github.com/rust-lang/crates.io-index"
545checksum = "086c0f07ac275808b7bf9a39f2fd013aae1498be83632814c8c4e0bd53f2dc58"670checksum = "244fbce0d47e97e8ef2f63b81d5e05882cb518c68531eb33194990d7b7e85845"
546dependencies = [671dependencies = [
547 "stream-cipher",672 "stream-cipher 0.7.1",
548 "zeroize",673 "zeroize",
549]674]
550675
551[[package]]676[[package]]
552name = "chacha20poly1305"677name = "chacha20poly1305"
553version = "0.5.1"678version = "0.6.0"
554source = "registry+https://github.com/rust-lang/crates.io-index"679source = "registry+https://github.com/rust-lang/crates.io-index"
555checksum = "18b0c90556d8e3fec7cf18d84a2f53d27b21288f2fe481b830fadcf809e48205"680checksum = "9bf18d374d66df0c05cdddd528a7db98f78c28e2519b120855c4f84c5027b1f5"
556dependencies = [681dependencies = [
557 "aead",682 "aead",
558 "chacha20",683 "chacha20",
559 "poly1305",684 "poly1305",
560 "stream-cipher",685 "stream-cipher 0.7.1",
561 "zeroize",686 "zeroize",
562]687]
563688
564[[package]]689[[package]]
565name = "chrono"690name = "chrono"
566version = "0.4.13"691version = "0.4.19"
567source = "registry+https://github.com/rust-lang/crates.io-index"692source = "registry+https://github.com/rust-lang/crates.io-index"
568checksum = "c74d84029116787153e02106bf53e66828452a4b325cc8652b788b5967c0a0b6"693checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73"
569dependencies = [694dependencies = [
695 "libc",
570 "num-integer",696 "num-integer",
571 "num-traits 0.2.12",697 "num-traits",
572 "time",698 "time",
699 "winapi 0.3.9",
573]700]
574701
575[[package]]702[[package]]
585712
586[[package]]713[[package]]
587name = "clap"714name = "clap"
588version = "2.33.1"715version = "2.33.3"
589source = "registry+https://github.com/rust-lang/crates.io-index"716source = "registry+https://github.com/rust-lang/crates.io-index"
590checksum = "bdfa80d47f954d53a35a64987ca1422f495b8d6483c0fe9f7117b36c2a792129"717checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002"
591dependencies = [718dependencies = [
592 "ansi_term 0.11.0",719 "ansi_term 0.11.0",
593 "atty",720 "atty",
598 "vec_map",725 "vec_map",
599]726]
600
601[[package]]
602name = "clear_on_drop"
603version = "0.2.4"
604source = "registry+https://github.com/rust-lang/crates.io-index"
605checksum = "c9cc5db465b294c3fa986d5bbb0f3017cd850bff6dd6c52f9ccff8b4d21b7b08"
606dependencies = [
607 "cc",
608]
609727
610[[package]]728[[package]]
611name = "cloudabi"729name = "cloudabi"
616 "bitflags",734 "bitflags",
617]735]
736
737[[package]]
738name = "cloudabi"
739version = "0.1.0"
740source = "registry+https://github.com/rust-lang/crates.io-index"
741checksum = "4344512281c643ae7638bbabc3af17a11307803ec8f0fcad9fae512a8bf36467"
742dependencies = [
743 "bitflags",
744]
745
746[[package]]
747name = "concurrent-queue"
748version = "1.2.2"
749source = "registry+https://github.com/rust-lang/crates.io-index"
750checksum = "30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3"
751dependencies = [
752 "cache-padded",
753]
618754
619[[package]]755[[package]]
620name = "const-random"756name = "const-random"
621version = "0.1.8"757version = "0.1.11"
622source = "registry+https://github.com/rust-lang/crates.io-index"758source = "registry+https://github.com/rust-lang/crates.io-index"
623checksum = "2f1af9ac737b2dd2d577701e59fd09ba34822f6f2ebdb30a7647405d9e55e16a"759checksum = "02dc82c12dc2ee6e1ded861cf7d582b46f66f796d1b6c93fa28b911ead95da02"
624dependencies = [760dependencies = [
625 "const-random-macro",761 "const-random-macro",
626 "proc-macro-hack",762 "proc-macro-hack",
627]763]
628764
629[[package]]765[[package]]
630name = "const-random-macro"766name = "const-random-macro"
631version = "0.1.8"767version = "0.1.11"
632source = "registry+https://github.com/rust-lang/crates.io-index"768source = "registry+https://github.com/rust-lang/crates.io-index"
633checksum = "25e4c606eb459dd29f7c57b2e0879f2b6f14ee130918c2b78ccb58a9624e6c7a"769checksum = "fc757bbb9544aa296c2ae00c679e81f886b37e28e59097defe0cf524306f6685"
634dependencies = [770dependencies = [
635 "getrandom",771 "getrandom 0.2.0",
636 "proc-macro-hack",772 "proc-macro-hack",
637]773]
638774
664source = "registry+https://github.com/rust-lang/crates.io-index"800source = "registry+https://github.com/rust-lang/crates.io-index"
665checksum = "8aebca1129a03dc6dc2b127edd729435bbc4a37e1d5f4d7513165089ceb02634"801checksum = "8aebca1129a03dc6dc2b127edd729435bbc4a37e1d5f4d7513165089ceb02634"
802
803[[package]]
804name = "cranelift-bforest"
805version = "0.66.0"
806source = "registry+https://github.com/rust-lang/crates.io-index"
807checksum = "8dcc286b052ee24a1e5a222e7c1125e6010ad35b0f248709b9b3737a8fedcfdf"
808dependencies = [
809 "cranelift-entity",
810]
811
812[[package]]
813name = "cranelift-codegen"
814version = "0.66.0"
815source = "registry+https://github.com/rust-lang/crates.io-index"
816checksum = "9d9badfe36176cb653506091693bc2bb1970c9bddfcd6ec7fac404f7eaec6f38"
817dependencies = [
818 "byteorder 1.3.4",
819 "cranelift-bforest",
820 "cranelift-codegen-meta",
821 "cranelift-codegen-shared",
822 "cranelift-entity",
823 "gimli 0.21.0",
824 "log",
825 "regalloc",
826 "serde",
827 "smallvec 1.4.2",
828 "target-lexicon",
829 "thiserror",
830]
831
832[[package]]
833name = "cranelift-codegen-meta"
834version = "0.66.0"
835source = "registry+https://github.com/rust-lang/crates.io-index"
836checksum = "3c3f460031861e4f4ad510be62b2ae50bba6cc886b598a36f9c0a970feab9598"
837dependencies = [
838 "cranelift-codegen-shared",
839 "cranelift-entity",
840]
841
842[[package]]
843name = "cranelift-codegen-shared"
844version = "0.66.0"
845source = "registry+https://github.com/rust-lang/crates.io-index"
846checksum = "76ad12409e922e7697cd0bdc7dc26992f64a77c31880dfe5e3c7722f4710206d"
847
848[[package]]
849name = "cranelift-entity"
850version = "0.66.0"
851source = "registry+https://github.com/rust-lang/crates.io-index"
852checksum = "d97cdc58972ea065d107872cfb9079f4c92ade78a8af85aaff519a65b5d13f71"
853dependencies = [
854 "serde",
855]
856
857[[package]]
858name = "cranelift-frontend"
859version = "0.66.0"
860source = "registry+https://github.com/rust-lang/crates.io-index"
861checksum = "2ef419efb4f94ecc02e5d9fbcc910d2bb7f0040e2de570e63a454f883bc891d6"
862dependencies = [
863 "cranelift-codegen",
864 "log",
865 "smallvec 1.4.2",
866 "target-lexicon",
867]
868
869[[package]]
870name = "cranelift-native"
871version = "0.66.0"
872source = "registry+https://github.com/rust-lang/crates.io-index"
873checksum = "6e69d44d59826eef6794066ac2c0f4ad3975f02d97030c60dbc04e3886adf36e"
874dependencies = [
875 "cranelift-codegen",
876 "raw-cpuid",
877 "target-lexicon",
878]
879
880[[package]]
881name = "cranelift-wasm"
882version = "0.66.0"
883source = "registry+https://github.com/rust-lang/crates.io-index"
884checksum = "979df666b1304624abe99738e9e0e7c7479ee5523ba4b8b237df9ff49996acbb"
885dependencies = [
886 "cranelift-codegen",
887 "cranelift-entity",
888 "cranelift-frontend",
889 "log",
890 "serde",
891 "thiserror",
892 "wasmparser 0.59.0",
893]
666894
667[[package]]895[[package]]
668name = "crc32fast"896name = "crc32fast"
669version = "1.2.0"897version = "1.2.0"
670source = "registry+https://github.com/rust-lang/crates.io-index"898source = "registry+https://github.com/rust-lang/crates.io-index"
671checksum = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1"899checksum = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1"
672dependencies = [900dependencies = [
673 "cfg-if",901 "cfg-if 0.1.10",
674]902]
675903
676[[package]]904[[package]]
677name = "crossbeam-channel"905name = "crossbeam-channel"
678version = "0.4.2"906version = "0.4.4"
679source = "registry+https://github.com/rust-lang/crates.io-index"907source = "registry+https://github.com/rust-lang/crates.io-index"
680checksum = "cced8691919c02aac3cb0a1bc2e9b73d89e832bf9a06fc579d4e71b68a2da061"908checksum = "b153fe7cbef478c567df0f972e02e6d736db11affe43dfc9c56a9374d1adfb87"
681dependencies = [909dependencies = [
682 "crossbeam-utils",910 "crossbeam-utils",
683 "maybe-uninit",911 "maybe-uninit",
700source = "registry+https://github.com/rust-lang/crates.io-index"928source = "registry+https://github.com/rust-lang/crates.io-index"
701checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace"929checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace"
702dependencies = [930dependencies = [
703 "autocfg 1.0.0",931 "autocfg 1.0.1",
704 "cfg-if",932 "cfg-if 0.1.10",
705 "crossbeam-utils",933 "crossbeam-utils",
706 "lazy_static",934 "lazy_static",
707 "maybe-uninit",935 "maybe-uninit",
708 "memoffset",936 "memoffset",
709 "scopeguard",937 "scopeguard 1.1.0",
710]938]
711939
712[[package]]940[[package]]
715source = "registry+https://github.com/rust-lang/crates.io-index"943source = "registry+https://github.com/rust-lang/crates.io-index"
716checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570"944checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570"
717dependencies = [945dependencies = [
718 "cfg-if",946 "cfg-if 0.1.10",
719 "crossbeam-utils",947 "crossbeam-utils",
720 "maybe-uninit",948 "maybe-uninit",
721]949]
726source = "registry+https://github.com/rust-lang/crates.io-index"954source = "registry+https://github.com/rust-lang/crates.io-index"
727checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8"955checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8"
728dependencies = [956dependencies = [
729 "autocfg 1.0.0",957 "autocfg 1.0.1",
730 "cfg-if",958 "cfg-if 0.1.10",
731 "lazy_static",959 "lazy_static",
732]960]
733961
753source = "registry+https://github.com/rust-lang/crates.io-index"981source = "registry+https://github.com/rust-lang/crates.io-index"
754checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab"982checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab"
755dependencies = [983dependencies = [
756 "generic-array 0.14.3",984 "generic-array 0.14.4",
757 "subtle 2.2.3",985 "subtle 2.3.0",
758]986]
759987
760[[package]]988[[package]]
761name = "ct-logs"989name = "ct-logs"
762version = "0.6.0"990version = "0.7.0"
763source = "registry+https://github.com/rust-lang/crates.io-index"991source = "registry+https://github.com/rust-lang/crates.io-index"
764checksum = "4d3686f5fa27dbc1d76c751300376e167c5a43387f44bb451fd1c24776e49113"992checksum = "8c8e13110a84b6315df212c045be706af261fd364791cad863285439ebba672e"
765dependencies = [993dependencies = [
766 "sct",994 "sct",
767]995]
996
997[[package]]
998name = "cuckoofilter"
999version = "0.3.2"
1000source = "registry+https://github.com/rust-lang/crates.io-index"
1001checksum = "8dd43f7cfaffe0a386636a10baea2ee05cc50df3b77bea4a456c9572a939bf1f"
1002dependencies = [
1003 "byteorder 0.5.3",
1004 "rand 0.3.23",
1005]
7681006
769[[package]]1007[[package]]
770name = "curve25519-dalek"1008name = "curve25519-dalek"
771version = "2.1.0"1009version = "2.1.0"
772source = "registry+https://github.com/rust-lang/crates.io-index"1010source = "registry+https://github.com/rust-lang/crates.io-index"
773checksum = "5d85653f070353a16313d0046f173f70d1aadd5b42600a14de626f0dfb3473a5"1011checksum = "5d85653f070353a16313d0046f173f70d1aadd5b42600a14de626f0dfb3473a5"
774dependencies = [1012dependencies = [
775 "byteorder",1013 "byteorder 1.3.4",
776 "digest 0.8.1",1014 "digest 0.8.1",
777 "rand_core 0.5.1",1015 "rand_core 0.5.1",
778 "subtle 2.2.3",1016 "subtle 2.3.0",
779 "zeroize",1017 "zeroize",
780]1018]
1019
1020[[package]]
1021name = "curve25519-dalek"
1022version = "3.0.0"
1023source = "registry+https://github.com/rust-lang/crates.io-index"
1024checksum = "c8492de420e9e60bc9a1d66e2dbb91825390b738a388606600663fc529b4b307"
1025dependencies = [
1026 "byteorder 1.3.4",
1027 "digest 0.9.0",
1028 "rand_core 0.5.1",
1029 "subtle 2.3.0",
1030 "zeroize",
1031]
7811032
782[[package]]1033[[package]]
783name = "data-encoding"1034name = "data-encoding"
784version = "2.2.1"1035version = "2.3.0"
785source = "registry+https://github.com/rust-lang/crates.io-index"1036source = "registry+https://github.com/rust-lang/crates.io-index"
786checksum = "72aa14c04dfae8dd7d8a2b1cb7ca2152618cd01336dbfe704b8dcbf8d41dbd69"1037checksum = "d4d0e2d24e5ee3b23a01de38eefdcd978907890701f08ffffd4cb457ca4ee8d6"
7871038
788[[package]]1039[[package]]
789name = "derive_more"1040name = "derive_more"
790version = "0.99.9"1041version = "0.99.11"
791source = "registry+https://github.com/rust-lang/crates.io-index"1042source = "registry+https://github.com/rust-lang/crates.io-index"
792checksum = "298998b1cf6b5b2c8a7b023dfd45821825ce3ba8a8af55c921a0e734e4653f76"1043checksum = "41cb0e6161ad61ed084a36ba71fbba9e3ac5aee3606fb607fe08da6acbcf3d8c"
793dependencies = [1044dependencies = [
794 "proc-macro2",1045 "proc-macro2",
795 "quote 1.0.7",1046 "quote",
796 "syn 1.0.34",1047 "syn",
797]1048]
7981049
799[[package]]1050[[package]]
811source = "registry+https://github.com/rust-lang/crates.io-index"1062source = "registry+https://github.com/rust-lang/crates.io-index"
812checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"1063checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
813dependencies = [1064dependencies = [
814 "generic-array 0.14.3",1065 "generic-array 0.14.4",
815]1066]
8161067
817[[package]]1068[[package]]
820source = "registry+https://github.com/rust-lang/crates.io-index"1071source = "registry+https://github.com/rust-lang/crates.io-index"
821checksum = "551a778172a450d7fc12e629ca3b0428d00f6afa9a43da1b630d54604e97371c"1072checksum = "551a778172a450d7fc12e629ca3b0428d00f6afa9a43da1b630d54604e97371c"
822dependencies = [1073dependencies = [
823 "cfg-if",1074 "cfg-if 0.1.10",
824 "dirs-sys",1075 "dirs-sys",
825]1076]
8261077
841source = "registry+https://github.com/rust-lang/crates.io-index"1092source = "registry+https://github.com/rust-lang/crates.io-index"
842checksum = "c4d33be9473d06f75f58220f71f7a9317aca647dc061dbd3c361b0bef505fbea"1093checksum = "c4d33be9473d06f75f58220f71f7a9317aca647dc061dbd3c361b0bef505fbea"
843dependencies = [1094dependencies = [
844 "byteorder",1095 "byteorder 1.3.4",
845 "quick-error",1096 "quick-error",
846]1097]
8471098
848[[package]]1099[[package]]
849name = "doc-comment"1100name = "dyn-clonable"
850version = "0.3.3"1101version = "0.9.0"
851source = "registry+https://github.com/rust-lang/crates.io-index"1102source = "registry+https://github.com/rust-lang/crates.io-index"
852checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"1103checksum = "4e9232f0e607a262ceb9bd5141a3dfb3e4db6994b31989bbfd845878cba59fd4"
1104dependencies = [
1105 "dyn-clonable-impl",
1106 "dyn-clone",
1107]
8531108
854[[package]]1109[[package]]
855name = "ed25519-dalek"1110name = "dyn-clonable-impl"
856version = "1.0.0-pre.3"1111version = "0.9.0"
857source = "registry+https://github.com/rust-lang/crates.io-index"1112source = "registry+https://github.com/rust-lang/crates.io-index"
858checksum = "978710b352437433c97b2bff193f2fb1dfd58a093f863dd95e225a19baa599a2"1113checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5"
859dependencies = [1114dependencies = [
860 "clear_on_drop",1115 "proc-macro2",
861 "curve25519-dalek",1116 "quote",
862 "rand 0.7.3",1117 "syn",
863 "sha2 0.8.2",
864]1118]
1119
1120[[package]]
1121name = "dyn-clone"
1122version = "1.0.2"
1123source = "registry+https://github.com/rust-lang/crates.io-index"
1124checksum = "4c53dc3a653e0f64081026e4bf048d48fec9fce90c66e8326ca7292df0ff2d82"
8651125
866[[package]]1126[[package]]
867name = "either"1127name = "ed25519"
868version = "1.5.3"1128version = "1.0.3"
869source = "registry+https://github.com/rust-lang/crates.io-index"1129source = "registry+https://github.com/rust-lang/crates.io-index"
870checksum = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3"1130checksum = "37c66a534cbb46ab4ea03477eae19d5c22c01da8258030280b7bd9d8433fb6ef"
1131dependencies = [
1132 "signature",
1133]
8711134
872[[package]]1135[[package]]
873name = "enum-primitive-derive"1136name = "ed25519-dalek"
874version = "0.1.2"1137version = "1.0.1"
875source = "registry+https://github.com/rust-lang/crates.io-index"1138source = "registry+https://github.com/rust-lang/crates.io-index"
876checksum = "e2b90e520ec62c1864c8c78d637acbfe8baf5f63240f2fb8165b8325c07812dd"1139checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d"
877dependencies = [1140dependencies = [
878 "num-traits 0.1.43",1141 "curve25519-dalek 3.0.0",
1142 "ed25519",
879 "quote 0.3.15",1143 "rand 0.7.3",
1144 "serde",
880 "syn 0.11.11",1145 "sha2 0.9.1",
1146 "zeroize",
881]1147]
1148
1149[[package]]
1150name = "either"
1151version = "1.6.1"
1152source = "registry+https://github.com/rust-lang/crates.io-index"
1153checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
8821154
883[[package]]1155[[package]]
884name = "env_logger"1156name = "env_logger"
8951167
896[[package]]1168[[package]]
897name = "environmental"1169name = "environmental"
898version = "1.1.1"1170version = "1.1.2"
899source = "registry+https://github.com/rust-lang/crates.io-index"1171source = "registry+https://github.com/rust-lang/crates.io-index"
900checksum = "516aa8d7a71cb00a1c4146f0798549b93d083d4f189b3ced8f3de6b8f11ee6c4"1172checksum = "6576a1755ddffd988788025e75bce9e74b018f7cc226198fe931d077911c6d7e"
9011173
902[[package]]1174[[package]]
903name = "erased-serde"1175name = "erased-serde"
908 "serde",1180 "serde",
909]1181]
1182
1183[[package]]
1184name = "errno"
1185version = "0.2.6"
1186source = "registry+https://github.com/rust-lang/crates.io-index"
1187checksum = "6eab5ee3df98a279d9b316b1af6ac95422127b1290317e6d18c1743c99418b01"
1188dependencies = [
1189 "errno-dragonfly",
1190 "libc",
1191 "winapi 0.3.9",
1192]
1193
1194[[package]]
1195name = "errno-dragonfly"
1196version = "0.1.1"
1197source = "registry+https://github.com/rust-lang/crates.io-index"
1198checksum = "14ca354e36190500e1e1fb267c647932382b54053c50b14970856c0b00a35067"
1199dependencies = [
1200 "gcc",
1201 "libc",
1202]
1203
1204[[package]]
1205name = "event-listener"
1206version = "2.5.1"
1207source = "registry+https://github.com/rust-lang/crates.io-index"
1208checksum = "f7531096570974c3a9dcf9e4b8e1cede1ec26cf5046219fb3b9d897503b9be59"
9101209
911[[package]]1210[[package]]
912name = "exit-future"1211name = "exit-future"
913version = "0.2.0"1212version = "0.2.0"
914source = "registry+https://github.com/rust-lang/crates.io-index"1213source = "registry+https://github.com/rust-lang/crates.io-index"
915checksum = "e43f2f1833d64e33f15592464d6fdd70f349dda7b1a53088eb83cd94014008c5"1214checksum = "e43f2f1833d64e33f15592464d6fdd70f349dda7b1a53088eb83cd94014008c5"
916dependencies = [1215dependencies = [
917 "futures 0.3.5",1216 "futures 0.3.6",
918]1217]
9191218
920[[package]]1219[[package]]
934checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4"1233checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4"
935dependencies = [1234dependencies = [
936 "proc-macro2",1235 "proc-macro2",
937 "quote 1.0.7",1236 "quote",
938 "syn 1.0.34",1237 "syn",
939 "synstructure",1238 "synstructure",
940]1239]
9411240
945source = "registry+https://github.com/rust-lang/crates.io-index"1244source = "registry+https://github.com/rust-lang/crates.io-index"
946checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed"1245checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed"
1246
1247[[package]]
1248name = "fallible-iterator"
1249version = "0.2.0"
1250source = "registry+https://github.com/rust-lang/crates.io-index"
1251checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7"
1252
1253[[package]]
1254name = "fastrand"
1255version = "1.4.0"
1256source = "registry+https://github.com/rust-lang/crates.io-index"
1257checksum = "ca5faf057445ce5c9d4329e382b2ce7ca38550ef3b73a5348362d5f24e0c7fe3"
1258dependencies = [
1259 "instant",
1260]
9471261
948[[package]]1262[[package]]
949name = "fdlimit"1263name = "fdlimit"
950version = "0.1.4"1264version = "0.2.1"
951source = "registry+https://github.com/rust-lang/crates.io-index"1265source = "registry+https://github.com/rust-lang/crates.io-index"
952checksum = "0da54a593b34c71b889ee45f5b5bb900c74148c5f7f8c6a9479ee7899f69603c"1266checksum = "2c4c9e43643f5a3be4ca5b67d26b98031ff9db6806c3440ae32e02e3ceac3f1b"
953dependencies = [1267dependencies = [
954 "libc",1268 "libc",
955]1269]
1270
1271[[package]]
1272name = "file-per-thread-logger"
1273version = "0.1.4"
1274source = "registry+https://github.com/rust-lang/crates.io-index"
1275checksum = "4fdbe0d94371f9ce939b555dd342d0686cc4c0cadbcd4b61d70af5ff97eb4126"
1276dependencies = [
1277 "env_logger",
1278 "log",
1279]
9561280
957[[package]]1281[[package]]
958name = "finality-grandpa"1282name = "finality-grandpa"
961checksum = "8feb87a63249689640ac9c011742c33139204e3c134293d3054022276869133b"1285checksum = "8feb87a63249689640ac9c011742c33139204e3c134293d3054022276869133b"
962dependencies = [1286dependencies = [
963 "either",1287 "either",
964 "futures 0.3.5",1288 "futures 0.3.6",
965 "futures-timer 2.0.2",1289 "futures-timer 2.0.2",
966 "log",1290 "log",
967 "num-traits 0.2.12",1291 "num-traits",
968 "parity-scale-codec",1292 "parity-scale-codec",
969 "parking_lot 0.9.0",1293 "parking_lot 0.9.0",
970]1294]
975source = "registry+https://github.com/rust-lang/crates.io-index"1299source = "registry+https://github.com/rust-lang/crates.io-index"
976checksum = "11498d382790b7a8f2fd211780bec78619bba81cdad3a283997c0c41f836759c"1300checksum = "11498d382790b7a8f2fd211780bec78619bba81cdad3a283997c0c41f836759c"
977dependencies = [1301dependencies = [
978 "byteorder",1302 "byteorder 1.3.4",
979 "rand 0.7.3",1303 "rand 0.7.3",
980 "rustc-hex",1304 "rustc-hex",
981 "static_assertions",1305 "static_assertions",
9891313
990[[package]]1314[[package]]
991name = "flate2"1315name = "flate2"
992version = "1.0.16"1316version = "1.0.18"
993source = "registry+https://github.com/rust-lang/crates.io-index"1317source = "registry+https://github.com/rust-lang/crates.io-index"
994checksum = "68c90b0fc46cf89d227cc78b40e494ff81287a92dd07631e5af0d06fe3cf885e"1318checksum = "da80be589a72651dcda34d8b35bcdc9b7254ad06325611074d9cc0fbb19f60ee"
995dependencies = [1319dependencies = [
996 "cfg-if",1320 "cfg-if 0.1.10",
997 "crc32fast",1321 "crc32fast",
998 "libc",1322 "libc",
999 "libz-sys",1323 "libz-sys",
10081332
1009[[package]]1333[[package]]
1010name = "fork-tree"1334name = "fork-tree"
1011version = "2.0.0-rc4"1335version = "2.0.0"
1012source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"1336source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
1013dependencies = [1337dependencies = [
1014 "parity-scale-codec",1338 "parity-scale-codec",
1015]1339]
10161340
1017[[package]]1341[[package]]
1018name = "frame-benchmarking"1342name = "frame-benchmarking"
1019version = "2.0.0-rc4"1343version = "2.0.0"
1020source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"1344source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
1021dependencies = [1345dependencies = [
1022 "frame-support",1346 "frame-support",
1023 "frame-system",1347 "frame-system",
1029 "sp-runtime",1353 "sp-runtime",
1030 "sp-runtime-interface",1354 "sp-runtime-interface",
1031 "sp-std",1355 "sp-std",
1356 "sp-storage",
1032]1357]
1358
1359[[package]]
1360name = "frame-benchmarking-cli"
1361version = "2.0.0"
1362source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
1363dependencies = [
1364 "frame-benchmarking",
1365 "parity-scale-codec",
1366 "sc-cli",
1367 "sc-client-db",
1368 "sc-executor",
1369 "sc-service",
1370 "sp-core",
1371 "sp-externalities",
1372 "sp-runtime",
1373 "sp-state-machine",
1374 "structopt",
1375]
10331376
1034[[package]]1377[[package]]
1035name = "frame-executive"1378name = "frame-executive"
1036version = "2.0.0-rc4"1379version = "2.0.0"
1037source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"1380source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
1038dependencies = [1381dependencies = [
1039 "frame-support",1382 "frame-support",
1040 "frame-system",1383 "frame-system",
1041 "parity-scale-codec",1384 "parity-scale-codec",
1042 "serde",1385 "serde",
1386 "sp-core",
1043 "sp-io",1387 "sp-io",
1044 "sp-runtime",1388 "sp-runtime",
1045 "sp-std",1389 "sp-std",
10481392
1049[[package]]1393[[package]]
1050name = "frame-metadata"1394name = "frame-metadata"
1051version = "11.0.0-rc4"1395version = "12.0.0"
1052source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"1396source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
1053dependencies = [1397dependencies = [
1054 "parity-scale-codec",1398 "parity-scale-codec",
1055 "serde",1399 "serde",
10591403
1060[[package]]1404[[package]]
1061name = "frame-support"1405name = "frame-support"
1062version = "2.0.0-rc4"1406version = "2.0.0"
1063source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"1407source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
1064dependencies = [1408dependencies = [
1065 "bitmask",1409 "bitmask",
1066 "frame-metadata",1410 "frame-metadata",
1067 "frame-support-procedural",1411 "frame-support-procedural",
1068 "impl-trait-for-tuples",1412 "impl-trait-for-tuples",
1069 "log",1413 "log",
1070 "once_cell",1414 "once_cell 1.4.1",
1071 "parity-scale-codec",1415 "parity-scale-codec",
1072 "paste",1416 "paste",
1073 "serde",1417 "serde",
1074 "smallvec 1.4.1",1418 "smallvec 1.4.2",
1075 "sp-arithmetic",1419 "sp-arithmetic",
1076 "sp-core",1420 "sp-core",
1077 "sp-inherents",1421 "sp-inherents",
10841428
1085[[package]]1429[[package]]
1086name = "frame-support-procedural"1430name = "frame-support-procedural"
1087version = "2.0.0-rc4"1431version = "2.0.0"
1088source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"1432source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
1089dependencies = [1433dependencies = [
1090 "frame-support-procedural-tools",1434 "frame-support-procedural-tools",
1091 "proc-macro2",1435 "proc-macro2",
1092 "quote 1.0.7",1436 "quote",
1093 "syn 1.0.34",1437 "syn",
1094]1438]
10951439
1096[[package]]1440[[package]]
1097name = "frame-support-procedural-tools"1441name = "frame-support-procedural-tools"
1098version = "2.0.0-rc4"1442version = "2.0.0"
1099source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"1443source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
1100dependencies = [1444dependencies = [
1101 "frame-support-procedural-tools-derive",1445 "frame-support-procedural-tools-derive",
1102 "proc-macro-crate",1446 "proc-macro-crate",
1103 "proc-macro2",1447 "proc-macro2",
1104 "quote 1.0.7",1448 "quote",
1105 "syn 1.0.34",1449 "syn",
1106]1450]
11071451
1108[[package]]1452[[package]]
1109name = "frame-support-procedural-tools-derive"1453name = "frame-support-procedural-tools-derive"
1110version = "2.0.0-rc4"1454version = "2.0.0"
1111source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"1455source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
1112dependencies = [1456dependencies = [
1113 "proc-macro2",1457 "proc-macro2",
1114 "quote 1.0.7",1458 "quote",
1115 "syn 1.0.34",1459 "syn",
1116]1460]
11171461
1118[[package]]1462[[package]]
1119name = "frame-system"1463name = "frame-system"
1120version = "2.0.0-rc4"1464version = "2.0.0"
1121source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"1465source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
1122dependencies = [1466dependencies = [
1123 "frame-support",1467 "frame-support",
1124 "impl-trait-for-tuples",1468 "impl-trait-for-tuples",
1131 "sp-version",1475 "sp-version",
1132]1476]
1477
1478[[package]]
1479name = "frame-system-benchmarking"
1480version = "2.0.0"
1481source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
1482dependencies = [
1483 "frame-benchmarking",
1484 "frame-support",
1485 "frame-system",
1486 "parity-scale-codec",
1487 "sp-core",
1488 "sp-runtime",
1489 "sp-std",
1490]
1491
1492[[package]]
1493name = "frame-system-rpc-runtime-api"
1494version = "2.0.0"
1495source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
1496dependencies = [
1497 "parity-scale-codec",
1498 "sp-api",
1499]
11331500
1134[[package]]1501[[package]]
1135name = "fs-swap"1502name = "fs-swap"
11671534
1168[[package]]1535[[package]]
1169name = "futures"1536name = "futures"
1170version = "0.1.29"1537version = "0.1.30"
1171source = "registry+https://github.com/rust-lang/crates.io-index"1538source = "registry+https://github.com/rust-lang/crates.io-index"
1172checksum = "1b980f2816d6ee8673b6517b52cb0e808a180efc92e5c19d02cdda79066703ef"1539checksum = "4c7e4c2612746b0df8fed4ce0c69156021b704c9aefa360311c04e6e9e002eed"
11731540
1174[[package]]1541[[package]]
1175name = "futures"1542name = "futures"
1176version = "0.3.5"1543version = "0.3.6"
1177source = "registry+https://github.com/rust-lang/crates.io-index"1544source = "registry+https://github.com/rust-lang/crates.io-index"
1178checksum = "1e05b85ec287aac0dc34db7d4a569323df697f9c55b99b15d6b4ef8cde49f613"1545checksum = "5d8e3078b7b2a8a671cb7a3d17b4760e4181ea243227776ba83fd043b4ca034e"
1179dependencies = [1546dependencies = [
1180 "futures-channel",1547 "futures-channel",
1181 "futures-core",1548 "futures-core",
11881555
1189[[package]]1556[[package]]
1190name = "futures-channel"1557name = "futures-channel"
1191version = "0.3.5"1558version = "0.3.6"
1192source = "registry+https://github.com/rust-lang/crates.io-index"1559source = "registry+https://github.com/rust-lang/crates.io-index"
1193checksum = "f366ad74c28cca6ba456d95e6422883cfb4b252a83bed929c83abfdbbf2967d5"1560checksum = "a7a4d35f7401e948629c9c3d6638fb9bf94e0b2121e96c3b428cc4e631f3eb74"
1194dependencies = [1561dependencies = [
1195 "futures-core",1562 "futures-core",
1196 "futures-sink",1563 "futures-sink",
12071574
1208[[package]]1575[[package]]
1209name = "futures-core"1576name = "futures-core"
1210version = "0.3.5"1577version = "0.3.6"
1211source = "registry+https://github.com/rust-lang/crates.io-index"1578source = "registry+https://github.com/rust-lang/crates.io-index"
1212checksum = "59f5fff90fd5d971f936ad674802482ba441b6f09ba5e15fd8b39145582ca399"1579checksum = "d674eaa0056896d5ada519900dbf97ead2e46a7b6621e8160d79e2f2e1e2784b"
12131580
1214[[package]]1581[[package]]
1215name = "futures-core-preview"1582name = "futures-core-preview"
1223source = "registry+https://github.com/rust-lang/crates.io-index"1590source = "registry+https://github.com/rust-lang/crates.io-index"
1224checksum = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4"1591checksum = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4"
1225dependencies = [1592dependencies = [
1226 "futures 0.1.29",1593 "futures 0.1.30",
1227 "num_cpus",1594 "num_cpus",
1228]1595]
12291596
1233source = "registry+https://github.com/rust-lang/crates.io-index"1600source = "registry+https://github.com/rust-lang/crates.io-index"
1234checksum = "fdcef58a173af8148b182684c9f2d5250875adbcaff7b5794073894f9d8634a9"1601checksum = "fdcef58a173af8148b182684c9f2d5250875adbcaff7b5794073894f9d8634a9"
1235dependencies = [1602dependencies = [
1236 "futures 0.1.29",1603 "futures 0.1.30",
1237 "futures 0.3.5",1604 "futures 0.3.6",
1238 "lazy_static",1605 "lazy_static",
1239 "log",1606 "log",
1240 "parking_lot 0.9.0",1607 "parking_lot 0.9.0",
12451612
1246[[package]]1613[[package]]
1247name = "futures-executor"1614name = "futures-executor"
1248version = "0.3.5"1615version = "0.3.6"
1249source = "registry+https://github.com/rust-lang/crates.io-index"1616source = "registry+https://github.com/rust-lang/crates.io-index"
1250checksum = "10d6bb888be1153d3abeb9006b11b02cf5e9b209fda28693c31ae1e4e012e314"1617checksum = "cc709ca1da6f66143b8c9bec8e6260181869893714e9b5a490b169b0414144ab"
1251dependencies = [1618dependencies = [
1252 "futures-core",1619 "futures-core",
1253 "futures-task",1620 "futures-task",
12571624
1258[[package]]1625[[package]]
1259name = "futures-io"1626name = "futures-io"
1260version = "0.3.5"1627version = "0.3.6"
1261source = "registry+https://github.com/rust-lang/crates.io-index"1628source = "registry+https://github.com/rust-lang/crates.io-index"
1262checksum = "de27142b013a8e869c14957e6d2edeef89e97c289e69d042ee3a49acd8b51789"1629checksum = "5fc94b64bb39543b4e432f1790b6bf18e3ee3b74653c5449f63310e9a74b123c"
1630
1631[[package]]
1632name = "futures-lite"
1633version = "1.11.1"
1634source = "registry+https://github.com/rust-lang/crates.io-index"
1635checksum = "381a7ad57b1bad34693f63f6f377e1abded7a9c85c9d3eb6771e11c60aaadab9"
1636dependencies = [
1637 "fastrand",
1638 "futures-core",
1639 "futures-io",
1640 "memchr",
1641 "parking",
1642 "pin-project-lite",
1643 "waker-fn",
1644]
12631645
1264[[package]]1646[[package]]
1265name = "futures-macro"1647name = "futures-macro"
1266version = "0.3.5"1648version = "0.3.6"
1267source = "registry+https://github.com/rust-lang/crates.io-index"1649source = "registry+https://github.com/rust-lang/crates.io-index"
1268checksum = "d0b5a30a4328ab5473878237c447333c093297bded83a4983d10f4deea240d39"1650checksum = "f57ed14da4603b2554682e9f2ff3c65d7567b53188db96cb71538217fc64581b"
1269dependencies = [1651dependencies = [
1270 "proc-macro-hack",1652 "proc-macro-hack",
1271 "proc-macro2",1653 "proc-macro2",
1272 "quote 1.0.7",1654 "quote",
1273 "syn 1.0.34",1655 "syn",
1274]1656]
12751657
1276[[package]]1658[[package]]
1277name = "futures-sink"1659name = "futures-sink"
1278version = "0.3.5"1660version = "0.3.6"
1279source = "registry+https://github.com/rust-lang/crates.io-index"1661source = "registry+https://github.com/rust-lang/crates.io-index"
1280checksum = "3f2032893cb734c7a05d85ce0cc8b8c4075278e93b24b66f9de99d6eb0fa8acc"1662checksum = "0d8764258ed64ebc5d9ed185cf86a95db5cac810269c5d20ececb32e0088abbd"
12811663
1282[[package]]1664[[package]]
1283name = "futures-task"1665name = "futures-task"
1284version = "0.3.5"1666version = "0.3.6"
1285source = "registry+https://github.com/rust-lang/crates.io-index"1667source = "registry+https://github.com/rust-lang/crates.io-index"
1286checksum = "bdb66b5f09e22019b1ab0830f7785bcea8e7a42148683f99214f73f8ec21a626"1668checksum = "4dd26820a9f3637f1302da8bceba3ff33adbe53464b54ca24d4e2d4f1db30f94"
1287dependencies = [1669dependencies = [
1288 "once_cell",1670 "once_cell 1.4.1",
1289]1671]
12901672
1291[[package]]1673[[package]]
13021684
1303[[package]]1685[[package]]
1304name = "futures-util"1686name = "futures-util"
1305version = "0.3.5"1687version = "0.3.6"
1306source = "registry+https://github.com/rust-lang/crates.io-index"1688source = "registry+https://github.com/rust-lang/crates.io-index"
1307checksum = "8764574ff08b701a084482c3c7031349104b07ac897393010494beaa18ce32c6"1689checksum = "8a894a0acddba51a2d49a6f4263b1e64b8c579ece8af50fa86503d52cd1eea34"
1308dependencies = [1690dependencies = [
1309 "futures 0.1.29",1691 "futures 0.1.30",
1310 "futures-channel",1692 "futures-channel",
1311 "futures-core",1693 "futures-core",
1312 "futures-io",1694 "futures-io",
1333 "slab",1715 "slab",
1334]1716]
1335
1336[[package]]
1337name = "futures_codec"
1338version = "0.3.4"
1339source = "registry+https://github.com/rust-lang/crates.io-index"
1340checksum = "a0a73299e4718f5452e45980fc1d6957a070abe308d3700b63b8673f47e1c2b3"
1341dependencies = [
1342 "bytes 0.5.6",
1343 "futures 0.3.5",
1344 "memchr",
1345 "pin-project",
1346]
13471717
1348[[package]]1718[[package]]
1349name = "futures_codec"1719name = "futures_codec"
1352checksum = "ce54d63f8b0c75023ed920d46fd71d0cbbb830b0ee012726b5b4f506fb6dea5b"1722checksum = "ce54d63f8b0c75023ed920d46fd71d0cbbb830b0ee012726b5b4f506fb6dea5b"
1353dependencies = [1723dependencies = [
1354 "bytes 0.5.6",1724 "bytes 0.5.6",
1355 "futures 0.3.5",1725 "futures 0.3.6",
1356 "memchr",1726 "memchr",
1357 "pin-project",1727 "pin-project",
1358]1728]
13741744
1375[[package]]1745[[package]]
1376name = "generic-array"1746name = "generic-array"
1377version = "0.14.3"1747version = "0.14.4"
1378source = "registry+https://github.com/rust-lang/crates.io-index"1748source = "registry+https://github.com/rust-lang/crates.io-index"
1379checksum = "60fb4bb6bba52f78a471264d9a3b7d026cc0af47b22cd2cffbc0b787ca003e63"1749checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817"
1380dependencies = [1750dependencies = [
1381 "typenum",1751 "typenum",
1382 "version_check",1752 "version_check",
14061776
1407[[package]]1777[[package]]
1408name = "getrandom"1778name = "getrandom"
1409version = "0.1.14"1779version = "0.1.15"
1410source = "registry+https://github.com/rust-lang/crates.io-index"1780source = "registry+https://github.com/rust-lang/crates.io-index"
1411checksum = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb"1781checksum = "fc587bc0ec293155d5bfa6b9891ec18a1e330c234f896ea47fbada4cadbe47e6"
1412dependencies = [1782dependencies = [
1413 "cfg-if",1783 "cfg-if 0.1.10",
1414 "libc",1784 "libc",
1415 "wasi",1785 "wasi 0.9.0+wasi-snapshot-preview1",
1416]1786]
1787
1788[[package]]
1789name = "getrandom"
1790version = "0.2.0"
1791source = "registry+https://github.com/rust-lang/crates.io-index"
1792checksum = "ee8025cf36f917e6a52cce185b7c7177689b838b7ec138364e50cc2277a56cf4"
1793dependencies = [
1794 "cfg-if 0.1.10",
1795 "libc",
1796 "wasi 0.9.0+wasi-snapshot-preview1",
1797]
14171798
1418[[package]]1799[[package]]
1419name = "ghash"1800name = "ghash"
1424 "polyval",1805 "polyval",
1425]1806]
1807
1808[[package]]
1809name = "gimli"
1810version = "0.21.0"
1811source = "registry+https://github.com/rust-lang/crates.io-index"
1812checksum = "bcc8e0c9bce37868955864dbecd2b1ab2bdf967e6f28066d65aaac620444b65c"
1813dependencies = [
1814 "fallible-iterator",
1815 "indexmap",
1816 "stable_deref_trait",
1817]
14261818
1427[[package]]1819[[package]]
1428name = "gimli"1820name = "gimli"
1449 "regex",1841 "regex",
1450]1842]
1843
1844[[package]]
1845name = "gloo-timers"
1846version = "0.2.1"
1847source = "registry+https://github.com/rust-lang/crates.io-index"
1848checksum = "47204a46aaff920a1ea58b11d03dec6f704287d27561724a4631e450654a891f"
1849dependencies = [
1850 "futures-channel",
1851 "futures-core",
1852 "js-sys",
1853 "wasm-bindgen",
1854 "web-sys",
1855]
14511856
1452[[package]]1857[[package]]
1453name = "h2"1858name = "h2"
1454version = "0.1.26"1859version = "0.1.26"
1455source = "registry+https://github.com/rust-lang/crates.io-index"1860source = "registry+https://github.com/rust-lang/crates.io-index"
1456checksum = "a5b34c246847f938a410a03c5458c7fee2274436675e76d8b903c08efc29c462"1861checksum = "a5b34c246847f938a410a03c5458c7fee2274436675e76d8b903c08efc29c462"
1457dependencies = [1862dependencies = [
1458 "byteorder",1863 "byteorder 1.3.4",
1459 "bytes 0.4.12",1864 "bytes 0.4.12",
1460 "fnv",1865 "fnv",
1461 "futures 0.1.29",1866 "futures 0.1.30",
1462 "http 0.1.21",1867 "http 0.1.21",
1463 "indexmap",1868 "indexmap",
1464 "log",1869 "log",
1481 "http 0.2.1",1886 "http 0.2.1",
1482 "indexmap",1887 "indexmap",
1483 "slab",1888 "slab",
1484 "tokio 0.2.21",1889 "tokio 0.2.22",
1485 "tokio-util",1890 "tokio-util",
1486 "tracing",1891 "tracing",
1487]1892]
1501 "crunchy",1906 "crunchy",
1502]1907]
1908
1909[[package]]
1910name = "hashbrown"
1911version = "0.1.8"
1912source = "registry+https://github.com/rust-lang/crates.io-index"
1913checksum = "3bae29b6653b3412c2e71e9d486db9f9df5d701941d86683005efb9f2d28e3da"
1914dependencies = [
1915 "byteorder 1.3.4",
1916 "scopeguard 0.3.3",
1917]
15031918
1504[[package]]1919[[package]]
1505name = "hashbrown"1920name = "hashbrown"
1506version = "0.6.3"1921version = "0.6.3"
1507source = "registry+https://github.com/rust-lang/crates.io-index"1922source = "registry+https://github.com/rust-lang/crates.io-index"
1508checksum = "8e6073d0ca812575946eb5f35ff68dbe519907b25c42530389ff946dc84c6ead"1923checksum = "8e6073d0ca812575946eb5f35ff68dbe519907b25c42530389ff946dc84c6ead"
1509dependencies = [1924dependencies = [
1510 "ahash",1925 "ahash 0.2.19",
1511 "autocfg 0.1.7",1926 "autocfg 0.1.7",
1512]1927]
15131928
1514[[package]]1929[[package]]
1515name = "hashbrown"1930name = "hashbrown"
1516version = "0.8.1"1931version = "0.8.2"
1517source = "registry+https://github.com/rust-lang/crates.io-index"1932source = "registry+https://github.com/rust-lang/crates.io-index"
1518checksum = "34f595585f103464d8d2f6e9864682d74c1601fed5e07d62b1c9058dba8246fb"1933checksum = "e91b62f79061a0bc2e046024cb7ba44b08419ed238ecbd9adbd787434b9e8c25"
1519dependencies = [1934dependencies = [
1935 "ahash 0.3.8",
1520 "autocfg 1.0.0",1936 "autocfg 1.0.1",
1521]1937]
1938
1939[[package]]
1940name = "hashbrown"
1941version = "0.9.1"
1942source = "registry+https://github.com/rust-lang/crates.io-index"
1943checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04"
15221944
1523[[package]]1945[[package]]
1524name = "heck"1946name = "heck"
15311953
1532[[package]]1954[[package]]
1533name = "hermit-abi"1955name = "hermit-abi"
1534version = "0.1.15"1956version = "0.1.17"
1535source = "registry+https://github.com/rust-lang/crates.io-index"1957source = "registry+https://github.com/rust-lang/crates.io-index"
1536checksum = "3deed196b6e7f9e44a2ae8d94225d80302d81208b1bb673fd21fe634645c85a9"1958checksum = "5aca5565f760fb5b220e499d72710ed156fdb74e631659e99377d9ebfbd13ae8"
1537dependencies = [1959dependencies = [
1538 "libc",1960 "libc",
1539]1961]
15461968
1547[[package]]1969[[package]]
1548name = "hex-literal"1970name = "hex-literal"
1549version = "0.2.1"1971version = "0.3.1"
1550source = "registry+https://github.com/rust-lang/crates.io-index"1972source = "registry+https://github.com/rust-lang/crates.io-index"
1551checksum = "961de220ec9a91af2e1e5bd80d02109155695e516771762381ef8581317066e0"1973checksum = "5af1f635ef1bc545d78392b136bfe1c9809e029023c84a3638a864a10b8819c8"
1552dependencies = [
1553 "hex-literal-impl",
1554 "proc-macro-hack",
1555]
15561974
1557[[package]]1975[[package]]
1558name = "hex-literal-impl"1976name = "hex_fmt"
1559version = "0.2.2"1977version = "0.3.0"
1560source = "registry+https://github.com/rust-lang/crates.io-index"1978source = "registry+https://github.com/rust-lang/crates.io-index"
1561checksum = "853f769599eb31de176303197b7ba4973299c38c7a7604a6bc88c3eef05b9b46"1979checksum = "b07f60793ff0a4d9cef0f18e63b5357e06209987153a64648c972c1e5aff336f"
1562dependencies = [
1563 "proc-macro-hack",
1564]
15651980
1566[[package]]1981[[package]]
1567name = "hmac"1982name = "hmac"
1613checksum = "6741c859c1b2463a423a1dbce98d418e6c3c3fc720fb0d45528657320920292d"2028checksum = "6741c859c1b2463a423a1dbce98d418e6c3c3fc720fb0d45528657320920292d"
1614dependencies = [2029dependencies = [
1615 "bytes 0.4.12",2030 "bytes 0.4.12",
1616 "futures 0.1.29",2031 "futures 0.1.30",
1617 "http 0.1.21",2032 "http 0.1.21",
1618 "tokio-buf",2033 "tokio-buf",
1619]2034]
1634source = "registry+https://github.com/rust-lang/crates.io-index"2049source = "registry+https://github.com/rust-lang/crates.io-index"
1635checksum = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9"2050checksum = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9"
2051
2052[[package]]
2053name = "httpdate"
2054version = "0.3.2"
2055source = "registry+https://github.com/rust-lang/crates.io-index"
2056checksum = "494b4d60369511e7dea41cf646832512a94e542f68bb9c49e54518e0f468eb47"
16362057
1637[[package]]2058[[package]]
1638name = "humantime"2059name = "humantime"
1650checksum = "9dbe6ed1438e1f8ad955a4701e9a944938e9519f6888d12d8558b645e247d5f6"2071checksum = "9dbe6ed1438e1f8ad955a4701e9a944938e9519f6888d12d8558b645e247d5f6"
1651dependencies = [2072dependencies = [
1652 "bytes 0.4.12",2073 "bytes 0.4.12",
1653 "futures 0.1.29",2074 "futures 0.1.30",
1654 "futures-cpupool",2075 "futures-cpupool",
1655 "h2 0.1.26",2076 "h2 0.1.26",
1656 "http 0.1.21",2077 "http 0.1.21",
16752096
1676[[package]]2097[[package]]
1677name = "hyper"2098name = "hyper"
1678version = "0.13.7"2099version = "0.13.8"
1679source = "registry+https://github.com/rust-lang/crates.io-index"2100source = "registry+https://github.com/rust-lang/crates.io-index"
1680checksum = "3e68a8dd9716185d9e64ea473ea6ef63529252e3e27623295a0378a19665d5eb"2101checksum = "2f3afcfae8af5ad0576a31e768415edb627824129e8e5a29b8bfccb2f234e835"
1681dependencies = [2102dependencies = [
1682 "bytes 0.5.6",2103 "bytes 0.5.6",
1683 "futures-channel",2104 "futures-channel",
1687 "http 0.2.1",2108 "http 0.2.1",
1688 "http-body 0.3.1",2109 "http-body 0.3.1",
1689 "httparse",2110 "httparse",
2111 "httpdate",
1690 "itoa",2112 "itoa",
1691 "pin-project",2113 "pin-project",
1692 "socket2",2114 "socket2",
1693 "time",
1694 "tokio 0.2.21",2115 "tokio 0.2.22",
1695 "tower-service",2116 "tower-service",
1696 "tracing",2117 "tracing",
1697 "want 0.3.0",2118 "want 0.3.0",
1698]2119]
16992120
1700[[package]]2121[[package]]
1701name = "hyper-rustls"2122name = "hyper-rustls"
1702version = "0.20.0"2123version = "0.21.0"
1703source = "registry+https://github.com/rust-lang/crates.io-index"2124source = "registry+https://github.com/rust-lang/crates.io-index"
1704checksum = "ac965ea399ec3a25ac7d13b8affd4b8f39325cca00858ddf5eb29b79e6b14b08"2125checksum = "37743cc83e8ee85eacfce90f2f4102030d9ff0a95244098d781e9bee4a90abb6"
1705dependencies = [2126dependencies = [
1706 "bytes 0.5.6",2127 "bytes 0.5.6",
1707 "ct-logs",2128 "ct-logs",
1708 "futures-util",2129 "futures-util",
1709 "hyper 0.13.7",2130 "hyper 0.13.8",
1710 "log",2131 "log",
1711 "rustls",2132 "rustls",
1712 "rustls-native-certs",2133 "rustls-native-certs",
1713 "tokio 0.2.21",2134 "tokio 0.2.22",
1714 "tokio-rustls",2135 "tokio-rustls",
1715 "webpki",2136 "webpki",
1716]2137]
1746 "parity-scale-codec",2167 "parity-scale-codec",
1747]2168]
1748
1749[[package]]
1750name = "impl-serde"
1751version = "0.2.3"
1752source = "registry+https://github.com/rust-lang/crates.io-index"
1753checksum = "58e3cae7e99c7ff5a995da2cf78dd0a5383740eda71d98cf7b1910c301ac69b8"
1754dependencies = [
1755 "serde",
1756]
17572169
1758[[package]]2170[[package]]
1759name = "impl-serde"2171name = "impl-serde"
1771checksum = "7ef5550a42e3740a0e71f909d4c861056a284060af885ae7aa6242820f920d9d"2183checksum = "7ef5550a42e3740a0e71f909d4c861056a284060af885ae7aa6242820f920d9d"
1772dependencies = [2184dependencies = [
1773 "proc-macro2",2185 "proc-macro2",
1774 "quote 1.0.7",2186 "quote",
1775 "syn 1.0.34",2187 "syn",
1776]2188]
17772189
1778[[package]]2190[[package]]
1779name = "indexmap"2191name = "indexmap"
1780version = "1.5.0"2192version = "1.6.0"
1781source = "registry+https://github.com/rust-lang/crates.io-index"2193source = "registry+https://github.com/rust-lang/crates.io-index"
1782checksum = "5b88cd59ee5f71fea89a62248fc8f387d44400cefe05ef548466d61ced9029a7"2194checksum = "55e2e4c765aa53a0424761bf9f41aa7a6ac1efa87238f59560640e27fca028f2"
1783dependencies = [2195dependencies = [
1784 "autocfg 1.0.0",2196 "autocfg 1.0.1",
1785 "hashbrown 0.8.1",2197 "hashbrown 0.9.1",
2198 "serde",
1786]2199]
2200
2201[[package]]
2202name = "instant"
2203version = "0.1.7"
2204source = "registry+https://github.com/rust-lang/crates.io-index"
2205checksum = "63312a18f7ea8760cdd0a7c5aac1a619752a246b833545e3e36d1f81f7cd9e66"
2206dependencies = [
2207 "cfg-if 0.1.10",
2208]
17872209
1788[[package]]2210[[package]]
1789name = "integer-sqrt"2211name = "integer-sqrt"
1790version = "0.1.3"2212version = "0.1.5"
1791source = "registry+https://github.com/rust-lang/crates.io-index"2213source = "registry+https://github.com/rust-lang/crates.io-index"
1792checksum = "f65877bf7d44897a473350b1046277941cee20b263397e90869c50b6e766088b"2214checksum = "276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770"
2215dependencies = [
2216 "num-traits",
2217]
17932218
1794[[package]]2219[[package]]
1795name = "intervalier"2220name = "intervalier"
1796version = "0.4.0"2221version = "0.4.0"
1797source = "registry+https://github.com/rust-lang/crates.io-index"2222source = "registry+https://github.com/rust-lang/crates.io-index"
1798checksum = "64fa110ec7b8f493f416eed552740d10e7030ad5f63b2308f82c9608ec2df275"2223checksum = "64fa110ec7b8f493f416eed552740d10e7030ad5f63b2308f82c9608ec2df275"
1799dependencies = [2224dependencies = [
1800 "futures 0.3.5",2225 "futures 0.3.6",
1801 "futures-timer 2.0.2",2226 "futures-timer 2.0.2",
1802]2227]
18032228
18572282
1858[[package]]2283[[package]]
1859name = "js-sys"2284name = "js-sys"
1860version = "0.3.42"2285version = "0.3.45"
1861source = "registry+https://github.com/rust-lang/crates.io-index"2286source = "registry+https://github.com/rust-lang/crates.io-index"
1862checksum = "52732a3d3ad72c58ad2dc70624f9c17b46ecd0943b9a4f1ee37c4c18c5d983e2"2287checksum = "ca059e81d9486668f12d455a4ea6daa600bd408134cd17e3d3fb5a32d1f016f8"
1863dependencies = [2288dependencies = [
1864 "wasm-bindgen",2289 "wasm-bindgen",
1865]2290]
18662291
1867[[package]]2292[[package]]
1868name = "jsonrpc-client-transports"2293name = "jsonrpc-client-transports"
1869version = "14.2.0"2294version = "15.1.0"
1870source = "registry+https://github.com/rust-lang/crates.io-index"2295source = "registry+https://github.com/rust-lang/crates.io-index"
1871checksum = "ecbdaacc17243168d9d1fa6b2bd7556a27e1e60a621d8a2a6e590ae2b145d158"2296checksum = "489b9c612e60c766f751ab40fcb43cbb55a1e10bb44a9b4307ed510ca598cbd7"
1872dependencies = [2297dependencies = [
1873 "failure",2298 "failure",
1874 "futures 0.1.29",2299 "futures 0.1.30",
1875 "jsonrpc-core",2300 "jsonrpc-core",
1876 "jsonrpc-pubsub",2301 "jsonrpc-pubsub",
1877 "log",2302 "log",
18822307
1883[[package]]2308[[package]]
1884name = "jsonrpc-core"2309name = "jsonrpc-core"
1885version = "14.2.0"2310version = "15.1.0"
1886source = "registry+https://github.com/rust-lang/crates.io-index"2311source = "registry+https://github.com/rust-lang/crates.io-index"
1887checksum = "a0747307121ffb9703afd93afbd0fb4f854c38fb873f2c8b90e0e902f27c7b62"2312checksum = "0745a6379e3edc893c84ec203589790774e4247420033e71a76d3ab4687991fa"
1888dependencies = [2313dependencies = [
1889 "futures 0.1.29",2314 "futures 0.1.30",
1890 "log",2315 "log",
1891 "serde",2316 "serde",
1892 "serde_derive",2317 "serde_derive",
18952320
1896[[package]]2321[[package]]
1897name = "jsonrpc-core-client"2322name = "jsonrpc-core-client"
1898version = "14.2.0"2323version = "15.1.0"
1899source = "registry+https://github.com/rust-lang/crates.io-index"2324source = "registry+https://github.com/rust-lang/crates.io-index"
1900checksum = "34221123bc79b66279a3fde2d3363553835b43092d629b34f2e760c44dc94713"2325checksum = "6f764902d7b891344a0acb65625f32f6f7c6db006952143bd650209fbe7d94db"
1901dependencies = [2326dependencies = [
1902 "jsonrpc-client-transports",2327 "jsonrpc-client-transports",
1903]2328]
19042329
1905[[package]]2330[[package]]
1906name = "jsonrpc-derive"2331name = "jsonrpc-derive"
1907version = "14.2.1"2332version = "15.1.0"
1908source = "registry+https://github.com/rust-lang/crates.io-index"2333source = "registry+https://github.com/rust-lang/crates.io-index"
1909checksum = "0fadf6945e227246825a583514534d864554e9f23d80b3c77d034b10983db5ef"2334checksum = "99a847f9ec7bb52149b2786a17c9cb260d6effc6b8eeb8c16b343a487a7563a3"
1910dependencies = [2335dependencies = [
1911 "proc-macro-crate",2336 "proc-macro-crate",
1912 "proc-macro2",2337 "proc-macro2",
1913 "quote 1.0.7",2338 "quote",
1914 "syn 1.0.34",2339 "syn",
1915]2340]
19162341
1917[[package]]2342[[package]]
1918name = "jsonrpc-http-server"2343name = "jsonrpc-http-server"
1919version = "14.2.0"2344version = "15.1.0"
1920source = "registry+https://github.com/rust-lang/crates.io-index"2345source = "registry+https://github.com/rust-lang/crates.io-index"
1921checksum = "0da906d682799df05754480dac1b9e70ec92e12c19ebafd2662a5ea1c9fd6522"2346checksum = "4fb5c4513b7b542f42da107942b7b759f27120b5cc894729f88254b28dff44b7"
1922dependencies = [2347dependencies = [
1923 "hyper 0.12.35",2348 "hyper 0.12.35",
1924 "jsonrpc-core",2349 "jsonrpc-core",
19312356
1932[[package]]2357[[package]]
1933name = "jsonrpc-ipc-server"2358name = "jsonrpc-ipc-server"
1934version = "14.2.0"2359version = "15.1.0"
1935source = "registry+https://github.com/rust-lang/crates.io-index"2360source = "registry+https://github.com/rust-lang/crates.io-index"
1936checksum = "dedccd693325d833963b549e959137f30a7a0ea650cde92feda81dc0c1393cb5"2361checksum = "cf50e53e4eea8f421a7316c5f63e395f7bc7c4e786a6dc54d76fab6ff7aa7ce7"
1937dependencies = [2362dependencies = [
1938 "jsonrpc-core",2363 "jsonrpc-core",
1939 "jsonrpc-server-utils",2364 "jsonrpc-server-utils",
19452370
1946[[package]]2371[[package]]
1947name = "jsonrpc-pubsub"2372name = "jsonrpc-pubsub"
1948version = "14.2.0"2373version = "15.1.0"
1949source = "registry+https://github.com/rust-lang/crates.io-index"2374source = "registry+https://github.com/rust-lang/crates.io-index"
1950checksum = "2d44f5602a11d657946aac09357956d2841299ed422035edf140c552cb057986"2375checksum = "639558e0604013be9787ae52f798506ae42bf4220fe587bdc5625871cc8b9c77"
1951dependencies = [2376dependencies = [
1952 "jsonrpc-core",2377 "jsonrpc-core",
1953 "log",2378 "log",
19582383
1959[[package]]2384[[package]]
1960name = "jsonrpc-server-utils"2385name = "jsonrpc-server-utils"
1961version = "14.2.0"2386version = "15.1.0"
1962source = "registry+https://github.com/rust-lang/crates.io-index"2387source = "registry+https://github.com/rust-lang/crates.io-index"
1963checksum = "56cbfb462e7f902e21121d9f0d1c2b77b2c5b642e1a4e8f4ebfa2e15b94402bb"2388checksum = "72f1f3990650c033bd8f6bd46deac76d990f9bbfb5f8dc8c4767bf0a00392176"
1964dependencies = [2389dependencies = [
1965 "bytes 0.4.12",2390 "bytes 0.4.12",
1966 "globset",2391 "globset",
19742399
1975[[package]]2400[[package]]
1976name = "jsonrpc-ws-server"2401name = "jsonrpc-ws-server"
1977version = "14.2.0"2402version = "15.1.0"
1978source = "registry+https://github.com/rust-lang/crates.io-index"2403source = "registry+https://github.com/rust-lang/crates.io-index"
1979checksum = "903d3109fe7c4acb932b567e1e607e0f524ed04741b09fb0e61841bc40a022fc"2404checksum = "6596fe75209b73a2a75ebe1dce4e60e03b88a2b25e8807b667597f6315150d22"
1980dependencies = [2405dependencies = [
1981 "jsonrpc-core",2406 "jsonrpc-core",
1982 "jsonrpc-server-utils",2407 "jsonrpc-server-utils",
1983 "log",2408 "log",
2409 "parity-ws",
1984 "parking_lot 0.10.2",2410 "parking_lot 0.10.2",
1985 "slab",2411 "slab",
1986 "ws",
1987]2412]
19882413
1989[[package]]2414[[package]]
20132438
2014[[package]]2439[[package]]
2015name = "kvdb"2440name = "kvdb"
2016version = "0.6.0"2441version = "0.7.0"
2017source = "registry+https://github.com/rust-lang/crates.io-index"2442source = "registry+https://github.com/rust-lang/crates.io-index"
2018checksum = "e763b2a9b500ba47948061d1e8bc3b5f03a8a1f067dbcf822a4d2c84d2b54a3a"2443checksum = "0315ef2f688e33844400b31f11c263f2b3dc21d8b9355c6891c5f185fae43f9a"
2019dependencies = [2444dependencies = [
2020 "parity-util-mem",2445 "parity-util-mem",
2021 "smallvec 1.4.1",2446 "smallvec 1.4.2",
2022]2447]
20232448
2024[[package]]2449[[package]]
2025name = "kvdb-memorydb"2450name = "kvdb-memorydb"
2026version = "0.6.0"2451version = "0.7.0"
2027source = "registry+https://github.com/rust-lang/crates.io-index"2452source = "registry+https://github.com/rust-lang/crates.io-index"
2028checksum = "73027d5e228de6f503b5b7335d530404fc26230a6ae3e09b33ec6e45408509a4"2453checksum = "73de822b260a3bdfb889dbbb65bb2d473eee2253973d6fa4a5d149a2a4a7c66e"
2029dependencies = [2454dependencies = [
2030 "kvdb",2455 "kvdb",
2031 "parity-util-mem",2456 "parity-util-mem",
20342459
2035[[package]]2460[[package]]
2036name = "kvdb-rocksdb"2461name = "kvdb-rocksdb"
2037version = "0.8.0"2462version = "0.9.1"
2038source = "registry+https://github.com/rust-lang/crates.io-index"2463source = "registry+https://github.com/rust-lang/crates.io-index"
2039checksum = "84384eca250c7ff67877eda5336f28a86586aaee24acb945643590671f6bfce1"2464checksum = "44947dd392f09475af614d740fe0320b66d01cb5b977f664bbbb5e45a70ea4c1"
2040dependencies = [2465dependencies = [
2041 "fs-swap",2466 "fs-swap",
2042 "kvdb",2467 "kvdb",
2047 "parking_lot 0.10.2",2472 "parking_lot 0.10.2",
2048 "regex",2473 "regex",
2049 "rocksdb",2474 "rocksdb",
2050 "smallvec 1.4.1",2475 "smallvec 1.4.2",
2051]2476]
20522477
2053[[package]]2478[[package]]
20582483
2059[[package]]2484[[package]]
2060name = "lazycell"2485name = "lazycell"
2061version = "1.2.1"2486version = "1.3.0"
2062source = "registry+https://github.com/rust-lang/crates.io-index"2487source = "registry+https://github.com/rust-lang/crates.io-index"
2063checksum = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f"2488checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
20642489
2065[[package]]2490[[package]]
2066name = "libc"2491name = "leb128"
2067version = "0.2.73"2492version = "0.2.4"
2068source = "registry+https://github.com/rust-lang/crates.io-index"2493source = "registry+https://github.com/rust-lang/crates.io-index"
2069checksum = "bd7d4bd64732af4bf3a67f367c27df8520ad7e230c5817b8ff485864d80242b9"2494checksum = "3576a87f2ba00f6f106fdfcd16db1d698d648a26ad8e0573cad8537c3c362d2a"
20702495
2071[[package]]2496[[package]]
2072name = "libflate"2497name = "libc"
2073version = "1.0.2"2498version = "0.2.79"
2074source = "registry+https://github.com/rust-lang/crates.io-index"2499source = "registry+https://github.com/rust-lang/crates.io-index"
2075checksum = "e9bac9023e1db29c084f9f8cd9d3852e5e8fddf98fb47c4964a0ea4663d95949"2500checksum = "2448f6066e80e3bfc792e9c98bf705b4b0fc6e8ef5b43e5889aff0eaa9c58743"
2076dependencies = [
2077 "adler32",
2078 "crc32fast",
2079 "libflate_lz77",
2080 "rle-decode-fast",
2081]
2082
2083[[package]]
2084name = "libflate_lz77"
2085version = "1.0.0"
2086source = "registry+https://github.com/rust-lang/crates.io-index"
2087checksum = "3286f09f7d4926fc486334f28d8d2e6ebe4f7f9994494b6dab27ddfad2c9b11b"
20882501
2089[[package]]2502[[package]]
2090name = "libloading"2503name = "libloading"
21042517
2105[[package]]2518[[package]]
2106name = "libp2p"2519name = "libp2p"
2107version = "0.19.1"2520version = "0.28.1"
2108source = "registry+https://github.com/rust-lang/crates.io-index"2521source = "registry+https://github.com/rust-lang/crates.io-index"
2109checksum = "057eba5432d3e740e313c6e13c9153d0cb76b4f71bfc2e5242ae5bdb7d41af67"2522checksum = "571f5a4604c1a40d75651da141dfde29ad15329f537a779528803297d2220274"
2110dependencies = [2523dependencies = [
2524 "atomic",
2111 "bytes 0.5.6",2525 "bytes 0.5.6",
2112 "futures 0.3.5",2526 "futures 0.3.6",
2113 "lazy_static",2527 "lazy_static",
2114 "libp2p-core",2528 "libp2p-core",
2115 "libp2p-core-derive",2529 "libp2p-core-derive",
2530 "libp2p-deflate",
2116 "libp2p-dns",2531 "libp2p-dns",
2532 "libp2p-floodsub",
2533 "libp2p-gossipsub",
2117 "libp2p-identify",2534 "libp2p-identify",
2118 "libp2p-kad",2535 "libp2p-kad",
2119 "libp2p-mdns",2536 "libp2p-mdns",
2120 "libp2p-mplex",2537 "libp2p-mplex",
2121 "libp2p-noise",2538 "libp2p-noise",
2122 "libp2p-ping",2539 "libp2p-ping",
2540 "libp2p-plaintext",
2541 "libp2p-pnet",
2542 "libp2p-request-response",
2123 "libp2p-swarm",2543 "libp2p-swarm",
2124 "libp2p-tcp",2544 "libp2p-tcp",
2545 "libp2p-uds",
2125 "libp2p-wasm-ext",2546 "libp2p-wasm-ext",
2126 "libp2p-websocket",2547 "libp2p-websocket",
2127 "libp2p-yamux",2548 "libp2p-yamux",
2128 "multihash",2549 "multihash",
2129 "parity-multiaddr 0.9.1",2550 "parity-multiaddr",
2130 "parking_lot 0.10.2",2551 "parking_lot 0.10.2",
2131 "pin-project",2552 "pin-project",
2132 "smallvec 1.4.1",2553 "smallvec 1.4.2",
2133 "wasm-timer",2554 "wasm-timer",
2134]2555]
21352556
2136[[package]]2557[[package]]
2137name = "libp2p-core"2558name = "libp2p-core"
2138version = "0.19.2"2559version = "0.22.1"
2139source = "registry+https://github.com/rust-lang/crates.io-index"2560source = "registry+https://github.com/rust-lang/crates.io-index"
2140checksum = "3a0387b930c3d4c2533dc4893c1e0394185ddcc019846121b1b27491e45a2c08"2561checksum = "52f13ba8c7df0768af2eb391696d562c7de88cc3a35122531aaa6a7d77754d25"
2141dependencies = [2562dependencies = [
2142 "asn1_der",2563 "asn1_der",
2143 "bs58",2564 "bs58",
2144 "ed25519-dalek",2565 "ed25519-dalek",
2145 "either",2566 "either",
2146 "fnv",2567 "fnv",
2147 "futures 0.3.5",2568 "futures 0.3.6",
2148 "futures-timer 3.0.2",2569 "futures-timer 3.0.2",
2149 "lazy_static",2570 "lazy_static",
2150 "libsecp256k1",2571 "libsecp256k1",
2151 "log",2572 "log",
2152 "multihash",2573 "multihash",
2153 "multistream-select",2574 "multistream-select",
2154 "parity-multiaddr 0.9.1",2575 "parity-multiaddr",
2155 "parking_lot 0.10.2",2576 "parking_lot 0.10.2",
2156 "pin-project",2577 "pin-project",
2157 "prost",2578 "prost",
2160 "ring",2581 "ring",
2161 "rw-stream-sink",2582 "rw-stream-sink",
2162 "sha2 0.8.2",2583 "sha2 0.8.2",
2163 "smallvec 1.4.1",2584 "smallvec 1.4.2",
2164 "thiserror",2585 "thiserror",
2165 "unsigned-varint 0.4.0",2586 "unsigned-varint 0.4.0",
2166 "void",2587 "void",
21692590
2170[[package]]2591[[package]]
2171name = "libp2p-core-derive"2592name = "libp2p-core-derive"
2172version = "0.19.1"2593version = "0.20.2"
2173source = "registry+https://github.com/rust-lang/crates.io-index"2594source = "registry+https://github.com/rust-lang/crates.io-index"
2174checksum = "f09548626b737ed64080fde595e06ce1117795b8b9fc4d2629fa36561c583171"2595checksum = "f753d9324cd3ec14bf04b8a8cd0d269c87f294153d6bf2a84497a63a5ad22213"
2175dependencies = [2596dependencies = [
2176 "quote 1.0.7",2597 "quote",
2177 "syn 1.0.34",2598 "syn",
2178]2599]
2600
2601[[package]]
2602name = "libp2p-deflate"
2603version = "0.22.0"
2604source = "registry+https://github.com/rust-lang/crates.io-index"
2605checksum = "74029ae187f35f4b8ddf26b9779a68b340045d708528a103917cdca49a296db5"
2606dependencies = [
2607 "flate2",
2608 "futures 0.3.6",
2609 "libp2p-core",
2610]
21792611
2180[[package]]2612[[package]]
2181name = "libp2p-dns"2613name = "libp2p-dns"
2182version = "0.19.0"2614version = "0.22.0"
2183source = "registry+https://github.com/rust-lang/crates.io-index"2615source = "registry+https://github.com/rust-lang/crates.io-index"
2184checksum = "3cc186d9a941fd0207cf8f08ef225a735e2d7296258f570155e525f6ee732f87"2616checksum = "7cf319822e08dd65c8e060d2354e9f952895bbc433f5706c75ed010c152aee5e"
2185dependencies = [2617dependencies = [
2186 "futures 0.3.5",2618 "futures 0.3.6",
2187 "libp2p-core",2619 "libp2p-core",
2188 "log",2620 "log",
2189]2621]
2622
2623[[package]]
2624name = "libp2p-floodsub"
2625version = "0.22.0"
2626source = "registry+https://github.com/rust-lang/crates.io-index"
2627checksum = "d8a9acb43a3e4a4e413e0c4abe0fa49308df7c6335c88534757b647199cb8a51"
2628dependencies = [
2629 "cuckoofilter",
2630 "fnv",
2631 "futures 0.3.6",
2632 "libp2p-core",
2633 "libp2p-swarm",
2634 "prost",
2635 "prost-build",
2636 "rand 0.7.3",
2637 "smallvec 1.4.2",
2638]
2639
2640[[package]]
2641name = "libp2p-gossipsub"
2642version = "0.22.0"
2643source = "registry+https://github.com/rust-lang/crates.io-index"
2644checksum = "ab20fcb60edebe3173bbb708c6ac3444afdf1e3152dc2866b10c4f5497f17467"
2645dependencies = [
2646 "base64 0.11.0",
2647 "byteorder 1.3.4",
2648 "bytes 0.5.6",
2649 "fnv",
2650 "futures 0.3.6",
2651 "futures_codec",
2652 "hex_fmt",
2653 "libp2p-core",
2654 "libp2p-swarm",
2655 "log",
2656 "lru_time_cache",
2657 "prost",
2658 "prost-build",
2659 "rand 0.7.3",
2660 "sha2 0.8.2",
2661 "smallvec 1.4.2",
2662 "unsigned-varint 0.4.0",
2663 "wasm-timer",
2664]
21902665
2191[[package]]2666[[package]]
2192name = "libp2p-identify"2667name = "libp2p-identify"
2193version = "0.19.2"2668version = "0.22.0"
2194source = "registry+https://github.com/rust-lang/crates.io-index"2669source = "registry+https://github.com/rust-lang/crates.io-index"
2195checksum = "62f76075b170d908bae616f550ade410d9d27c013fa69042551dbfc757c7c094"2670checksum = "56396ee63aa9164eacf40c2c5d2bda8c4133c2f57e1b0425d51d3a4e362583b1"
2196dependencies = [2671dependencies = [
2197 "futures 0.3.5",2672 "futures 0.3.6",
2198 "libp2p-core",2673 "libp2p-core",
2199 "libp2p-swarm",2674 "libp2p-swarm",
2200 "log",2675 "log",
2201 "prost",2676 "prost",
2202 "prost-build",2677 "prost-build",
2203 "smallvec 1.4.1",2678 "smallvec 1.4.2",
2204 "wasm-timer",2679 "wasm-timer",
2205]2680]
22062681
2207[[package]]2682[[package]]
2208name = "libp2p-kad"2683name = "libp2p-kad"
2209version = "0.19.0"2684version = "0.23.0"
2210source = "registry+https://github.com/rust-lang/crates.io-index"2685source = "registry+https://github.com/rust-lang/crates.io-index"
2211checksum = "41d6c1d5100973527ae70d82687465b17049c1b717a7964de38b8e65000878ff"2686checksum = "cc7fa9047f8b8f544278a35c2d9d45d3b2c1785f2d86d4e1629d6edf97be3955"
2212dependencies = [2687dependencies = [
2213 "arrayvec 0.5.1",2688 "arrayvec 0.5.1",
2214 "bytes 0.5.6",2689 "bytes 0.5.6",
2215 "either",2690 "either",
2216 "fnv",2691 "fnv",
2217 "futures 0.3.5",2692 "futures 0.3.6",
2218 "futures_codec 0.3.4",2693 "futures_codec",
2219 "libp2p-core",2694 "libp2p-core",
2220 "libp2p-swarm",2695 "libp2p-swarm",
2221 "log",2696 "log",
2224 "prost-build",2699 "prost-build",
2225 "rand 0.7.3",2700 "rand 0.7.3",
2226 "sha2 0.8.2",2701 "sha2 0.8.2",
2227 "smallvec 1.4.1",2702 "smallvec 1.4.2",
2228 "uint",2703 "uint",
2229 "unsigned-varint 0.3.3",2704 "unsigned-varint 0.4.0",
2230 "void",2705 "void",
2231 "wasm-timer",2706 "wasm-timer",
2232]2707]
22332708
2234[[package]]2709[[package]]
2235name = "libp2p-mdns"2710name = "libp2p-mdns"
2236version = "0.19.2"2711version = "0.22.0"
2237source = "registry+https://github.com/rust-lang/crates.io-index"2712source = "registry+https://github.com/rust-lang/crates.io-index"
2238checksum = "7f55b2d4b80986e5bf158270ab23268ec0e7f644ece5436fbaabc5155472f357"2713checksum = "3173b5a6b2f690c29ae07798d85b9441a131ac76ddae9015ef22905b623d0c69"
2239dependencies = [2714dependencies = [
2240 "async-std",2715 "async-std",
2241 "data-encoding",2716 "data-encoding",
2242 "dns-parser",2717 "dns-parser",
2243 "either",2718 "either",
2244 "futures 0.3.5",2719 "futures 0.3.6",
2245 "lazy_static",2720 "lazy_static",
2246 "libp2p-core",2721 "libp2p-core",
2247 "libp2p-swarm",2722 "libp2p-swarm",
2248 "log",2723 "log",
2249 "net2",2724 "net2",
2250 "rand 0.7.3",2725 "rand 0.7.3",
2251 "smallvec 1.4.1",2726 "smallvec 1.4.2",
2252 "void",2727 "void",
2253 "wasm-timer",2728 "wasm-timer",
2254]2729]
22552730
2256[[package]]2731[[package]]
2257name = "libp2p-mplex"2732name = "libp2p-mplex"
2258version = "0.19.2"2733version = "0.22.0"
2259source = "registry+https://github.com/rust-lang/crates.io-index"2734source = "registry+https://github.com/rust-lang/crates.io-index"
2260checksum = "be7d913a4cd57de2013257ec73f07d77bfce390b370023e2d59083e5ca079864"2735checksum = "8a73a799cc8410b36e40b8f4c4b6babbcb9efd3727111bf517876e4acfa612d3"
2261dependencies = [2736dependencies = [
2262 "bytes 0.5.6",2737 "bytes 0.5.6",
2263 "fnv",2738 "fnv",
2264 "futures 0.3.5",2739 "futures 0.3.6",
2265 "futures_codec 0.4.1",2740 "futures_codec",
2266 "libp2p-core",2741 "libp2p-core",
2267 "log",2742 "log",
2268 "parking_lot 0.10.2",2743 "parking_lot 0.10.2",
22712746
2272[[package]]2747[[package]]
2273name = "libp2p-noise"2748name = "libp2p-noise"
2274version = "0.19.1"2749version = "0.24.0"
2275source = "registry+https://github.com/rust-lang/crates.io-index"2750source = "registry+https://github.com/rust-lang/crates.io-index"
2276checksum = "a03db664653369f46ee03fcec483a378c20195089bb43a26cb9fb0058009ac88"2751checksum = "6ef6c490042f549fb1025f2892dfe6083d97a77558f450c1feebe748ca9eb15a"
2277dependencies = [2752dependencies = [
2753 "bytes 0.5.6",
2278 "curve25519-dalek",2754 "curve25519-dalek 2.1.0",
2279 "futures 0.3.5",2755 "futures 0.3.6",
2280 "lazy_static",2756 "lazy_static",
2281 "libp2p-core",2757 "libp2p-core",
2282 "log",2758 "log",
2286 "sha2 0.8.2",2762 "sha2 0.8.2",
2287 "snow",2763 "snow",
2288 "static_assertions",2764 "static_assertions",
2289 "x25519-dalek",2765 "x25519-dalek 0.6.0",
2290 "zeroize",2766 "zeroize",
2291]2767]
22922768
2293[[package]]2769[[package]]
2294name = "libp2p-ping"2770name = "libp2p-ping"
2295version = "0.19.3"2771version = "0.22.0"
2296source = "registry+https://github.com/rust-lang/crates.io-index"2772source = "registry+https://github.com/rust-lang/crates.io-index"
2297checksum = "b8dedd34e35a9728d52d59ef36a218e411359a353f9011b2574b86ee790978f6"2773checksum = "ad063c21dfcea4518ac9e8bd4119d33a5b26c41e674f602f41f05617a368a5c8"
2298dependencies = [2774dependencies = [
2299 "futures 0.3.5",2775 "futures 0.3.6",
2300 "libp2p-core",2776 "libp2p-core",
2301 "libp2p-swarm",2777 "libp2p-swarm",
2302 "log",2778 "log",
2305 "wasm-timer",2781 "wasm-timer",
2306]2782]
2783
2784[[package]]
2785name = "libp2p-plaintext"
2786version = "0.22.0"
2787source = "registry+https://github.com/rust-lang/crates.io-index"
2788checksum = "903a12e99c72dbebefea258de887982adeacc7025baa1ceb10b7fa9928f54791"
2789dependencies = [
2790 "bytes 0.5.6",
2791 "futures 0.3.6",
2792 "futures_codec",
2793 "libp2p-core",
2794 "log",
2795 "prost",
2796 "prost-build",
2797 "rw-stream-sink",
2798 "unsigned-varint 0.4.0",
2799 "void",
2800]
2801
2802[[package]]
2803name = "libp2p-pnet"
2804version = "0.19.1"
2805source = "registry+https://github.com/rust-lang/crates.io-index"
2806checksum = "37d0db10e139d22d7af0b23ed7949449ec86262798aa0fd01595abdbcb02dc87"
2807dependencies = [
2808 "futures 0.3.6",
2809 "log",
2810 "pin-project",
2811 "rand 0.7.3",
2812 "salsa20",
2813 "sha3 0.8.2",
2814]
2815
2816[[package]]
2817name = "libp2p-request-response"
2818version = "0.3.0"
2819source = "registry+https://github.com/rust-lang/crates.io-index"
2820checksum = "9c0c9e8a4cd69d97e9646c54313d007512f411aba8c5226cfcda16df6a6e84a3"
2821dependencies = [
2822 "async-trait",
2823 "bytes 0.5.6",
2824 "futures 0.3.6",
2825 "libp2p-core",
2826 "libp2p-swarm",
2827 "log",
2828 "lru 0.6.0",
2829 "minicbor",
2830 "rand 0.7.3",
2831 "smallvec 1.4.2",
2832 "unsigned-varint 0.5.1",
2833 "wasm-timer",
2834]
23072835
2308[[package]]2836[[package]]
2309name = "libp2p-swarm"2837name = "libp2p-swarm"
2310version = "0.19.1"2838version = "0.22.0"
2311source = "registry+https://github.com/rust-lang/crates.io-index"2839source = "registry+https://github.com/rust-lang/crates.io-index"
2312checksum = "ce53ff4d127cf8b39adf84dbd381ca32d49bd85788cee08e6669da2495993930"2840checksum = "7193e444210132237b81b755ec7fe53f1c4bd2f53cf719729b94c0c72eb6eaa1"
2313dependencies = [2841dependencies = [
2842 "either",
2314 "futures 0.3.5",2843 "futures 0.3.6",
2315 "libp2p-core",2844 "libp2p-core",
2316 "log",2845 "log",
2317 "rand 0.7.3",2846 "rand 0.7.3",
2318 "smallvec 1.4.1",2847 "smallvec 1.4.2",
2319 "void",2848 "void",
2320 "wasm-timer",2849 "wasm-timer",
2321]2850]
23222851
2323[[package]]2852[[package]]
2324name = "libp2p-tcp"2853name = "libp2p-tcp"
2325version = "0.19.2"2854version = "0.22.0"
2326source = "registry+https://github.com/rust-lang/crates.io-index"2855source = "registry+https://github.com/rust-lang/crates.io-index"
2327checksum = "9481500c5774c62e8c413e9535b3f33a0e3dbacf2da63b8d3056c686a9df4146"2856checksum = "44f42ec130d7a37a7e47bf4398026b7ad9185c08ed26972e2720f8b94112796f"
2328dependencies = [2857dependencies = [
2329 "async-std",2858 "async-std",
2330 "futures 0.3.5",2859 "futures 0.3.6",
2331 "futures-timer 3.0.2",2860 "futures-timer 3.0.2",
2332 "get_if_addrs",2861 "get_if_addrs",
2333 "ipnet",2862 "ipnet",
2336 "socket2",2865 "socket2",
2337]2866]
2867
2868[[package]]
2869name = "libp2p-uds"
2870version = "0.22.0"
2871source = "registry+https://github.com/rust-lang/crates.io-index"
2872checksum = "dea7acb0a034f70d7db94c300eba3f65c0f6298820105624088a9609c9974d77"
2873dependencies = [
2874 "async-std",
2875 "futures 0.3.6",
2876 "libp2p-core",
2877 "log",
2878]
23382879
2339[[package]]2880[[package]]
2340name = "libp2p-wasm-ext"2881name = "libp2p-wasm-ext"
2341version = "0.19.0"2882version = "0.22.0"
2342source = "registry+https://github.com/rust-lang/crates.io-index"2883source = "registry+https://github.com/rust-lang/crates.io-index"
2343checksum = "f59fdbb5706f2723ca108c088b1c7a37f735a8c328021f0508007162627e9885"2884checksum = "34c1faac6f92c21fbe155417957863ea822fba9e9fd5eb24c0912336a100e63f"
2344dependencies = [2885dependencies = [
2345 "futures 0.3.5",2886 "futures 0.3.6",
2346 "js-sys",2887 "js-sys",
2347 "libp2p-core",2888 "libp2p-core",
2348 "parity-send-wrapper",2889 "parity-send-wrapper",
23522893
2353[[package]]2894[[package]]
2354name = "libp2p-websocket"2895name = "libp2p-websocket"
2355version = "0.19.0"2896version = "0.23.0"
2356source = "registry+https://github.com/rust-lang/crates.io-index"2897source = "registry+https://github.com/rust-lang/crates.io-index"
2357checksum = "085fbe4c05c4116c2164ab4d5a521eb6e00516c444f61b3ee9f68c7b1e53580b"2898checksum = "d650534ebd99f48f6fa292ed5db10d30df2444943afde4407ceeddab8e513fca"
2358dependencies = [2899dependencies = [
2359 "async-tls",2900 "async-tls",
2360 "bytes 0.5.6",
2361 "either",2901 "either",
2362 "futures 0.3.5",2902 "futures 0.3.6",
2363 "libp2p-core",2903 "libp2p-core",
2364 "log",2904 "log",
2365 "quicksink",2905 "quicksink",
23732913
2374[[package]]2914[[package]]
2375name = "libp2p-yamux"2915name = "libp2p-yamux"
2376version = "0.19.1"2916version = "0.25.0"
2377source = "registry+https://github.com/rust-lang/crates.io-index"2917source = "registry+https://github.com/rust-lang/crates.io-index"
2378checksum = "8da33e7b5f49c75c6a8afb0b8d1e229f5fa48be9f39bd14cdbc21459a02ac6fc"2918checksum = "781d9b9f043dcdabc40640807125368596b849fd4d96cdca2dcf052fdf6f33fd"
2379dependencies = [2919dependencies = [
2380 "futures 0.3.5",2920 "futures 0.3.6",
2381 "libp2p-core",2921 "libp2p-core",
2382 "parking_lot 0.10.2",2922 "parking_lot 0.11.0",
2383 "thiserror",2923 "thiserror",
2384 "yamux",2924 "yamux",
2385]2925]
23862926
2387[[package]]2927[[package]]
2388name = "librocksdb-sys"2928name = "librocksdb-sys"
2389version = "6.7.4"2929version = "6.11.4"
2390source = "registry+https://github.com/rust-lang/crates.io-index"2930source = "registry+https://github.com/rust-lang/crates.io-index"
2391checksum = "883213ae3d09bfc3d104aefe94b25ebb183b6f4d3a515b23b14817e1f4854005"2931checksum = "eb5b56f651c204634b936be2f92dbb42c36867e00ff7fe2405591f3b9fa66f09"
2392dependencies = [2932dependencies = [
2393 "bindgen",2933 "bindgen",
2394 "cc",2934 "cc",
2408 "hmac-drbg",2948 "hmac-drbg",
2409 "rand 0.7.3",2949 "rand 0.7.3",
2410 "sha2 0.8.2",2950 "sha2 0.8.2",
2411 "subtle 2.2.3",2951 "subtle 2.3.0",
2412 "typenum",2952 "typenum",
2413]2953]
24142954
2415[[package]]2955[[package]]
2416name = "libz-sys"2956name = "libz-sys"
2417version = "1.0.25"2957version = "1.1.2"
2418source = "registry+https://github.com/rust-lang/crates.io-index"2958source = "registry+https://github.com/rust-lang/crates.io-index"
2419checksum = "2eb5e43362e38e2bca2fd5f5134c4d4564a23a5c28e9b95411652021a8675ebe"2959checksum = "602113192b08db8f38796c4e85c39e960c145965140e918018bcde1952429655"
2420dependencies = [2960dependencies = [
2421 "cc",2961 "cc",
2422 "libc",
2423 "pkg-config",2962 "pkg-config",
2424 "vcpkg",2963 "vcpkg",
2425]2964]
24322971
2433[[package]]2972[[package]]
2434name = "linked_hash_set"2973name = "linked_hash_set"
2435version = "0.1.3"2974version = "0.1.4"
2436source = "registry+https://github.com/rust-lang/crates.io-index"2975source = "registry+https://github.com/rust-lang/crates.io-index"
2437checksum = "3c7c91c4c7bbeb4f2f7c4e5be11e6a05bd6830bc37249c47ce1ad86ad453ff9c"2976checksum = "47186c6da4d81ca383c7c47c1bfc80f4b95f4720514d860a5407aaf4233f9588"
2438dependencies = [2977dependencies = [
2439 "linked-hash-map",2978 "linked-hash-map",
2440]2979]
2450 "statrs",2989 "statrs",
2451]2990]
2991
2992[[package]]
2993name = "lock_api"
2994version = "0.1.5"
2995source = "registry+https://github.com/rust-lang/crates.io-index"
2996checksum = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c"
2997dependencies = [
2998 "scopeguard 0.3.3",
2999]
24523000
2453[[package]]3001[[package]]
2454name = "lock_api"3002name = "lock_api"
2455version = "0.3.4"3003version = "0.3.4"
2456source = "registry+https://github.com/rust-lang/crates.io-index"3004source = "registry+https://github.com/rust-lang/crates.io-index"
2457checksum = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75"3005checksum = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75"
2458dependencies = [3006dependencies = [
2459 "scopeguard",3007 "scopeguard 1.1.0",
2460]3008]
3009
3010[[package]]
3011name = "lock_api"
3012version = "0.4.1"
3013source = "registry+https://github.com/rust-lang/crates.io-index"
3014checksum = "28247cc5a5be2f05fbcd76dd0cf2c7d3b5400cb978a28042abcd4fa0b3f8261c"
3015dependencies = [
3016 "scopeguard 1.1.0",
3017]
24613018
2462[[package]]3019[[package]]
2463name = "log"3020name = "log"
2464version = "0.4.11"3021version = "0.4.11"
2465source = "registry+https://github.com/rust-lang/crates.io-index"3022source = "registry+https://github.com/rust-lang/crates.io-index"
2466checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b"3023checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b"
2467dependencies = [3024dependencies = [
2468 "cfg-if",3025 "cfg-if 0.1.10",
2469]3026]
24703027
2471[[package]]3028[[package]]
2477 "hashbrown 0.6.3",3034 "hashbrown 0.6.3",
2478]3035]
3036
3037[[package]]
3038name = "lru"
3039version = "0.6.0"
3040source = "registry+https://github.com/rust-lang/crates.io-index"
3041checksum = "111b945ac72ec09eb7bc62a0fbdc3cc6e80555a7245f52a69d3921a75b53b153"
3042dependencies = [
3043 "hashbrown 0.8.2",
3044]
3045
3046[[package]]
3047name = "lru_time_cache"
3048version = "0.10.0"
3049source = "registry+https://github.com/rust-lang/crates.io-index"
3050checksum = "adb241df5c4caeb888755363fc95f8a896618dc0d435e9e775f7930cb099beab"
3051
3052[[package]]
3053name = "mach"
3054version = "0.3.2"
3055source = "registry+https://github.com/rust-lang/crates.io-index"
3056checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa"
3057dependencies = [
3058 "libc",
3059]
3060
3061[[package]]
3062name = "matchers"
3063version = "0.0.1"
3064source = "registry+https://github.com/rust-lang/crates.io-index"
3065checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1"
3066dependencies = [
3067 "regex-automata",
3068]
24793069
2480[[package]]3070[[package]]
2481name = "matches"3071name = "matches"
25163106
2517[[package]]3107[[package]]
2518name = "memoffset"3108name = "memoffset"
2519version = "0.5.5"3109version = "0.5.6"
2520source = "registry+https://github.com/rust-lang/crates.io-index"3110source = "registry+https://github.com/rust-lang/crates.io-index"
2521checksum = "c198b026e1bbf08a937e94c6c60f9ec4a2267f5b0d2eec9c1b21b061ce2be55f"3111checksum = "043175f069eda7b85febe4a74abbaeff828d9f8b448515d3151a14a3542811aa"
2522dependencies = [3112dependencies = [
2523 "autocfg 1.0.0",3113 "autocfg 1.0.1",
2524]3114]
25253115
2526[[package]]3116[[package]]
2527name = "memory-db"3117name = "memory-db"
2528version = "0.21.0"3118version = "0.24.1"
2529source = "registry+https://github.com/rust-lang/crates.io-index"3119source = "registry+https://github.com/rust-lang/crates.io-index"
2530checksum = "fb2999ff7a65d5a1d72172f6d51fa2ea03024b51aee709ba5ff81c3c629a2410"3120checksum = "36f36ddb0b2cdc25d38babba472108798e3477f02be5165f038c5e393e50c57a"
2531dependencies = [3121dependencies = [
2532 "ahash",
2533 "hash-db",3122 "hash-db",
2534 "hashbrown 0.6.3",3123 "hashbrown 0.8.2",
2535 "parity-util-mem",3124 "parity-util-mem",
2536]3125]
25373126
2547source = "registry+https://github.com/rust-lang/crates.io-index"3136source = "registry+https://github.com/rust-lang/crates.io-index"
2548checksum = "c6feca46f4fa3443a01769d768727f10c10a20fdb65e52dc16a81f0c8269bb78"3137checksum = "c6feca46f4fa3443a01769d768727f10c10a20fdb65e52dc16a81f0c8269bb78"
2549dependencies = [3138dependencies = [
2550 "byteorder",3139 "byteorder 1.3.4",
2551 "keccak",3140 "keccak",
2552 "rand_core 0.5.1",3141 "rand_core 0.5.1",
2553 "zeroize",3142 "zeroize",
2554]3143]
3144
3145[[package]]
3146name = "minicbor"
3147version = "0.5.1"
3148source = "registry+https://github.com/rust-lang/crates.io-index"
3149checksum = "2fc03ad6f8f548db7194a5ff5a6f96342ecae4e3ef67d2bf18bacc0e245cd041"
3150dependencies = [
3151 "minicbor-derive",
3152]
3153
3154[[package]]
3155name = "minicbor-derive"
3156version = "0.4.1"
3157source = "registry+https://github.com/rust-lang/crates.io-index"
3158checksum = "c214bf3d90099b52f3e4b328ae0fe34837fd0fab683ad1e10fceb4629106df48"
3159dependencies = [
3160 "proc-macro2",
3161 "quote",
3162 "syn",
3163]
25553164
2556[[package]]3165[[package]]
2557name = "miniz_oxide"3166name = "miniz_oxide"
2558version = "0.4.0"3167version = "0.4.3"
2559source = "registry+https://github.com/rust-lang/crates.io-index"3168source = "registry+https://github.com/rust-lang/crates.io-index"
2560checksum = "be0f75932c1f6cfae3c04000e40114adf955636e19040f9c0a2c380702aa1c7f"3169checksum = "0f2d26ec3309788e423cfbf68ad1800f061638098d76a83681af979dc4eda19d"
2561dependencies = [3170dependencies = [
2562 "adler",3171 "adler",
3172 "autocfg 1.0.1",
2563]3173]
25643174
2565[[package]]3175[[package]]
2568source = "registry+https://github.com/rust-lang/crates.io-index"3178source = "registry+https://github.com/rust-lang/crates.io-index"
2569checksum = "fce347092656428bc8eaf6201042cb551b8d67855af7374542a92a0fbfcac430"3179checksum = "fce347092656428bc8eaf6201042cb551b8d67855af7374542a92a0fbfcac430"
2570dependencies = [3180dependencies = [
2571 "cfg-if",3181 "cfg-if 0.1.10",
2572 "fuchsia-zircon",3182 "fuchsia-zircon",
2573 "fuchsia-zircon-sys",3183 "fuchsia-zircon-sys",
2574 "iovec",3184 "iovec",
2638 "winapi 0.3.9",3248 "winapi 0.3.9",
2639]3249]
3250
3251[[package]]
3252name = "more-asserts"
3253version = "0.2.1"
3254source = "registry+https://github.com/rust-lang/crates.io-index"
3255checksum = "0debeb9fcf88823ea64d64e4a815ab1643f33127d995978e099942ce38f25238"
26403256
2641[[package]]3257[[package]]
2642name = "multihash"3258name = "multihash"
2643version = "0.11.2"3259version = "0.11.4"
2644source = "registry+https://github.com/rust-lang/crates.io-index"3260source = "registry+https://github.com/rust-lang/crates.io-index"
2645checksum = "f75db05d738947aa5389863aadafbcf2e509d7ba099dc2ddcdf4fc66bf7a9e03"3261checksum = "567122ab6492f49b59def14ecc36e13e64dca4188196dd0cd41f9f3f979f3df6"
2646dependencies = [3262dependencies = [
2647 "blake2b_simd",3263 "blake2b_simd",
2648 "blake2s_simd",3264 "blake2s_simd",
2649 "digest 0.8.1",3265 "digest 0.9.0",
2650 "sha-1",3266 "sha-1 0.9.1",
2651 "sha2 0.8.2",3267 "sha2 0.9.1",
2652 "sha3",3268 "sha3 0.9.1",
2653 "unsigned-varint 0.3.3",3269 "unsigned-varint 0.5.1",
2654]3270]
26553271
2656[[package]]3272[[package]]
2657name = "multimap"3273name = "multimap"
2658version = "0.8.1"3274version = "0.8.2"
2659source = "registry+https://github.com/rust-lang/crates.io-index"3275source = "registry+https://github.com/rust-lang/crates.io-index"
2660checksum = "d8883adfde9756c1d30b0f519c9b8c502a94b41ac62f696453c37c7fc0a958ce"3276checksum = "1255076139a83bb467426e7f8d0134968a8118844faa755985e077cf31850333"
26613277
2662[[package]]3278[[package]]
2663name = "multistream-select"3279name = "multistream-select"
2666checksum = "c9157e87afbc2ef0d84cc0345423d715f445edde00141c93721c162de35a05e5"3282checksum = "c9157e87afbc2ef0d84cc0345423d715f445edde00141c93721c162de35a05e5"
2667dependencies = [3283dependencies = [
2668 "bytes 0.5.6",3284 "bytes 0.5.6",
2669 "futures 0.3.5",3285 "futures 0.3.6",
2670 "log",3286 "log",
2671 "pin-project",3287 "pin-project",
2672 "smallvec 1.4.1",3288 "smallvec 1.4.2",
2673 "unsigned-varint 0.4.0",3289 "unsigned-varint 0.4.0",
2674]3290]
26753291
2685 "matrixmultiply",3301 "matrixmultiply",
2686 "num-complex",3302 "num-complex",
2687 "num-rational",3303 "num-rational",
2688 "num-traits 0.2.12",3304 "num-traits",
2689 "rand 0.6.5",3305 "rand 0.6.5",
2690 "typenum",3306 "typenum",
2691]3307]
2700]3316]
27013317
2702[[package]]3318[[package]]
2703name = "net2"3319name = "nb-connect"
2704version = "0.2.34"3320version = "1.0.2"
2705source = "registry+https://github.com/rust-lang/crates.io-index"3321source = "registry+https://github.com/rust-lang/crates.io-index"
2706checksum = "2ba7c918ac76704fb42afcbbb43891e72731f3dcca3bef2a19786297baf14af7"3322checksum = "8123a81538e457d44b933a02faf885d3fe8408806b23fa700e8f01c6c3a98998"
2707dependencies = [3323dependencies = [
2708 "cfg-if",
2709 "libc",3324 "libc",
2710 "winapi 0.3.9",3325 "winapi 0.3.9",
2711]3326]
27123327
2713[[package]]3328[[package]]
2714name = "netstat2"3329name = "net2"
2715version = "0.8.1"3330version = "0.2.35"
2716source = "registry+https://github.com/rust-lang/crates.io-index"3331source = "registry+https://github.com/rust-lang/crates.io-index"
2717checksum = "29449d242064c48d3057a194b049a2bdcccadda16faa18a91468677b44e8d422"3332checksum = "3ebc3ec692ed7c9a255596c67808dee269f64655d8baf7b4f0638e51ba1d6853"
2718dependencies = [3333dependencies = [
2719 "bitflags",3334 "cfg-if 0.1.10",
2720 "byteorder",
2721 "enum-primitive-derive",
2722 "libc",3335 "libc",
2723 "num-traits 0.2.12",3336 "winapi 0.3.9",
2724 "thiserror",
2725]3337]
27263338
2727[[package]]3339[[package]]
2728name = "nft"3340name = "nft"
2729version = "2.0.0-rc4"3341version = "2.0.0"
2730dependencies = [3342dependencies = [
3343 "frame-benchmarking",
3344 "frame-benchmarking-cli",
2731 "futures 0.3.5",3345 "futures 0.3.6",
2732 "jsonrpc-core",3346 "jsonrpc-core",
2733 "log",3347 "log",
2734 "nft-runtime",3348 "nft-runtime",
2735 "pallet-contracts-rpc",3349 "pallet-contracts-rpc",
3350 "pallet-transaction-payment-rpc",
2736 "parking_lot 0.10.2",3351 "parking_lot 0.10.2",
2737 "sc-basic-authorship",3352 "sc-basic-authorship",
2738 "sc-cli",3353 "sc-cli",
2743 "sc-finality-grandpa",3358 "sc-finality-grandpa",
2744 "sc-network",3359 "sc-network",
2745 "sc-rpc",3360 "sc-rpc",
3361 "sc-rpc-api",
2746 "sc-service",3362 "sc-service",
2747 "sc-transaction-pool",3363 "sc-transaction-pool",
3364 "sp-api",
3365 "sp-block-builder",
3366 "sp-blockchain",
2748 "sp-consensus",3367 "sp-consensus",
2749 "sp-consensus-aura",3368 "sp-consensus-aura",
2750 "sp-core",3369 "sp-core",
2754 "sp-transaction-pool",3373 "sp-transaction-pool",
2755 "structopt",3374 "structopt",
2756 "substrate-build-script-utils",3375 "substrate-build-script-utils",
3376 "substrate-frame-rpc-system",
2757]3377]
27583378
2759[[package]]3379[[package]]
2760name = "nft-runtime"3380name = "nft-runtime"
2761version = "2.0.0-rc4"3381version = "2.0.0"
2762dependencies = [3382dependencies = [
3383 "frame-benchmarking",
2763 "frame-executive",3384 "frame-executive",
2764 "frame-support",3385 "frame-support",
2765 "frame-system",3386 "frame-system",
3387 "frame-system-benchmarking",
3388 "frame-system-rpc-runtime-api",
3389 "hex-literal",
2766 "pallet-aura",3390 "pallet-aura",
2767 "pallet-balances",3391 "pallet-balances",
2768 "pallet-contracts",3392 "pallet-contracts",
2774 "pallet-sudo",3398 "pallet-sudo",
2775 "pallet-timestamp",3399 "pallet-timestamp",
2776 "pallet-transaction-payment",3400 "pallet-transaction-payment",
3401 "pallet-transaction-payment-rpc-runtime-api",
2777 "parity-scale-codec",3402 "parity-scale-codec",
2778 "serde",3403 "serde",
2779 "sp-api",3404 "sp-api",
2780 "sp-block-builder",3405 "sp-block-builder",
2781 "sp-consensus-aura",3406 "sp-consensus-aura",
2782 "sp-core",3407 "sp-core",
2783 "sp-inherents",3408 "sp-inherents",
2784 "sp-io",
2785 "sp-offchain",3409 "sp-offchain",
2786 "sp-runtime",3410 "sp-runtime",
2787 "sp-session",3411 "sp-session",
2799dependencies = [3423dependencies = [
2800 "bitflags",3424 "bitflags",
2801 "cc",3425 "cc",
2802 "cfg-if",3426 "cfg-if 0.1.10",
2803 "libc",3427 "libc",
2804 "void",3428 "void",
2805]3429]
2826 "version_check",3450 "version_check",
2827]3451]
2828
2829[[package]]
2830name = "ntapi"
2831version = "0.3.4"
2832source = "registry+https://github.com/rust-lang/crates.io-index"
2833checksum = "7a31937dea023539c72ddae0e3571deadc1414b300483fa7aaec176168cfa9d2"
2834dependencies = [
2835 "winapi 0.3.9",
2836]
28373452
2838[[package]]3453[[package]]
2839name = "num-bigint"3454name = "num-bigint"
2840version = "0.2.6"3455version = "0.2.6"
2841source = "registry+https://github.com/rust-lang/crates.io-index"3456source = "registry+https://github.com/rust-lang/crates.io-index"
2842checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304"3457checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304"
2843dependencies = [3458dependencies = [
2844 "autocfg 1.0.0",3459 "autocfg 1.0.1",
2845 "num-integer",3460 "num-integer",
2846 "num-traits 0.2.12",3461 "num-traits",
2847]3462]
28483463
2849[[package]]3464[[package]]
2852source = "registry+https://github.com/rust-lang/crates.io-index"3467source = "registry+https://github.com/rust-lang/crates.io-index"
2853checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95"3468checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95"
2854dependencies = [3469dependencies = [
2855 "autocfg 1.0.0",3470 "autocfg 1.0.1",
2856 "num-traits 0.2.12",3471 "num-traits",
2857]3472]
28583473
2859[[package]]3474[[package]]
2862source = "registry+https://github.com/rust-lang/crates.io-index"3477source = "registry+https://github.com/rust-lang/crates.io-index"
2863checksum = "8d59457e662d541ba17869cf51cf177c0b5f0cbf476c66bdc90bf1edac4f875b"3478checksum = "8d59457e662d541ba17869cf51cf177c0b5f0cbf476c66bdc90bf1edac4f875b"
2864dependencies = [3479dependencies = [
2865 "autocfg 1.0.0",3480 "autocfg 1.0.1",
2866 "num-traits 0.2.12",3481 "num-traits",
2867]3482]
28683483
2869[[package]]3484[[package]]
2872source = "registry+https://github.com/rust-lang/crates.io-index"3487source = "registry+https://github.com/rust-lang/crates.io-index"
2873checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef"3488checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef"
2874dependencies = [3489dependencies = [
2875 "autocfg 1.0.0",3490 "autocfg 1.0.1",
2876 "num-bigint",3491 "num-bigint",
2877 "num-integer",3492 "num-integer",
2878 "num-traits 0.2.12",3493 "num-traits",
2879]3494]
2880
2881[[package]]
2882name = "num-traits"
2883version = "0.1.43"
2884source = "registry+https://github.com/rust-lang/crates.io-index"
2885checksum = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31"
2886dependencies = [
2887 "num-traits 0.2.12",
2888]
28893495
2890[[package]]3496[[package]]
2891name = "num-traits"3497name = "num-traits"
2892version = "0.2.12"3498version = "0.2.12"
2893source = "registry+https://github.com/rust-lang/crates.io-index"3499source = "registry+https://github.com/rust-lang/crates.io-index"
2894checksum = "ac267bcc07f48ee5f8935ab0d24f316fb722d7a1292e2913f0cc196b29ffd611"3500checksum = "ac267bcc07f48ee5f8935ab0d24f316fb722d7a1292e2913f0cc196b29ffd611"
2895dependencies = [3501dependencies = [
2896 "autocfg 1.0.0",3502 "autocfg 1.0.1",
2897 "libm",3503 "libm",
2898]3504]
28993505
2907 "libc",3513 "libc",
2908]3514]
3515
3516[[package]]
3517name = "object"
3518version = "0.19.0"
3519source = "registry+https://github.com/rust-lang/crates.io-index"
3520checksum = "9cbca9424c482ee628fa549d9c812e2cd22f1180b9222c9200fdfa6eb31aecb2"
29093521
2910[[package]]3522[[package]]
2911name = "object"3523name = "object"
2912version = "0.20.0"3524version = "0.20.0"
2913source = "registry+https://github.com/rust-lang/crates.io-index"3525source = "registry+https://github.com/rust-lang/crates.io-index"
2914checksum = "1ab52be62400ca80aa00285d25253d7f7c437b7375c4de678f5405d3afe82ca5"3526checksum = "1ab52be62400ca80aa00285d25253d7f7c437b7375c4de678f5405d3afe82ca5"
3527dependencies = [
3528 "crc32fast",
3529 "indexmap",
3530 "wasmparser 0.57.0",
3531]
3532
3533[[package]]
3534name = "object"
3535version = "0.21.1"
3536source = "registry+https://github.com/rust-lang/crates.io-index"
3537checksum = "37fd5004feb2ce328a52b0b3d01dbf4ffff72583493900ed15f22d4111c51693"
3538
3539[[package]]
3540name = "once_cell"
3541version = "0.1.8"
3542source = "registry+https://github.com/rust-lang/crates.io-index"
3543checksum = "532c29a261168a45ce28948f9537ddd7a5dd272cc513b3017b1e82a88f962c37"
3544dependencies = [
3545 "parking_lot 0.7.1",
3546]
29153547
2916[[package]]3548[[package]]
2917name = "once_cell"3549name = "once_cell"
2918version = "1.4.0"3550version = "1.4.1"
2919source = "registry+https://github.com/rust-lang/crates.io-index"3551source = "registry+https://github.com/rust-lang/crates.io-index"
2920checksum = "0b631f7e854af39a1739f401cf34a8a013dfe09eac4fa4dba91e9768bd28168d"3552checksum = "260e51e7efe62b592207e9e13a68e43692a7a279171d6ba57abd208bf23645ad"
2921dependencies = [3553dependencies = [
2922 "parking_lot 0.10.2",3554 "parking_lot 0.11.0",
2923]3555]
29243556
2925[[package]]3557[[package]]
29513583
2952[[package]]3584[[package]]
2953name = "pallet-aura"3585name = "pallet-aura"
2954version = "2.0.0-rc4"3586version = "2.0.0"
2955source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"3587source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
2956dependencies = [3588dependencies = [
2957 "frame-support",3589 "frame-support",
2958 "frame-system",3590 "frame-system",
2968 "sp-timestamp",3600 "sp-timestamp",
2969]3601]
3602
3603[[package]]
3604name = "pallet-authorship"
3605version = "2.0.0"
3606source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
3607dependencies = [
3608 "frame-support",
3609 "frame-system",
3610 "impl-trait-for-tuples",
3611 "parity-scale-codec",
3612 "sp-authorship",
3613 "sp-inherents",
3614 "sp-runtime",
3615 "sp-std",
3616]
29703617
2971[[package]]3618[[package]]
2972name = "pallet-balances"3619name = "pallet-balances"
2973version = "2.0.0-rc4"3620version = "2.0.0"
2974source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"3621source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
2975dependencies = [3622dependencies = [
2976 "frame-benchmarking",3623 "frame-benchmarking",
2977 "frame-support",3624 "frame-support",
29843631
2985[[package]]3632[[package]]
2986name = "pallet-contracts"3633name = "pallet-contracts"
2987version = "2.0.0-rc4"3634version = "2.0.0"
2988source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"3635source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
2989dependencies = [3636dependencies = [
3637 "bitflags",
2990 "frame-support",3638 "frame-support",
2991 "frame-system",3639 "frame-system",
2992 "pallet-contracts-primitives",3640 "pallet-contracts-primitives",
30043652
3005[[package]]3653[[package]]
3006name = "pallet-contracts-primitives"3654name = "pallet-contracts-primitives"
3007version = "2.0.0-rc4"3655version = "2.0.0"
3008source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"3656source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
3009dependencies = [3657dependencies = [
3010 "parity-scale-codec",3658 "parity-scale-codec",
3011 "sp-runtime",3659 "sp-runtime",
30143662
3015[[package]]3663[[package]]
3016name = "pallet-contracts-rpc"3664name = "pallet-contracts-rpc"
3017version = "0.8.0-rc4"3665version = "0.8.0"
3018source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"3666source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
3019dependencies = [3667dependencies = [
3020 "jsonrpc-core",3668 "jsonrpc-core",
3021 "jsonrpc-core-client",3669 "jsonrpc-core-client",
30333681
3034[[package]]3682[[package]]
3035name = "pallet-contracts-rpc-runtime-api"3683name = "pallet-contracts-rpc-runtime-api"
3036version = "0.8.0-rc4"3684version = "0.8.0"
3037source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"3685source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
3038dependencies = [3686dependencies = [
3039 "pallet-contracts-primitives",3687 "pallet-contracts-primitives",
3040 "parity-scale-codec",3688 "parity-scale-codec",
30453693
3046[[package]]3694[[package]]
3047name = "pallet-finality-tracker"3695name = "pallet-finality-tracker"
3048version = "2.0.0-rc4"3696version = "2.0.0"
3049source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"3697source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
3050dependencies = [3698dependencies = [
3051 "frame-support",3699 "frame-support",
3052 "frame-system",3700 "frame-system",
30613709
3062[[package]]3710[[package]]
3063name = "pallet-grandpa"3711name = "pallet-grandpa"
3064version = "2.0.0-rc4"3712version = "2.0.0"
3065source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"3713source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
3066dependencies = [3714dependencies = [
3715 "frame-benchmarking",
3067 "frame-support",3716 "frame-support",
3068 "frame-system",3717 "frame-system",
3718 "pallet-authorship",
3069 "pallet-finality-tracker",3719 "pallet-finality-tracker",
3070 "pallet-session",3720 "pallet-session",
3071 "parity-scale-codec",3721 "parity-scale-codec",
30813731
3082[[package]]3732[[package]]
3083name = "pallet-nft"3733name = "pallet-nft"
3084version = "2.0.0-rc4"3734version = "2.0.0"
3085dependencies = [3735dependencies = [
3736 "frame-benchmarking",
3086 "frame-support",3737 "frame-support",
3087 "frame-system",3738 "frame-system",
3088 "log",3739 "log",
3740 "pallet-contracts",
3089 "pallet-transaction-payment",3741 "pallet-transaction-payment",
3090 "parity-scale-codec",3742 "parity-scale-codec",
3091 "serde",3743 "serde",
30973749
3098[[package]]3750[[package]]
3099name = "pallet-randomness-collective-flip"3751name = "pallet-randomness-collective-flip"
3100version = "2.0.0-rc4"3752version = "2.0.0"
3101source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"3753source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
3102dependencies = [3754dependencies = [
3103 "frame-support",3755 "frame-support",
3104 "frame-system",3756 "frame-system",
31103762
3111[[package]]3763[[package]]
3112name = "pallet-session"3764name = "pallet-session"
3113version = "2.0.0-rc4"3765version = "2.0.0"
3114source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"3766source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
3115dependencies = [3767dependencies = [
3116 "frame-support",3768 "frame-support",
3117 "frame-system",3769 "frame-system",
31303782
3131[[package]]3783[[package]]
3132name = "pallet-sudo"3784name = "pallet-sudo"
3133version = "2.0.0-rc4"3785version = "2.0.0"
3134source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"3786source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
3135dependencies = [3787dependencies = [
3136 "frame-support",3788 "frame-support",
3137 "frame-system",3789 "frame-system",
31443796
3145[[package]]3797[[package]]
3146name = "pallet-timestamp"3798name = "pallet-timestamp"
3147version = "2.0.0-rc4"3799version = "2.0.0"
3148source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"3800source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
3149dependencies = [3801dependencies = [
3150 "frame-benchmarking",3802 "frame-benchmarking",
3151 "frame-support",3803 "frame-support",
3154 "parity-scale-codec",3806 "parity-scale-codec",
3155 "serde",3807 "serde",
3156 "sp-inherents",3808 "sp-inherents",
3809 "sp-io",
3157 "sp-runtime",3810 "sp-runtime",
3158 "sp-std",3811 "sp-std",
3159 "sp-timestamp",3812 "sp-timestamp",
3160]3813]
31613814
3162[[package]]3815[[package]]
3163name = "pallet-transaction-payment"3816name = "pallet-transaction-payment"
3164version = "2.0.0-rc4"3817version = "2.0.0"
3165source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"3818source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
3166dependencies = [3819dependencies = [
3167 "frame-support",3820 "frame-support",
3168 "frame-system",3821 "frame-system",
3169 "pallet-transaction-payment-rpc-runtime-api",3822 "pallet-transaction-payment-rpc-runtime-api",
3170 "parity-scale-codec",3823 "parity-scale-codec",
3171 "serde",3824 "serde",
3172 "smallvec 1.4.1",3825 "smallvec 1.4.2",
3826 "sp-core",
3827 "sp-io",
3173 "sp-runtime",3828 "sp-runtime",
3174 "sp-std",3829 "sp-std",
3175]3830]
3831
3832[[package]]
3833name = "pallet-transaction-payment-rpc"
3834version = "2.0.0"
3835source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
3836dependencies = [
3837 "jsonrpc-core",
3838 "jsonrpc-core-client",
3839 "jsonrpc-derive",
3840 "pallet-transaction-payment-rpc-runtime-api",
3841 "parity-scale-codec",
3842 "serde",
3843 "sp-api",
3844 "sp-blockchain",
3845 "sp-core",
3846 "sp-rpc",
3847 "sp-runtime",
3848]
31763849
3177[[package]]3850[[package]]
3178name = "pallet-transaction-payment-rpc-runtime-api"3851name = "pallet-transaction-payment-rpc-runtime-api"
3179version = "2.0.0-rc4"3852version = "2.0.0"
3180source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"3853source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
3181dependencies = [3854dependencies = [
3182 "frame-support",3855 "frame-support",
3183 "parity-scale-codec",3856 "parity-scale-codec",
3201 "parking_lot 0.10.2",3874 "parking_lot 0.10.2",
3202]3875]
3203
3204[[package]]
3205name = "parity-multiaddr"
3206version = "0.7.3"
3207source = "registry+https://github.com/rust-lang/crates.io-index"
3208checksum = "f77055f9e81921a8cc7bebeb6cded3d128931d51f1e3dd6251f0770a6d431477"
3209dependencies = [
3210 "arrayref",
3211 "bs58",
3212 "byteorder",
3213 "data-encoding",
3214 "parity-multihash",
3215 "percent-encoding 2.1.0",
3216 "serde",
3217 "static_assertions",
3218 "unsigned-varint 0.3.3",
3219 "url 2.1.1",
3220]
32213876
3222[[package]]3877[[package]]
3223name = "parity-multiaddr"3878name = "parity-multiaddr"
3224version = "0.9.1"3879version = "0.9.2"
3225source = "registry+https://github.com/rust-lang/crates.io-index"3880source = "registry+https://github.com/rust-lang/crates.io-index"
3226checksum = "cc20af3143a62c16e7c9e92ea5c6ae49f7d271d97d4d8fe73afc28f0514a3d0f"3881checksum = "2165a93382a93de55868dcbfa11e4a8f99676a9164eee6a2b4a9479ad319c257"
3227dependencies = [3882dependencies = [
3228 "arrayref",3883 "arrayref",
3229 "bs58",3884 "bs58",
3230 "byteorder",3885 "byteorder 1.3.4",
3231 "data-encoding",3886 "data-encoding",
3232 "multihash",3887 "multihash",
3233 "percent-encoding 2.1.0",3888 "percent-encoding 2.1.0",
3237 "url 2.1.1",3892 "url 2.1.1",
3238]3893]
3239
3240[[package]]
3241name = "parity-multihash"
3242version = "0.2.3"
3243source = "registry+https://github.com/rust-lang/crates.io-index"
3244checksum = "7a1cd2ba02391b81367bec529fb209019d718684fdc8ad6a712c2b536e46f775"
3245dependencies = [
3246 "blake2 0.8.1",
3247 "bytes 0.5.6",
3248 "rand 0.7.3",
3249 "sha-1",
3250 "sha2 0.8.2",
3251 "sha3",
3252 "unsigned-varint 0.3.3",
3253]
32543894
3255[[package]]3895[[package]]
3256name = "parity-scale-codec"3896name = "parity-scale-codec"
3257version = "1.3.1"3897version = "1.3.5"
3258source = "registry+https://github.com/rust-lang/crates.io-index"3898source = "registry+https://github.com/rust-lang/crates.io-index"
3259checksum = "a74f02beb35d47e0706155c9eac554b50c671e0d868fe8296bcdf44a9a4847bf"3899checksum = "7c740e5fbcb6847058b40ac7e5574766c6388f585e184d769910fe0d3a2ca861"
3260dependencies = [3900dependencies = [
3261 "arrayvec 0.5.1",3901 "arrayvec 0.5.1",
3262 "bitvec",3902 "bitvec",
32673907
3268[[package]]3908[[package]]
3269name = "parity-scale-codec-derive"3909name = "parity-scale-codec-derive"
3270version = "1.2.0"3910version = "1.2.2"
3271source = "registry+https://github.com/rust-lang/crates.io-index"3911source = "registry+https://github.com/rust-lang/crates.io-index"
3272checksum = "5a0ec292e92e8ec7c58e576adacc1e3f399c597c8f263c42f18420abe58e7245"3912checksum = "198db82bb1c18fc00176004462dd809b2a6d851669550aa17af6dacd21ae0c14"
3273dependencies = [3913dependencies = [
3274 "proc-macro-crate",3914 "proc-macro-crate",
3275 "proc-macro2",3915 "proc-macro2",
3276 "quote 1.0.7",3916 "quote",
3277 "syn 1.0.34",3917 "syn",
3278]3918]
32793919
3280[[package]]3920[[package]]
3290checksum = "1e57fea504fea33f9fbb5f49f378359030e7e026a6ab849bb9e8f0787376f1bf"3930checksum = "1e57fea504fea33f9fbb5f49f378359030e7e026a6ab849bb9e8f0787376f1bf"
3291dependencies = [3931dependencies = [
3292 "bytes 0.4.12",3932 "bytes 0.4.12",
3293 "futures 0.1.29",3933 "futures 0.1.30",
3294 "libc",3934 "libc",
3295 "log",3935 "log",
3296 "mio-named-pipes",3936 "mio-named-pipes",
33043944
3305[[package]]3945[[package]]
3306name = "parity-util-mem"3946name = "parity-util-mem"
3307version = "0.6.1"3947version = "0.7.0"
3308source = "registry+https://github.com/rust-lang/crates.io-index"3948source = "registry+https://github.com/rust-lang/crates.io-index"
3309checksum = "2c6e2583649a3ca84894d1d71da249abcfda54d5aca24733d72ca10d0f02361c"3949checksum = "297ff91fa36aec49ce183484b102f6b75b46776822bd81525bfc4cc9b0dd0f5c"
3310dependencies = [3950dependencies = [
3311 "cfg-if",3951 "cfg-if 0.1.10",
3952 "hashbrown 0.8.2",
3312 "impl-trait-for-tuples",3953 "impl-trait-for-tuples",
3313 "parity-util-mem-derive",3954 "parity-util-mem-derive",
3314 "parking_lot 0.10.2",3955 "parking_lot 0.10.2",
3315 "primitive-types",3956 "primitive-types",
3316 "smallvec 1.4.1",3957 "smallvec 1.4.2",
3317 "winapi 0.3.9",3958 "winapi 0.3.9",
3318]3959]
33193960
3324checksum = "f557c32c6d268a07c921471619c0295f5efad3a0e76d4f97a05c091a51d110b2"3965checksum = "f557c32c6d268a07c921471619c0295f5efad3a0e76d4f97a05c091a51d110b2"
3325dependencies = [3966dependencies = [
3326 "proc-macro2",3967 "proc-macro2",
3327 "syn 1.0.34",3968 "syn",
3328 "synstructure",3969 "synstructure",
3329]3970]
33303971
3334source = "registry+https://github.com/rust-lang/crates.io-index"3975source = "registry+https://github.com/rust-lang/crates.io-index"
3335checksum = "ddfc878dac00da22f8f61e7af3157988424567ab01d9920b962ef7dcbd7cd865"3976checksum = "ddfc878dac00da22f8f61e7af3157988424567ab01d9920b962ef7dcbd7cd865"
3977
3978[[package]]
3979name = "parity-ws"
3980version = "0.10.0"
3981source = "registry+https://github.com/rust-lang/crates.io-index"
3982checksum = "9e02a625dd75084c2a7024f07c575b61b782f729d18702dabb3cdbf31911dc61"
3983dependencies = [
3984 "byteorder 1.3.4",
3985 "bytes 0.4.12",
3986 "httparse",
3987 "log",
3988 "mio",
3989 "mio-extras",
3990 "rand 0.7.3",
3991 "sha-1 0.8.2",
3992 "slab",
3993 "url 2.1.1",
3994]
3995
3996[[package]]
3997name = "parking"
3998version = "2.0.0"
3999source = "registry+https://github.com/rust-lang/crates.io-index"
4000checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72"
4001
4002[[package]]
4003name = "parking_lot"
4004version = "0.7.1"
4005source = "registry+https://github.com/rust-lang/crates.io-index"
4006checksum = "ab41b4aed082705d1056416ae4468b6ea99d52599ecf3169b00088d43113e337"
4007dependencies = [
4008 "lock_api 0.1.5",
4009 "parking_lot_core 0.4.0",
4010]
33364011
3337[[package]]4012[[package]]
3338name = "parking_lot"4013name = "parking_lot"
3339version = "0.9.0"4014version = "0.9.0"
3340source = "registry+https://github.com/rust-lang/crates.io-index"4015source = "registry+https://github.com/rust-lang/crates.io-index"
3341checksum = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252"4016checksum = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252"
3342dependencies = [4017dependencies = [
3343 "lock_api",4018 "lock_api 0.3.4",
3344 "parking_lot_core 0.6.2",4019 "parking_lot_core 0.6.2",
3345 "rustc_version",4020 "rustc_version",
3346]4021]
3351source = "registry+https://github.com/rust-lang/crates.io-index"4026source = "registry+https://github.com/rust-lang/crates.io-index"
3352checksum = "d3a704eb390aafdc107b0e392f56a82b668e3a71366993b5340f5833fd62505e"4027checksum = "d3a704eb390aafdc107b0e392f56a82b668e3a71366993b5340f5833fd62505e"
3353dependencies = [4028dependencies = [
3354 "lock_api",4029 "lock_api 0.3.4",
3355 "parking_lot_core 0.7.2",4030 "parking_lot_core 0.7.2",
3356]4031]
4032
4033[[package]]
4034name = "parking_lot"
4035version = "0.11.0"
4036source = "registry+https://github.com/rust-lang/crates.io-index"
4037checksum = "a4893845fa2ca272e647da5d0e46660a314ead9c2fdd9a883aabc32e481a8733"
4038dependencies = [
4039 "instant",
4040 "lock_api 0.4.1",
4041 "parking_lot_core 0.8.0",
4042]
4043
4044[[package]]
4045name = "parking_lot_core"
4046version = "0.4.0"
4047source = "registry+https://github.com/rust-lang/crates.io-index"
4048checksum = "94c8c7923936b28d546dfd14d4472eaf34c99b14e1c973a32b3e6d4eb04298c9"
4049dependencies = [
4050 "libc",
4051 "rand 0.6.5",
4052 "rustc_version",
4053 "smallvec 0.6.13",
4054 "winapi 0.3.9",
4055]
33574056
3358[[package]]4057[[package]]
3359name = "parking_lot_core"4058name = "parking_lot_core"
3360version = "0.6.2"4059version = "0.6.2"
3361source = "registry+https://github.com/rust-lang/crates.io-index"4060source = "registry+https://github.com/rust-lang/crates.io-index"
3362checksum = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b"4061checksum = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b"
3363dependencies = [4062dependencies = [
3364 "cfg-if",4063 "cfg-if 0.1.10",
3365 "cloudabi",4064 "cloudabi 0.0.3",
3366 "libc",4065 "libc",
3367 "redox_syscall",4066 "redox_syscall",
3368 "rustc_version",4067 "rustc_version",
3376source = "registry+https://github.com/rust-lang/crates.io-index"4075source = "registry+https://github.com/rust-lang/crates.io-index"
3377checksum = "d58c7c768d4ba344e3e8d72518ac13e259d7c7ade24167003b8488e10b6740a3"4076checksum = "d58c7c768d4ba344e3e8d72518ac13e259d7c7ade24167003b8488e10b6740a3"
3378dependencies = [4077dependencies = [
3379 "cfg-if",4078 "cfg-if 0.1.10",
3380 "cloudabi",4079 "cloudabi 0.0.3",
3381 "libc",4080 "libc",
3382 "redox_syscall",4081 "redox_syscall",
3383 "smallvec 1.4.1",4082 "smallvec 1.4.2",
3384 "winapi 0.3.9",4083 "winapi 0.3.9",
3385]4084]
4085
4086[[package]]
4087name = "parking_lot_core"
4088version = "0.8.0"
4089source = "registry+https://github.com/rust-lang/crates.io-index"
4090checksum = "c361aa727dd08437f2f1447be8b59a33b0edd15e0fcee698f935613d9efbca9b"
4091dependencies = [
4092 "cfg-if 0.1.10",
4093 "cloudabi 0.1.0",
4094 "instant",
4095 "libc",
4096 "redox_syscall",
4097 "smallvec 1.4.2",
4098 "winapi 0.3.9",
4099]
33864100
3387[[package]]4101[[package]]
3388name = "paste"4102name = "paste"
3409source = "registry+https://github.com/rust-lang/crates.io-index"4123source = "registry+https://github.com/rust-lang/crates.io-index"
3410checksum = "006c038a43a45995a9670da19e67600114740e8511d4333bf97a56e66a7542d9"4124checksum = "006c038a43a45995a9670da19e67600114740e8511d4333bf97a56e66a7542d9"
3411dependencies = [4125dependencies = [
3412 "byteorder",4126 "byteorder 1.3.4",
3413 "crypto-mac 0.7.0",4127 "crypto-mac 0.7.0",
4128 "rayon",
3414]4129]
34154130
3416[[package]]4131[[package]]
34434158
3444[[package]]4159[[package]]
3445name = "pin-project"4160name = "pin-project"
3446version = "0.4.22"4161version = "0.4.27"
3447source = "registry+https://github.com/rust-lang/crates.io-index"4162source = "registry+https://github.com/rust-lang/crates.io-index"
3448checksum = "12e3a6cdbfe94a5e4572812a0201f8c0ed98c1c452c7b8563ce2276988ef9c17"4163checksum = "2ffbc8e94b38ea3d2d8ba92aea2983b503cd75d0888d75b86bb37970b5698e15"
3449dependencies = [4164dependencies = [
3450 "pin-project-internal",4165 "pin-project-internal",
3451]4166]
34524167
3453[[package]]4168[[package]]
3454name = "pin-project-internal"4169name = "pin-project-internal"
3455version = "0.4.22"4170version = "0.4.27"
3456source = "registry+https://github.com/rust-lang/crates.io-index"4171source = "registry+https://github.com/rust-lang/crates.io-index"
3457checksum = "6a0ffd45cf79d88737d7cc85bfd5d2894bee1139b356e616fe85dc389c61aaf7"4172checksum = "65ad2ae56b6abe3a1ee25f15ee605bacadb9a764edaba9c2bf4103800d4a1895"
3458dependencies = [4173dependencies = [
3459 "proc-macro2",4174 "proc-macro2",
3460 "quote 1.0.7",4175 "quote",
3461 "syn 1.0.34",4176 "syn",
3462]4177]
34634178
3464[[package]]4179[[package]]
3465name = "pin-project-lite"4180name = "pin-project-lite"
3466version = "0.1.7"4181version = "0.1.10"
3467source = "registry+https://github.com/rust-lang/crates.io-index"4182source = "registry+https://github.com/rust-lang/crates.io-index"
3468checksum = "282adbf10f2698a7a77f8e983a74b2d18176c19a7fd32a45446139ae7b02b715"4183checksum = "e555d9e657502182ac97b539fb3dae8b79cda19e3e4f8ffb5e8de4f18df93c95"
34694184
3470[[package]]4185[[package]]
3471name = "pin-utils"4186name = "pin-utils"
34754190
3476[[package]]4191[[package]]
3477name = "pkg-config"4192name = "pkg-config"
3478version = "0.3.18"4193version = "0.3.19"
3479source = "registry+https://github.com/rust-lang/crates.io-index"4194source = "registry+https://github.com/rust-lang/crates.io-index"
3480checksum = "d36492546b6af1463394d46f0c834346f31548646f6ba10849802c9c9a27ac33"4195checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c"
34814196
3482[[package]]4197[[package]]
3483name = "platforms"4198name = "platforms"
3484version = "0.2.1"4199version = "0.2.1"
3485source = "registry+https://github.com/rust-lang/crates.io-index"4200source = "registry+https://github.com/rust-lang/crates.io-index"
3486checksum = "feb3b2b1033b8a60b4da6ee470325f887758c95d5320f52f9ce0df055a55940e"4201checksum = "feb3b2b1033b8a60b4da6ee470325f887758c95d5320f52f9ce0df055a55940e"
4202
4203[[package]]
4204name = "polling"
4205version = "2.0.1"
4206source = "registry+https://github.com/rust-lang/crates.io-index"
4207checksum = "ab773feb154f12c49ffcfd66ab8bdcf9a1843f950db48b0d8be9d4393783b058"
4208dependencies = [
4209 "cfg-if 0.1.10",
4210 "libc",
4211 "log",
4212 "wepoll-sys",
4213 "winapi 0.3.9",
4214]
34874215
3488[[package]]4216[[package]]
3489name = "poly1305"4217name = "poly1305"
3490version = "0.6.0"4218version = "0.6.1"
3491source = "registry+https://github.com/rust-lang/crates.io-index"4219source = "registry+https://github.com/rust-lang/crates.io-index"
3492checksum = "d9b42192ab143ed7619bf888a7f9c6733a9a2153b218e2cd557cfdb52fbf9bb1"4220checksum = "22ce46de8e53ee414ca4d02bfefac75d8c12fba948b76622a40b4be34dfce980"
3493dependencies = [4221dependencies = [
3494 "universal-hash",4222 "universal-hash",
3495]4223]
34964224
3497[[package]]4225[[package]]
3498name = "polyval"4226name = "polyval"
3499version = "0.4.0"4227version = "0.4.1"
3500source = "registry+https://github.com/rust-lang/crates.io-index"4228source = "registry+https://github.com/rust-lang/crates.io-index"
3501checksum = "d9a50142b55ab3ed0e9f68dfb3709f1d90d29da24e91033f28b96330643107dc"4229checksum = "a5884790f1ce3553ad55fec37b5aaac5882e0e845a2612df744d6c85c9bf046c"
3502dependencies = [4230dependencies = [
3503 "cfg-if",4231 "cfg-if 0.1.10",
3504 "universal-hash",4232 "universal-hash",
3505]4233]
35064234
3507[[package]]4235[[package]]
3508name = "ppv-lite86"4236name = "ppv-lite86"
3509version = "0.2.8"4237version = "0.2.9"
3510source = "registry+https://github.com/rust-lang/crates.io-index"4238source = "registry+https://github.com/rust-lang/crates.io-index"
3511checksum = "237a5ed80e274dbc66f86bd59c1e25edc039660be53194b5fe0a482e0f2612ea"4239checksum = "c36fa947111f5c62a733b652544dd0016a43ce89619538a8ef92724a6f501a20"
35124240
3513[[package]]4241[[package]]
3514name = "primitive-types"4242name = "primitive-types"
3518dependencies = [4246dependencies = [
3519 "fixed-hash",4247 "fixed-hash",
3520 "impl-codec",4248 "impl-codec",
3521 "impl-serde 0.3.1",4249 "impl-serde",
3522 "uint",4250 "uint",
3523]4251]
35244252
35334261
3534[[package]]4262[[package]]
3535name = "proc-macro-error"4263name = "proc-macro-error"
3536version = "1.0.3"4264version = "1.0.4"
3537source = "registry+https://github.com/rust-lang/crates.io-index"4265source = "registry+https://github.com/rust-lang/crates.io-index"
3538checksum = "fc175e9777c3116627248584e8f8b3e2987405cabe1c0adf7d1dd28f09dc7880"4266checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
3539dependencies = [4267dependencies = [
3540 "proc-macro-error-attr",4268 "proc-macro-error-attr",
3541 "proc-macro2",4269 "proc-macro2",
3542 "quote 1.0.7",4270 "quote",
3543 "syn 1.0.34",4271 "syn",
3544 "version_check",4272 "version_check",
3545]4273]
35464274
3547[[package]]4275[[package]]
3548name = "proc-macro-error-attr"4276name = "proc-macro-error-attr"
3549version = "1.0.3"4277version = "1.0.4"
3550source = "registry+https://github.com/rust-lang/crates.io-index"4278source = "registry+https://github.com/rust-lang/crates.io-index"
3551checksum = "3cc9795ca17eb581285ec44936da7fc2335a3f34f2ddd13118b6f4d515435c50"4279checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
3552dependencies = [4280dependencies = [
3553 "proc-macro2",4281 "proc-macro2",
3554 "quote 1.0.7",4282 "quote",
3555 "syn 1.0.34",
3556 "syn-mid",
3557 "version_check",4283 "version_check",
3558]4284]
35594285
3560[[package]]4286[[package]]
3561name = "proc-macro-hack"4287name = "proc-macro-hack"
3562version = "0.5.16"4288version = "0.5.18"
3563source = "registry+https://github.com/rust-lang/crates.io-index"4289source = "registry+https://github.com/rust-lang/crates.io-index"
3564checksum = "7e0456befd48169b9f13ef0f0ad46d492cf9d2dbb918bcf38e01eed4ce3ec5e4"4290checksum = "99c605b9a0adc77b7211c6b1f722dcb613d68d66859a44f3d485a6da332b0598"
35654291
3566[[package]]4292[[package]]
3567name = "proc-macro-nested"4293name = "proc-macro-nested"
35714297
3572[[package]]4298[[package]]
3573name = "proc-macro2"4299name = "proc-macro2"
3574version = "1.0.19"4300version = "1.0.24"
3575source = "registry+https://github.com/rust-lang/crates.io-index"4301source = "registry+https://github.com/rust-lang/crates.io-index"
3576checksum = "04f5f085b5d71e2188cb8271e5da0161ad52c3f227a661a3c135fdf28e258b12"4302checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71"
3577dependencies = [4303dependencies = [
3578 "unicode-xid 0.2.1",4304 "unicode-xid",
3579]4305]
3580
3581[[package]]
3582name = "procfs"
3583version = "0.7.9"
3584source = "registry+https://github.com/rust-lang/crates.io-index"
3585checksum = "c434e93ef69c216e68e4f417c927b4f31502c3560b72cfdb6827e2321c5c6b3e"
3586dependencies = [
3587 "bitflags",
3588 "byteorder",
3589 "chrono",
3590 "hex",
3591 "lazy_static",
3592 "libc",
3593 "libflate",
3594]
35954306
3596[[package]]4307[[package]]
3597name = "prometheus"4308name = "prometheus"
3598version = "0.8.0"4309version = "0.10.0"
3599source = "registry+https://github.com/rust-lang/crates.io-index"4310source = "registry+https://github.com/rust-lang/crates.io-index"
3600checksum = "b0575e258dab62268e7236d7307caa38848acbda7ec7ab87bd9093791e999d20"4311checksum = "30d70cf4412832bcac9cffe27906f4a66e450d323525e977168c70d1b36120ae"
3601dependencies = [4312dependencies = [
3602 "cfg-if",4313 "cfg-if 0.1.10",
3603 "fnv",4314 "fnv",
3604 "lazy_static",4315 "lazy_static",
3605 "protobuf",4316 "parking_lot 0.11.0",
3606 "spin",4317 "regex",
3607 "thiserror",4318 "thiserror",
3608]4319]
36094320
3644 "anyhow",4355 "anyhow",
3645 "itertools 0.8.2",4356 "itertools 0.8.2",
3646 "proc-macro2",4357 "proc-macro2",
3647 "quote 1.0.7",4358 "quote",
3648 "syn 1.0.34",4359 "syn",
3649]4360]
36504361
3651[[package]]4362[[package]]
3658 "prost",4369 "prost",
3659]4370]
3660
3661[[package]]
3662name = "protobuf"
3663version = "2.16.2"
3664source = "registry+https://github.com/rust-lang/crates.io-index"
3665checksum = "d883f78645c21b7281d21305181aa1f4dd9e9363e7cf2566c93121552cff003e"
36664371
3667[[package]]4372[[package]]
3668name = "pwasm-utils"4373name = "pwasm-utils"
3669version = "0.12.0"4374version = "0.14.0"
3670source = "registry+https://github.com/rust-lang/crates.io-index"4375source = "registry+https://github.com/rust-lang/crates.io-index"
3671checksum = "4f7a12f176deee919f4ba55326ee17491c8b707d0987aed822682c821b660192"4376checksum = "0f53bc2558e8376358ebdc28301546471d67336584f6438ed4b7c7457a055fd7"
3672dependencies = [4377dependencies = [
3673 "byteorder",4378 "byteorder 1.3.4",
3674 "log",4379 "log",
3675 "parity-wasm",4380 "parity-wasm",
3676]4381]
3692 "pin-project-lite",4397 "pin-project-lite",
3693]4398]
3694
3695[[package]]
3696name = "quote"
3697version = "0.3.15"
3698source = "registry+https://github.com/rust-lang/crates.io-index"
3699checksum = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a"
37004399
3701[[package]]4400[[package]]
3702name = "quote"4401name = "quote"
3742source = "registry+https://github.com/rust-lang/crates.io-index"4441source = "registry+https://github.com/rust-lang/crates.io-index"
3743checksum = "c618c47cd3ebd209790115ab837de41425723956ad3ce2e6a7f09890947cacb9"4442checksum = "c618c47cd3ebd209790115ab837de41425723956ad3ce2e6a7f09890947cacb9"
3744dependencies = [4443dependencies = [
3745 "cloudabi",4444 "cloudabi 0.0.3",
3746 "fuchsia-cprng",4445 "fuchsia-cprng",
3747 "libc",4446 "libc",
3748 "rand_core 0.3.1",4447 "rand_core 0.3.1",
3774source = "registry+https://github.com/rust-lang/crates.io-index"4473source = "registry+https://github.com/rust-lang/crates.io-index"
3775checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"4474checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
3776dependencies = [4475dependencies = [
3777 "getrandom",4476 "getrandom 0.1.15",
3778 "libc",4477 "libc",
3779 "rand_chacha 0.2.2",4478 "rand_chacha 0.2.2",
3780 "rand_core 0.5.1",4479 "rand_core 0.5.1",
3823source = "registry+https://github.com/rust-lang/crates.io-index"4522source = "registry+https://github.com/rust-lang/crates.io-index"
3824checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"4523checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
3825dependencies = [4524dependencies = [
3826 "getrandom",4525 "getrandom 0.1.15",
3827]4526]
38284527
3829[[package]]4528[[package]]
3870source = "registry+https://github.com/rust-lang/crates.io-index"4569source = "registry+https://github.com/rust-lang/crates.io-index"
3871checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071"4570checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071"
3872dependencies = [4571dependencies = [
3873 "cloudabi",4572 "cloudabi 0.0.3",
3874 "fuchsia-cprng",4573 "fuchsia-cprng",
3875 "libc",4574 "libc",
3876 "rand_core 0.4.2",4575 "rand_core 0.4.2",
3906 "rand_core 0.3.1",4605 "rand_core 0.3.1",
3907]4606]
4607
4608[[package]]
4609name = "raw-cpuid"
4610version = "7.0.3"
4611source = "registry+https://github.com/rust-lang/crates.io-index"
4612checksum = "b4a349ca83373cfa5d6dbb66fd76e58b2cca08da71a5f6400de0a0a6a9bceeaf"
4613dependencies = [
4614 "bitflags",
4615 "cc",
4616 "rustc_version",
4617]
39084618
3909[[package]]4619[[package]]
3910name = "rawpointer"4620name = "rawpointer"
39144624
3915[[package]]4625[[package]]
3916name = "rayon"4626name = "rayon"
3917version = "1.3.1"4627version = "1.4.1"
3918source = "registry+https://github.com/rust-lang/crates.io-index"4628source = "registry+https://github.com/rust-lang/crates.io-index"
3919checksum = "62f02856753d04e03e26929f820d0a0a337ebe71f849801eea335d464b349080"4629checksum = "dcf6960dc9a5b4ee8d3e4c5787b4a112a8818e0290a42ff664ad60692fdf2032"
3920dependencies = [4630dependencies = [
3921 "autocfg 1.0.0",4631 "autocfg 1.0.1",
3922 "crossbeam-deque",4632 "crossbeam-deque",
3923 "either",4633 "either",
3924 "rayon-core",4634 "rayon-core",
3925]4635]
39264636
3927[[package]]4637[[package]]
3928name = "rayon-core"4638name = "rayon-core"
3929version = "1.7.1"4639version = "1.8.1"
3930source = "registry+https://github.com/rust-lang/crates.io-index"4640source = "registry+https://github.com/rust-lang/crates.io-index"
3931checksum = "e92e15d89083484e11353891f1af602cc661426deb9564c298b270c726973280"4641checksum = "e8c4fec834fb6e6d2dd5eece3c7b432a52f0ba887cf40e595190c4107edc08bf"
3932dependencies = [4642dependencies = [
4643 "crossbeam-channel",
3933 "crossbeam-deque",4644 "crossbeam-deque",
3934 "crossbeam-queue",
3935 "crossbeam-utils",4645 "crossbeam-utils",
3936 "lazy_static",4646 "lazy_static",
3937 "num_cpus",4647 "num_cpus",
39544664
3955[[package]]4665[[package]]
3956name = "redox_users"4666name = "redox_users"
3957version = "0.3.4"4667version = "0.3.5"
3958source = "registry+https://github.com/rust-lang/crates.io-index"4668source = "registry+https://github.com/rust-lang/crates.io-index"
3959checksum = "09b23093265f8d200fa7b4c2c76297f47e681c655f6f1285a8780d6a022f7431"4669checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d"
3960dependencies = [4670dependencies = [
3961 "getrandom",4671 "getrandom 0.1.15",
3962 "redox_syscall",4672 "redox_syscall",
3963 "rust-argon2",4673 "rust-argon2",
3964]4674]
3979checksum = "7d21b475ab879ef0e315ad99067fa25778c3b0377f57f1b00207448dac1a3144"4689checksum = "7d21b475ab879ef0e315ad99067fa25778c3b0377f57f1b00207448dac1a3144"
3980dependencies = [4690dependencies = [
3981 "proc-macro2",4691 "proc-macro2",
3982 "quote 1.0.7",4692 "quote",
3983 "syn 1.0.34",4693 "syn",
3984]4694]
4695
4696[[package]]
4697name = "regalloc"
4698version = "0.0.27"
4699source = "registry+https://github.com/rust-lang/crates.io-index"
4700checksum = "b9ba8aaf5fe7cf307c6dbdaeed85478961d29e25e3bee5169e11b92fa9f027a8"
4701dependencies = [
4702 "log",
4703 "rustc-hash",
4704 "smallvec 1.4.2",
4705]
39854706
3986[[package]]4707[[package]]
3987name = "regex"4708name = "regex"
3988version = "1.3.9"4709version = "1.4.1"
3989source = "registry+https://github.com/rust-lang/crates.io-index"4710source = "registry+https://github.com/rust-lang/crates.io-index"
3990checksum = "9c3780fcf44b193bc4d09f36d2a3c87b251da4a046c87795a0d35f4f927ad8e6"4711checksum = "8963b85b8ce3074fecffde43b4b0dded83ce2f367dc8d363afc56679f3ee820b"
3991dependencies = [4712dependencies = [
3992 "aho-corasick",4713 "aho-corasick",
3993 "memchr",4714 "memchr",
3994 "regex-syntax",4715 "regex-syntax",
3995 "thread_local",4716 "thread_local",
3996]4717]
4718
4719[[package]]
4720name = "regex-automata"
4721version = "0.1.9"
4722source = "registry+https://github.com/rust-lang/crates.io-index"
4723checksum = "ae1ded71d66a4a97f5e961fd0cb25a5f366a42a41570d16a763a69c092c26ae4"
4724dependencies = [
4725 "byteorder 1.3.4",
4726 "regex-syntax",
4727]
39974728
3998[[package]]4729[[package]]
3999name = "regex-syntax"4730name = "regex-syntax"
4000version = "0.6.18"4731version = "0.6.20"
4001source = "registry+https://github.com/rust-lang/crates.io-index"4732source = "registry+https://github.com/rust-lang/crates.io-index"
4002checksum = "26412eb97c6b088a6997e05f69403a802a92d520de2f8e63c2b65f9e0f47c4e8"4733checksum = "8cab7a364d15cde1e505267766a2d3c4e22a843e1a601f0fa7564c0f82ced11c"
4734
4735[[package]]
4736name = "region"
4737version = "2.2.0"
4738source = "registry+https://github.com/rust-lang/crates.io-index"
4739checksum = "877e54ea2adcd70d80e9179344c97f93ef0dffd6b03e1f4529e6e83ab2fa9ae0"
4740dependencies = [
4741 "bitflags",
4742 "libc",
4743 "mach",
4744 "winapi 0.3.9",
4745]
40034746
4004[[package]]4747[[package]]
4005name = "remove_dir_all"4748name = "remove_dir_all"
4010 "winapi 0.3.9",4753 "winapi 0.3.9",
4011]4754]
4012
4013[[package]]
4014name = "rental"
4015version = "0.5.5"
4016source = "registry+https://github.com/rust-lang/crates.io-index"
4017checksum = "8545debe98b2b139fb04cad8618b530e9b07c152d99a5de83c860b877d67847f"
4018dependencies = [
4019 "rental-impl",
4020 "stable_deref_trait",
4021]
40224755
4023[[package]]4756[[package]]
4024name = "rental-impl"4757name = "retain_mut"
4025version = "0.5.5"4758version = "0.1.1"
4026source = "registry+https://github.com/rust-lang/crates.io-index"4759source = "registry+https://github.com/rust-lang/crates.io-index"
4027checksum = "475e68978dc5b743f2f40d8e0a8fdc83f1c5e78cbf4b8fa5e74e73beebc340de"4760checksum = "e005d658ad26eacc2b6c506dfde519f4e277e328d0eb3379ca61647d70a8f531"
4028dependencies = [
4029 "proc-macro2",
4030 "quote 1.0.7",
4031 "syn 1.0.34",
4032]
40334761
4034[[package]]4762[[package]]
4035name = "ring"4763name = "ring"
4039dependencies = [4767dependencies = [
4040 "cc",4768 "cc",
4041 "libc",4769 "libc",
4042 "once_cell",4770 "once_cell 1.4.1",
4043 "spin",4771 "spin",
4044 "untrusted",4772 "untrusted",
4045 "web-sys",4773 "web-sys",
4046 "winapi 0.3.9",4774 "winapi 0.3.9",
4047]4775]
4048
4049[[package]]
4050name = "rle-decode-fast"
4051version = "1.0.1"
4052source = "registry+https://github.com/rust-lang/crates.io-index"
4053checksum = "cabe4fa914dec5870285fa7f71f602645da47c486e68486d2b4ceb4a343e90ac"
40544776
4055[[package]]4777[[package]]
4056name = "rocksdb"4778name = "rocksdb"
4057version = "0.14.0"4779version = "0.15.0"
4058source = "registry+https://github.com/rust-lang/crates.io-index"4780source = "registry+https://github.com/rust-lang/crates.io-index"
4059checksum = "61aa17a99a2413cd71c1106691bf59dad7de0cd5099127f90e9d99c429c40d4a"4781checksum = "23d83c02c429044d58474eaf5ae31e062d0de894e21125b47437ec0edc1397e6"
4060dependencies = [4782dependencies = [
4061 "libc",4783 "libc",
4062 "librocksdb-sys",4784 "librocksdb-sys",
40744796
4075[[package]]4797[[package]]
4076name = "rust-argon2"4798name = "rust-argon2"
4077version = "0.7.0"4799version = "0.8.2"
4078source = "registry+https://github.com/rust-lang/crates.io-index"4800source = "registry+https://github.com/rust-lang/crates.io-index"
4079checksum = "2bc8af4bda8e1ff4932523b94d3dd20ee30a87232323eda55903ffd71d2fb017"4801checksum = "9dab61250775933275e84053ac235621dfb739556d5c54a2f2e9313b7cf43a19"
4080dependencies = [4802dependencies = [
4081 "base64",4803 "base64 0.12.3",
4082 "blake2b_simd",4804 "blake2b_simd",
4083 "constant_time_eq",4805 "constant_time_eq",
4084 "crossbeam-utils",4806 "crossbeam-utils",
4085]4807]
40864808
4087[[package]]4809[[package]]
4088name = "rustc-demangle"4810name = "rustc-demangle"
4089version = "0.1.16"4811version = "0.1.17"
4090source = "registry+https://github.com/rust-lang/crates.io-index"4812source = "registry+https://github.com/rust-lang/crates.io-index"
4091checksum = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783"4813checksum = "b2610b7f643d18c87dff3b489950269617e6601a51f1f05aa5daefee36f64f0b"
40924814
4093[[package]]4815[[package]]
4094name = "rustc-hash"4816name = "rustc-hash"
41134835
4114[[package]]4836[[package]]
4115name = "rustls"4837name = "rustls"
4116version = "0.17.0"4838version = "0.18.1"
4117source = "registry+https://github.com/rust-lang/crates.io-index"4839source = "registry+https://github.com/rust-lang/crates.io-index"
4118checksum = "c0d4a31f5d68413404705d6982529b0e11a9aacd4839d1d6222ee3b8cb4015e1"4840checksum = "5d1126dcf58e93cee7d098dbda643b5f92ed724f1f6a63007c1116eed6700c81"
4119dependencies = [4841dependencies = [
4120 "base64",4842 "base64 0.12.3",
4121 "log",4843 "log",
4122 "ring",4844 "ring",
4123 "sct",4845 "sct",
41264848
4127[[package]]4849[[package]]
4128name = "rustls-native-certs"4850name = "rustls-native-certs"
4129version = "0.3.0"4851version = "0.4.0"
4130source = "registry+https://github.com/rust-lang/crates.io-index"4852source = "registry+https://github.com/rust-lang/crates.io-index"
4131checksum = "a75ffeb84a6bd9d014713119542ce415db3a3e4748f0bfce1e1416cd224a23a5"4853checksum = "629d439a7672da82dd955498445e496ee2096fe2117b9f796558a43fdb9e59b8"
4132dependencies = [4854dependencies = [
4133 "openssl-probe",4855 "openssl-probe",
4134 "rustls",4856 "rustls",
4142source = "registry+https://github.com/rust-lang/crates.io-index"4864source = "registry+https://github.com/rust-lang/crates.io-index"
4143checksum = "4da5fcb054c46f5a5dff833b129285a93d3f0179531735e6c866e8cc307d2020"4865checksum = "4da5fcb054c46f5a5dff833b129285a93d3f0179531735e6c866e8cc307d2020"
4144dependencies = [4866dependencies = [
4145 "futures 0.3.5",4867 "futures 0.3.6",
4146 "pin-project",4868 "pin-project",
4147 "static_assertions",4869 "static_assertions",
4148]4870]
4162 "rustc_version",4884 "rustc_version",
4163]4885]
4886
4887[[package]]
4888name = "salsa20"
4889version = "0.3.0"
4890source = "registry+https://github.com/rust-lang/crates.io-index"
4891checksum = "2324b0e8c3bb9a586a571fdb3136f70e7e2c748de00a78043f86e0cff91f91fe"
4892dependencies = [
4893 "byteorder 1.3.4",
4894 "salsa20-core",
4895 "stream-cipher 0.3.2",
4896]
4897
4898[[package]]
4899name = "salsa20-core"
4900version = "0.2.3"
4901source = "registry+https://github.com/rust-lang/crates.io-index"
4902checksum = "2fe6cc1b9f5a5867853ade63099de70f042f7679e408d1ffe52821c9248e6e69"
4903dependencies = [
4904 "stream-cipher 0.3.2",
4905]
41644906
4165[[package]]4907[[package]]
4166name = "sc-basic-authorship"4908name = "sc-basic-authorship"
4167version = "0.8.0-rc4"4909version = "0.8.0"
4168source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"4910source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
4169dependencies = [4911dependencies = [
4170 "futures 0.3.5",4912 "futures 0.3.6",
4171 "futures-timer 3.0.2",4913 "futures-timer 3.0.2",
4172 "log",4914 "log",
4173 "parity-scale-codec",4915 "parity-scale-codec",
41884930
4189[[package]]4931[[package]]
4190name = "sc-block-builder"4932name = "sc-block-builder"
4191version = "0.8.0-rc4"4933version = "0.8.0"
4192source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"4934source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
4193dependencies = [4935dependencies = [
4194 "parity-scale-codec",4936 "parity-scale-codec",
4195 "sc-client-api",4937 "sc-client-api",
4198 "sp-blockchain",4940 "sp-blockchain",
4199 "sp-consensus",4941 "sp-consensus",
4200 "sp-core",4942 "sp-core",
4943 "sp-inherents",
4201 "sp-runtime",4944 "sp-runtime",
4202 "sp-state-machine",4945 "sp-state-machine",
4203]4946]
42044947
4205[[package]]4948[[package]]
4206name = "sc-chain-spec"4949name = "sc-chain-spec"
4207version = "2.0.0-rc4"4950version = "2.0.0"
4208source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"4951source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
4209dependencies = [4952dependencies = [
4210 "impl-trait-for-tuples",4953 "impl-trait-for-tuples",
4954 "parity-scale-codec",
4211 "sc-chain-spec-derive",4955 "sc-chain-spec-derive",
4212 "sc-network",4956 "sc-network",
4213 "sc-telemetry",4957 "sc-telemetry",
42204964
4221[[package]]4965[[package]]
4222name = "sc-chain-spec-derive"4966name = "sc-chain-spec-derive"
4223version = "2.0.0-rc4"4967version = "2.0.0"
4224source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"4968source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
4225dependencies = [4969dependencies = [
4226 "proc-macro-crate",4970 "proc-macro-crate",
4227 "proc-macro2",4971 "proc-macro2",
4228 "quote 1.0.7",4972 "quote",
4229 "syn 1.0.34",4973 "syn",
4230]4974]
42314975
4232[[package]]4976[[package]]
4233name = "sc-cli"4977name = "sc-cli"
4234version = "0.8.0-rc4"4978version = "0.8.0"
4235source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"4979source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
4236dependencies = [4980dependencies = [
4237 "ansi_term 0.12.1",4981 "ansi_term 0.12.1",
4238 "atty",4982 "atty",
4983 "bip39",
4239 "chrono",4984 "chrono",
4240 "derive_more",4985 "derive_more",
4241 "env_logger",
4242 "fdlimit",4986 "fdlimit",
4243 "futures 0.3.5",4987 "futures 0.3.6",
4988 "hex",
4244 "lazy_static",4989 "lazy_static",
4990 "libp2p",
4245 "log",4991 "log",
4246 "names",4992 "names",
4247 "nix",4993 "nix",
4994 "parity-scale-codec",
4248 "parity-util-mem",4995 "parity-util-mem",
4996 "rand 0.7.3",
4249 "regex",4997 "regex",
4250 "rpassword",4998 "rpassword",
4251 "sc-client-api",4999 "sc-client-api",
4252 "sc-informant",5000 "sc-informant",
5001 "sc-keystore",
4253 "sc-network",5002 "sc-network",
4254 "sc-service",5003 "sc-service",
4255 "sc-telemetry",5004 "sc-telemetry",
4256 "sc-tracing",5005 "sc-tracing",
5006 "serde",
4257 "serde_json",5007 "serde_json",
4258 "sp-blockchain",5008 "sp-blockchain",
4259 "sp-core",5009 "sp-core",
4266 "structopt",5016 "structopt",
4267 "substrate-prometheus-endpoint",5017 "substrate-prometheus-endpoint",
4268 "time",5018 "time",
4269 "tokio 0.2.21",5019 "tokio 0.2.22",
5020 "tracing",
5021 "tracing-log",
5022 "tracing-subscriber",
4270]5023]
42715024
4272[[package]]5025[[package]]
4273name = "sc-client-api"5026name = "sc-client-api"
4274version = "2.0.0-rc4"5027version = "2.0.0"
4275source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"5028source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
4276dependencies = [5029dependencies = [
4277 "derive_more",5030 "derive_more",
4278 "fnv",5031 "fnv",
4279 "futures 0.3.5",5032 "futures 0.3.6",
4280 "hash-db",5033 "hash-db",
4281 "hex-literal",5034 "hex-literal",
4282 "kvdb",5035 "kvdb",
43075060
4308[[package]]5061[[package]]
4309name = "sc-client-db"5062name = "sc-client-db"
4310version = "0.8.0-rc4"5063version = "0.8.0"
4311source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"5064source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
4312dependencies = [5065dependencies = [
4313 "blake2-rfc",5066 "blake2-rfc",
4314 "hash-db",5067 "hash-db",
4324 "sc-client-api",5077 "sc-client-api",
4325 "sc-executor",5078 "sc-executor",
4326 "sc-state-db",5079 "sc-state-db",
5080 "sp-arithmetic",
4327 "sp-blockchain",5081 "sp-blockchain",
4328 "sp-consensus",5082 "sp-consensus",
4329 "sp-core",5083 "sp-core",
43365090
4337[[package]]5091[[package]]
4338name = "sc-consensus"5092name = "sc-consensus"
4339version = "0.8.0-rc4"5093version = "0.8.0"
4340source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"5094source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
4341dependencies = [5095dependencies = [
4342 "sc-client-api",5096 "sc-client-api",
4343 "sp-blockchain",5097 "sp-blockchain",
43475101
4348[[package]]5102[[package]]
4349name = "sc-consensus-aura"5103name = "sc-consensus-aura"
4350version = "0.8.0-rc4"5104version = "0.8.0"
4351source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"5105source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
4352dependencies = [5106dependencies = [
4353 "derive_more",5107 "derive_more",
4354 "futures 0.3.5",5108 "futures 0.3.6",
4355 "futures-timer 3.0.2",5109 "futures-timer 3.0.2",
4356 "log",5110 "log",
4357 "parity-scale-codec",5111 "parity-scale-codec",
43785132
4379[[package]]5133[[package]]
4380name = "sc-consensus-slots"5134name = "sc-consensus-slots"
4381version = "0.8.0-rc4"5135version = "0.8.0"
4382source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"5136source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
4383dependencies = [5137dependencies = [
4384 "futures 0.3.5",5138 "futures 0.3.6",
4385 "futures-timer 3.0.2",5139 "futures-timer 3.0.2",
4386 "log",5140 "log",
4387 "parity-scale-codec",5141 "parity-scale-codec",
4392 "sp-application-crypto",5146 "sp-application-crypto",
4393 "sp-blockchain",5147 "sp-blockchain",
4394 "sp-consensus",5148 "sp-consensus",
5149 "sp-consensus-slots",
4395 "sp-core",5150 "sp-core",
4396 "sp-inherents",5151 "sp-inherents",
4397 "sp-runtime",5152 "sp-runtime",
44005155
4401[[package]]5156[[package]]
4402name = "sc-executor"5157name = "sc-executor"
4403version = "0.8.0-rc4"5158version = "0.8.0"
4404source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"5159source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
4405dependencies = [5160dependencies = [
4406 "derive_more",5161 "derive_more",
4407 "lazy_static",5162 "lazy_static",
4412 "parking_lot 0.10.2",5167 "parking_lot 0.10.2",
4413 "sc-executor-common",5168 "sc-executor-common",
4414 "sc-executor-wasmi",5169 "sc-executor-wasmi",
5170 "sc-executor-wasmtime",
4415 "sp-api",5171 "sp-api",
4416 "sp-core",5172 "sp-core",
4417 "sp-externalities",5173 "sp-externalities",
44275183
4428[[package]]5184[[package]]
4429name = "sc-executor-common"5185name = "sc-executor-common"
4430version = "0.8.0-rc4"5186version = "0.8.0"
4431source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"5187source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
4432dependencies = [5188dependencies = [
4433 "derive_more",5189 "derive_more",
4434 "log",5190 "log",
44445200
4445[[package]]5201[[package]]
4446name = "sc-executor-wasmi"5202name = "sc-executor-wasmi"
4447version = "0.8.0-rc4"5203version = "0.8.0"
4448source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"5204source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
4449dependencies = [5205dependencies = [
4450 "log",5206 "log",
4451 "parity-scale-codec",5207 "parity-scale-codec",
4457 "wasmi",5213 "wasmi",
4458]5214]
5215
5216[[package]]
5217name = "sc-executor-wasmtime"
5218version = "0.8.0"
5219source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5220dependencies = [
5221 "log",
5222 "parity-scale-codec",
5223 "parity-wasm",
5224 "pwasm-utils",
5225 "sc-executor-common",
5226 "scoped-tls",
5227 "sp-allocator",
5228 "sp-core",
5229 "sp-runtime-interface",
5230 "sp-wasm-interface",
5231 "wasmtime",
5232]
44595233
4460[[package]]5234[[package]]
4461name = "sc-finality-grandpa"5235name = "sc-finality-grandpa"
4462version = "0.8.0-rc4"5236version = "0.8.0"
4463source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"5237source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
4464dependencies = [5238dependencies = [
4465 "assert_matches",
4466 "derive_more",5239 "derive_more",
4467 "finality-grandpa",5240 "finality-grandpa",
4468 "fork-tree",5241 "fork-tree",
4469 "futures 0.3.5",5242 "futures 0.3.6",
4470 "futures-timer 3.0.2",5243 "futures-timer 3.0.2",
4471 "log",5244 "log",
4472 "parity-scale-codec",5245 "parity-scale-codec",
44975270
4498[[package]]5271[[package]]
4499name = "sc-informant"5272name = "sc-informant"
4500version = "0.8.0-rc4"5273version = "0.8.0"
4501source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"5274source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
4502dependencies = [5275dependencies = [
4503 "ansi_term 0.12.1",5276 "ansi_term 0.12.1",
4504 "futures 0.3.5",5277 "futures 0.3.6",
4505 "log",5278 "log",
4506 "parity-util-mem",5279 "parity-util-mem",
4507 "parking_lot 0.10.2",
4508 "sc-client-api",5280 "sc-client-api",
4509 "sc-network",5281 "sc-network",
4510 "sp-blockchain",5282 "sp-blockchain",
45165288
4517[[package]]5289[[package]]
4518name = "sc-keystore"5290name = "sc-keystore"
4519version = "2.0.0-rc4"5291version = "2.0.0"
4520source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"5292source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
4521dependencies = [5293dependencies = [
4522 "derive_more",5294 "derive_more",
4523 "hex",5295 "hex",
4527 "serde_json",5299 "serde_json",
4528 "sp-application-crypto",5300 "sp-application-crypto",
4529 "sp-core",5301 "sp-core",
4530 "subtle 2.2.3",5302 "subtle 2.3.0",
4531]5303]
45325304
4533[[package]]5305[[package]]
4534name = "sc-light"5306name = "sc-light"
4535version = "2.0.0-rc4"5307version = "2.0.0"
4536source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"5308source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
4537dependencies = [5309dependencies = [
4538 "hash-db",5310 "hash-db",
4539 "lazy_static",5311 "lazy_static",
45515323
4552[[package]]5324[[package]]
4553name = "sc-network"5325name = "sc-network"
4554version = "0.8.0-rc4"5326version = "0.8.0"
4555source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"5327source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
4556dependencies = [5328dependencies = [
5329 "async-std",
5330 "async-trait",
4557 "bitflags",5331 "bitflags",
4558 "bs58",5332 "bs58",
4559 "bytes 0.5.6",5333 "bytes 0.5.6",
4562 "erased-serde",5336 "erased-serde",
4563 "fnv",5337 "fnv",
4564 "fork-tree",5338 "fork-tree",
4565 "futures 0.3.5",5339 "futures 0.3.6",
4566 "futures-timer 3.0.2",5340 "futures-timer 3.0.2",
4567 "futures_codec 0.3.4",5341 "futures_codec",
4568 "hex",5342 "hex",
4569 "ip_network",5343 "ip_network",
4570 "libp2p",5344 "libp2p",
4571 "linked-hash-map",5345 "linked-hash-map",
4572 "linked_hash_set",5346 "linked_hash_set",
4573 "log",5347 "log",
4574 "lru",5348 "lru 0.4.3",
4575 "nohash-hasher",5349 "nohash-hasher",
4576 "parity-scale-codec",5350 "parity-scale-codec",
4577 "parking_lot 0.10.2",5351 "parking_lot 0.10.2",
4595 "sp-utils",5369 "sp-utils",
4596 "substrate-prometheus-endpoint",5370 "substrate-prometheus-endpoint",
4597 "thiserror",5371 "thiserror",
4598 "unsigned-varint 0.3.3",5372 "unsigned-varint 0.4.0",
4599 "void",5373 "void",
4600 "wasm-timer",5374 "wasm-timer",
4601 "zeroize",5375 "zeroize",
4602]5376]
46035377
4604[[package]]5378[[package]]
4605name = "sc-network-gossip"5379name = "sc-network-gossip"
4606version = "0.8.0-rc4"5380version = "0.8.0"
4607source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"5381source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
4608dependencies = [5382dependencies = [
4609 "futures 0.3.5",5383 "futures 0.3.6",
4610 "futures-timer 3.0.2",5384 "futures-timer 3.0.2",
4611 "libp2p",5385 "libp2p",
4612 "log",5386 "log",
4613 "lru",5387 "lru 0.4.3",
4614 "sc-network",5388 "sc-network",
4615 "sp-runtime",5389 "sp-runtime",
4616 "wasm-timer",5390 "wasm-timer",
4617]5391]
46185392
4619[[package]]5393[[package]]
4620name = "sc-offchain"5394name = "sc-offchain"
4621version = "2.0.0-rc4"5395version = "2.0.0"
4622source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"5396source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
4623dependencies = [5397dependencies = [
4624 "bytes 0.5.6",5398 "bytes 0.5.6",
4625 "fnv",5399 "fnv",
4626 "futures 0.3.5",5400 "futures 0.3.6",
4627 "futures-timer 3.0.2",5401 "futures-timer 3.0.2",
4628 "hyper 0.13.7",5402 "hyper 0.13.8",
4629 "hyper-rustls",5403 "hyper-rustls",
4630 "log",5404 "log",
4631 "num_cpus",5405 "num_cpus",
46455419
4646[[package]]5420[[package]]
4647name = "sc-peerset"5421name = "sc-peerset"
4648version = "2.0.0-rc4"5422version = "2.0.0"
4649source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"5423source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
4650dependencies = [5424dependencies = [
4651 "futures 0.3.5",5425 "futures 0.3.6",
4652 "libp2p",5426 "libp2p",
4653 "log",5427 "log",
4654 "serde_json",5428 "serde_json",
46585432
4659[[package]]5433[[package]]
4660name = "sc-proposer-metrics"5434name = "sc-proposer-metrics"
4661version = "0.8.0-rc4"5435version = "0.8.0"
4662source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"5436source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
4663dependencies = [5437dependencies = [
4664 "log",5438 "log",
4665 "substrate-prometheus-endpoint",5439 "substrate-prometheus-endpoint",
4666]5440]
46675441
4668[[package]]5442[[package]]
4669name = "sc-rpc"5443name = "sc-rpc"
4670version = "2.0.0-rc4"5444version = "2.0.0"
4671source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"5445source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
4672dependencies = [5446dependencies = [
4673 "futures 0.3.5",5447 "futures 0.3.6",
4674 "hash-db",5448 "hash-db",
4675 "jsonrpc-core",5449 "jsonrpc-core",
4676 "jsonrpc-pubsub",5450 "jsonrpc-pubsub",
46995473
4700[[package]]5474[[package]]
4701name = "sc-rpc-api"5475name = "sc-rpc-api"
4702version = "0.8.0-rc4"5476version = "0.8.0"
4703source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"5477source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
4704dependencies = [5478dependencies = [
4705 "derive_more",5479 "derive_more",
4706 "futures 0.3.5",5480 "futures 0.3.6",
4707 "jsonrpc-core",5481 "jsonrpc-core",
4708 "jsonrpc-core-client",5482 "jsonrpc-core-client",
4709 "jsonrpc-derive",5483 "jsonrpc-derive",
47235497
4724[[package]]5498[[package]]
4725name = "sc-rpc-server"5499name = "sc-rpc-server"
4726version = "2.0.0-rc4"5500version = "2.0.0"
4727source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"5501source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
4728dependencies = [5502dependencies = [
5503 "futures 0.1.30",
4729 "jsonrpc-core",5504 "jsonrpc-core",
4730 "jsonrpc-http-server",5505 "jsonrpc-http-server",
4731 "jsonrpc-ipc-server",5506 "jsonrpc-ipc-server",
4735 "serde",5510 "serde",
4736 "serde_json",5511 "serde_json",
4737 "sp-runtime",5512 "sp-runtime",
5513 "substrate-prometheus-endpoint",
4738]5514]
47395515
4740[[package]]5516[[package]]
4741name = "sc-service"5517name = "sc-service"
4742version = "0.8.0-rc4"5518version = "0.8.0"
4743source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"5519source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
4744dependencies = [5520dependencies = [
4745 "derive_more",5521 "derive_more",
4746 "directories",5522 "directories",
4747 "exit-future",5523 "exit-future",
4748 "futures 0.1.29",5524 "futures 0.1.30",
4749 "futures 0.3.5",5525 "futures 0.3.6",
4750 "futures-timer 3.0.2",5526 "futures-timer 3.0.2",
4751 "hash-db",5527 "hash-db",
5528 "jsonrpc-core",
4752 "jsonrpc-pubsub",5529 "jsonrpc-pubsub",
4753 "lazy_static",5530 "lazy_static",
4754 "log",5531 "log",
4755 "netstat2",
4756 "parity-multiaddr 0.7.3",
4757 "parity-scale-codec",5532 "parity-scale-codec",
4758 "parity-util-mem",5533 "parity-util-mem",
4759 "parking_lot 0.10.2",5534 "parking_lot 0.10.2",
4760 "pin-project",5535 "pin-project",
4761 "procfs",
4762 "rand 0.7.3",5536 "rand 0.7.3",
4763 "sc-block-builder",5537 "sc-block-builder",
4764 "sc-chain-spec",5538 "sc-chain-spec",
4785 "sp-consensus",5559 "sp-consensus",
4786 "sp-core",5560 "sp-core",
4787 "sp-externalities",5561 "sp-externalities",
5562 "sp-inherents",
4788 "sp-io",5563 "sp-io",
4789 "sp-runtime",5564 "sp-runtime",
4790 "sp-session",5565 "sp-session",
4791 "sp-state-machine",5566 "sp-state-machine",
5567 "sp-tracing",
4792 "sp-transaction-pool",5568 "sp-transaction-pool",
4793 "sp-trie",5569 "sp-trie",
4794 "sp-utils",5570 "sp-utils",
4795 "sp-version",5571 "sp-version",
4796 "substrate-prometheus-endpoint",5572 "substrate-prometheus-endpoint",
4797 "sysinfo",
4798 "tempfile",5573 "tempfile",
4799 "tracing",5574 "tracing",
4800 "wasm-timer",5575 "wasm-timer",
4801]5576]
48025577
4803[[package]]5578[[package]]
4804name = "sc-state-db"5579name = "sc-state-db"
4805version = "0.8.0-rc4"5580version = "0.8.0"
4806source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"5581source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
4807dependencies = [5582dependencies = [
4808 "log",5583 "log",
4809 "parity-scale-codec",5584 "parity-scale-codec",
48165591
4817[[package]]5592[[package]]
4818name = "sc-telemetry"5593name = "sc-telemetry"
4819version = "2.0.0-rc4"5594version = "2.0.0"
4820source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"5595source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
4821dependencies = [5596dependencies = [
4822 "bytes 0.5.6",
4823 "futures 0.3.5",5597 "futures 0.3.6",
4824 "futures-timer 3.0.2",5598 "futures-timer 3.0.2",
4825 "libp2p",5599 "libp2p",
4826 "log",5600 "log",
48385612
4839[[package]]5613[[package]]
4840name = "sc-tracing"5614name = "sc-tracing"
4841version = "2.0.0-rc4"5615version = "2.0.0"
4842source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"5616source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
4843dependencies = [5617dependencies = [
4844 "erased-serde",5618 "erased-serde",
4845 "log",5619 "log",
4850 "serde_json",5624 "serde_json",
4851 "slog",5625 "slog",
4852 "sp-tracing",5626 "sp-tracing",
5627 "tracing",
4853 "tracing-core",5628 "tracing-core",
5629 "tracing-subscriber",
4854]5630]
48555631
4856[[package]]5632[[package]]
4857name = "sc-transaction-graph"5633name = "sc-transaction-graph"
4858version = "2.0.0-rc4"5634version = "2.0.0"
4859source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"5635source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
4860dependencies = [5636dependencies = [
4861 "derive_more",5637 "derive_more",
4862 "futures 0.3.5",5638 "futures 0.3.6",
4863 "linked-hash-map",5639 "linked-hash-map",
4864 "log",5640 "log",
4865 "parity-util-mem",5641 "parity-util-mem",
4866 "parking_lot 0.10.2",5642 "parking_lot 0.10.2",
5643 "retain_mut",
4867 "serde",5644 "serde",
4868 "sp-blockchain",5645 "sp-blockchain",
4869 "sp-core",5646 "sp-core",
48755652
4876[[package]]5653[[package]]
4877name = "sc-transaction-pool"5654name = "sc-transaction-pool"
4878version = "2.0.0-rc4"5655version = "2.0.0"
4879source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"5656source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
4880dependencies = [5657dependencies = [
4881 "derive_more",5658 "derive_more",
4882 "futures 0.3.5",5659 "futures 0.3.6",
4883 "futures-diagnose",5660 "futures-diagnose",
4884 "intervalier",5661 "intervalier",
4885 "log",5662 "log",
4917dependencies = [5694dependencies = [
4918 "arrayref",5695 "arrayref",
4919 "arrayvec 0.5.1",5696 "arrayvec 0.5.1",
4920 "curve25519-dalek",5697 "curve25519-dalek 2.1.0",
4921 "getrandom",5698 "getrandom 0.1.15",
4922 "merlin",5699 "merlin",
4923 "rand 0.7.3",5700 "rand 0.7.3",
4924 "rand_core 0.5.1",5701 "rand_core 0.5.1",
4925 "sha2 0.8.2",5702 "sha2 0.8.2",
4926 "subtle 2.2.3",5703 "subtle 2.3.0",
4927 "zeroize",5704 "zeroize",
4928]5705]
5706
5707[[package]]
5708name = "scoped-tls"
5709version = "1.0.0"
5710source = "registry+https://github.com/rust-lang/crates.io-index"
5711checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2"
5712
5713[[package]]
5714name = "scopeguard"
5715version = "0.3.3"
5716source = "registry+https://github.com/rust-lang/crates.io-index"
5717checksum = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27"
49295718
4930[[package]]5719[[package]]
4931name = "scopeguard"5720name = "scopeguard"
4932version = "1.1.0"5721version = "1.1.0"
4933source = "registry+https://github.com/rust-lang/crates.io-index"5722source = "registry+https://github.com/rust-lang/crates.io-index"
4934checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"5723checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
5724
5725[[package]]
5726name = "scroll"
5727version = "0.10.2"
5728source = "registry+https://github.com/rust-lang/crates.io-index"
5729checksum = "fda28d4b4830b807a8b43f7b0e6b5df875311b3e7621d84577188c175b6ec1ec"
5730dependencies = [
5731 "scroll_derive",
5732]
5733
5734[[package]]
5735name = "scroll_derive"
5736version = "0.10.3"
5737source = "registry+https://github.com/rust-lang/crates.io-index"
5738checksum = "6dfde5d1531034db129e95c76ac857e2baecea3443579d493d02224950b0fb6d"
5739dependencies = [
5740 "proc-macro2",
5741 "quote",
5742 "syn",
5743]
49355744
4936[[package]]5745[[package]]
4937name = "sct"5746name = "sct"
4943 "untrusted",5752 "untrusted",
4944]5753]
5754
5755[[package]]
5756name = "secrecy"
5757version = "0.6.0"
5758source = "registry+https://github.com/rust-lang/crates.io-index"
5759checksum = "9182278ed645df3477a9c27bfee0621c621aa16f6972635f7f795dae3d81070f"
5760dependencies = [
5761 "zeroize",
5762]
49455763
4946[[package]]5764[[package]]
4947name = "security-framework"5765name = "security-framework"
4948version = "0.4.4"5766version = "1.0.0"
4949source = "registry+https://github.com/rust-lang/crates.io-index"5767source = "registry+https://github.com/rust-lang/crates.io-index"
4950checksum = "64808902d7d99f78eaddd2b4e2509713babc3dc3c85ad6f4c447680f3c01e535"5768checksum = "ad502866817f0575705bd7be36e2b2535cc33262d493aa733a2ec862baa2bc2b"
4951dependencies = [5769dependencies = [
4952 "bitflags",5770 "bitflags",
4953 "core-foundation",5771 "core-foundation",
49585776
4959[[package]]5777[[package]]
4960name = "security-framework-sys"5778name = "security-framework-sys"
4961version = "0.4.3"5779version = "1.0.0"
4962source = "registry+https://github.com/rust-lang/crates.io-index"5780source = "registry+https://github.com/rust-lang/crates.io-index"
4963checksum = "17bf11d99252f512695eb468de5516e5cf75455521e69dfe343f3b74e4748405"5781checksum = "51ceb04988b17b6d1dcd555390fa822ca5637b4a14e1f5099f13d351bed4d6c7"
4964dependencies = [5782dependencies = [
4965 "core-foundation-sys",5783 "core-foundation-sys",
4966 "libc",5784 "libc",
4981source = "registry+https://github.com/rust-lang/crates.io-index"5799source = "registry+https://github.com/rust-lang/crates.io-index"
4982checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"5800checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
4983
4984[[package]]
4985name = "send_wrapper"
4986version = "0.2.0"
4987source = "registry+https://github.com/rust-lang/crates.io-index"
4988checksum = "a0eddf2e8f50ced781f288c19f18621fa72a3779e3cb58dbf23b07469b0abeb4"
49895801
4990[[package]]5802[[package]]
4991name = "serde"5803name = "serde"
4992version = "1.0.114"5804version = "1.0.117"
4993source = "registry+https://github.com/rust-lang/crates.io-index"5805source = "registry+https://github.com/rust-lang/crates.io-index"
4994checksum = "5317f7588f0a5078ee60ef675ef96735a1442132dc645eb1d12c018620ed8cd3"5806checksum = "b88fa983de7720629c9387e9f517353ed404164b1e482c970a90c1a4aaf7dc1a"
4995dependencies = [5807dependencies = [
4996 "serde_derive",5808 "serde_derive",
4997]5809]
49985810
4999[[package]]5811[[package]]
5000name = "serde_derive"5812name = "serde_derive"
5001version = "1.0.114"5813version = "1.0.117"
5002source = "registry+https://github.com/rust-lang/crates.io-index"5814source = "registry+https://github.com/rust-lang/crates.io-index"
5003checksum = "2a0be94b04690fbaed37cddffc5c134bf537c8e3329d53e982fe04c374978f8e"5815checksum = "cbd1ae72adb44aab48f325a02444a5fc079349a8d804c1fc922aed3f7454c74e"
5004dependencies = [5816dependencies = [
5005 "proc-macro2",5817 "proc-macro2",
5006 "quote 1.0.7",5818 "quote",
5007 "syn 1.0.34",5819 "syn",
5008]5820]
50095821
5010[[package]]5822[[package]]
5011name = "serde_json"5823name = "serde_json"
5012version = "1.0.56"5824version = "1.0.59"
5013source = "registry+https://github.com/rust-lang/crates.io-index"5825source = "registry+https://github.com/rust-lang/crates.io-index"
5014checksum = "3433e879a558dde8b5e8feb2a04899cf34fdde1fafb894687e52105fc1162ac3"5826checksum = "dcac07dbffa1c65e7f816ab9eba78eb142c6d44410f4eeba1e26e4f5dfa56b95"
5015dependencies = [5827dependencies = [
5016 "itoa",5828 "itoa",
5017 "ryu",5829 "ryu",
5031]5843]
50325844
5033[[package]]5845[[package]]
5034name = "sha1"5846name = "sha-1"
5035version = "0.6.0"5847version = "0.9.1"
5036source = "registry+https://github.com/rust-lang/crates.io-index"5848source = "registry+https://github.com/rust-lang/crates.io-index"
5037checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d"5849checksum = "170a36ea86c864a3f16dd2687712dd6646f7019f301e57537c7f4dc9f5916770"
5850dependencies = [
5851 "block-buffer 0.9.0",
5852 "cfg-if 0.1.10",
5853 "cpuid-bool",
5854 "digest 0.9.0",
5855 "opaque-debug 0.3.0",
5856]
50385857
5039[[package]]5858[[package]]
5040name = "sha2"5859name = "sha2"
5055checksum = "2933378ddfeda7ea26f48c555bdad8bb446bf8a3d17832dc83e380d444cfb8c1"5874checksum = "2933378ddfeda7ea26f48c555bdad8bb446bf8a3d17832dc83e380d444cfb8c1"
5056dependencies = [5875dependencies = [
5057 "block-buffer 0.9.0",5876 "block-buffer 0.9.0",
5058 "cfg-if",5877 "cfg-if 0.1.10",
5059 "cpuid-bool",5878 "cpuid-bool",
5060 "digest 0.9.0",5879 "digest 0.9.0",
5061 "opaque-debug 0.3.0",5880 "opaque-debug 0.3.0",
5074 "opaque-debug 0.2.3",5893 "opaque-debug 0.2.3",
5075]5894]
5895
5896[[package]]
5897name = "sha3"
5898version = "0.9.1"
5899source = "registry+https://github.com/rust-lang/crates.io-index"
5900checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809"
5901dependencies = [
5902 "block-buffer 0.9.0",
5903 "digest 0.9.0",
5904 "keccak",
5905 "opaque-debug 0.3.0",
5906]
5907
5908[[package]]
5909name = "sharded-slab"
5910version = "0.0.9"
5911source = "registry+https://github.com/rust-lang/crates.io-index"
5912checksum = "06d5a3f5166fb5b42a5439f2eee8b9de149e235961e3eb21c5808fc3ea17ff3e"
5913dependencies = [
5914 "lazy_static",
5915]
50765916
5077[[package]]5917[[package]]
5078name = "shlex"5918name = "shlex"
50825922
5083[[package]]5923[[package]]
5084name = "signal-hook-registry"5924name = "signal-hook-registry"
5085version = "1.2.0"5925version = "1.2.1"
5086source = "registry+https://github.com/rust-lang/crates.io-index"5926source = "registry+https://github.com/rust-lang/crates.io-index"
5087checksum = "94f478ede9f64724c5d173d7bb56099ec3e2d9fc2774aac65d34b8b890405f41"5927checksum = "a3e12110bc539e657a646068aaf5eb5b63af9d0c1f7b29c97113fad80e15f035"
5088dependencies = [5928dependencies = [
5089 "arc-swap",5929 "arc-swap",
5090 "libc",5930 "libc",
5091]5931]
5932
5933[[package]]
5934name = "signature"
5935version = "1.2.2"
5936source = "registry+https://github.com/rust-lang/crates.io-index"
5937checksum = "29f060a7d147e33490ec10da418795238fd7545bba241504d6b31a409f2e6210"
50925938
5093[[package]]5939[[package]]
5094name = "slab"5940name = "slab"
5136checksum = "a945ec7f7ce853e89ffa36be1e27dce9a43e82ff9093bf3461c30d5da74ed11b"5982checksum = "a945ec7f7ce853e89ffa36be1e27dce9a43e82ff9093bf3461c30d5da74ed11b"
5137dependencies = [5983dependencies = [
5138 "proc-macro2",5984 "proc-macro2",
5139 "quote 1.0.7",5985 "quote",
5140 "syn 1.0.34",5986 "syn",
5141]5987]
51425988
5143[[package]]5989[[package]]
51515997
5152[[package]]5998[[package]]
5153name = "smallvec"5999name = "smallvec"
5154version = "1.4.1"6000version = "1.4.2"
5155source = "registry+https://github.com/rust-lang/crates.io-index"6001source = "registry+https://github.com/rust-lang/crates.io-index"
5156checksum = "3757cb9d89161a2f24e1cf78efa0c1fcff485d18e3f55e0aa3480824ddaa0f3f"6002checksum = "fbee7696b84bbf3d89a1c2eccff0850e3047ed46bfcd2e92c29a2d074d57e252"
51576003
5158[[package]]6004[[package]]
5159name = "snow"6005name = "snow"
5160version = "0.7.1"6006version = "0.7.2"
5161source = "registry+https://github.com/rust-lang/crates.io-index"6007source = "registry+https://github.com/rust-lang/crates.io-index"
5162checksum = "32bf8474159a95551661246cda4976e89356999e3cbfef36f493dacc3fae1e8e"6008checksum = "795dd7aeeee24468e5a32661f6d27f7b5cbed802031b2d7640c7b10f8fb2dd50"
5163dependencies = [6009dependencies = [
5164 "aes-gcm",6010 "aes-gcm",
5165 "blake2 0.9.0",6011 "blake2",
5166 "chacha20poly1305",6012 "chacha20poly1305",
5167 "rand 0.7.3",6013 "rand 0.7.3",
5168 "rand_core 0.5.1",6014 "rand_core 0.5.1",
5169 "ring",6015 "ring",
5170 "rustc_version",6016 "rustc_version",
5171 "sha2 0.9.1",6017 "sha2 0.9.1",
5172 "subtle 2.2.3",6018 "subtle 2.3.0",
5173 "x25519-dalek",6019 "x25519-dalek 1.1.0",
5174]6020]
51756021
5176[[package]]6022[[package]]
5177name = "socket2"6023name = "socket2"
5178version = "0.3.12"6024version = "0.3.15"
5179source = "registry+https://github.com/rust-lang/crates.io-index"6025source = "registry+https://github.com/rust-lang/crates.io-index"
5180checksum = "03088793f677dce356f3ccc2edb1b314ad191ab702a5de3faf49304f7e104918"6026checksum = "b1fa70dc5c8104ec096f4fe7ede7a221d35ae13dcd19ba1ad9a81d2cab9a1c44"
5181dependencies = [6027dependencies = [
5182 "cfg-if",6028 "cfg-if 0.1.10",
5183 "libc",6029 "libc",
5184 "redox_syscall",6030 "redox_syscall",
5185 "winapi 0.3.9",6031 "winapi 0.3.9",
5186]6032]
51876033
5188[[package]]6034[[package]]
5189name = "soketto"6035name = "soketto"
5190version = "0.3.2"6036version = "0.4.2"
5191source = "registry+https://github.com/rust-lang/crates.io-index"6037source = "registry+https://github.com/rust-lang/crates.io-index"
5192checksum = "1c9dab3f95c9ebdf3a88268c19af668f637a3c5039c2c56ff2d40b1b2d64a25b"6038checksum = "b5c71ed3d54db0a699f4948e1bb3e45b450fa31fe602621dee6680361d569c88"
5193dependencies = [6039dependencies = [
5194 "base64",6040 "base64 0.12.3",
5195 "bytes 0.5.6",6041 "bytes 0.5.6",
5196 "flate2",6042 "flate2",
5197 "futures 0.3.5",6043 "futures 0.3.6",
5198 "http 0.2.1",
5199 "httparse",6044 "httparse",
5200 "log",6045 "log",
5201 "rand 0.7.3",6046 "rand 0.7.3",
5202 "sha1",
5203 "smallvec 1.4.1",6047 "sha-1 0.9.1",
5204 "static_assertions",
5205 "thiserror",
5206]6048]
52076049
5208[[package]]6050[[package]]
5209name = "sp-allocator"6051name = "sp-allocator"
5210version = "2.0.0-rc4"6052version = "2.0.0"
5211source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6053source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5212dependencies = [6054dependencies = [
5213 "derive_more",6055 "derive_more",
5214 "log",6056 "log",
52196061
5220[[package]]6062[[package]]
5221name = "sp-api"6063name = "sp-api"
5222version = "2.0.0-rc4"6064version = "2.0.0"
5223source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6065source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5224dependencies = [6066dependencies = [
5225 "hash-db",6067 "hash-db",
5226 "parity-scale-codec",6068 "parity-scale-codec",
52346076
5235[[package]]6077[[package]]
5236name = "sp-api-proc-macro"6078name = "sp-api-proc-macro"
5237version = "2.0.0-rc4"6079version = "2.0.0"
5238source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6080source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5239dependencies = [6081dependencies = [
5240 "blake2-rfc",6082 "blake2-rfc",
5241 "proc-macro-crate",6083 "proc-macro-crate",
5242 "proc-macro2",6084 "proc-macro2",
5243 "quote 1.0.7",6085 "quote",
5244 "syn 1.0.34",6086 "syn",
5245]6087]
52466088
5247[[package]]6089[[package]]
5248name = "sp-application-crypto"6090name = "sp-application-crypto"
5249version = "2.0.0-rc4"6091version = "2.0.0"
5250source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6092source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5251dependencies = [6093dependencies = [
5252 "parity-scale-codec",6094 "parity-scale-codec",
5253 "serde",6095 "serde",
52586100
5259[[package]]6101[[package]]
5260name = "sp-arithmetic"6102name = "sp-arithmetic"
5261version = "2.0.0-rc4"6103version = "2.0.0"
5262source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6104source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5263dependencies = [6105dependencies = [
5264 "integer-sqrt",6106 "integer-sqrt",
5265 "num-traits 0.2.12",6107 "num-traits",
5266 "parity-scale-codec",6108 "parity-scale-codec",
5267 "serde",6109 "serde",
5268 "sp-debug-derive",6110 "sp-debug-derive",
5269 "sp-std",6111 "sp-std",
5270]6112]
6113
6114[[package]]
6115name = "sp-authorship"
6116version = "2.0.0"
6117source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
6118dependencies = [
6119 "parity-scale-codec",
6120 "sp-inherents",
6121 "sp-runtime",
6122 "sp-std",
6123]
52716124
5272[[package]]6125[[package]]
5273name = "sp-block-builder"6126name = "sp-block-builder"
5274version = "2.0.0-rc4"6127version = "2.0.0"
5275source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6128source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5276dependencies = [6129dependencies = [
5277 "parity-scale-codec",6130 "parity-scale-codec",
5278 "sp-api",6131 "sp-api",
52836136
5284[[package]]6137[[package]]
5285name = "sp-blockchain"6138name = "sp-blockchain"
5286version = "2.0.0-rc4"6139version = "2.0.0"
5287source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6140source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5288dependencies = [6141dependencies = [
5289 "derive_more",6142 "derive_more",
5290 "log",6143 "log",
5291 "lru",6144 "lru 0.4.3",
5292 "parity-scale-codec",6145 "parity-scale-codec",
5293 "parking_lot 0.10.2",6146 "parking_lot 0.10.2",
5294 "sp-block-builder",6147 "sp-block-builder",
5295 "sp-consensus",6148 "sp-consensus",
6149 "sp-database",
5296 "sp-runtime",6150 "sp-runtime",
5297 "sp-state-machine",6151 "sp-state-machine",
5298]6152]
52996153
5300[[package]]6154[[package]]
5301name = "sp-chain-spec"6155name = "sp-chain-spec"
5302version = "2.0.0-rc4"6156version = "2.0.0"
5303source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6157source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5304dependencies = [6158dependencies = [
5305 "serde",6159 "serde",
5306 "serde_json",6160 "serde_json",
5307]6161]
53086162
5309[[package]]6163[[package]]
5310name = "sp-consensus"6164name = "sp-consensus"
5311version = "0.8.0-rc4"6165version = "0.8.0"
5312source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6166source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5313dependencies = [6167dependencies = [
5314 "derive_more",6168 "derive_more",
5315 "futures 0.3.5",6169 "futures 0.3.6",
5316 "futures-timer 3.0.2",6170 "futures-timer 3.0.2",
5317 "libp2p",6171 "libp2p",
5318 "log",6172 "log",
5319 "parity-scale-codec",6173 "parity-scale-codec",
5320 "parking_lot 0.10.2",6174 "parking_lot 0.10.2",
5321 "serde",6175 "serde",
6176 "sp-api",
5322 "sp-core",6177 "sp-core",
5323 "sp-inherents",6178 "sp-inherents",
5324 "sp-runtime",6179 "sp-runtime",
5325 "sp-state-machine",6180 "sp-state-machine",
5326 "sp-std",6181 "sp-std",
6182 "sp-trie",
5327 "sp-utils",6183 "sp-utils",
5328 "sp-version",6184 "sp-version",
5329 "substrate-prometheus-endpoint",6185 "substrate-prometheus-endpoint",
53326188
5333[[package]]6189[[package]]
5334name = "sp-consensus-aura"6190name = "sp-consensus-aura"
5335version = "0.8.0-rc4"6191version = "0.8.0"
5336source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6192source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5337dependencies = [6193dependencies = [
5338 "parity-scale-codec",6194 "parity-scale-codec",
5339 "sp-api",6195 "sp-api",
5344 "sp-timestamp",6200 "sp-timestamp",
5345]6201]
6202
6203[[package]]
6204name = "sp-consensus-slots"
6205version = "0.8.0"
6206source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
6207dependencies = [
6208 "parity-scale-codec",
6209 "sp-runtime",
6210]
53466211
5347[[package]]6212[[package]]
5348name = "sp-core"6213name = "sp-core"
5349version = "2.0.0-rc4"6214version = "2.0.0"
5350source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6215source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5351dependencies = [6216dependencies = [
5352 "base58",6217 "base58",
5353 "blake2-rfc",6218 "blake2-rfc",
5354 "byteorder",6219 "byteorder 1.3.4",
5355 "derive_more",6220 "derive_more",
6221 "dyn-clonable",
5356 "ed25519-dalek",6222 "ed25519-dalek",
5357 "futures 0.3.5",6223 "futures 0.3.6",
5358 "hash-db",6224 "hash-db",
5359 "hash256-std-hasher",6225 "hash256-std-hasher",
5360 "hex",6226 "hex",
5361 "impl-serde 0.3.1",6227 "impl-serde",
5362 "lazy_static",6228 "lazy_static",
5363 "libsecp256k1",6229 "libsecp256k1",
5364 "log",6230 "log",
5365 "merlin",6231 "merlin",
5366 "num-traits 0.2.12",6232 "num-traits",
5367 "parity-scale-codec",6233 "parity-scale-codec",
5368 "parity-util-mem",6234 "parity-util-mem",
5369 "parking_lot 0.10.2",6235 "parking_lot 0.10.2",
5370 "primitive-types",6236 "primitive-types",
5371 "rand 0.7.3",6237 "rand 0.7.3",
5372 "regex",6238 "regex",
5373 "schnorrkel",6239 "schnorrkel",
6240 "secrecy",
5374 "serde",6241 "serde",
5375 "sha2 0.8.2",6242 "sha2 0.8.2",
5376 "sp-debug-derive",6243 "sp-debug-derive",
53886255
5389[[package]]6256[[package]]
5390name = "sp-database"6257name = "sp-database"
5391version = "2.0.0-rc4"6258version = "2.0.0"
5392source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6259source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5393dependencies = [6260dependencies = [
5394 "kvdb",6261 "kvdb",
5395 "parking_lot 0.10.2",6262 "parking_lot 0.10.2",
5396]6263]
53976264
5398[[package]]6265[[package]]
5399name = "sp-debug-derive"6266name = "sp-debug-derive"
5400version = "2.0.0-rc4"6267version = "2.0.0"
5401source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6268source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5402dependencies = [6269dependencies = [
5403 "proc-macro2",6270 "proc-macro2",
5404 "quote 1.0.7",6271 "quote",
5405 "syn 1.0.34",6272 "syn",
5406]6273]
54076274
5408[[package]]6275[[package]]
5409name = "sp-externalities"6276name = "sp-externalities"
5410version = "0.8.0-rc4"6277version = "0.8.0"
5411source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6278source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5412dependencies = [6279dependencies = [
5413 "environmental",6280 "environmental",
5414 "parity-scale-codec",6281 "parity-scale-codec",
54186285
5419[[package]]6286[[package]]
5420name = "sp-finality-grandpa"6287name = "sp-finality-grandpa"
5421version = "2.0.0-rc4"6288version = "2.0.0"
5422source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6289source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5423dependencies = [6290dependencies = [
5424 "finality-grandpa",6291 "finality-grandpa",
5425 "log",6292 "log",
54346301
5435[[package]]6302[[package]]
5436name = "sp-finality-tracker"6303name = "sp-finality-tracker"
5437version = "2.0.0-rc4"6304version = "2.0.0"
5438source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6305source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5439dependencies = [6306dependencies = [
5440 "parity-scale-codec",6307 "parity-scale-codec",
5441 "sp-inherents",6308 "sp-inherents",
54446311
5445[[package]]6312[[package]]
5446name = "sp-inherents"6313name = "sp-inherents"
5447version = "2.0.0-rc4"6314version = "2.0.0"
5448source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6315source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5449dependencies = [6316dependencies = [
5450 "derive_more",6317 "derive_more",
5451 "parity-scale-codec",6318 "parity-scale-codec",
54566323
5457[[package]]6324[[package]]
5458name = "sp-io"6325name = "sp-io"
5459version = "2.0.0-rc4"6326version = "2.0.0"
5460source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6327source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5461dependencies = [6328dependencies = [
5462 "futures 0.3.5",6329 "futures 0.3.6",
5463 "hash-db",6330 "hash-db",
5464 "libsecp256k1",6331 "libsecp256k1",
5465 "log",6332 "log",
5473 "sp-tracing",6340 "sp-tracing",
5474 "sp-trie",6341 "sp-trie",
5475 "sp-wasm-interface",6342 "sp-wasm-interface",
6343 "tracing",
6344 "tracing-core",
5476]6345]
54776346
5478[[package]]6347[[package]]
5479name = "sp-keyring"6348name = "sp-keyring"
5480version = "2.0.0-rc4"6349version = "2.0.0"
5481source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6350source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5482dependencies = [6351dependencies = [
5483 "lazy_static",6352 "lazy_static",
5484 "sp-core",6353 "sp-core",
54886357
5489[[package]]6358[[package]]
5490name = "sp-offchain"6359name = "sp-offchain"
5491version = "2.0.0-rc4"6360version = "2.0.0"
5492source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6361source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5493dependencies = [6362dependencies = [
5494 "sp-api",6363 "sp-api",
5495 "sp-core",6364 "sp-core",
54986367
5499[[package]]6368[[package]]
5500name = "sp-panic-handler"6369name = "sp-panic-handler"
5501version = "2.0.0-rc4"6370version = "2.0.0"
5502source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6371source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5503dependencies = [6372dependencies = [
5504 "backtrace",6373 "backtrace",
5505 "log",6374 "log",
5506]6375]
55076376
5508[[package]]6377[[package]]
5509name = "sp-rpc"6378name = "sp-rpc"
5510version = "2.0.0-rc4"6379version = "2.0.0"
5511source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6380source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5512dependencies = [6381dependencies = [
5513 "serde",6382 "serde",
5514 "sp-core",6383 "sp-core",
5515]6384]
55166385
5517[[package]]6386[[package]]
5518name = "sp-runtime"6387name = "sp-runtime"
5519version = "2.0.0-rc4"6388version = "2.0.0"
5520source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6389source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5521dependencies = [6390dependencies = [
5522 "either",6391 "either",
5523 "hash256-std-hasher",6392 "hash256-std-hasher",
55386407
5539[[package]]6408[[package]]
5540name = "sp-runtime-interface"6409name = "sp-runtime-interface"
5541version = "2.0.0-rc4"6410version = "2.0.0"
5542source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6411source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5543dependencies = [6412dependencies = [
5544 "parity-scale-codec",6413 "parity-scale-codec",
5545 "primitive-types",6414 "primitive-types",
5546 "sp-externalities",6415 "sp-externalities",
5547 "sp-runtime-interface-proc-macro",6416 "sp-runtime-interface-proc-macro",
5548 "sp-std",6417 "sp-std",
6418 "sp-storage",
5549 "sp-tracing",6419 "sp-tracing",
5550 "sp-wasm-interface",6420 "sp-wasm-interface",
5551 "static_assertions",6421 "static_assertions",
5552]6422]
55536423
5554[[package]]6424[[package]]
5555name = "sp-runtime-interface-proc-macro"6425name = "sp-runtime-interface-proc-macro"
5556version = "2.0.0-rc4"6426version = "2.0.0"
5557source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6427source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5558dependencies = [6428dependencies = [
5559 "Inflector",6429 "Inflector",
5560 "proc-macro-crate",6430 "proc-macro-crate",
5561 "proc-macro2",6431 "proc-macro2",
5562 "quote 1.0.7",6432 "quote",
5563 "syn 1.0.34",6433 "syn",
5564]6434]
55656435
5566[[package]]6436[[package]]
5567name = "sp-sandbox"6437name = "sp-sandbox"
5568version = "0.8.0-rc4"6438version = "0.8.0"
5569source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6439source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5570dependencies = [6440dependencies = [
5571 "parity-scale-codec",6441 "parity-scale-codec",
5572 "sp-core",6442 "sp-core",
55786448
5579[[package]]6449[[package]]
5580name = "sp-serializer"6450name = "sp-serializer"
5581version = "2.0.0-rc4"6451version = "2.0.0"
5582source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6452source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5583dependencies = [6453dependencies = [
5584 "serde",6454 "serde",
5585 "serde_json",6455 "serde_json",
5586]6456]
55876457
5588[[package]]6458[[package]]
5589name = "sp-session"6459name = "sp-session"
5590version = "2.0.0-rc4"6460version = "2.0.0"
5591source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6461source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5592dependencies = [6462dependencies = [
5593 "parity-scale-codec",6463 "parity-scale-codec",
5594 "sp-api",6464 "sp-api",
56006470
5601[[package]]6471[[package]]
5602name = "sp-staking"6472name = "sp-staking"
5603version = "2.0.0-rc4"6473version = "2.0.0"
5604source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6474source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5605dependencies = [6475dependencies = [
5606 "parity-scale-codec",6476 "parity-scale-codec",
5607 "sp-runtime",6477 "sp-runtime",
56106480
5611[[package]]6481[[package]]
5612name = "sp-state-machine"6482name = "sp-state-machine"
5613version = "0.8.0-rc4"6483version = "0.8.0"
5614source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6484source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5615dependencies = [6485dependencies = [
5616 "hash-db",6486 "hash-db",
5617 "itertools 0.9.0",
5618 "log",6487 "log",
5619 "num-traits 0.2.12",6488 "num-traits",
5620 "parity-scale-codec",6489 "parity-scale-codec",
5621 "parking_lot 0.10.2",6490 "parking_lot 0.10.2",
5622 "rand 0.7.3",6491 "rand 0.7.3",
5623 "smallvec 1.4.1",6492 "smallvec 1.4.2",
5624 "sp-core",6493 "sp-core",
5625 "sp-externalities",6494 "sp-externalities",
5626 "sp-panic-handler",6495 "sp-panic-handler",
6496 "sp-std",
5627 "sp-trie",6497 "sp-trie",
5628 "trie-db",6498 "trie-db",
5629 "trie-root",6499 "trie-root",
5630]6500]
56316501
5632[[package]]6502[[package]]
5633name = "sp-std"6503name = "sp-std"
5634version = "2.0.0-rc4"6504version = "2.0.0"
5635source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6505source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
56366506
5637[[package]]6507[[package]]
5638name = "sp-storage"6508name = "sp-storage"
5639version = "2.0.0-rc4"6509version = "2.0.0"
5640source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6510source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5641dependencies = [6511dependencies = [
5642 "impl-serde 0.2.3",6512 "impl-serde",
6513 "parity-scale-codec",
5643 "ref-cast",6514 "ref-cast",
5644 "serde",6515 "serde",
5645 "sp-debug-derive",6516 "sp-debug-derive",
56486519
5649[[package]]6520[[package]]
5650name = "sp-timestamp"6521name = "sp-timestamp"
5651version = "2.0.0-rc4"6522version = "2.0.0"
5652source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6523source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5653dependencies = [6524dependencies = [
5654 "impl-trait-for-tuples",6525 "impl-trait-for-tuples",
5655 "parity-scale-codec",6526 "parity-scale-codec",
56626533
5663[[package]]6534[[package]]
5664name = "sp-tracing"6535name = "sp-tracing"
5665version = "2.0.0-rc4"6536version = "2.0.0"
5666source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6537source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5667dependencies = [6538dependencies = [
5668 "log",6539 "log",
5669 "rental",6540 "parity-scale-codec",
6541 "sp-std",
5670 "tracing",6542 "tracing",
6543 "tracing-core",
6544 "tracing-subscriber",
5671]6545]
56726546
5673[[package]]6547[[package]]
5674name = "sp-transaction-pool"6548name = "sp-transaction-pool"
5675version = "2.0.0-rc4"6549version = "2.0.0"
5676source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6550source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5677dependencies = [6551dependencies = [
5678 "derive_more",6552 "derive_more",
5679 "futures 0.3.5",6553 "futures 0.3.6",
5680 "log",6554 "log",
5681 "parity-scale-codec",6555 "parity-scale-codec",
5682 "serde",6556 "serde",
5683 "sp-api",6557 "sp-api",
5684 "sp-blockchain",6558 "sp-blockchain",
5685 "sp-runtime",6559 "sp-runtime",
5686 "sp-utils",
5687]6560]
56886561
5689[[package]]6562[[package]]
5690name = "sp-trie"6563name = "sp-trie"
5691version = "2.0.0-rc4"6564version = "2.0.0"
5692source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6565source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5693dependencies = [6566dependencies = [
5694 "hash-db",6567 "hash-db",
5695 "memory-db",6568 "memory-db",
57026575
5703[[package]]6576[[package]]
5704name = "sp-utils"6577name = "sp-utils"
5705version = "2.0.0-rc4"6578version = "2.0.0"
5706source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6579source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5707dependencies = [6580dependencies = [
5708 "futures 0.3.5",6581 "futures 0.3.6",
5709 "futures-core",6582 "futures-core",
5710 "futures-timer 3.0.2",6583 "futures-timer 3.0.2",
5711 "lazy_static",6584 "lazy_static",
57146587
5715[[package]]6588[[package]]
5716name = "sp-version"6589name = "sp-version"
5717version = "2.0.0-rc4"6590version = "2.0.0"
5718source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6591source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5719dependencies = [6592dependencies = [
5720 "impl-serde 0.2.3",6593 "impl-serde",
5721 "parity-scale-codec",6594 "parity-scale-codec",
5722 "serde",6595 "serde",
5723 "sp-runtime",6596 "sp-runtime",
57266599
5727[[package]]6600[[package]]
5728name = "sp-wasm-interface"6601name = "sp-wasm-interface"
5729version = "2.0.0-rc4"6602version = "2.0.0"
5730source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6603source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5731dependencies = [6604dependencies = [
5732 "impl-trait-for-tuples",6605 "impl-trait-for-tuples",
5733 "parity-scale-codec",6606 "parity-scale-codec",
5762 "rand 0.5.6",6635 "rand 0.5.6",
5763]6636]
6637
6638[[package]]
6639name = "stream-cipher"
6640version = "0.3.2"
6641source = "registry+https://github.com/rust-lang/crates.io-index"
6642checksum = "8131256a5896cabcf5eb04f4d6dacbe1aefda854b0d9896e09cb58829ec5638c"
6643dependencies = [
6644 "generic-array 0.12.3",
6645]
57646646
5765[[package]]6647[[package]]
5766name = "stream-cipher"6648name = "stream-cipher"
5767version = "0.4.1"6649version = "0.7.1"
5768source = "registry+https://github.com/rust-lang/crates.io-index"6650source = "registry+https://github.com/rust-lang/crates.io-index"
5769checksum = "09f8ed9974042b8c3672ff3030a69fcc03b74c47c3d1ecb7755e8a3626011e88"6651checksum = "c80e15f898d8d8f25db24c253ea615cc14acf418ff307822995814e7d42cfa89"
5770dependencies = [6652dependencies = [
6653 "block-cipher",
5771 "generic-array 0.14.3",6654 "generic-array 0.14.4",
5772]6655]
57736656
5774[[package]]6657[[package]]
57886671
5789[[package]]6672[[package]]
5790name = "structopt"6673name = "structopt"
5791version = "0.3.15"6674version = "0.3.20"
5792source = "registry+https://github.com/rust-lang/crates.io-index"6675source = "registry+https://github.com/rust-lang/crates.io-index"
5793checksum = "de2f5e239ee807089b62adce73e48c625e0ed80df02c7ab3f068f5db5281065c"6676checksum = "126d630294ec449fae0b16f964e35bf3c74f940da9dca17ee9b905f7b3112eb8"
5794dependencies = [6677dependencies = [
5795 "clap",6678 "clap",
5796 "lazy_static",6679 "lazy_static",
57996682
5800[[package]]6683[[package]]
5801name = "structopt-derive"6684name = "structopt-derive"
5802version = "0.4.8"6685version = "0.4.13"
5803source = "registry+https://github.com/rust-lang/crates.io-index"6686source = "registry+https://github.com/rust-lang/crates.io-index"
5804checksum = "510413f9de616762a4fbeab62509bf15c729603b72d7cd71280fbca431b1c118"6687checksum = "65e51c492f9e23a220534971ff5afc14037289de430e3c83f9daf6a1b6ae91e8"
5805dependencies = [6688dependencies = [
5806 "heck",6689 "heck",
5807 "proc-macro-error",6690 "proc-macro-error",
5808 "proc-macro2",6691 "proc-macro2",
5809 "quote 1.0.7",6692 "quote",
5810 "syn 1.0.34",6693 "syn",
5811]6694]
58126695
5813[[package]]6696[[package]]
5827dependencies = [6710dependencies = [
5828 "heck",6711 "heck",
5829 "proc-macro2",6712 "proc-macro2",
5830 "quote 1.0.7",6713 "quote",
5831 "syn 1.0.34",6714 "syn",
5832]6715]
58336716
5834[[package]]6717[[package]]
5835name = "substrate-bip39"6718name = "substrate-bip39"
5836version = "0.4.1"6719version = "0.4.2"
5837source = "registry+https://github.com/rust-lang/crates.io-index"6720source = "registry+https://github.com/rust-lang/crates.io-index"
5838checksum = "c004e8166d6e0aa3a9d5fa673e5b7098ff25f930de1013a21341988151e681bb"6721checksum = "bed6646a0159b9935b5d045611560eeef842b78d7adc3ba36f5ca325a13a0236"
5839dependencies = [6722dependencies = [
5840 "hmac",6723 "hmac",
5841 "pbkdf2",6724 "pbkdf2",
5842 "schnorrkel",6725 "schnorrkel",
5843 "sha2 0.8.2",6726 "sha2 0.8.2",
6727 "zeroize",
5844]6728]
58456729
5846[[package]]6730[[package]]
5847name = "substrate-build-script-utils"6731name = "substrate-build-script-utils"
5848version = "2.0.0-rc4"6732version = "2.0.0"
5849source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6733source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5850dependencies = [6734dependencies = [
5851 "platforms",6735 "platforms",
5852]6736]
6737
6738[[package]]
6739name = "substrate-frame-rpc-system"
6740version = "2.0.0"
6741source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
6742dependencies = [
6743 "frame-system-rpc-runtime-api",
6744 "futures 0.3.6",
6745 "jsonrpc-core",
6746 "jsonrpc-core-client",
6747 "jsonrpc-derive",
6748 "log",
6749 "parity-scale-codec",
6750 "sc-client-api",
6751 "sc-rpc-api",
6752 "serde",
6753 "sp-api",
6754 "sp-block-builder",
6755 "sp-blockchain",
6756 "sp-core",
6757 "sp-runtime",
6758 "sp-transaction-pool",
6759]
58536760
5854[[package]]6761[[package]]
5855name = "substrate-prometheus-endpoint"6762name = "substrate-prometheus-endpoint"
5856version = "0.8.0-rc4"6763version = "0.8.0"
5857source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6764source = "git+https://github.com/usetech-llc/substrate.git?branch=v2.0.0_release#a200cdb93c6af5763b9c7bf313fa708764ac88ca"
5858dependencies = [6765dependencies = [
5859 "async-std",6766 "async-std",
5860 "derive_more",6767 "derive_more",
5861 "futures-util",6768 "futures-util",
5862 "hyper 0.13.7",6769 "hyper 0.13.8",
5863 "log",6770 "log",
5864 "prometheus",6771 "prometheus",
5865 "tokio 0.2.21",6772 "tokio 0.2.22",
5866]6773]
58676774
5868[[package]]6775[[package]]
5869name = "substrate-wasm-builder-runner"6776name = "substrate-wasm-builder-runner"
5870version = "1.0.6"6777version = "1.0.6"
5871source = "git+https://github.com/usetech-llc/substrate.git?branch=rc4_ext_dispatch_reenabled#b161460bf73e4cc73e29b8e01ab0323bb3d95e84"6778source = "registry+https://github.com/rust-lang/crates.io-index"
6779checksum = "d2a965994514ab35d3893e9260245f2947fd1981cdd4fffd2c6e6d1a9ce02e6a"
58726780
5873[[package]]6781[[package]]
5874name = "subtle"6782name = "subtle"
58786786
5879[[package]]6787[[package]]
5880name = "subtle"6788name = "subtle"
5881version = "2.2.3"6789version = "2.3.0"
5882source = "registry+https://github.com/rust-lang/crates.io-index"6790source = "registry+https://github.com/rust-lang/crates.io-index"
5883checksum = "502d53007c02d7605a05df1c1a73ee436952781653da5d0bf57ad608f66932c1"6791checksum = "343f3f510c2915908f155e94f17220b19ccfacf2a64a2a5d8004f2c3e311e7fd"
5884
5885[[package]]
5886name = "syn"
5887version = "0.11.11"
5888source = "registry+https://github.com/rust-lang/crates.io-index"
5889checksum = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad"
5890dependencies = [
5891 "quote 0.3.15",
5892 "synom",
5893 "unicode-xid 0.0.4",
5894]
58956792
5896[[package]]6793[[package]]
5897name = "syn"6794name = "syn"
5898version = "1.0.34"6795version = "1.0.44"
5899source = "registry+https://github.com/rust-lang/crates.io-index"6796source = "registry+https://github.com/rust-lang/crates.io-index"
5900checksum = "936cae2873c940d92e697597c5eee105fb570cd5689c695806f672883653349b"6797checksum = "e03e57e4fcbfe7749842d53e24ccb9aa12b7252dbe5e91d2acad31834c8b8fdd"
5901dependencies = [6798dependencies = [
5902 "proc-macro2",6799 "proc-macro2",
5903 "quote 1.0.7",6800 "quote",
5904 "unicode-xid 0.2.1",6801 "unicode-xid",
5905]6802]
5906
5907[[package]]
5908name = "syn-mid"
5909version = "0.5.0"
5910source = "registry+https://github.com/rust-lang/crates.io-index"
5911checksum = "7be3539f6c128a931cf19dcee741c1af532c7fd387baa739c03dd2e96479338a"
5912dependencies = [
5913 "proc-macro2",
5914 "quote 1.0.7",
5915 "syn 1.0.34",
5916]
5917
5918[[package]]
5919name = "synom"
5920version = "0.11.3"
5921source = "registry+https://github.com/rust-lang/crates.io-index"
5922checksum = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6"
5923dependencies = [
5924 "unicode-xid 0.0.4",
5925]
59266803
5927[[package]]6804[[package]]
5928name = "synstructure"6805name = "synstructure"
5931checksum = "b834f2d66f734cb897113e34aaff2f1ab4719ca946f9a7358dba8f8064148701"6808checksum = "b834f2d66f734cb897113e34aaff2f1ab4719ca946f9a7358dba8f8064148701"
5932dependencies = [6809dependencies = [
5933 "proc-macro2",6810 "proc-macro2",
5934 "quote 1.0.7",6811 "quote",
5935 "syn 1.0.34",6812 "syn",
5936 "unicode-xid 0.2.1",6813 "unicode-xid",
5937]6814]
5938
5939[[package]]
5940name = "sysinfo"
5941version = "0.13.4"
5942source = "registry+https://github.com/rust-lang/crates.io-index"
5943checksum = "1cac193374347e7c263c5f547524f36ff8ec6702d56c8799c8331d26dffe8c1e"
5944dependencies = [
5945 "cfg-if",
5946 "doc-comment",
5947 "libc",
5948 "ntapi",
5949 "once_cell",
5950 "rayon",
5951 "winapi 0.3.9",
5952]
59536815
5954[[package]]6816[[package]]
5955name = "take_mut"6817name = "take_mut"
5956version = "0.2.2"6818version = "0.2.2"
5957source = "registry+https://github.com/rust-lang/crates.io-index"6819source = "registry+https://github.com/rust-lang/crates.io-index"
5958checksum = "f764005d11ee5f36500a149ace24e00e3da98b0158b3e2d53a7495660d3f4d60"6820checksum = "f764005d11ee5f36500a149ace24e00e3da98b0158b3e2d53a7495660d3f4d60"
6821
6822[[package]]
6823name = "target-lexicon"
6824version = "0.10.0"
6825source = "registry+https://github.com/rust-lang/crates.io-index"
6826checksum = "ab0e7238dcc7b40a7be719a25365910f6807bd864f4cce6b2e6b873658e2b19d"
59596827
5960[[package]]6828[[package]]
5961name = "tempfile"6829name = "tempfile"
5962version = "3.1.0"6830version = "3.1.0"
5963source = "registry+https://github.com/rust-lang/crates.io-index"6831source = "registry+https://github.com/rust-lang/crates.io-index"
5964checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9"6832checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9"
5965dependencies = [6833dependencies = [
5966 "cfg-if",6834 "cfg-if 0.1.10",
5967 "libc",6835 "libc",
5968 "rand 0.7.3",6836 "rand 0.7.3",
5969 "redox_syscall",6837 "redox_syscall",
59916859
5992[[package]]6860[[package]]
5993name = "thiserror"6861name = "thiserror"
5994version = "1.0.20"6862version = "1.0.21"
5995source = "registry+https://github.com/rust-lang/crates.io-index"6863source = "registry+https://github.com/rust-lang/crates.io-index"
5996checksum = "7dfdd070ccd8ccb78f4ad66bf1982dc37f620ef696c6b5028fe2ed83dd3d0d08"6864checksum = "318234ffa22e0920fe9a40d7b8369b5f649d490980cf7aadcf1eb91594869b42"
5997dependencies = [6865dependencies = [
5998 "thiserror-impl",6866 "thiserror-impl",
5999]6867]
60006868
6001[[package]]6869[[package]]
6002name = "thiserror-impl"6870name = "thiserror-impl"
6003version = "1.0.20"6871version = "1.0.21"
6004source = "registry+https://github.com/rust-lang/crates.io-index"6872source = "registry+https://github.com/rust-lang/crates.io-index"
6005checksum = "bd80fc12f73063ac132ac92aceea36734f04a1d93c1240c6944e23a3b8841793"6873checksum = "cae2447b6282786c3493999f40a9be2a6ad20cb8bd268b0a0dbf5a065535c0ab"
6006dependencies = [6874dependencies = [
6007 "proc-macro2",6875 "proc-macro2",
6008 "quote 1.0.7",6876 "quote",
6009 "syn 1.0.34",6877 "syn",
6010]6878]
60116879
6012[[package]]6880[[package]]
60296897
6030[[package]]6898[[package]]
6031name = "time"6899name = "time"
6032version = "0.1.43"6900version = "0.1.44"
6033source = "registry+https://github.com/rust-lang/crates.io-index"6901source = "registry+https://github.com/rust-lang/crates.io-index"
6034checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438"6902checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255"
6035dependencies = [6903dependencies = [
6036 "libc",6904 "libc",
6905 "wasi 0.10.0+wasi-snapshot-preview1",
6037 "winapi 0.3.9",6906 "winapi 0.3.9",
6038]6907]
60396908
6045dependencies = [6914dependencies = [
6046 "failure",6915 "failure",
6047 "hmac",6916 "hmac",
6048 "once_cell",6917 "once_cell 1.4.1",
6049 "pbkdf2",6918 "pbkdf2",
6050 "rand 0.7.3",6919 "rand 0.7.3",
6051 "rustc-hash",6920 "rustc-hash",
60646933
6065[[package]]6934[[package]]
6066name = "tinyvec"6935name = "tinyvec"
6067version = "0.3.3"6936version = "0.3.4"
6068source = "registry+https://github.com/rust-lang/crates.io-index"6937source = "registry+https://github.com/rust-lang/crates.io-index"
6069checksum = "53953d2d3a5ad81d9f844a32f14ebb121f50b650cd59d0ee2a07cf13c617efed"6938checksum = "238ce071d267c5710f9d31451efec16c5ee22de34df17cc05e56cbc92e967117"
60706939
6071[[package]]6940[[package]]
6072name = "tokio"6941name = "tokio"
6075checksum = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6"6944checksum = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6"
6076dependencies = [6945dependencies = [
6077 "bytes 0.4.12",6946 "bytes 0.4.12",
6078 "futures 0.1.29",6947 "futures 0.1.30",
6079 "mio",6948 "mio",
6080 "num_cpus",6949 "num_cpus",
6081 "tokio-codec",6950 "tokio-codec",
60946963
6095[[package]]6964[[package]]
6096name = "tokio"6965name = "tokio"
6097version = "0.2.21"6966version = "0.2.22"
6098source = "registry+https://github.com/rust-lang/crates.io-index"6967source = "registry+https://github.com/rust-lang/crates.io-index"
6099checksum = "d099fa27b9702bed751524694adbe393e18b36b204da91eb1cbbbbb4a5ee2d58"6968checksum = "5d34ca54d84bf2b5b4d7d31e901a8464f7b60ac145a284fba25ceb801f2ddccd"
6100dependencies = [6969dependencies = [
6101 "bytes 0.5.6",6970 "bytes 0.5.6",
6102 "fnv",6971 "fnv",
6122dependencies = [6991dependencies = [
6123 "bytes 0.4.12",6992 "bytes 0.4.12",
6124 "either",6993 "either",
6125 "futures 0.1.29",6994 "futures 0.1.30",
6126]6995]
61276996
6128[[package]]6997[[package]]
6132checksum = "25b2998660ba0e70d18684de5d06b70b70a3a747469af9dea7618cc59e75976b"7001checksum = "25b2998660ba0e70d18684de5d06b70b70a3a747469af9dea7618cc59e75976b"
6133dependencies = [7002dependencies = [
6134 "bytes 0.4.12",7003 "bytes 0.4.12",
6135 "futures 0.1.29",7004 "futures 0.1.30",
6136 "tokio-io",7005 "tokio-io",
6137]7006]
61387007
6142source = "registry+https://github.com/rust-lang/crates.io-index"7011source = "registry+https://github.com/rust-lang/crates.io-index"
6143checksum = "b1de0e32a83f131e002238d7ccde18211c0a5397f60cbfffcb112868c2e0e20e"7012checksum = "b1de0e32a83f131e002238d7ccde18211c0a5397f60cbfffcb112868c2e0e20e"
6144dependencies = [7013dependencies = [
6145 "futures 0.1.29",7014 "futures 0.1.30",
6146 "tokio-executor 0.1.10",7015 "tokio-executor 0.1.10",
6147]7016]
61487017
6153checksum = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671"7022checksum = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671"
6154dependencies = [7023dependencies = [
6155 "crossbeam-utils",7024 "crossbeam-utils",
6156 "futures 0.1.29",7025 "futures 0.1.30",
6157]7026]
61587027
6159[[package]]7028[[package]]
6173source = "registry+https://github.com/rust-lang/crates.io-index"7042source = "registry+https://github.com/rust-lang/crates.io-index"
6174checksum = "297a1206e0ca6302a0eed35b700d292b275256f596e2f3fea7729d5e629b6ff4"7043checksum = "297a1206e0ca6302a0eed35b700d292b275256f596e2f3fea7729d5e629b6ff4"
6175dependencies = [7044dependencies = [
6176 "futures 0.1.29",7045 "futures 0.1.30",
6177 "tokio-io",7046 "tokio-io",
6178 "tokio-threadpool",7047 "tokio-threadpool",
6179]7048]
6185checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674"7054checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674"
6186dependencies = [7055dependencies = [
6187 "bytes 0.4.12",7056 "bytes 0.4.12",
6188 "futures 0.1.29",7057 "futures 0.1.30",
6189 "log",7058 "log",
6190]7059]
61917060
6196checksum = "9d282d483052288b2308ba5ee795f5673b159c9bdf63c385a05609da782a5eae"7065checksum = "9d282d483052288b2308ba5ee795f5673b159c9bdf63c385a05609da782a5eae"
6197dependencies = [7066dependencies = [
6198 "bytes 0.4.12",7067 "bytes 0.4.12",
6199 "futures 0.1.29",7068 "futures 0.1.30",
6200 "mio",7069 "mio",
6201 "mio-named-pipes",7070 "mio-named-pipes",
6202 "tokio 0.1.22",7071 "tokio 0.1.22",
6209checksum = "09bc590ec4ba8ba87652da2068d150dcada2cfa2e07faae270a5e0409aa51351"7078checksum = "09bc590ec4ba8ba87652da2068d150dcada2cfa2e07faae270a5e0409aa51351"
6210dependencies = [7079dependencies = [
6211 "crossbeam-utils",7080 "crossbeam-utils",
6212 "futures 0.1.29",7081 "futures 0.1.30",
6213 "lazy_static",7082 "lazy_static",
6214 "log",7083 "log",
6215 "mio",7084 "mio",
62237092
6224[[package]]7093[[package]]
6225name = "tokio-rustls"7094name = "tokio-rustls"
6226version = "0.13.1"7095version = "0.14.1"
6227source = "registry+https://github.com/rust-lang/crates.io-index"7096source = "registry+https://github.com/rust-lang/crates.io-index"
6228checksum = "15cb62a0d2770787abc96e99c1cd98fcf17f94959f3af63ca85bdfb203f051b4"7097checksum = "e12831b255bcfa39dc0436b01e19fea231a37db570686c06ee72c423479f889a"
6229dependencies = [7098dependencies = [
6230 "futures-core",7099 "futures-core",
6231 "rustls",7100 "rustls",
6232 "tokio 0.2.21",7101 "tokio 0.2.22",
6233 "webpki",7102 "webpki",
6234]7103]
62357104
6239source = "registry+https://github.com/rust-lang/crates.io-index"7108source = "registry+https://github.com/rust-lang/crates.io-index"
6240checksum = "24da22d077e0f15f55162bdbdc661228c1581892f52074fb242678d015b45162"7109checksum = "24da22d077e0f15f55162bdbdc661228c1581892f52074fb242678d015b45162"
6241dependencies = [7110dependencies = [
6242 "futures 0.1.29",7111 "futures 0.1.30",
6243]7112]
62447113
6245[[package]]7114[[package]]
6249checksum = "edfe50152bc8164fcc456dab7891fa9bf8beaf01c5ee7e1dd43a397c3cf87dee"7118checksum = "edfe50152bc8164fcc456dab7891fa9bf8beaf01c5ee7e1dd43a397c3cf87dee"
6250dependencies = [7119dependencies = [
6251 "fnv",7120 "fnv",
6252 "futures 0.1.29",7121 "futures 0.1.30",
6253]7122]
62547123
6255[[package]]7124[[package]]
6270checksum = "98df18ed66e3b72e742f185882a9e201892407957e45fbff8da17ae7a7c51f72"7139checksum = "98df18ed66e3b72e742f185882a9e201892407957e45fbff8da17ae7a7c51f72"
6271dependencies = [7140dependencies = [
6272 "bytes 0.4.12",7141 "bytes 0.4.12",
6273 "futures 0.1.29",7142 "futures 0.1.30",
6274 "iovec",7143 "iovec",
6275 "mio",7144 "mio",
6276 "tokio-io",7145 "tokio-io",
6286 "crossbeam-deque",7155 "crossbeam-deque",
6287 "crossbeam-queue",7156 "crossbeam-queue",
6288 "crossbeam-utils",7157 "crossbeam-utils",
6289 "futures 0.1.29",7158 "futures 0.1.30",
6290 "lazy_static",7159 "lazy_static",
6291 "log",7160 "log",
6292 "num_cpus",7161 "num_cpus",
6301checksum = "93044f2d313c95ff1cb7809ce9a7a05735b012288a888b62d4434fd58c94f296"7170checksum = "93044f2d313c95ff1cb7809ce9a7a05735b012288a888b62d4434fd58c94f296"
6302dependencies = [7171dependencies = [
6303 "crossbeam-utils",7172 "crossbeam-utils",
6304 "futures 0.1.29",7173 "futures 0.1.30",
6305 "slab",7174 "slab",
6306 "tokio-executor 0.1.10",7175 "tokio-executor 0.1.10",
6307]7176]
6313checksum = "e2a0b10e610b39c38b031a2fcab08e4b82f16ece36504988dcbd81dbba650d82"7182checksum = "e2a0b10e610b39c38b031a2fcab08e4b82f16ece36504988dcbd81dbba650d82"
6314dependencies = [7183dependencies = [
6315 "bytes 0.4.12",7184 "bytes 0.4.12",
6316 "futures 0.1.29",7185 "futures 0.1.30",
6317 "log",7186 "log",
6318 "mio",7187 "mio",
6319 "tokio-codec",7188 "tokio-codec",
6328checksum = "ab57a4ac4111c8c9dbcf70779f6fc8bc35ae4b2454809febac840ad19bd7e4e0"7197checksum = "ab57a4ac4111c8c9dbcf70779f6fc8bc35ae4b2454809febac840ad19bd7e4e0"
6329dependencies = [7198dependencies = [
6330 "bytes 0.4.12",7199 "bytes 0.4.12",
6331 "futures 0.1.29",7200 "futures 0.1.30",
6332 "iovec",7201 "iovec",
6333 "libc",7202 "libc",
6334 "log",7203 "log",
6350 "futures-sink",7219 "futures-sink",
6351 "log",7220 "log",
6352 "pin-project-lite",7221 "pin-project-lite",
6353 "tokio 0.2.21",7222 "tokio 0.2.22",
6354]7223]
63557224
6356[[package]]7225[[package]]
6357name = "toml"7226name = "toml"
6358version = "0.5.6"7227version = "0.5.7"
6359source = "registry+https://github.com/rust-lang/crates.io-index"7228source = "registry+https://github.com/rust-lang/crates.io-index"
6360checksum = "ffc92d160b1eef40665be3a05630d003936a3bc7da7421277846c2613e92c71a"7229checksum = "75cf45bb0bef80604d001caaec0d09da99611b3c0fd39d3080468875cdb65645"
6361dependencies = [7230dependencies = [
6362 "serde",7231 "serde",
6363]7232]
63707239
6371[[package]]7240[[package]]
6372name = "tracing"7241name = "tracing"
6373version = "0.1.16"7242version = "0.1.21"
6374source = "registry+https://github.com/rust-lang/crates.io-index"7243source = "registry+https://github.com/rust-lang/crates.io-index"
6375checksum = "c2e2a2de6b0d5cbb13fc21193a2296888eaab62b6044479aafb3c54c01c29fcd"7244checksum = "b0987850db3733619253fe60e17cb59b82d37c7e6c0236bb81e4d6b87c879f27"
6376dependencies = [7245dependencies = [
6377 "cfg-if",7246 "cfg-if 0.1.10",
6378 "log",7247 "log",
7248 "pin-project-lite",
6379 "tracing-attributes",7249 "tracing-attributes",
6380 "tracing-core",7250 "tracing-core",
6381]7251]
63827252
6383[[package]]7253[[package]]
6384name = "tracing-attributes"7254name = "tracing-attributes"
6385version = "0.1.9"7255version = "0.1.11"
6386source = "registry+https://github.com/rust-lang/crates.io-index"7256source = "registry+https://github.com/rust-lang/crates.io-index"
6387checksum = "f0693bf8d6f2bf22c690fc61a9d21ac69efdbb894a17ed596b9af0f01e64b84b"7257checksum = "80e0ccfc3378da0cce270c946b676a376943f5cd16aeba64568e7939806f4ada"
6388dependencies = [7258dependencies = [
6389 "proc-macro2",7259 "proc-macro2",
6390 "quote 1.0.7",7260 "quote",
6391 "syn 1.0.34",7261 "syn",
6392]7262]
63937263
6394[[package]]7264[[package]]
6395name = "tracing-core"7265name = "tracing-core"
6396version = "0.1.11"7266version = "0.1.17"
6397source = "registry+https://github.com/rust-lang/crates.io-index"7267source = "registry+https://github.com/rust-lang/crates.io-index"
6398checksum = "94ae75f0d28ae10786f3b1895c55fe72e79928fd5ccdebb5438c75e93fec178f"7268checksum = "f50de3927f93d202783f4513cda820ab47ef17f624b03c096e86ef00c67e6b5f"
6399dependencies = [7269dependencies = [
6400 "lazy_static",7270 "lazy_static",
6401]7271]
7272
7273[[package]]
7274name = "tracing-log"
7275version = "0.1.1"
7276source = "registry+https://github.com/rust-lang/crates.io-index"
7277checksum = "5e0f8c7178e13481ff6765bd169b33e8d554c5d2bbede5e32c356194be02b9b9"
7278dependencies = [
7279 "lazy_static",
7280 "log",
7281 "tracing-core",
7282]
7283
7284[[package]]
7285name = "tracing-serde"
7286version = "0.1.2"
7287source = "registry+https://github.com/rust-lang/crates.io-index"
7288checksum = "fb65ea441fbb84f9f6748fd496cf7f63ec9af5bca94dd86456978d055e8eb28b"
7289dependencies = [
7290 "serde",
7291 "tracing-core",
7292]
7293
7294[[package]]
7295name = "tracing-subscriber"
7296version = "0.2.13"
7297source = "registry+https://github.com/rust-lang/crates.io-index"
7298checksum = "4ef0a5e15477aa303afbfac3a44cba9b6430fdaad52423b1e6c0dbbe28c3eedd"
7299dependencies = [
7300 "ansi_term 0.12.1",
7301 "chrono",
7302 "lazy_static",
7303 "matchers",
7304 "regex",
7305 "serde",
7306 "serde_json",
7307 "sharded-slab",
7308 "smallvec 1.4.2",
7309 "thread_local",
7310 "tracing",
7311 "tracing-core",
7312 "tracing-log",
7313 "tracing-serde",
7314]
64027315
6403[[package]]7316[[package]]
6404name = "trie-db"7317name = "trie-db"
6405version = "0.21.0"7318version = "0.22.1"
6406source = "registry+https://github.com/rust-lang/crates.io-index"7319source = "registry+https://github.com/rust-lang/crates.io-index"
6407checksum = "cb230c24c741993b04cfccbabb45acff6f6480c5f00d3ed8794ea43db3a9d727"7320checksum = "9e55f7ace33d6237e14137e386f4e1672e2a5c6bbc97fef9f438581a143971f0"
6408dependencies = [7321dependencies = [
6409 "hash-db",7322 "hash-db",
6410 "hashbrown 0.6.3",7323 "hashbrown 0.8.2",
6411 "log",7324 "log",
6412 "rustc-hex",7325 "rustc-hex",
6413 "smallvec 1.4.1",7326 "smallvec 1.4.2",
6414]7327]
64157328
6416[[package]]7329[[package]]
64307343
6431[[package]]7344[[package]]
6432name = "twox-hash"7345name = "twox-hash"
6433version = "1.5.0"7346version = "1.6.0"
6434source = "registry+https://github.com/rust-lang/crates.io-index"7347source = "registry+https://github.com/rust-lang/crates.io-index"
6435checksum = "3bfd5b7557925ce778ff9b9ef90e3ade34c524b5ff10e239c69a42d546d2af56"7348checksum = "04f8ab788026715fa63b31960869617cba39117e520eb415b0139543e325ab59"
6436dependencies = [7349dependencies = [
7350 "cfg-if 0.1.10",
6437 "rand 0.7.3",7351 "rand 0.7.3",
7352 "static_assertions",
6438]7353]
64397354
6440[[package]]7355[[package]]
64457360
6446[[package]]7361[[package]]
6447name = "uint"7362name = "uint"
6448version = "0.8.3"7363version = "0.8.5"
6449source = "registry+https://github.com/rust-lang/crates.io-index"7364source = "registry+https://github.com/rust-lang/crates.io-index"
6450checksum = "173cd16430c206dc1a430af8a89a0e9c076cf15cb42b4aedb10e8cc8fee73681"7365checksum = "9db035e67dfaf7edd9aebfe8676afcd63eed53c8a4044fed514c8cccf1835177"
6451dependencies = [7366dependencies = [
6452 "byteorder",7367 "byteorder 1.3.4",
6453 "crunchy",7368 "crunchy",
6454 "rustc-hex",7369 "rustc-hex",
6455 "static_assertions",7370 "static_assertions",
6494source = "registry+https://github.com/rust-lang/crates.io-index"7409source = "registry+https://github.com/rust-lang/crates.io-index"
6495checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3"7410checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3"
6496
6497[[package]]
6498name = "unicode-xid"
6499version = "0.0.4"
6500source = "registry+https://github.com/rust-lang/crates.io-index"
6501checksum = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc"
65027411
6503[[package]]7412[[package]]
6504name = "unicode-xid"7413name = "unicode-xid"
6512source = "registry+https://github.com/rust-lang/crates.io-index"7421source = "registry+https://github.com/rust-lang/crates.io-index"
6513checksum = "8326b2c654932e3e4f9196e69d08fdf7cfd718e1dc6f66b347e6024a0c961402"7422checksum = "8326b2c654932e3e4f9196e69d08fdf7cfd718e1dc6f66b347e6024a0c961402"
6514dependencies = [7423dependencies = [
6515 "generic-array 0.14.3",7424 "generic-array 0.14.4",
6516 "subtle 2.2.3",7425 "subtle 2.3.0",
6517]7426]
65187427
6519[[package]]7428[[package]]
6520name = "unsigned-varint"7429name = "unsigned-varint"
6521version = "0.3.3"7430version = "0.4.0"
6522source = "registry+https://github.com/rust-lang/crates.io-index"7431source = "registry+https://github.com/rust-lang/crates.io-index"
6523checksum = "f67332660eb59a6f1eb24ff1220c9e8d01738a8503c6002e30bcfe4bd9f2b4a9"7432checksum = "669d776983b692a906c881fcd0cfb34271a48e197e4d6cb8df32b05bfc3d3fa5"
6524dependencies = [7433dependencies = [
6525 "bytes 0.5.6",7434 "bytes 0.5.6",
6526 "futures-io",7435 "futures-io",
6527 "futures-util",7436 "futures-util",
6528 "futures_codec 0.3.4",7437 "futures_codec",
6529]7438]
65307439
6531[[package]]7440[[package]]
6532name = "unsigned-varint"7441name = "unsigned-varint"
6533version = "0.4.0"7442version = "0.5.1"
6534source = "registry+https://github.com/rust-lang/crates.io-index"7443source = "registry+https://github.com/rust-lang/crates.io-index"
6535checksum = "669d776983b692a906c881fcd0cfb34271a48e197e4d6cb8df32b05bfc3d3fa5"7444checksum = "f7fdeedbf205afadfe39ae559b75c3240f24e257d0ca27e85f85cb82aa19ac35"
6536dependencies = [7445dependencies = [
6537 "bytes 0.5.6",7446 "futures-io",
6538 "futures_codec 0.4.1",7447 "futures-util",
6539]7448]
65407449
6541[[package]]7450[[package]]
6572source = "registry+https://github.com/rust-lang/crates.io-index"7481source = "registry+https://github.com/rust-lang/crates.io-index"
6573checksum = "6454029bf181f092ad1b853286f23e2c507d8e8194d01d92da4a55c274a5508c"7482checksum = "6454029bf181f092ad1b853286f23e2c507d8e8194d01d92da4a55c274a5508c"
7483
7484[[package]]
7485name = "vec-arena"
7486version = "1.0.0"
7487source = "registry+https://github.com/rust-lang/crates.io-index"
7488checksum = "eafc1b9b2dfc6f5529177b62cf806484db55b32dc7c9658a118e11bbeb33061d"
65747489
6575[[package]]7490[[package]]
6576name = "vec_map"7491name = "vec_map"
6590source = "registry+https://github.com/rust-lang/crates.io-index"7505source = "registry+https://github.com/rust-lang/crates.io-index"
6591checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"7506checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
7507
7508[[package]]
7509name = "waker-fn"
7510version = "1.1.0"
7511source = "registry+https://github.com/rust-lang/crates.io-index"
7512checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca"
65927513
6593[[package]]7514[[package]]
6594name = "want"7515name = "want"
6595version = "0.2.0"7516version = "0.2.0"
6596source = "registry+https://github.com/rust-lang/crates.io-index"7517source = "registry+https://github.com/rust-lang/crates.io-index"
6597checksum = "b6395efa4784b027708f7451087e647ec73cc74f5d9bc2e418404248d679a230"7518checksum = "b6395efa4784b027708f7451087e647ec73cc74f5d9bc2e418404248d679a230"
6598dependencies = [7519dependencies = [
6599 "futures 0.1.29",7520 "futures 0.1.30",
6600 "log",7521 "log",
6601 "try-lock",7522 "try-lock",
6602]7523]
6617source = "registry+https://github.com/rust-lang/crates.io-index"7538source = "registry+https://github.com/rust-lang/crates.io-index"
6618checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"7539checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
7540
7541[[package]]
7542name = "wasi"
7543version = "0.10.0+wasi-snapshot-preview1"
7544source = "registry+https://github.com/rust-lang/crates.io-index"
7545checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
66197546
6620[[package]]7547[[package]]
6621name = "wasm-bindgen"7548name = "wasm-bindgen"
6622version = "0.2.65"7549version = "0.2.68"
6623source = "registry+https://github.com/rust-lang/crates.io-index"7550source = "registry+https://github.com/rust-lang/crates.io-index"
6624checksum = "f3edbcc9536ab7eababcc6d2374a0b7bfe13a2b6d562c5e07f370456b1a8f33d"7551checksum = "1ac64ead5ea5f05873d7c12b545865ca2b8d28adfc50a49b84770a3a97265d42"
6625dependencies = [7552dependencies = [
6626 "cfg-if",7553 "cfg-if 0.1.10",
6627 "wasm-bindgen-macro",7554 "wasm-bindgen-macro",
6628]7555]
66297556
6630[[package]]7557[[package]]
6631name = "wasm-bindgen-backend"7558name = "wasm-bindgen-backend"
6632version = "0.2.65"7559version = "0.2.68"
6633source = "registry+https://github.com/rust-lang/crates.io-index"7560source = "registry+https://github.com/rust-lang/crates.io-index"
6634checksum = "89ed2fb8c84bfad20ea66b26a3743f3e7ba8735a69fe7d95118c33ec8fc1244d"7561checksum = "f22b422e2a757c35a73774860af8e112bff612ce6cb604224e8e47641a9e4f68"
6635dependencies = [7562dependencies = [
6636 "bumpalo",7563 "bumpalo",
6637 "lazy_static",7564 "lazy_static",
6638 "log",7565 "log",
6639 "proc-macro2",7566 "proc-macro2",
6640 "quote 1.0.7",7567 "quote",
6641 "syn 1.0.34",7568 "syn",
6642 "wasm-bindgen-shared",7569 "wasm-bindgen-shared",
6643]7570]
66447571
6645[[package]]7572[[package]]
6646name = "wasm-bindgen-futures"7573name = "wasm-bindgen-futures"
6647version = "0.4.15"7574version = "0.4.18"
6648source = "registry+https://github.com/rust-lang/crates.io-index"7575source = "registry+https://github.com/rust-lang/crates.io-index"
6649checksum = "41ad6e4e8b2b7f8c90b6e09a9b590ea15cb0d1dbe28502b5a405cd95d1981671"7576checksum = "b7866cab0aa01de1edf8b5d7936938a7e397ee50ce24119aef3e1eaa3b6171da"
6650dependencies = [7577dependencies = [
6651 "cfg-if",7578 "cfg-if 0.1.10",
6652 "js-sys",7579 "js-sys",
6653 "wasm-bindgen",7580 "wasm-bindgen",
6654 "web-sys",7581 "web-sys",
6655]7582]
66567583
6657[[package]]7584[[package]]
6658name = "wasm-bindgen-macro"7585name = "wasm-bindgen-macro"
6659version = "0.2.65"7586version = "0.2.68"
6660source = "registry+https://github.com/rust-lang/crates.io-index"7587source = "registry+https://github.com/rust-lang/crates.io-index"
6661checksum = "eb071268b031a64d92fc6cf691715ca5a40950694d8f683c5bb43db7c730929e"7588checksum = "6b13312a745c08c469f0b292dd2fcd6411dba5f7160f593da6ef69b64e407038"
6662dependencies = [7589dependencies = [
6663 "quote 1.0.7",7590 "quote",
6664 "wasm-bindgen-macro-support",7591 "wasm-bindgen-macro-support",
6665]7592]
66667593
6667[[package]]7594[[package]]
6668name = "wasm-bindgen-macro-support"7595name = "wasm-bindgen-macro-support"
6669version = "0.2.65"7596version = "0.2.68"
6670source = "registry+https://github.com/rust-lang/crates.io-index"7597source = "registry+https://github.com/rust-lang/crates.io-index"
6671checksum = "cf592c807080719d1ff2f245a687cbadb3ed28b2077ed7084b47aba8b691f2c6"7598checksum = "f249f06ef7ee334cc3b8ff031bfc11ec99d00f34d86da7498396dc1e3b1498fe"
6672dependencies = [7599dependencies = [
6673 "proc-macro2",7600 "proc-macro2",
6674 "quote 1.0.7",7601 "quote",
6675 "syn 1.0.34",7602 "syn",
6676 "wasm-bindgen-backend",7603 "wasm-bindgen-backend",
6677 "wasm-bindgen-shared",7604 "wasm-bindgen-shared",
6678]7605]
66797606
6680[[package]]7607[[package]]
6681name = "wasm-bindgen-shared"7608name = "wasm-bindgen-shared"
6682version = "0.2.65"7609version = "0.2.68"
6683source = "registry+https://github.com/rust-lang/crates.io-index"7610source = "registry+https://github.com/rust-lang/crates.io-index"
6684checksum = "72b6c0220ded549d63860c78c38f3bcc558d1ca3f4efa74942c536ddbbb55e87"7611checksum = "1d649a3145108d7d3fbcde896a468d1bd636791823c9921135218ad89be08307"
66857612
6686[[package]]7613[[package]]
6687name = "wasm-timer"7614name = "wasm-timer"
6688version = "0.2.4"7615version = "0.2.5"
6689source = "registry+https://github.com/rust-lang/crates.io-index"7616source = "registry+https://github.com/rust-lang/crates.io-index"
6690checksum = "324c5e65a08699c9c4334ba136597ab22b85dccd4b65dd1e36ccf8f723a95b54"7617checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f"
6691dependencies = [7618dependencies = [
6692 "futures 0.3.5",7619 "futures 0.3.6",
6693 "js-sys",7620 "js-sys",
6694 "parking_lot 0.9.0",7621 "parking_lot 0.11.0",
6695 "pin-utils",7622 "pin-utils",
6696 "send_wrapper",
6697 "wasm-bindgen",7623 "wasm-bindgen",
6698 "wasm-bindgen-futures",7624 "wasm-bindgen-futures",
6699 "web-sys",7625 "web-sys",
6708 "libc",7634 "libc",
6709 "memory_units",7635 "memory_units",
6710 "num-rational",7636 "num-rational",
6711 "num-traits 0.2.12",7637 "num-traits",
6712 "parity-wasm",7638 "parity-wasm",
6713 "wasmi-validation",7639 "wasmi-validation",
6714]7640]
6722 "parity-wasm",7648 "parity-wasm",
6723]7649]
7650
7651[[package]]
7652name = "wasmparser"
7653version = "0.57.0"
7654source = "registry+https://github.com/rust-lang/crates.io-index"
7655checksum = "32fddd575d477c6e9702484139cf9f23dcd554b06d185ed0f56c857dd3a47aa6"
7656
7657[[package]]
7658name = "wasmparser"
7659version = "0.59.0"
7660source = "registry+https://github.com/rust-lang/crates.io-index"
7661checksum = "a950e6a618f62147fd514ff445b2a0b53120d382751960797f85f058c7eda9b9"
7662
7663[[package]]
7664name = "wasmtime"
7665version = "0.19.0"
7666source = "registry+https://github.com/rust-lang/crates.io-index"
7667checksum = "1cd3c4f449382779ef6e0a7c3ec6752ae614e20a42e4100000c3efdc973100e2"
7668dependencies = [
7669 "anyhow",
7670 "backtrace",
7671 "cfg-if 0.1.10",
7672 "lazy_static",
7673 "libc",
7674 "log",
7675 "region",
7676 "rustc-demangle",
7677 "smallvec 1.4.2",
7678 "target-lexicon",
7679 "wasmparser 0.59.0",
7680 "wasmtime-environ",
7681 "wasmtime-jit",
7682 "wasmtime-profiling",
7683 "wasmtime-runtime",
7684 "wat",
7685 "winapi 0.3.9",
7686]
7687
7688[[package]]
7689name = "wasmtime-debug"
7690version = "0.19.0"
7691source = "registry+https://github.com/rust-lang/crates.io-index"
7692checksum = "6e634af9067a3af6cf2c7d33dc3b84767ddaf5d010ba68e80eecbcea73d4a349"
7693dependencies = [
7694 "anyhow",
7695 "gimli 0.21.0",
7696 "more-asserts",
7697 "object 0.20.0",
7698 "target-lexicon",
7699 "thiserror",
7700 "wasmparser 0.59.0",
7701 "wasmtime-environ",
7702]
7703
7704[[package]]
7705name = "wasmtime-environ"
7706version = "0.19.0"
7707source = "registry+https://github.com/rust-lang/crates.io-index"
7708checksum = "08f85619a94ee4034bd5bb87fc3dcf71fd2237b81c840809da1201061eec9ab3"
7709dependencies = [
7710 "anyhow",
7711 "base64 0.12.3",
7712 "bincode",
7713 "cfg-if 0.1.10",
7714 "cranelift-codegen",
7715 "cranelift-entity",
7716 "cranelift-frontend",
7717 "cranelift-wasm",
7718 "directories",
7719 "errno",
7720 "file-per-thread-logger",
7721 "indexmap",
7722 "libc",
7723 "log",
7724 "more-asserts",
7725 "rayon",
7726 "serde",
7727 "sha2 0.8.2",
7728 "thiserror",
7729 "toml",
7730 "wasmparser 0.59.0",
7731 "winapi 0.3.9",
7732 "zstd",
7733]
7734
7735[[package]]
7736name = "wasmtime-jit"
7737version = "0.19.0"
7738source = "registry+https://github.com/rust-lang/crates.io-index"
7739checksum = "e914c013c7a9f15f4e429d5431f2830fb8adb56e40567661b69c5ec1d645be23"
7740dependencies = [
7741 "anyhow",
7742 "cfg-if 0.1.10",
7743 "cranelift-codegen",
7744 "cranelift-entity",
7745 "cranelift-frontend",
7746 "cranelift-native",
7747 "cranelift-wasm",
7748 "gimli 0.21.0",
7749 "log",
7750 "more-asserts",
7751 "object 0.20.0",
7752 "region",
7753 "target-lexicon",
7754 "thiserror",
7755 "wasmparser 0.59.0",
7756 "wasmtime-debug",
7757 "wasmtime-environ",
7758 "wasmtime-obj",
7759 "wasmtime-profiling",
7760 "wasmtime-runtime",
7761 "winapi 0.3.9",
7762]
7763
7764[[package]]
7765name = "wasmtime-obj"
7766version = "0.19.0"
7767source = "registry+https://github.com/rust-lang/crates.io-index"
7768checksum = "e81d8e02e9bc9fe2da9b6d48bbc217f96e089f7df613f11a28a3958abc44641e"
7769dependencies = [
7770 "anyhow",
7771 "more-asserts",
7772 "object 0.20.0",
7773 "target-lexicon",
7774 "wasmtime-debug",
7775 "wasmtime-environ",
7776]
7777
7778[[package]]
7779name = "wasmtime-profiling"
7780version = "0.19.0"
7781source = "registry+https://github.com/rust-lang/crates.io-index"
7782checksum = "1e8d4d1af8dd5f7096cfcc89dd668d358e52980c38cce199643372ffd6590e27"
7783dependencies = [
7784 "anyhow",
7785 "cfg-if 0.1.10",
7786 "gimli 0.21.0",
7787 "lazy_static",
7788 "libc",
7789 "object 0.19.0",
7790 "scroll",
7791 "serde",
7792 "target-lexicon",
7793 "wasmtime-environ",
7794 "wasmtime-runtime",
7795]
7796
7797[[package]]
7798name = "wasmtime-runtime"
7799version = "0.19.0"
7800source = "registry+https://github.com/rust-lang/crates.io-index"
7801checksum = "3a25f140bbbaadb07c531cba99ce1a966dba216138dc1b2a0ddecec851a01a93"
7802dependencies = [
7803 "backtrace",
7804 "cc",
7805 "cfg-if 0.1.10",
7806 "indexmap",
7807 "lazy_static",
7808 "libc",
7809 "log",
7810 "memoffset",
7811 "more-asserts",
7812 "region",
7813 "thiserror",
7814 "wasmtime-environ",
7815 "winapi 0.3.9",
7816]
7817
7818[[package]]
7819name = "wast"
7820version = "26.0.0"
7821source = "registry+https://github.com/rust-lang/crates.io-index"
7822checksum = "d54b3678343bfdf1768c16308a4b53823b70f7bb148d3d38225123d4306ec731"
7823dependencies = [
7824 "leb128",
7825]
7826
7827[[package]]
7828name = "wat"
7829version = "1.0.27"
7830source = "registry+https://github.com/rust-lang/crates.io-index"
7831checksum = "26b2dccbce4d0e14875091846e110a2369267b18ddd0d6423479b88dad914d71"
7832dependencies = [
7833 "wast",
7834]
67247835
6725[[package]]7836[[package]]
6726name = "web-sys"7837name = "web-sys"
6727version = "0.3.42"7838version = "0.3.45"
6728source = "registry+https://github.com/rust-lang/crates.io-index"7839source = "registry+https://github.com/rust-lang/crates.io-index"
6729checksum = "8be2398f326b7ba09815d0b403095f34dd708579220d099caae89be0b32137b2"7840checksum = "4bf6ef87ad7ae8008e15a355ce696bed26012b7caa21605188cfd8214ab51e2d"
6730dependencies = [7841dependencies = [
6731 "js-sys",7842 "js-sys",
6732 "wasm-bindgen",7843 "wasm-bindgen",
6760 "webpki",7871 "webpki",
6761]7872]
7873
7874[[package]]
7875name = "wepoll-sys"
7876version = "3.0.0"
7877source = "registry+https://github.com/rust-lang/crates.io-index"
7878checksum = "142bc2cba3fe88be1a8fcb55c727fa4cd5b0cf2d7438722792e22f26f04bc1e0"
7879dependencies = [
7880 "cc",
7881]
67627882
6763[[package]]7883[[package]]
6764name = "which"7884name = "which"
6812source = "registry+https://github.com/rust-lang/crates.io-index"7932source = "registry+https://github.com/rust-lang/crates.io-index"
6813checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"7933checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
6814
6815[[package]]
6816name = "ws"
6817version = "0.9.1"
6818source = "registry+https://github.com/rust-lang/crates.io-index"
6819checksum = "c51a2c47b5798ccc774ffb93ff536aec7c4275d722fd9c740c83cdd1af1f2d94"
6820dependencies = [
6821 "byteorder",
6822 "bytes 0.4.12",
6823 "httparse",
6824 "log",
6825 "mio",
6826 "mio-extras",
6827 "rand 0.7.3",
6828 "sha-1",
6829 "slab",
6830 "url 2.1.1",
6831]
68327934
6833[[package]]7935[[package]]
6834name = "ws2_32-sys"7936name = "ws2_32-sys"
6846source = "registry+https://github.com/rust-lang/crates.io-index"7948source = "registry+https://github.com/rust-lang/crates.io-index"
6847checksum = "637ff90c9540fa3073bb577e65033069e4bae7c79d49d74aa3ffdf5342a53217"7949checksum = "637ff90c9540fa3073bb577e65033069e4bae7c79d49d74aa3ffdf5342a53217"
6848dependencies = [7950dependencies = [
6849 "curve25519-dalek",7951 "curve25519-dalek 2.1.0",
6850 "rand_core 0.5.1",7952 "rand_core 0.5.1",
6851 "zeroize",7953 "zeroize",
6852]7954]
7955
7956[[package]]
7957name = "x25519-dalek"
7958version = "1.1.0"
7959source = "registry+https://github.com/rust-lang/crates.io-index"
7960checksum = "bc614d95359fd7afc321b66d2107ede58b246b844cf5d8a0adcca413e439f088"
7961dependencies = [
7962 "curve25519-dalek 3.0.0",
7963 "rand_core 0.5.1",
7964 "zeroize",
7965]
68537966
6854[[package]]7967[[package]]
6855name = "yamux"7968name = "yamux"
6856version = "0.4.7"7969version = "0.8.0"
6857source = "registry+https://github.com/rust-lang/crates.io-index"7970source = "registry+https://github.com/rust-lang/crates.io-index"
6858checksum = "cd37e58a1256a0b328ce9c67d8b62ecdd02f4803ba443df478835cb1a41a637c"7971checksum = "9aeb8c4043cac71c3c299dff107171c220d179492350ea198e109a414981b83c"
6859dependencies = [7972dependencies = [
6860 "futures 0.3.5",7973 "futures 0.3.6",
6861 "log",7974 "log",
6862 "nohash-hasher",7975 "nohash-hasher",
6863 "parking_lot 0.10.2",7976 "parking_lot 0.11.0",
6864 "rand 0.7.3",7977 "rand 0.7.3",
6865 "static_assertions",7978 "static_assertions",
6866]7979]
68677980
6868[[package]]7981[[package]]
6869name = "zeroize"7982name = "zeroize"
6870version = "1.1.0"7983version = "1.1.1"
6871source = "registry+https://github.com/rust-lang/crates.io-index"7984source = "registry+https://github.com/rust-lang/crates.io-index"
6872checksum = "3cbac2ed2ba24cc90f5e06485ac8c7c1e5449fe8911aef4d8877218af021a5b8"7985checksum = "05f33972566adbd2d3588b0491eb94b98b43695c4ef897903470ede4f3f5a28a"
6873dependencies = [7986dependencies = [
6874 "zeroize_derive",7987 "zeroize_derive",
6875]7988]
68767989
6877[[package]]7990[[package]]
6878name = "zeroize_derive"7991name = "zeroize_derive"
6879version = "1.0.0"7992version = "1.0.1"
6880source = "registry+https://github.com/rust-lang/crates.io-index"7993source = "registry+https://github.com/rust-lang/crates.io-index"
6881checksum = "de251eec69fc7c1bc3923403d18ececb929380e016afe103da75f396704f8ca2"7994checksum = "c3f369ddb18862aba61aa49bf31e74d29f0f162dec753063200e1dc084345d16"
6882dependencies = [7995dependencies = [
6883 "proc-macro2",7996 "proc-macro2",
6884 "quote 1.0.7",7997 "quote",
6885 "syn 1.0.34",7998 "syn",
6886 "synstructure",7999 "synstructure",
6887]8000]
8001
8002[[package]]
8003name = "zstd"
8004version = "0.5.3+zstd.1.4.5"
8005source = "registry+https://github.com/rust-lang/crates.io-index"
8006checksum = "01b32eaf771efa709e8308605bbf9319bf485dc1503179ec0469b611937c0cd8"
8007dependencies = [
8008 "zstd-safe",
8009]
8010
8011[[package]]
8012name = "zstd-safe"
8013version = "2.0.5+zstd.1.4.5"
8014source = "registry+https://github.com/rust-lang/crates.io-index"
8015checksum = "1cfb642e0d27f64729a639c52db457e0ae906e7bc6f5fe8f5c453230400f1055"
8016dependencies = [
8017 "libc",
8018 "zstd-sys",
8019]
8020
8021[[package]]
8022name = "zstd-sys"
8023version = "1.4.17+zstd.1.4.5"
8024source = "registry+https://github.com/rust-lang/crates.io-index"
8025checksum = "b89249644df056b522696b1bb9e7c18c87e8ffa3e2f0dc3b0155875d6498f01b"
8026dependencies = [
8027 "cc",
8028 "glob",
8029 "itertools 0.9.0",
8030 "libc",
8031]
68888032
modifiedDockerfilediffbeforeafterboth
--- a/Dockerfile
+++ b/Dockerfile
@@ -3,7 +3,7 @@
 FROM phusion/baseimage:0.10.2 as builder
 LABEL maintainer="gz@usetech.com"
 
-ENV WASM_TOOLCHAIN=nightly-2020-05-01
+ENV WASM_TOOLCHAIN=nightly-2020-10-01
 
 ARG PROFILE=release
 
@@ -17,19 +17,23 @@
 WORKDIR /nft_parachain
 COPY . .
 
-RUN curl https://sh.rustup.rs -sSf | sh -s -- -y && \
-	export PATH="$PATH:$HOME/.cargo/bin" && \
+RUN export CARGO_HOME="/cargo-home" && curl https://sh.rustup.rs -sSf | sh -s -- -y
+RUN export PATH="/cargo-home/bin:$PATH" && \
+    export CARGO_HOME="/cargo-home" && \
+	cargo fetch
+RUN export PATH="/cargo-home/bin:$PATH" && \
+    export CARGO_HOME="/cargo-home" && \
 	rustup toolchain uninstall $(rustup toolchain list) && \
-	rustup default 1.44.0 && \
 	rustup toolchain install $WASM_TOOLCHAIN && \
 	rustup target add wasm32-unknown-unknown --toolchain $WASM_TOOLCHAIN && \
     rustup target list --installed && \
-    rustup show && \
-	cargo build "--$PROFILE" 
+    rustup show
+
+RUN export PATH="/cargo-home/bin:$PATH" && \
+    export CARGO_HOME="/cargo-home" && \
+	cargo +$WASM_TOOLCHAIN build "--$PROFILE"
 	# && \
 	# cargo test
-
-RUN cd target/release && ls -la
 
 # ===== RUN ======
 
modifiedREADME.mddiffbeforeafterboth
--- a/README.md
+++ b/README.md
@@ -115,7 +115,23 @@
 
 Additional CLI usage options are available and may be shown by running `cargo run -- --help`.
 
+## Benchmarks
 
+First of all, add rust toolchain and make it default.
+```bash
+rustup target add wasm32-unknown-unknown --toolchain nightly-2020-10-01
+```
+
+Then in "/node/src" run build command below
+```bash
+cargo +nightly-2020-10-01 build --release --features runtime-benchmarks
+```
+
+Run benchmark
+```bash
+target/release/nft benchmark --chain dev --pallet "pallet_nft" --extrinsic "*" --repeat 1
+```
+
 ## UI custom types
 ```
 {
@@ -151,9 +167,9 @@
   "CollectionMode": {
     "_enum": {
       "Invalid": null,
-      "NFT": "u32",
+      "NFT": null,
       "Fungible": "u32",
-      "ReFungible": "(u32, u32)"
+      "ReFungible": "u32"
     }
   },
   "Ownership": {
@@ -173,7 +189,8 @@
   "NftItemType": {
     "Collection": "u64",
     "Owner": "AccountId",
-    "Data": "Vec<u8>"
+    "ConstData": "Vec<u8>",
+    "VariableData": "Vec<u8>"
   },
   "Ownership": {
     "owner": "AccountId",
@@ -182,7 +199,8 @@
   "ReFungibleItemType": {
     "Collection": "u64",
     "Owner": "Vec<Ownership<AccountId>>",
-    "Data": "Vec<u8>"
+    "ConstData": "Vec<u8>",
+    "VariableData": "Vec<u8>"
   },
   "CollectionType": {
     "Owner": "AccountId",
@@ -192,11 +210,12 @@
     "Name": "Vec<u16>",
     "Description": "Vec<u16>",
     "TokenPrefix": "Vec<u8>",
-    "CustomDataSize": "u32",
     "MintMode": "bool",
     "OffchainSchema": "Vec<u8>",
     "Sponsor": "AccountId",
-    "UnconfirmedSponsor": "AccountId"
+    "UnconfirmedSponsor": "AccountId",
+    "VariableOnChainSchema": "Vec<u8>",
+    "ConstOnChainSchema": "Vec<u8>"
   },
   "ApprovePermissions": {
     "Approved": "AccountId",
@@ -205,7 +224,23 @@
   "RawData": "Vec<u8>",
   "Address": "AccountId",
   "LookupSource": "AccountId",
-  "Weight": "u64"
+  "Weight": "u64",
+  "CreateNftData": {
+    "const_data": "Vec<u8>",
+    "variable_data": "Vec<u8>" 
+  },
+  "CreateFungibleData": {},
+  "CreateReFungibleData": {
+    "const_data": "Vec<u8>",
+    "variable_data": "Vec<u8>" 
+  },
+  "CreateItemData": {
+    "_enum": {
+      "NFT": "CreateNftData",
+      "Fungible": "CreateFungibleData",
+      "ReFungible": "CreateReFungibleData"
+    }
+  }
 }
 
 ```
\ No newline at end of file
addeddoc/milestone_1.mddiffbeforeafterboth
--- /dev/null
+++ b/doc/milestone_1.md
@@ -0,0 +1,65 @@
+## Milestone 1
+
+**User Paid Fees and Sponsored. Finish/Debug white listing and spam/DOS protection**
+
+Implementation of two models 
+If collection sponsor is set and confirmed for collection instance that means Sponsored Economic Model has chosen. Otherwise default economic model User Paid Fees is set.
+For Sponsored Economic Model exists timeouts for token transactions. For every NFT type timeouts defined separately. Timeouts and white list limits together prevented spam and malicious actions.
+
+Set sponsor
+`nft`.`set_collection_sponsor`
+Confirm sponsor
+`nft`.`confirm_sponsorship`
+
+A white list mode presented by collection property `access` and can be enabled with `set_public_access_mode`. Rules provide spam/DOS protection
+While collection in the white list mode rules below are active:
+Owner can add address to white list
+Admin can add address to white list
+Non-privileged user cannot add address to white list
+Owner can remove address from white list
+Admin can remove address from white list
+Non-privileged user cannot remove address from white list
+If Public Access mode is set to WhiteList, tokens can’t be transferred from a non-whitelisted address with transfer or transferFrom
+If Public Access mode is set to WhiteList, tokens can’t be transferred to a non-whitelisted address with transfer or transferFrom
+If Public Access mode is set to WhiteList, tokens can’t be destroyed by a non-whitelisted address (even if it owned them before enabling WhiteList mode)
+If Public Access mode is set to WhiteList, token transfers can’t be Approved by a non-whitelisted address (see Approve method).
+If Public Access mode is set to WhiteList, tokens can be transferred to a whitelisted address with transfer or transferFrom
+If Public Access mode is set to WhiteList, tokens can be transferred from a whitelisted address with transfer or transferFrom 
+If Public Access mode is set to WhiteList, and Mint Permission is set to false, tokens can be created by owner.
+If Public Access mode is set to WhiteList, and Mint Permission is set to false, tokens can be created by admin.
+If Public Access mode is set to WhiteList, and Mint Permission is set to false, tokens cannot be created by non-privileged and white listed address.
+If Public Access mode is set to WhiteList, and Mint Permission is set to false, tokens cannot be created by non-privileged and non-white listed address.
+If Public Access mode is set to WhiteList, and Mint Permission is set to true, tokens can be created by owner.
+If Public Access mode is set to WhiteList, and Mint Permission is set to true, tokens can be created by admin.
+If Public Access mode is set to WhiteList, and Mint Permission is set to true, tokens cannot be created by non-privileged and non-white listed address.
+If Public Access mode is set to WhiteList, and Mint Permission is set to true, tokens can be created by non-privileged and white listed address.
+
+**Add missing custom types (CollectionMode, FungibleItemType, ReFungibleItemType)**
+
+Follow types defined
+```
+pub struct NftItemType<AccountId> {
+    pub collection: u64,
+    pub owner: AccountId,
+    pub data: Vec<u8>,
+}
+pub struct FungibleItemType<AccountId> {
+    pub collection: u64,
+    pub owner: AccountId,
+    pub value: u128,
+}
+pub struct ReFungibleItemType<AccountId> {
+    pub collection: u64,
+    pub owner: Vec<Ownership<AccountId>>,
+    pub data: Vec<u8>,
+}
+```
+
+**Add substrate bounds for number of collections, owned tokens, and number of collection admins.**
+
+Bounds defined in chain specification and can be set with 'sudo' privileges `nft`.`set_chain_limits`.
+
+**Add/document extra genesis**
+
+Extra genesis defined in `node/src/chain_spec.rs` file. Configuration consist from 5 items:
+Collection list,  Nft items list, Fungible items list, Refungible items list, Chain limits
\ No newline at end of file
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 = 'rc4_ext_dispatch_reenabled'
-version = '2.0.0-rc4'
+branch = 'v2.0.0_release'
+version = '2.0.0'
 
 [[bin]]
 name = 'nft'
@@ -15,7 +15,7 @@
 license = 'Unlicense'
 name = 'nft'
 repository = 'https://github.com/substrate-developer-hub/nft/'
-version = '2.0.0-rc4'
+version = '2.0.0'
 
 [package.metadata.docs.rs]
 targets = ['x86_64-unknown-linux-gnu']
@@ -25,102 +25,38 @@
 log = '0.4.8'
 parking_lot = '0.10.0'
 structopt = '0.3.8'
-jsonrpc-core = '14.0.5'
+jsonrpc-core = '15.0.0'
 
-[dependencies.nft-runtime]
-path = '../runtime'
-version = '2.0.0-rc4'
-
-[dependencies.sc-basic-authorship]
-git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'rc4_ext_dispatch_reenabled'
-version = '0.8.0-rc4'
+# Substrate dependencies
+nft-runtime = { path = '../runtime', version = '2.0.0' }
+frame-benchmarking = {version = '2.0.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release'}
+frame-benchmarking-cli = {version = '2.0.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release'}
+pallet-transaction-payment-rpc = {version = '2.0.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release'}
+sc-basic-authorship = {version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release'}
+sc-cli = { features = ['wasmtime'], version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release' }
+sc-client-api = {version = '2.0.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release'}
+sc-consensus = {version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release'}
+sc-consensus-aura = {version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release'}
+sc-executor = { features = ['wasmtime'], version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release' }
+sc-finality-grandpa = {version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release'}
+sc-rpc = {version = '2.0.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release'}
+sc-rpc-api = {version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release'}
+sc-service = { features = ['wasmtime'], version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release' }
+sc-transaction-pool = {version = '2.0.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release'}
+sp-api = {version = '2.0.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release'}
+sp-block-builder = {version = '2.0.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release'}
+sp-blockchain = {version = '2.0.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release'}
+sp-consensus = {version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release'}
+sp-consensus-aura = {version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release'}
+sp-core = {version = '2.0.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release'}
+sp-finality-grandpa = {version = '2.0.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release'}
+sp-inherents = {version = '2.0.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release'}
+sp-runtime = {version = '2.0.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release'}
+sp-transaction-pool = {version = '2.0.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release'}
+sc-network = {version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release'} 
+substrate-frame-rpc-system = {version = '2.0.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release'}
+pallet-contracts-rpc = {version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release'} 
 
-[dependencies.sc-cli]
-git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'rc4_ext_dispatch_reenabled'
-version = '0.8.0-rc4'
-
-[dependencies.sc-client-api]
-git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'rc4_ext_dispatch_reenabled'
-version = '2.0.0-rc4'
-
-[dependencies.sc-consensus]
-git = 'https://github.com/usetech-llc/substrate.git'
-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-rc4'
-branch = 'rc4_ext_dispatch_reenabled'
-
-[dependencies.sc-rpc]
-git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'rc4_ext_dispatch_reenabled'
-
-[dependencies.sc-consensus-aura]
-git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'rc4_ext_dispatch_reenabled'
-version = '0.8.0-rc4'
-
-[dependencies.sc-executor]
-git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'rc4_ext_dispatch_reenabled'
-version = '0.8.0-rc4'
-
-[dependencies.sc-finality-grandpa]
-git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'rc4_ext_dispatch_reenabled'
-version = '0.8.0-rc4'
-
-[dependencies.sc-network]
-git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'rc4_ext_dispatch_reenabled'
-version = '0.8.0-rc4'
-
-[dependencies.sc-service]
-git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'rc4_ext_dispatch_reenabled'
-version = '0.8.0-rc4'
-
-[dependencies.sc-transaction-pool]
-git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'rc4_ext_dispatch_reenabled'
-version = '2.0.0-rc4'
-
-[dependencies.sp-consensus]
-git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'rc4_ext_dispatch_reenabled'
-version = '0.8.0-rc4'
-
-[dependencies.sp-consensus-aura]
-git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'rc4_ext_dispatch_reenabled'
-version = '0.8.0-rc4'
-
-[dependencies.sp-core]
-git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'rc4_ext_dispatch_reenabled'
-version = '2.0.0-rc4'
-
-[dependencies.sp-finality-grandpa]
-git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'rc4_ext_dispatch_reenabled'
-version = '2.0.0-rc4'
-
-[dependencies.sp-inherents]
-git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'rc4_ext_dispatch_reenabled'
-version = '2.0.0-rc4'
-
-[dependencies.sp-runtime]
-git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'rc4_ext_dispatch_reenabled'
-version = '2.0.0-rc4'
-
-[dependencies.sp-transaction-pool]
-git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'rc4_ext_dispatch_reenabled'
-version = '2.0.0-rc4'
+[features]
+default = []
+runtime-benchmarks = ['nft-runtime/runtime-benchmarks']
modifiednode/src/chain_spec.rsdiffbeforeafterboth
--- a/node/src/chain_spec.rs
+++ b/node/src/chain_spec.rs
@@ -38,70 +38,95 @@
     (get_from_seed::<AuraId>(s), get_from_seed::<GrandpaId>(s))
 }
 
-pub fn development_config() -> ChainSpec {
-    ChainSpec::from_genesis(
-        "Development",
-        "dev",
-        ChainType::Development,
-        || {
-            testnet_genesis(
-                vec![authority_keys_from_seed("Alice")],
-                get_account_id_from_seed::<sr25519::Public>("Alice"),
-                vec![
-                    get_account_id_from_seed::<sr25519::Public>("Alice"),
-                    get_account_id_from_seed::<sr25519::Public>("Bob"),
-                    get_account_id_from_seed::<sr25519::Public>("Alice//stash"),
-                    get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
-                ],
-                true,
-            )
-        },
-        vec![],
-        None,
-        None,
-        None,
-        None,
-    )
+pub fn development_config() -> Result<ChainSpec, String> {
+	let wasm_binary = WASM_BINARY.ok_or("Development wasm binary not available".to_string())?;
+
+	Ok(ChainSpec::from_genesis(
+		// Name
+		"Development",
+		// ID
+		"dev",
+		ChainType::Development,
+		move || testnet_genesis(
+			wasm_binary,
+			// Initial PoA authorities
+			vec![
+				authority_keys_from_seed("Alice"),
+			],
+			// Sudo account
+			get_account_id_from_seed::<sr25519::Public>("Alice"),
+			// Pre-funded accounts
+			vec![
+				get_account_id_from_seed::<sr25519::Public>("Alice"),
+				get_account_id_from_seed::<sr25519::Public>("Bob"),
+				get_account_id_from_seed::<sr25519::Public>("Alice//stash"),
+				get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
+			],
+			true,
+		),
+		// Bootnodes
+		vec![],
+		// Telemetry
+		None,
+		// Protocol ID
+		None,
+		// Properties
+		None,
+		// Extensions
+		None,
+	))
 }
 
-pub fn local_testnet_config() -> ChainSpec {
-    ChainSpec::from_genesis(
-        "Local Testnet",
-        "local_testnet",
-        ChainType::Local,
-        || {
-            testnet_genesis(
-                vec![
-                    authority_keys_from_seed("Alice"),
-                    authority_keys_from_seed("Bob"),
-                ],
-                get_account_id_from_seed::<sr25519::Public>("Alice"),
-                vec![
-                    get_account_id_from_seed::<sr25519::Public>("Alice"),
-                    get_account_id_from_seed::<sr25519::Public>("Bob"),
-                    get_account_id_from_seed::<sr25519::Public>("Charlie"),
-                    get_account_id_from_seed::<sr25519::Public>("Dave"),
-                    get_account_id_from_seed::<sr25519::Public>("Eve"),
-                    get_account_id_from_seed::<sr25519::Public>("Ferdie"),
-                    get_account_id_from_seed::<sr25519::Public>("Alice//stash"),
-                    get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
-                    get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),
-                    get_account_id_from_seed::<sr25519::Public>("Dave//stash"),
-                    get_account_id_from_seed::<sr25519::Public>("Eve//stash"),
-                    get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),
-                ],
-                true,
-            )
-        },
-        vec![],
-        None,
-        None,
-        None,
-        None,
-    )
+pub fn local_testnet_config() -> Result<ChainSpec, String> {
+	let wasm_binary = WASM_BINARY.ok_or("Development wasm binary not available".to_string())?;
+
+	Ok(ChainSpec::from_genesis(
+		// Name
+		"Local Testnet",
+		// ID
+		"local_testnet",
+		ChainType::Local,
+		move || testnet_genesis(
+			wasm_binary,
+			// Initial PoA authorities
+			vec![
+				authority_keys_from_seed("Alice"),
+				authority_keys_from_seed("Bob"),
+			],
+			// Sudo account
+			get_account_id_from_seed::<sr25519::Public>("Alice"),
+			// Pre-funded accounts
+			vec![
+				get_account_id_from_seed::<sr25519::Public>("Alice"),
+				get_account_id_from_seed::<sr25519::Public>("Bob"),
+				get_account_id_from_seed::<sr25519::Public>("Charlie"),
+				get_account_id_from_seed::<sr25519::Public>("Dave"),
+				get_account_id_from_seed::<sr25519::Public>("Eve"),
+				get_account_id_from_seed::<sr25519::Public>("Ferdie"),
+				get_account_id_from_seed::<sr25519::Public>("Alice//stash"),
+				get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
+				get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),
+				get_account_id_from_seed::<sr25519::Public>("Dave//stash"),
+				get_account_id_from_seed::<sr25519::Public>("Eve//stash"),
+				get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),
+			],
+			true,
+		),
+		// Bootnodes
+		vec![],
+		// Telemetry
+		None,
+		// Protocol ID
+		None,
+		// Properties
+		None,
+		// Extensions
+		None,
+	))
 }
 
 fn testnet_genesis(
+    wasm_binary: &[u8],
     initial_authorities: Vec<(AuraId, GrandpaId)>,
     root_key: AccountId,
     endowed_accounts: Vec<AccountId>,
@@ -109,42 +134,43 @@
 ) -> GenesisConfig {
     GenesisConfig {
         system: Some(SystemConfig {
-            code: WASM_BINARY.to_vec(),
+            code: wasm_binary.to_vec(),
             changes_trie_config: Default::default(),
         }),
-        balances: Some(BalancesConfig {
+        pallet_balances: Some(BalancesConfig {
             balances: endowed_accounts
                 .iter()
                 .cloned()
                 .map(|k| (k, 1 << 100))
                 .collect(),
         }),
-        aura: Some(AuraConfig {
+        pallet_aura: Some(AuraConfig {
             authorities: initial_authorities.iter().map(|x| (x.0.clone())).collect(),
         }),
-        grandpa: Some(GrandpaConfig {
+        pallet_grandpa: Some(GrandpaConfig {
             authorities: initial_authorities
                 .iter()
                 .map(|x| (x.1.clone(), 1))
                 .collect(),
         }),
-        sudo: Some(SudoConfig { key: root_key }),
-        nft: Some(NftConfig {
+        pallet_sudo: Some(SudoConfig { key: root_key }),
+        pallet_nft: Some(NftConfig {
             collection: vec![(
                 1,
                 CollectionType {
                     owner: get_account_id_from_seed::<sr25519::Public>("Alice"),
-                    mode: CollectionMode::NFT(50),
+                    mode: CollectionMode::NFT,
                     access: AccessMode::Normal,
                     decimal_points: 0,
                     name: vec![],
                     description: vec![],
                     token_prefix: vec![],
-                    custom_data_size: 50,
                     mint_mode: false,
                     offchain_schema: vec![],
                     sponsor: get_account_id_from_seed::<sr25519::Public>("Alice"),
                     unconfirmed_sponsor: get_account_id_from_seed::<sr25519::Public>("Alice"),
+                    const_on_chain_schema: vec![],
+                    variable_on_chain_schema: vec![]
                 },
             )],
             nft_item_id: vec![],
@@ -160,7 +186,7 @@
                 refungible_sponsor_transfer_timeout: 15,
             },
         }),
-        contracts: Some(ContractsConfig {
+        pallet_contracts: Some(ContractsConfig {
             current_schedule: ContractsSchedule {
                 enable_println,
                 ..Default::default()
modifiednode/src/cli.rsdiffbeforeafterboth
--- a/node/src/cli.rs
+++ b/node/src/cli.rs
@@ -1,11 +1,39 @@
-use sc_cli::{RunCmd, Subcommand};
 use structopt::StructOpt;
+use sc_cli::RunCmd;
 
 #[derive(Debug, StructOpt)]
 pub struct Cli {
-    #[structopt(subcommand)]
-    pub subcommand: Option<Subcommand>,
+	#[structopt(subcommand)]
+	pub subcommand: Option<Subcommand>,
+
+	#[structopt(flatten)]
+	pub run: RunCmd,
+}
+
+#[derive(Debug, StructOpt)]
+pub enum Subcommand {
+	/// Build a chain specification.
+	BuildSpec(sc_cli::BuildSpecCmd),
+
+	/// Validate blocks.
+	CheckBlock(sc_cli::CheckBlockCmd),
+
+	/// Export blocks.
+	ExportBlocks(sc_cli::ExportBlocksCmd),
+
+	/// Export the state of a given block into a chain spec.
+	ExportState(sc_cli::ExportStateCmd),
+
+	/// Import blocks.
+	ImportBlocks(sc_cli::ImportBlocksCmd),
 
-    #[structopt(flatten)]
-    pub run: RunCmd,
+	/// Remove the whole chain.
+	PurgeChain(sc_cli::PurgeChainCmd),
+
+	/// Revert the chain to a previous state.
+	Revert(sc_cli::RevertCmd),
+
+	// The custom benchmark subcommmand benchmarking runtime pallets.
+	#[structopt(name = "benchmark", about = "Benchmark runtime pallets.")]
+	Benchmark(frame_benchmarking_cli::BenchmarkCmd),
 }
modifiednode/src/command.rsdiffbeforeafterboth
--- a/node/src/command.rs
+++ b/node/src/command.rs
@@ -15,63 +15,121 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-use crate::chain_spec;
-use crate::cli::Cli;
-use crate::service;
-use sc_cli::SubstrateCli;
+use crate::{chain_spec, service};
+use crate::cli::{Cli, Subcommand};
+use sc_cli::{SubstrateCli, RuntimeVersion, Role, ChainSpec};
+use sc_service::PartialComponents;
+use nft_runtime::Block;
 
 impl SubstrateCli for Cli {
-    fn impl_name() -> &'static str {
-        "Substrate Node"
-    }
+	fn impl_name() -> String {
+		"Substrate Node".into()
+	}
 
-    fn impl_version() -> &'static str {
-        env!("SUBSTRATE_CLI_IMPL_VERSION")
-    }
+	fn impl_version() -> String {
+		env!("SUBSTRATE_CLI_IMPL_VERSION").into()
+	}
 
-    fn description() -> &'static str {
-        env!("CARGO_PKG_DESCRIPTION")
-    }
+	fn description() -> String {
+		env!("CARGO_PKG_DESCRIPTION").into()
+	}
 
-    fn author() -> &'static str {
-        env!("CARGO_PKG_AUTHORS")
-    }
+	fn author() -> String {
+		env!("CARGO_PKG_AUTHORS").into()
+	}
 
-    fn support_url() -> &'static str {
-        "support.anonymous.an"
-    }
+	fn support_url() -> String {
+		"support.anonymous.an".into()
+	}
 
-    fn copyright_start_year() -> i32 {
-        2017
-    }
+	fn copyright_start_year() -> i32 {
+		2017
+	}
 
-    fn executable_name() -> &'static str {
-        env!("CARGO_PKG_NAME")
-    }
+	fn load_spec(&self, id: &str) -> Result<Box<dyn sc_service::ChainSpec>, String> {
+		Ok(match id {
+			"dev" => Box::new(chain_spec::development_config()?),
+			"" | "local" => Box::new(chain_spec::local_testnet_config()?),
+			path => Box::new(chain_spec::ChainSpec::from_json_file(
+				std::path::PathBuf::from(path),
+			)?),
+		})
+	}
 
-    fn load_spec(&self, id: &str) -> Result<Box<dyn sc_service::ChainSpec>, String> {
-        Ok(match id {
-            "dev" => Box::new(chain_spec::development_config()),
-            "" | "local" => Box::new(chain_spec::local_testnet_config()),
-            path => Box::new(chain_spec::ChainSpec::from_json_file(
-                std::path::PathBuf::from(path),
-            )?),
-        })
-    }
+	fn native_runtime_version(_: &Box<dyn ChainSpec>) -> &'static RuntimeVersion {
+		&nft_runtime::VERSION
+	}
 }
 
 /// Parse and run command line arguments
 pub fn run() -> sc_cli::Result<()> {
-    let cli = Cli::from_args();
+	let cli = Cli::from_args();
+
+	match &cli.subcommand {
+		Some(Subcommand::BuildSpec(cmd)) => {
+			let runner = cli.create_runner(cmd)?;
+			runner.sync_run(|config| cmd.run(config.chain_spec, config.network))
+		},
+		Some(Subcommand::CheckBlock(cmd)) => {
+			let runner = cli.create_runner(cmd)?;
+			runner.async_run(|config| {
+				let PartialComponents { client, task_manager, import_queue, ..}
+					= service::new_partial(&config)?;
+				Ok((cmd.run(client, import_queue), task_manager))
+			})
+		},
+		Some(Subcommand::ExportBlocks(cmd)) => {
+			let runner = cli.create_runner(cmd)?;
+			runner.async_run(|config| {
+				let PartialComponents { client, task_manager, ..}
+					= service::new_partial(&config)?;
+				Ok((cmd.run(client, config.database), task_manager))
+			})
+		},
+		Some(Subcommand::ExportState(cmd)) => {
+			let runner = cli.create_runner(cmd)?;
+			runner.async_run(|config| {
+				let PartialComponents { client, task_manager, ..}
+					= service::new_partial(&config)?;
+				Ok((cmd.run(client, config.chain_spec), task_manager))
+			})
+		},
+		Some(Subcommand::ImportBlocks(cmd)) => {
+			let runner = cli.create_runner(cmd)?;
+			runner.async_run(|config| {
+				let PartialComponents { client, task_manager, import_queue, ..}
+					= service::new_partial(&config)?;
+				Ok((cmd.run(client, import_queue), task_manager))
+			})
+		},
+		Some(Subcommand::PurgeChain(cmd)) => {
+			let runner = cli.create_runner(cmd)?;
+			runner.sync_run(|config| cmd.run(config.database))
+		},
+		Some(Subcommand::Revert(cmd)) => {
+			let runner = cli.create_runner(cmd)?;
+			runner.async_run(|config| {
+				let PartialComponents { client, task_manager, backend, ..}
+					= service::new_partial(&config)?;
+				Ok((cmd.run(client, backend), task_manager))
+			})
+		},
+		Some(Subcommand::Benchmark(cmd)) => {
+			if cfg!(feature = "runtime-benchmarks") {
+				let runner = cli.create_runner(cmd)?;
 
-    match &cli.subcommand {
-        Some(subcommand) => {
-            let runner = cli.create_runner(subcommand)?;
-            runner.run_subcommand(subcommand, |config| Ok(new_full_start!(config).0))
-        }
-        None => {
-            let runner = cli.create_runner(&cli.run)?;
-            runner.run_node(service::new_light, service::new_full, nft_runtime::VERSION)
-        }
-    }
+				runner.sync_run(|config| cmd.run::<Block, service::Executor>(config))
+			} else {
+				Err("Benchmarking wasn't enabled when building the node. \
+				You can enable it with `--features runtime-benchmarks`.".into())
+			}
+		},
+		None => {
+			let runner = cli.create_runner(&cli.run)?;
+			runner.run_node_until_exit(|config| match config.role {
+				Role::Light => service::new_light(config),
+				_ => service::new_full(config),
+			})
+		}
+	}
 }
addednode/src/lib.rsdiffbeforeafterboth
--- /dev/null
+++ b/node/src/lib.rs
@@ -0,0 +1,3 @@
+pub mod chain_spec;
+pub mod service;
+pub mod rpc;
modifiednode/src/main.rsdiffbeforeafterboth
--- a/node/src/main.rs
+++ b/node/src/main.rs
@@ -6,6 +6,7 @@
 mod service;
 mod cli;
 mod command;
+mod rpc;
 
 fn main() -> sc_cli::Result<()> {
     command::run()
addednode/src/rpc.rsdiffbeforeafterboth
--- /dev/null
+++ b/node/src/rpc.rs
@@ -0,0 +1,69 @@
+//! A collection of node-specific RPC methods.
+//! Substrate provides the `sc-rpc` crate, which defines the core RPC layer
+//! used by Substrate nodes. This file extends those RPC definitions with
+//! capabilities that are specific to this project's runtime configuration.
+
+#![warn(missing_docs)]
+
+use std::sync::Arc;
+
+use nft_runtime::{opaque::Block, AccountId, Balance, Index, BlockNumber};
+use sp_api::ProvideRuntimeApi;
+use sp_blockchain::{Error as BlockChainError, HeaderMetadata, HeaderBackend};
+use sp_block_builder::BlockBuilder;
+pub use sc_rpc_api::DenyUnsafe;
+use sp_transaction_pool::TransactionPool;
+use pallet_contracts_rpc::{Contracts, ContractsApi};
+
+/// Full client dependencies.
+pub struct FullDeps<C, P> {
+	/// The client instance to use.
+	pub client: Arc<C>,
+	/// Transaction pool instance.
+	pub pool: Arc<P>,
+	/// Whether to deny unsafe calls
+	pub deny_unsafe: DenyUnsafe,
+}
+
+/// Instantiate all full RPC extensions.
+pub fn create_full<C, P>(
+	deps: FullDeps<C, P>,
+) -> jsonrpc_core::IoHandler<sc_rpc::Metadata> where
+	C: ProvideRuntimeApi<Block>,
+	C: HeaderBackend<Block> + HeaderMetadata<Block, Error=BlockChainError> + 'static,
+	C: Send + Sync + 'static,
+	C::Api: substrate_frame_rpc_system::AccountNonceApi<Block, AccountId, Index>,
+	C::Api: pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi<Block, Balance>,
+	C::Api: BlockBuilder<Block>,
+	C::Api: pallet_contracts_rpc::ContractsRuntimeApi<Block, AccountId, Balance, BlockNumber>,
+	P: TransactionPool + 'static,
+{
+	use substrate_frame_rpc_system::{FullSystem, SystemApi};
+	use pallet_transaction_payment_rpc::{TransactionPayment, TransactionPaymentApi};
+
+	let mut io = jsonrpc_core::IoHandler::default();
+	let FullDeps {
+		client,
+		pool,
+		deny_unsafe,
+	} = deps;
+
+	io.extend_with(
+		SystemApi::to_delegate(FullSystem::new(client.clone(), pool, deny_unsafe))
+	);
+
+	io.extend_with(
+		TransactionPaymentApi::to_delegate(TransactionPayment::new(client.clone()))
+	);
+
+    io.extend_with(
+        ContractsApi::to_delegate(Contracts::new(client.clone()))
+	);
+		
+	// Extend this RPC with a custom API by using the following syntax.
+	// `YourRpcStruct` should have a reference to a client, which is needed
+	// to call into the runtime.
+	// `io.extend_with(YourRpcTrait::to_delegate(YourRpcStruct::new(ReferenceToClient, ...)));`
+
+	io
+}
modifiednode/src/service.rsdiffbeforeafterboth
--- a/node/src/service.rs
+++ b/node/src/service.rs
@@ -1,274 +1,303 @@
 //! Service and ServiceFactory implementation. Specialized wrapper over substrate service.
 
+use std::sync::Arc;
+use std::time::Duration;
+use sc_client_api::{ExecutorProvider, RemoteBackend};
 use nft_runtime::{self, opaque::Block, RuntimeApi};
-use sc_client_api::ExecutorProvider;
-use sc_consensus::LongestChain;
+use sc_service::{error::Error as ServiceError, Configuration, TaskManager};
+use sp_inherents::InherentDataProviders;
 use sc_executor::native_executor_instance;
 pub use sc_executor::NativeExecutor;
-use sc_finality_grandpa::{
-    FinalityProofProvider as GrandpaFinalityProofProvider, SharedVoterState,
-    StorageAndProofProvider,
-};
-use sc_service::{error::Error as ServiceError, AbstractService, Configuration, ServiceBuilder};
-use sp_consensus_aura::sr25519::AuthorityPair as AuraPair;
-use sp_inherents::InherentDataProviders;
-use std::sync::Arc;
-use std::time::Duration;
+use sp_consensus_aura::sr25519::{AuthorityPair as AuraPair};
+use sc_finality_grandpa::{FinalityProofProvider as GrandpaFinalityProofProvider, SharedVoterState};
 
 // Our native executor instance.
 native_executor_instance!(
-    pub Executor,
+	pub Executor,
     nft_runtime::api::dispatch,
     nft_runtime::native_version,
+	frame_benchmarking::benchmarking::HostFunctions,
 );
 
-/// Starts a `ServiceBuilder` for a full service.
-///
-/// Use this macro if you don't actually need the full service, but just the builder in order to
-/// be able to perform chain operations.
-macro_rules! new_full_start {
-    ($config:expr) => {{
-        use jsonrpc_core::IoHandler;
-        use sp_consensus_aura::sr25519::AuthorityPair as AuraPair;
-        use std::sync::Arc;
-
-        let mut import_setup = None;
-        let inherent_data_providers = sp_inherents::InherentDataProviders::new();
+type FullClient = sc_service::TFullClient<Block, RuntimeApi, Executor>;
+type FullBackend = sc_service::TFullBackend<Block>;
+type FullSelectChain = sc_consensus::LongestChain<FullBackend, Block>;
 
-        let builder = sc_service::ServiceBuilder::new_full::<
-            nft_runtime::opaque::Block,
-            nft_runtime::RuntimeApi,
-            crate::service::Executor,
-        >($config)?
-        .with_select_chain(|_config, backend| Ok(sc_consensus::LongestChain::new(backend.clone())))?
-        .with_transaction_pool(|builder| {
-            let pool_api = sc_transaction_pool::FullChainApi::new(builder.client().clone());
-            Ok(sc_transaction_pool::BasicPool::new(
-                builder.config().transaction_pool.clone(),
-                std::sync::Arc::new(pool_api),
-                builder.prometheus_registry(),
-            ))
-        })?
-        .with_import_queue(
-            |_config, client, mut select_chain, _transaction_pool, spawn_task_handle, registry| {
-                let select_chain = select_chain
-                    .take()
-                    .ok_or_else(|| sc_service::Error::SelectChainRequired)?;
+pub fn new_partial(config: &Configuration) -> Result<sc_service::PartialComponents<
+	FullClient, FullBackend, FullSelectChain,
+	sp_consensus::DefaultImportQueue<Block, FullClient>,
+	sc_transaction_pool::FullPool<Block, FullClient>,
+	(
+		sc_consensus_aura::AuraBlockImport<
+			Block,
+			FullClient,
+			sc_finality_grandpa::GrandpaBlockImport<FullBackend, Block, FullClient, FullSelectChain>,
+			AuraPair
+		>,
+		sc_finality_grandpa::LinkHalf<Block, FullClient, FullSelectChain>
+	)
+>, ServiceError> {
+	let inherent_data_providers = sp_inherents::InherentDataProviders::new();
 
-                let (grandpa_block_import, grandpa_link) = sc_finality_grandpa::block_import(
-                    client.clone(),
-                    &(client.clone() as Arc<_>),
-                    select_chain,
-                )?;
+	let (client, backend, keystore, task_manager) =
+		sc_service::new_full_parts::<Block, RuntimeApi, Executor>(&config)?;
+	let client = Arc::new(client);
 
-                let aura_block_import =
-                    sc_consensus_aura::AuraBlockImport::<_, _, _, AuraPair>::new(
-                        grandpa_block_import.clone(),
-                        client.clone(),
-                    );
+	let select_chain = sc_consensus::LongestChain::new(backend.clone());
 
-                let import_queue = sc_consensus_aura::import_queue::<_, _, _, AuraPair, _>(
-                    sc_consensus_aura::slot_duration(&*client)?,
-                    aura_block_import,
-                    Some(Box::new(grandpa_block_import.clone())),
-                    None,
-                    client,
-                    inherent_data_providers.clone(),
-                    spawn_task_handle,
-                    registry,
-                )?;
+	let transaction_pool = sc_transaction_pool::BasicPool::new_full(
+		config.transaction_pool.clone(),
+		config.prometheus_registry(),
+		task_manager.spawn_handle(),
+		client.clone(),
+	);
 
-                import_setup = Some((grandpa_block_import, grandpa_link));
+	let (grandpa_block_import, grandpa_link) = sc_finality_grandpa::block_import(
+		client.clone(), &(client.clone() as Arc<_>), select_chain.clone(),
+	)?;
 
-                Ok(import_queue)
-            },
-        )?
-        .with_rpc_extensions(|builder| -> Result<IoHandler<sc_rpc::Metadata>, _> {
-            let handler = pallet_contracts_rpc::Contracts::new(builder.client().clone());
-            let delegate = pallet_contracts_rpc::ContractsApi::to_delegate(handler);
+	let aura_block_import = sc_consensus_aura::AuraBlockImport::<_, _, _, AuraPair>::new(
+		grandpa_block_import.clone(), client.clone(),
+	);
 
-            let mut io = IoHandler::default();
-            io.extend_with(delegate);
-            Ok(io)
-        })?;
+	let import_queue = sc_consensus_aura::import_queue::<_, _, _, AuraPair, _, _>(
+		sc_consensus_aura::slot_duration(&*client)?,
+		aura_block_import.clone(),
+		Some(Box::new(grandpa_block_import.clone())),
+		None,
+		client.clone(),
+		inherent_data_providers.clone(),
+		&task_manager.spawn_handle(),
+		config.prometheus_registry(),
+		sp_consensus::CanAuthorWithNativeVersion::new(client.executor().clone()),
+	)?;
 
-        (builder, import_setup, inherent_data_providers)
-    }};
+	Ok(sc_service::PartialComponents {
+		client, backend, task_manager, import_queue, keystore, select_chain, transaction_pool,
+		inherent_data_providers,
+		other: (aura_block_import, grandpa_link),
+	})
 }
 
 /// Builds a new service for a full client.
-pub fn new_full(config: Configuration) -> Result<impl AbstractService, ServiceError> {
-    let role = config.role.clone();
-    let force_authoring = config.force_authoring;
-    let name = config.network.node_name.clone();
-    let disable_grandpa = config.disable_grandpa;
+pub fn new_full(config: Configuration) -> Result<TaskManager, ServiceError> {
+	let sc_service::PartialComponents {
+		client, backend, mut task_manager, import_queue, keystore, select_chain, transaction_pool,
+		inherent_data_providers,
+		other: (block_import, grandpa_link),
+	} = new_partial(&config)?;
 
-    let (builder, mut import_setup, inherent_data_providers) = new_full_start!(config);
+	let finality_proof_provider =
+		GrandpaFinalityProofProvider::new_for_service(backend.clone(), client.clone());
 
-    let (block_import, grandpa_link) = import_setup.take().expect(
-        "Link Half and Block Import are present for Full Services or setup failed before. qed",
-    );
+	let (network, network_status_sinks, system_rpc_tx, network_starter) =
+		sc_service::build_network(sc_service::BuildNetworkParams {
+			config: &config,
+			client: client.clone(),
+			transaction_pool: transaction_pool.clone(),
+			spawn_handle: task_manager.spawn_handle(),
+			import_queue,
+			on_demand: None,
+			block_announce_validator_builder: None,
+			finality_proof_request_builder: None,
+			finality_proof_provider: Some(finality_proof_provider.clone()),
+		})?;
 
-    let service = builder
-        .with_finality_proof_provider(|client, backend| {
-            // GenesisAuthoritySetProvider is implemented for StorageAndProofProvider
-            let provider = client as Arc<dyn StorageAndProofProvider<_, _>>;
-            Ok(Arc::new(GrandpaFinalityProofProvider::new(backend, provider)) as _)
-        })?
-        .build_full()?;
+	if config.offchain_worker.enabled {
+		sc_service::build_offchain_workers(
+			&config, backend.clone(), task_manager.spawn_handle(), client.clone(), network.clone(),
+		);
+	}
 
-    if role.is_authority() {
-        let proposer = sc_basic_authorship::ProposerFactory::new(
-            service.client(),
-            service.transaction_pool(),
-            service.prometheus_registry().as_ref(),
-        );
+	let role = config.role.clone();
+	let force_authoring = config.force_authoring;
+	let name = config.network.node_name.clone();
+	let enable_grandpa = !config.disable_grandpa;
+	let prometheus_registry = config.prometheus_registry().cloned();
+	let telemetry_connection_sinks = sc_service::TelemetryConnectionSinks::default();
 
-        let client = service.client();
-        let select_chain = service
-            .select_chain()
-            .ok_or(ServiceError::SelectChainRequired)?;
+	let rpc_extensions_builder = {
+		let client = client.clone();
+		let pool = transaction_pool.clone();
 
-        let can_author_with =
-            sp_consensus::CanAuthorWithNativeVersion::new(client.executor().clone());
+		Box::new(move |deny_unsafe, _| {
+			let deps = crate::rpc::FullDeps {
+				client: client.clone(),
+				pool: pool.clone(),
+				deny_unsafe,
+			};
 
-        let aura = sc_consensus_aura::start_aura::<_, _, _, _, _, AuraPair, _, _, _>(
-            sc_consensus_aura::slot_duration(&*client)?,
-            client,
-            select_chain,
-            block_import,
-            proposer,
-            service.network(),
-            inherent_data_providers.clone(),
-            force_authoring,
-            service.keystore(),
-            can_author_with,
-        )?;
+			crate::rpc::create_full(deps)
+		})
+	};
 
-        // the AURA authoring task is considered essential, i.e. if it
-        // fails we take down the service with it.
-        service
-            .spawn_essential_task_handle()
-            .spawn_blocking("aura", aura);
-    }
+	sc_service::spawn_tasks(sc_service::SpawnTasksParams {
+		network: network.clone(),
+		client: client.clone(),
+		keystore: keystore.clone(),
+		task_manager: &mut task_manager,
+		transaction_pool: transaction_pool.clone(),
+		telemetry_connection_sinks: telemetry_connection_sinks.clone(),
+		rpc_extensions_builder: rpc_extensions_builder,
+		on_demand: None,
+		remote_blockchain: None,
+		backend, network_status_sinks, system_rpc_tx, config,
+	})?;
 
-    // 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() as sp_core::traits::BareCryptoStorePtr)
-    } else {
-        None
-    };
+	if role.is_authority() {
+		let proposer = sc_basic_authorship::ProposerFactory::new(
+			client.clone(),
+			transaction_pool,
+			prometheus_registry.as_ref(),
+		);
 
-    let grandpa_config = sc_finality_grandpa::Config {
-        // FIXME #1578 make this available through chainspec
-        gossip_duration: Duration::from_millis(333),
-        justification_period: 512,
-        name: Some(name),
-        observer_enabled: false,
-        keystore,
-        is_authority: role.is_network_authority(),
-    };
+		let can_author_with =
+			sp_consensus::CanAuthorWithNativeVersion::new(client.executor().clone());
 
-    let enable_grandpa = !disable_grandpa;
-    if enable_grandpa {
-        // start the full GRANDPA voter
-        // NOTE: non-authorities could run the GRANDPA observer protocol, but at
-        // this point the full voter should provide better guarantees of block
-        // and vote data availability than the observer. The observer has not
-        // been tested extensively yet and having most nodes in a network run it
-        // could lead to finality stalls.
-        let grandpa_config = sc_finality_grandpa::GrandpaParams {
-            config: grandpa_config,
-            link: grandpa_link,
-            network: service.network(),
-            inherent_data_providers: inherent_data_providers.clone(),
-            telemetry_on_connect: Some(service.telemetry_on_connect_stream()),
-            voting_rule: sc_finality_grandpa::VotingRulesBuilder::default().build(),
-            prometheus_registry: service.prometheus_registry(),
-            shared_voter_state: SharedVoterState::empty(),
-        };
+		let aura = sc_consensus_aura::start_aura::<_, _, _, _, _, AuraPair, _, _, _>(
+			sc_consensus_aura::slot_duration(&*client)?,
+			client.clone(),
+			select_chain,
+			block_import,
+			proposer,
+			network.clone(),
+			inherent_data_providers.clone(),
+			force_authoring,
+			keystore.clone(),
+			can_author_with,
+		)?;
+
+		// the AURA authoring task is considered essential, i.e. if it
+		// fails we take down the service with it.
+		task_manager.spawn_essential_handle().spawn_blocking("aura", aura);
+	}
+
+	// if the node isn't actively participating in consensus then it doesn't
+	// need a keystore, regardless of which protocol we use below.
+	let keystore = if role.is_authority() {
+		Some(keystore as sp_core::traits::BareCryptoStorePtr)
+	} else {
+		None
+	};
+
+	let grandpa_config = sc_finality_grandpa::Config {
+		// FIXME #1578 make this available through chainspec
+		gossip_duration: Duration::from_millis(333),
+		justification_period: 512,
+		name: Some(name),
+		observer_enabled: false,
+		keystore,
+		is_authority: role.is_network_authority(),
+	};
+
+	if enable_grandpa {
+		// start the full GRANDPA voter
+		// NOTE: non-authorities could run the GRANDPA observer protocol, but at
+		// this point the full voter should provide better guarantees of block
+		// and vote data availability than the observer. The observer has not
+		// been tested extensively yet and having most nodes in a network run it
+		// could lead to finality stalls.
+		let grandpa_config = sc_finality_grandpa::GrandpaParams {
+			config: grandpa_config,
+			link: grandpa_link,
+			network,
+			inherent_data_providers,
+			telemetry_on_connect: Some(telemetry_connection_sinks.on_connect_stream()),
+			voting_rule: sc_finality_grandpa::VotingRulesBuilder::default().build(),
+			prometheus_registry,
+			shared_voter_state: SharedVoterState::empty(),
+		};
 
-        // the GRANDPA voter task is considered infallible, i.e.
-        // if it fails we take down the service with it.
-        service.spawn_essential_task_handle().spawn_blocking(
-            "grandpa-voter",
-            sc_finality_grandpa::run_grandpa_voter(grandpa_config)?,
-        );
-    } else {
-        sc_finality_grandpa::setup_disabled_grandpa(
-            service.client(),
-            &inherent_data_providers,
-            service.network(),
-        )?;
-    }
+		// the GRANDPA voter task is considered infallible, i.e.
+		// if it fails we take down the service with it.
+		task_manager.spawn_essential_handle().spawn_blocking(
+			"grandpa-voter",
+			sc_finality_grandpa::run_grandpa_voter(grandpa_config)?
+		);
+	} else {
+		sc_finality_grandpa::setup_disabled_grandpa(
+			client,
+			&inherent_data_providers,
+			network,
+		)?;
+	}
 
-    Ok(service)
+	network_starter.start_network();
+	Ok(task_manager)
 }
 
 /// Builds a new service for a light client.
-pub fn new_light(config: Configuration) -> Result<impl AbstractService, ServiceError> {
-    let inherent_data_providers = InherentDataProviders::new();
+pub fn new_light(config: Configuration) -> Result<TaskManager, ServiceError> {
+	let (client, backend, keystore, mut task_manager, on_demand) =
+		sc_service::new_light_parts::<Block, RuntimeApi, Executor>(&config)?;
+
+	let transaction_pool = Arc::new(sc_transaction_pool::BasicPool::new_light(
+		config.transaction_pool.clone(),
+		config.prometheus_registry(),
+		task_manager.spawn_handle(),
+		client.clone(),
+		on_demand.clone(),
+	));
 
-    ServiceBuilder::new_light::<Block, RuntimeApi, Executor>(config)?
-        .with_select_chain(|_config, backend| Ok(LongestChain::new(backend.clone())))?
-        .with_transaction_pool(|builder| {
-            let fetcher = builder
-                .fetcher()
-                .ok_or_else(|| "Trying to start light transaction pool without active fetcher")?;
+	let grandpa_block_import = sc_finality_grandpa::light_block_import(
+		client.clone(), backend.clone(), &(client.clone() as Arc<_>),
+		Arc::new(on_demand.checker().clone()) as Arc<_>,
+	)?;
+	let finality_proof_import = grandpa_block_import.clone();
+	let finality_proof_request_builder =
+		finality_proof_import.create_finality_proof_request_builder();
+
+	let import_queue = sc_consensus_aura::import_queue::<_, _, _, AuraPair, _, _>(
+		sc_consensus_aura::slot_duration(&*client)?,
+		grandpa_block_import,
+		None,
+		Some(Box::new(finality_proof_import)),
+		client.clone(),
+		InherentDataProviders::new(),
+		&task_manager.spawn_handle(),
+		config.prometheus_registry(),
+		sp_consensus::NeverCanAuthor,
+	)?;
 
-            let pool_api =
-                sc_transaction_pool::LightChainApi::new(builder.client().clone(), fetcher.clone());
-            let pool = sc_transaction_pool::BasicPool::with_revalidation_type(
-                builder.config().transaction_pool.clone(),
-                Arc::new(pool_api),
-                builder.prometheus_registry(),
-                sc_transaction_pool::RevalidationType::Light,
-            );
-            Ok(pool)
-        })?
-        .with_import_queue_and_fprb(
-            |_config,
-             client,
-             backend,
-             fetcher,
-             _select_chain,
-             _tx_pool,
-             spawn_task_handle,
-             prometheus_registry| {
-                let fetch_checker = fetcher
-                    .map(|fetcher| fetcher.checker().clone())
-                    .ok_or_else(|| {
-                        "Trying to start light import queue without active fetch checker"
-                    })?;
-                let grandpa_block_import = sc_finality_grandpa::light_block_import(
-                    client.clone(),
-                    backend,
-                    &(client.clone() as Arc<_>),
-                    Arc::new(fetch_checker),
-                )?;
-                let finality_proof_import = grandpa_block_import.clone();
-                let finality_proof_request_builder =
-                    finality_proof_import.create_finality_proof_request_builder();
+	let finality_proof_provider =
+		GrandpaFinalityProofProvider::new_for_service(backend.clone(), client.clone());
+
+	let (network, network_status_sinks, system_rpc_tx, network_starter) =
+		sc_service::build_network(sc_service::BuildNetworkParams {
+			config: &config,
+			client: client.clone(),
+			transaction_pool: transaction_pool.clone(),
+			spawn_handle: task_manager.spawn_handle(),
+			import_queue,
+			on_demand: Some(on_demand.clone()),
+			block_announce_validator_builder: None,
+			finality_proof_request_builder: Some(finality_proof_request_builder),
+			finality_proof_provider: Some(finality_proof_provider),
+		})?;
+
+	if config.offchain_worker.enabled {
+		sc_service::build_offchain_workers(
+			&config, backend.clone(), task_manager.spawn_handle(), client.clone(), network.clone(),
+		);
+	}
+
+	sc_service::spawn_tasks(sc_service::SpawnTasksParams {
+		remote_blockchain: Some(backend.remote_blockchain()),
+		transaction_pool,
+		task_manager: &mut task_manager,
+		on_demand: Some(on_demand),
+		rpc_extensions_builder: Box::new(|_, _| ()),
+		telemetry_connection_sinks: sc_service::TelemetryConnectionSinks::default(),
+		config,
+		client,
+		keystore,
+		backend,
+		network,
+		network_status_sinks,
+		system_rpc_tx,
+	 })?;
 
-                let import_queue = sc_consensus_aura::import_queue::<_, _, _, AuraPair, _>(
-                    sc_consensus_aura::slot_duration(&*client)?,
-                    grandpa_block_import,
-                    None,
-                    Some(Box::new(finality_proof_import)),
-                    client,
-                    inherent_data_providers.clone(),
-                    spawn_task_handle,
-                    prometheus_registry,
-                )?;
+	 network_starter.start_network();
 
-                Ok((import_queue, finality_proof_request_builder))
-            },
-        )?
-        .with_finality_proof_provider(|client, backend| {
-            // GenesisAuthoritySetProvider is implemented for StorageAndProofProvider
-            let provider = client as Arc<dyn StorageAndProofProvider<_, _>>;
-            Ok(Arc::new(GrandpaFinalityProofProvider::new(backend, provider)) as _)
-        })?
-        .build_light()
+	 Ok(task_manager)
 }
modifiedpallets/nft/Cargo.tomldiffbeforeafterboth
--- a/pallets/nft/Cargo.toml
+++ b/pallets/nft/Cargo.toml
@@ -1,37 +1,52 @@
+[package]
+authors = ['Substrate DevHub <https://github.com/substrate-developer-hub>']
+description = 'FRAME pallet nft'
+edition = '2018'
+homepage = 'https://substrate.io'
+license = 'Unlicense'
+name = 'pallet-nft'
+repository = 'https://github.com/substrate-developer-hub/nft/'
+version = '2.0.0'
+
+[package.metadata.docs.rs]
+targets = ['x86_64-unknown-linux-gnu']
+
+# alias "parity-scale-code" to "codec"
 [dependencies.codec]
 default-features = false
 features = ['derive']
 package = 'parity-scale-codec'
-version = '1.3.0'
+version = '1.3.4'
 
 [dependencies.frame-support]
 default-features = false
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'rc4_ext_dispatch_reenabled'
-version = '2.0.0-rc4'
+branch = 'v2.0.0_release'
+version = '2.0.0'
 
 [dependencies.frame-system]
 default-features = false
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'rc4_ext_dispatch_reenabled'
-version = '2.0.0-rc4'
+branch = 'v2.0.0_release'
+version = '2.0.0'
+
 [dev-dependencies.sp-core]
 default-features = false
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'rc4_ext_dispatch_reenabled'
-version = '2.0.0-rc4'
+branch = 'v2.0.0_release'
+version = '2.0.0'
 
 [dev-dependencies.sp-io]
 default-features = false
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'rc4_ext_dispatch_reenabled'
-version = '2.0.0-rc4'
+branch = 'v2.0.0_release'
+version = '2.0.0'
 
 [dependencies.sp-runtime]
 default-features = false
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'rc4_ext_dispatch_reenabled'
-version = '2.0.0-rc4'
+branch = 'v2.0.0_release'
+version = '2.0.0'
 	
 [dependencies]
 # third-party dependencies
@@ -41,27 +56,50 @@
 [dependencies.sp-std]
 default-features = false
 git = 'https://github.com/usetech-llc/substrate.git'
-branch = 'rc4_ext_dispatch_reenabled'
-version = '2.0.0-rc4'
+branch = 'v2.0.0_release'
+version = '2.0.0'
 
 [dependencies.transaction-payment]
 default-features = false
 git = 'https://github.com/usetech-llc/substrate.git'
 package = 'pallet-transaction-payment'
-branch = 'rc4_ext_dispatch_reenabled'
-version = '2.0.0-rc4'
+branch = 'v2.0.0_release'
+version = '2.0.0'
 
-[package]
-authors = ['Substrate DevHub <https://github.com/substrate-developer-hub>']
-description = 'FRAME pallet nft'
-edition = '2018'
-homepage = 'https://substrate.io'
-license = 'Unlicense'
-name = 'pallet-nft'
-repository = 'https://github.com/substrate-developer-hub/nft/'
-version = '2.0.0-rc4'
-[package.metadata.docs.rs]
-targets = ['x86_64-unknown-linux-gnu']
+[dependencies.frame-benchmarking]
+version = "2.0.0"
+default-features = false
+git = 'https://github.com/usetech-llc/substrate.git'
+branch = 'v2.0.0_release'
+optional = true
+
+[dependencies.pallet-contracts]
+default-features = false
+git = 'https://github.com/usetech-llc/substrate.git'
+package = 'pallet-contracts'
+branch = 'v2.0.0_release'
+version = '2.0.0'
+
+[dependencies.pallet-balances]
+default-features = false
+git = 'https://github.com/usetech-llc/substrate.git'
+package = 'pallet-balances'
+branch = 'v2.0.0_release'
+version = '2.0.0'
+
+[dependencies.pallet-timestamp]
+default-features = false
+git = 'https://github.com/usetech-llc/substrate.git'
+package = 'pallet-timestamp'
+branch = 'v2.0.0_release'
+version = '2.0.0'
+
+[dependencies.pallet-randomness-collective-flip]
+default-features = false
+git = 'https://github.com/usetech-llc/substrate.git'
+package = 'pallet-randomness-collective-flip'
+branch = 'v2.0.0_release'
+version = '2.0.0'
 
 [features]
 default = ['std']
@@ -70,6 +108,11 @@
     "serde/std",
     'frame-support/std',
     'frame-system/std',
+    'pallet-balances/std',
+    'pallet-timestamp/std',
+    'pallet-randomness-collective-flip/std',
+    'sp-std/std',
     'sp-runtime/std',
-    'sp-std/std',
+    'frame-benchmarking/std',
 ]
+runtime-benchmarks = ["frame-benchmarking"]
addedpallets/nft/src/benchmarking.rsdiffbeforeafterboth
--- /dev/null
+++ b/pallets/nft/src/benchmarking.rs
@@ -0,0 +1,353 @@
+#[cfg(feature = "runtime-benchmarks")]
+// mod benchmarking {
+    use super::*;
+    use sp_std::prelude::*;
+    use frame_system::RawOrigin;
+    // use frame_support::{ensure, traits::OnFinalize};
+    use frame_benchmarking::{benchmarks, account, whitelisted_caller};  // , TrackedStorageKey, 
+    use crate::Module as Nft;
+
+    const SEED: u32 = 1;
+
+    fn default_nft_data() -> CreateItemData {
+        CreateItemData::NFT(CreateNftData { const_data: vec![1, 2, 3], variable_data: vec![3, 2, 1] })
+    }
+    
+    fn default_fungible_data () -> CreateItemData {
+        CreateItemData::Fungible(CreateFungibleData { })
+    }
+    
+    fn default_re_fungible_data () -> CreateItemData {
+        CreateItemData::ReFungible(CreateReFungibleData { const_data: vec![1, 2, 3], variable_data: vec![3, 2, 1] })
+    }
+
+
+    benchmarks! {
+
+        _ {}
+
+        create_collection {
+            let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
+            let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
+            let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
+            let mode: CollectionMode = CollectionMode::NFT;
+            let caller: T::AccountId = account("caller", 0, SEED);
+        }: create_collection(RawOrigin::Signed(caller.clone()), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode)
+        verify {
+			assert_eq!(Nft::<T>::collection(2).owner, caller);
+        }
+
+        destroy_collection {
+            let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
+            let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
+            let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
+            let mode: CollectionMode = CollectionMode::NFT;
+            let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
+            Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
+        }: destroy_collection(RawOrigin::Signed(caller.clone()), 2)
+
+        add_to_white_list {
+            let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
+            let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
+            let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
+            let mode: CollectionMode = CollectionMode::NFT;
+            let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
+            let whitelist_account: T::AccountId = account("admin", 0, SEED);
+            Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
+        }: add_to_white_list(RawOrigin::Signed(caller.clone()), 2, whitelist_account)
+
+        remove_from_white_list {
+            let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
+            let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
+            let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
+            let mode: CollectionMode = CollectionMode::NFT;
+            let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
+            let whitelist_account: T::AccountId = account("admin", 0, SEED);
+            Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
+            Nft::<T>::add_to_white_list(RawOrigin::Signed(caller.clone()).into(), 2, whitelist_account.clone())?;
+        }: remove_from_white_list(RawOrigin::Signed(caller.clone()), 2, whitelist_account)
+
+        set_public_access_mode {
+            let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
+            let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
+            let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
+            let mode: CollectionMode = CollectionMode::NFT;
+            let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
+            Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
+        }: set_public_access_mode(RawOrigin::Signed(caller.clone()), 2, AccessMode::WhiteList)
+
+        set_mint_permission {
+            let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
+            let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
+            let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
+            let mode: CollectionMode = CollectionMode::NFT;
+            let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
+            Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
+        }: set_mint_permission(RawOrigin::Signed(caller.clone()), 2, true)
+
+        change_collection_owner {
+            let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
+            let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
+            let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
+            let mode: CollectionMode = CollectionMode::NFT;
+            let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
+            Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
+            let new_owner: T::AccountId = account("admin", 0, SEED);
+        }: change_collection_owner(RawOrigin::Signed(caller.clone()), 2, new_owner)
+
+        add_collection_admin {
+            let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
+            let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
+            let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
+            let mode: CollectionMode = CollectionMode::NFT;
+            let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
+            Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
+            let new_admin: T::AccountId = account("admin", 0, SEED);
+        }: add_collection_admin(RawOrigin::Signed(caller.clone()), 2, new_admin)
+
+        remove_collection_admin {
+            let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
+            let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
+            let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
+            let mode: CollectionMode = CollectionMode::NFT;
+            let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
+            Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
+            let new_admin: T::AccountId = account("admin", 0, SEED);
+            Nft::<T>::add_collection_admin(RawOrigin::Signed(caller.clone()).into(), 2, new_admin.clone())?;
+        }: remove_collection_admin(RawOrigin::Signed(caller.clone()), 2, new_admin)
+
+        set_collection_sponsor {
+            let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
+            let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
+            let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
+            let mode: CollectionMode = CollectionMode::NFT;
+            let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
+            Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
+        }: set_collection_sponsor(RawOrigin::Signed(caller.clone()), 2, caller.clone())
+
+        confirm_sponsorship {
+            let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
+            let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
+            let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
+            let mode: CollectionMode = CollectionMode::NFT;
+            let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
+            Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
+            Nft::<T>::set_collection_sponsor(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone())?;
+        }: confirm_sponsorship(RawOrigin::Signed(caller.clone()), 2)
+
+        remove_collection_sponsor {
+            let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
+            let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
+            let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
+            let mode: CollectionMode = CollectionMode::NFT;
+            let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
+            Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
+            Nft::<T>::set_collection_sponsor(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone())?;
+            Nft::<T>::confirm_sponsorship(RawOrigin::Signed(caller.clone()).into(), 2)?;
+        }: remove_collection_sponsor(RawOrigin::Signed(caller.clone()), 2)
+
+        // nft item
+        create_item_nft {
+            let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
+            let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
+            let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
+            let mode: CollectionMode = CollectionMode::NFT;
+            let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
+            Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
+            let data = default_nft_data();
+            
+        }: create_item(RawOrigin::Signed(caller.clone()), 2, caller.clone(), data)
+
+        #[extra]
+        create_item_nft_large {
+            let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
+            let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
+            let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
+            let mode: CollectionMode = CollectionMode::NFT;
+            let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
+            let nft_data = CreateNftData {
+                const_data: vec![],
+                variable_data: vec![]
+            };
+            for i in 0..1998 {
+                nft_data.const_data.push(10);
+                nft_data.variable_data.push(10);
+            }
+            let mut data = CreateItemData::NFT(nft_data);
+            Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
+
+        }: create_item(RawOrigin::Signed(caller.clone()), 2, caller.clone(), data)
+
+        // fungible item
+        create_item_fungible {
+            let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
+            let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
+            let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
+            let mode: CollectionMode = CollectionMode::Fungible(3);
+            let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
+            Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
+            let data = default_fungible_data();
+
+        }: create_item(RawOrigin::Signed(caller.clone()), 2, caller.clone(), data)
+
+        // refungible item
+        create_item_refungible {
+            let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
+            let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
+            let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
+            let mode: CollectionMode = CollectionMode::ReFungible(3);
+            let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
+            Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
+            let data = default_re_fungible_data();
+
+        }: create_item(RawOrigin::Signed(caller.clone()), 2, caller.clone(), data)
+
+        burn_item {
+            let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
+            let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
+            let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
+            let mode: CollectionMode = CollectionMode::NFT;
+            let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
+            Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
+            let data = default_nft_data();
+            Nft::<T>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?;
+
+        }: burn_item(RawOrigin::Signed(caller.clone()), 2, 1)
+
+        transfer_nft {
+            let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
+            let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
+            let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
+            let mode: CollectionMode = CollectionMode::NFT;
+            let recipient: T::AccountId = account("recipient", 0, SEED);
+            let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
+            Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
+            let data = default_nft_data();
+            Nft::<T>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?;
+
+        }: transfer(RawOrigin::Signed(caller.clone()), recipient.clone(), 2, 1, 1)
+        
+        transfer_fungible {
+            let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
+            let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
+            let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
+            let mode: CollectionMode = CollectionMode::Fungible(3);
+            let recipient: T::AccountId = account("recipient", 0, SEED);
+            let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
+            Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
+            let data = default_fungible_data();
+            Nft::<T>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?;
+
+        }: transfer(RawOrigin::Signed(caller.clone()), recipient.clone(), 2, 1, 1)
+
+        transfer_refungible {
+            let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
+            let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
+            let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
+            let mode: CollectionMode = CollectionMode::ReFungible(3);
+            let recipient: T::AccountId = account("recipient", 0, SEED);
+            let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
+            Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
+            let data = default_re_fungible_data();
+            Nft::<T>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?;
+
+        }: transfer(RawOrigin::Signed(caller.clone()), recipient.clone(), 2, 1, 1)
+
+        approve {
+            let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
+            let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
+            let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
+            let mode: CollectionMode = CollectionMode::ReFungible(3);
+            let recipient: T::AccountId = account("recipient", 0, SEED);
+            let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
+            Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
+            let data = default_re_fungible_data();
+            Nft::<T>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?;
+
+        }: approve(RawOrigin::Signed(caller.clone()), recipient.clone(), 2, 1)
+
+        // Nft
+        transfer_from_nft {
+            let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
+            let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
+            let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
+            let mode: CollectionMode = CollectionMode::NFT;
+            let recipient: T::AccountId = account("recipient", 0, SEED);
+            let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
+            Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
+            let data = default_nft_data();
+            Nft::<T>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?;
+            Nft::<T>::approve(RawOrigin::Signed(caller.clone()).into(), recipient.clone(), 2, 1)?;
+
+        }: transfer_from(RawOrigin::Signed(caller.clone()), caller.clone(), recipient.clone(), 2, 1, 1)
+
+        // Fungible
+        transfer_from_fungible {
+            let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
+            let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
+            let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
+            let mode: CollectionMode = CollectionMode::Fungible(3);
+            let recipient: T::AccountId = account("recipient", 0, SEED);
+            let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
+            Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
+            let data = default_fungible_data();
+            Nft::<T>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?;
+            Nft::<T>::approve(RawOrigin::Signed(caller.clone()).into(), recipient.clone(), 2, 1)?;
+
+        }: transfer_from(RawOrigin::Signed(caller.clone()), caller.clone(), recipient.clone(), 2, 1, 1)
+
+        // ReFungible
+        transfer_from_refungible {
+            let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
+            let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
+            let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
+            let mode: CollectionMode = CollectionMode::ReFungible(3);
+            let recipient: T::AccountId = account("recipient", 0, SEED);
+            let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
+            Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
+            let data = default_re_fungible_data();
+            Nft::<T>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?;
+            Nft::<T>::approve(RawOrigin::Signed(caller.clone()).into(), recipient.clone(), 2, 1)?;
+
+        }: transfer_from(RawOrigin::Signed(caller.clone()), caller.clone(), recipient.clone(), 2, 1, 1)
+
+        set_offchain_schema {
+            let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
+            let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
+            let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
+            let mode: CollectionMode = CollectionMode::ReFungible(3);
+            let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
+            Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
+
+        }: set_offchain_schema(RawOrigin::Signed(caller.clone()), 2, [1,2,3].to_vec())
+
+        set_const_on_chain_schema {
+            let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
+            let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
+            let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
+            let mode: CollectionMode = CollectionMode::ReFungible(3);
+            let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
+            Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
+        }: set_const_on_chain_schema(RawOrigin::Signed(caller.clone()), 2, [1,2,3].to_vec())
+        
+        set_variable_on_chain_schema {
+            let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
+            let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
+            let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
+            let mode: CollectionMode = CollectionMode::ReFungible(3);
+            let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
+            Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
+        }: set_variable_on_chain_schema(RawOrigin::Signed(caller.clone()), 2, [1,2,3].to_vec())
+
+        set_variable_meta_data {
+            let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
+            let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
+            let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
+            let mode: CollectionMode = CollectionMode::NFT;
+            let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
+            Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
+            let data = default_nft_data();
+            Nft::<T>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?;
+
+        }: set_variable_meta_data(RawOrigin::Signed(caller.clone()), 2, 1, [1, 2, 3].to_vec())
+}
\ No newline at end of file
addedpallets/nft/src/default_weights.rsdiffbeforeafterboth
--- /dev/null
+++ b/pallets/nft/src/default_weights.rs
@@ -0,0 +1,115 @@
+use frame_support::weights::{Weight, constants::RocksDbWeight as DbWeight};
+
+impl crate::WeightInfo for () {
+	fn create_collection() -> Weight {
+		(70_000_000 as Weight)
+			.saturating_add(DbWeight::get().reads(7 as Weight))
+			.saturating_add(DbWeight::get().writes(5 as Weight))
+	}
+	fn destroy_collection() -> Weight {
+		(90_000_000 as Weight)
+			.saturating_add(DbWeight::get().reads(2 as Weight))
+			.saturating_add(DbWeight::get().writes(5 as Weight))
+	}
+	fn add_to_white_list() -> Weight {
+		(30_000_000 as Weight)
+			.saturating_add(DbWeight::get().reads(3 as Weight))
+			.saturating_add(DbWeight::get().writes(1 as Weight))
+    }
+    fn remove_from_white_list() -> Weight {
+		(35_000_000 as Weight)
+			.saturating_add(DbWeight::get().reads(3 as Weight))
+			.saturating_add(DbWeight::get().writes(1 as Weight))
+	}
+	fn set_public_access_mode() -> Weight {
+		(27_000_000 as Weight)
+			.saturating_add(DbWeight::get().reads(1 as Weight))
+			.saturating_add(DbWeight::get().writes(1 as Weight))
+	}
+	fn set_mint_permission() -> Weight {
+		(27_000_000 as Weight)
+			.saturating_add(DbWeight::get().reads(1 as Weight))
+			.saturating_add(DbWeight::get().writes(1 as Weight))
+	}
+	fn change_collection_owner() -> Weight {
+		(27_000_000 as Weight)
+			.saturating_add(DbWeight::get().reads(1 as Weight))
+			.saturating_add(DbWeight::get().writes(1 as Weight))
+	}
+	fn add_collection_admin() -> Weight {
+        (32_000_000 as Weight)
+            .saturating_add(DbWeight::get().reads(3 as Weight))
+            .saturating_add(DbWeight::get().writes(1 as Weight))
+	}
+	fn remove_collection_admin() -> Weight {
+		(50_000_000 as Weight)
+            .saturating_add(DbWeight::get().reads(2 as Weight))
+            .saturating_add(DbWeight::get().writes(1 as Weight))
+    }
+    fn set_collection_sponsor() -> Weight {
+		(32_000_000 as Weight)
+            .saturating_add(DbWeight::get().reads(2 as Weight))
+            .saturating_add(DbWeight::get().writes(1 as Weight))
+    }  
+    fn confirm_sponsorship() -> Weight {
+		(22_000_000 as Weight)
+            .saturating_add(DbWeight::get().reads(1 as Weight))
+            .saturating_add(DbWeight::get().writes(1 as Weight))
+    }  
+    fn remove_collection_sponsor() -> Weight {
+		(24_000_000 as Weight)
+            .saturating_add(DbWeight::get().reads(1 as Weight))
+            .saturating_add(DbWeight::get().writes(1 as Weight))
+    }  
+    fn create_item(s: usize, ) -> Weight {
+        (130_000_000 as Weight)
+            .saturating_add((2135 as Weight).saturating_mul(s as Weight))
+            .saturating_add(DbWeight::get().reads(10 as Weight))
+            .saturating_add(DbWeight::get().writes(8 as Weight))
+    }  
+    fn burn_item() -> Weight {
+		(170_000_000 as Weight)
+            .saturating_add(DbWeight::get().reads(9 as Weight))
+            .saturating_add(DbWeight::get().writes(7 as Weight))
+    }  
+    fn transfer() -> Weight {
+        (125_000_000 as Weight)
+            .saturating_add(DbWeight::get().reads(7 as Weight))
+            .saturating_add(DbWeight::get().writes(7 as Weight))
+    }  
+    fn approve() -> Weight {
+        (45_000_000 as Weight)
+            .saturating_add(DbWeight::get().reads(3 as Weight))
+            .saturating_add(DbWeight::get().writes(1 as Weight))
+    }
+    fn transfer_from() -> Weight {
+        (150_000_000 as Weight)
+            .saturating_add(DbWeight::get().reads(9 as Weight))
+            .saturating_add(DbWeight::get().writes(8 as Weight))
+    }
+    fn set_offchain_schema() -> Weight {
+        (33_000_000 as Weight)
+            .saturating_add(DbWeight::get().reads(2 as Weight))
+            .saturating_add(DbWeight::get().writes(1 as Weight))
+    }
+    fn set_const_on_chain_schema() -> Weight {
+        (11_100_000 as Weight)
+            .saturating_add(DbWeight::get().reads(2 as Weight))
+            .saturating_add(DbWeight::get().writes(1 as Weight))
+    }
+    fn set_variable_on_chain_schema() -> Weight {
+        (11_100_000 as Weight)
+            .saturating_add(DbWeight::get().reads(2 as Weight))
+            .saturating_add(DbWeight::get().writes(1 as Weight))
+    }
+    fn set_variable_meta_data() -> Weight {
+        (17_500_000 as Weight)
+            .saturating_add(DbWeight::get().reads(2 as Weight))
+            .saturating_add(DbWeight::get().writes(1 as Weight))
+    }
+    // fn enable_contract_sponsoring() -> Weight {
+    //     (0 as Weight)
+    //         .saturating_add(DbWeight::get().reads(1 as Weight))
+    //         .saturating_add(DbWeight::get().writes(1 as Weight))
+    // }
+}
modifiedpallets/nft/src/lib.rsdiffbeforeafterboth
--- a/pallets/nft/src/lib.rs
+++ b/pallets/nft/src/lib.rs
@@ -27,15 +27,15 @@
 use sp_runtime::sp_std::prelude::Vec;
 use sp_runtime::{
     traits::{
-        DispatchInfoOf, Dispatchable, PostDispatchInfoOf, SaturatedConversion, Saturating,
-        SignedExtension, Zero,
+        DispatchInfoOf, Dispatchable, PostDispatchInfoOf, Saturating, SignedExtension, Zero,
     },
     transaction_validity::{
-        InvalidTransaction, TransactionPriority, TransactionValidity, TransactionValidityError,
-        ValidTransaction,
+        InvalidTransaction, TransactionValidity, TransactionValidityError, ValidTransaction,
     },
     FixedPointOperand, FixedU128,
 };
+use pallet_contracts::ContractAddressFor;
+use sp_runtime::traits::StaticLookup;
 
 #[cfg(test)]
 mod mock;
@@ -43,6 +43,8 @@
 #[cfg(test)]
 mod tests;
 
+mod default_weights;
+
 // Structs
 // #region
 
@@ -50,21 +52,20 @@
 #[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
 pub enum CollectionMode {
     Invalid,
-    // custom data size
-    NFT(u32),
+    NFT,
     // decimal points
     Fungible(u32),
-    // custom data size and decimal points
-    ReFungible(u32, u32),
+    // decimal points
+    ReFungible(u32),
 }
 
 impl Into<u8> for CollectionMode {
     fn into(self) -> u8 {
         match self {
             CollectionMode::Invalid => 0,
-            CollectionMode::NFT(_) => 1,
+            CollectionMode::NFT => 1,
             CollectionMode::Fungible(_) => 2,
-            CollectionMode::ReFungible(_, _) => 3,
+            CollectionMode::ReFungible(_) => 3,
         }
     }
 }
@@ -104,11 +105,12 @@
     pub name: Vec<u16>,        // 64 include null escape char
     pub description: Vec<u16>, // 256 include null escape char
     pub token_prefix: Vec<u8>, // 16 include null escape char
-    pub custom_data_size: u32,
     pub mint_mode: bool,
     pub offchain_schema: Vec<u8>,
     pub sponsor: AccountId, // Who pays fees. If set to default address, the fees are applied to the transaction sender
     pub unconfirmed_sponsor: AccountId, // Sponsor address that has not yet confirmed sponsorship
+    pub variable_on_chain_schema: Vec<u8>, //
+    pub const_on_chain_schema: Vec<u8>, //
 }
 
 #[derive(Encode, Decode, Default, Debug, Clone, PartialEq)]
@@ -123,7 +125,8 @@
 pub struct NftItemType<AccountId> {
     pub collection: u64,
     pub owner: AccountId,
-    pub data: Vec<u8>,
+    pub const_data: Vec<u8>,
+    pub variable_data: Vec<u8>,
 }
 
 #[derive(Encode, Decode, Default, Debug, Clone, PartialEq)]
@@ -139,7 +142,8 @@
 pub struct ReFungibleItemType<AccountId> {
     pub collection: u64,
     pub owner: Vec<Ownership<AccountId>>,
-    pub data: Vec<u8>,
+    pub const_data: Vec<u8>,
+    pub variable_data: Vec<u8>,
 }
 
 #[derive(Encode, Decode, Default, Debug, Clone, PartialEq)]
@@ -181,10 +185,98 @@
     pub refungible_sponsor_transfer_timeout: u32,
 }
 
-pub trait Trait: system::Trait {
+pub trait WeightInfo {
+	fn create_collection() -> Weight;
+	fn destroy_collection() -> Weight;
+	fn add_to_white_list() -> Weight;
+	fn remove_from_white_list() -> Weight;
+    fn set_public_access_mode() -> Weight;
+    fn set_mint_permission() -> Weight;
+    fn change_collection_owner() -> Weight;
+    fn add_collection_admin() -> Weight;
+    fn remove_collection_admin() -> Weight;
+    fn set_collection_sponsor() -> Weight;
+    fn confirm_sponsorship() -> Weight;
+    fn remove_collection_sponsor() -> Weight;
+    fn create_item(s: usize) -> Weight;
+    fn burn_item() -> Weight;
+    fn transfer() -> Weight;
+    fn approve() -> Weight;
+    fn transfer_from() -> Weight;
+    fn set_offchain_schema() -> Weight;
+    fn set_const_on_chain_schema() -> Weight;
+    fn set_variable_on_chain_schema() -> Weight;
+    fn set_variable_meta_data() -> Weight;
+    // fn enable_contract_sponsoring() -> Weight;
+}
+
+#[derive(Encode, Decode, Default, Debug, Clone, PartialEq)]
+#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
+pub struct CreateNftData {
+    pub const_data: Vec<u8>,
+    pub variable_data: Vec<u8>,
+}
+
+#[derive(Encode, Decode, Default, Debug, Clone, PartialEq)]
+#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
+pub struct CreateFungibleData {
+}
+
+#[derive(Encode, Decode, Default, Debug, Clone, PartialEq)]
+#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
+pub struct CreateReFungibleData {
+    pub const_data: Vec<u8>,
+    pub variable_data: Vec<u8>,
+}
+
+#[derive(Encode, Decode, Debug, Clone, PartialEq)]
+#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
+pub enum CreateItemData {
+    NFT(CreateNftData),
+    Fungible(CreateFungibleData),
+    ReFungible(CreateReFungibleData)
+}
+
+impl CreateItemData {
+    pub fn len(&self) -> usize {
+        let len = match self {
+            CreateItemData::NFT(data) => data.variable_data.len() + data.const_data.len(),
+            CreateItemData::ReFungible(data) => data.variable_data.len() + data.const_data.len(),
+            _ => 0
+        };
+        
+        return len;
+    }
+}
+
+impl From<CreateNftData> for CreateItemData {
+    fn from(item: CreateNftData) -> Self {
+        CreateItemData::NFT(item)
+    }
+}
+
+impl From<CreateReFungibleData> for CreateItemData {
+    fn from(item: CreateReFungibleData) -> Self {
+        CreateItemData::ReFungible(item)
+    }
+}
+
+impl From<CreateFungibleData> for CreateItemData {
+    fn from(item: CreateFungibleData) -> Self {
+        CreateItemData::Fungible(item)
+    }
+}
+
+pub trait Trait: system::Trait + Sized + transaction_payment::Trait + pallet_contracts::Trait {
     type Event: From<Event<Self>> + Into<<Self as system::Trait>::Event>;
+
+    /// Weight information for extrinsics in this pallet.
+	type WeightInfo: WeightInfo;
 }
 
+#[cfg(feature = "runtime-benchmarks")]
+mod benchmarking;
+
 // #endregion
 
 decl_storage! {
@@ -227,9 +319,9 @@
         pub FungibleTransferBasket get(fn fungible_transfer_basket): double_map hasher(blake2_128_concat) u64, hasher(blake2_128_concat) u64 => Vec<BasketItem<T::AccountId, T::BlockNumber>>;
         pub ReFungibleTransferBasket get(fn refungible_transfer_basket): double_map hasher(blake2_128_concat) u64, hasher(blake2_128_concat) u64 => T::BlockNumber;
 
-        // Sponsorship
-        pub ContractSponsor get(fn contract_sponsor): map hasher(identity) T::AccountId => T::AccountId;
-        pub UnconfirmedContractSponsor get(fn unconfirmed_contract_sponsor): map hasher(identity) T::AccountId => T::AccountId;
+        // Contract Sponsorship and Ownership
+        pub ContractOwner get(fn contract_owner): map hasher(identity) T::AccountId => T::AccountId;
+        pub ContractSelfSponsoring get(fn contract_self_sponsoring): map hasher(identity) T::AccountId => bool;
     }
     add_extra_genesis {
         build(|config: &GenesisConfig<T>| {
@@ -322,7 +414,7 @@
         /// 
         /// * mode: [CollectionMode] collection type and type dependent data.
         // returns collection ID
-        #[weight = 0]
+        #[weight = T::WeightInfo::create_collection()]
         pub fn create_collection(origin,
                                  collection_name: Vec<u16>,
                                  collection_description: Vec<u16>,
@@ -331,25 +423,10 @@
 
             // Anyone can create a collection
             let who = ensure_signed(origin)?;
-            let custom_data_size = match mode {
-                CollectionMode::NFT(size) => {
-
-                    // bound Custom data size
-                    ensure!(size < ChainLimit::get().custom_data_limit, "Custom data size bound exceeded");
-                    size
-                },
-                CollectionMode::ReFungible(size, _) => {
 
-                    // bound Custom data size
-                    ensure!(size < ChainLimit::get().custom_data_limit, "Custom data size bound exceeded");
-                    size
-                },
-                _ => 0
-            };
-
             let decimal_points = match mode {
                 CollectionMode::Fungible(points) => points,
-                CollectionMode::ReFungible(_, points) => points,
+                CollectionMode::ReFungible(points) => points,
                 _ => 0
             };
 
@@ -395,9 +472,10 @@
                 decimal_points: decimal_points,
                 token_prefix: prefix,
                 offchain_schema: Vec::new(),
-                custom_data_size: custom_data_size,
                 sponsor: T::AccountId::default(),
                 unconfirmed_sponsor: T::AccountId::default(),
+                variable_on_chain_schema: Vec::new(),
+                const_on_chain_schema: Vec::new(),
             };
 
             // Add new collection to map
@@ -418,7 +496,7 @@
         /// # Arguments
         /// 
         /// * collection_id: collection to destroy.
-        #[weight = 0]
+        #[weight = T::WeightInfo::destroy_collection()]
         pub fn destroy_collection(origin, collection_id: u64) -> DispatchResult {
 
             let sender = ensure_signed(origin)?;
@@ -465,7 +543,7 @@
         /// * collection_id.
         /// 
         /// * address.
-        #[weight = 0]
+        #[weight = T::WeightInfo::add_to_white_list()]
         pub fn add_to_white_list(origin, collection_id: u64, address: T::AccountId) -> DispatchResult{
 
             let sender = ensure_signed(origin)?;
@@ -500,7 +578,7 @@
         /// * collection_id.
         /// 
         /// * address.
-        #[weight = 0]
+        #[weight = T::WeightInfo::remove_from_white_list()]
         pub fn remove_from_white_list(origin, collection_id: u64, address: T::AccountId) -> DispatchResult{
 
             let sender = ensure_signed(origin)?;
@@ -529,7 +607,7 @@
         /// * collection_id.
         /// 
         /// * mode: [AccessMode]
-        #[weight = 0]
+        #[weight = T::WeightInfo::set_public_access_mode()]
         pub fn set_public_access_mode(origin, collection_id: u64, mode: AccessMode) -> DispatchResult
         {
             let sender = ensure_signed(origin)?;
@@ -555,7 +633,7 @@
         /// * collection_id.
         /// 
         /// * mint_permission: Boolean parameter. If True, allows minting to Anyone with conditions above.
-        #[weight = 0]
+        #[weight = T::WeightInfo::set_mint_permission()]
         pub fn set_mint_permission(origin, collection_id: u64, mint_permission: bool) -> DispatchResult
         {
             let sender = ensure_signed(origin)?;
@@ -579,7 +657,7 @@
         /// * collection_id.
         /// 
         /// * new_owner.
-        #[weight = 0]
+        #[weight = T::WeightInfo::change_collection_owner()]
         pub fn change_collection_owner(origin, collection_id: u64, new_owner: T::AccountId) -> DispatchResult {
 
             let sender = ensure_signed(origin)?;
@@ -604,7 +682,7 @@
         /// * collection_id: ID of the Collection to add admin for.
         /// 
         /// * new_admin_id: Address of new admin to add.
-        #[weight = 0]
+        #[weight = T::WeightInfo::add_collection_admin()]
         pub fn add_collection_admin(origin, collection_id: u64, new_admin_id: T::AccountId) -> DispatchResult {
 
             let sender = ensure_signed(origin)?;
@@ -638,7 +716,7 @@
         /// * collection_id: ID of the Collection to remove admin for.
         /// 
         /// * account_id: Address of admin to remove.
-        #[weight = 0]
+        #[weight = T::WeightInfo::remove_collection_admin()]
         pub fn remove_collection_admin(origin, collection_id: u64, account_id: T::AccountId) -> DispatchResult {
 
             let sender = ensure_signed(origin)?;
@@ -663,7 +741,7 @@
         /// * collection_id.
         /// 
         /// * new_sponsor.
-        #[weight = 0]
+        #[weight = T::WeightInfo::set_collection_sponsor()]
         pub fn set_collection_sponsor(origin, collection_id: u64, new_sponsor: T::AccountId) -> DispatchResult {
 
             let sender = ensure_signed(origin)?;
@@ -685,7 +763,7 @@
         /// # Arguments
         /// 
         /// * collection_id.
-        #[weight = 0]
+        #[weight = T::WeightInfo::confirm_sponsorship()]
         pub fn confirm_sponsorship(origin, collection_id: u64) -> DispatchResult {
 
             let sender = ensure_signed(origin)?;
@@ -710,7 +788,7 @@
         /// # Arguments
         /// 
         /// * collection_id.
-        #[weight = 0]
+        #[weight = T::WeightInfo::remove_collection_sponsor()]
         pub fn remove_collection_sponsor(origin, collection_id: u64) -> DispatchResult {
 
             let sender = ensure_signed(origin)?;
@@ -739,12 +817,18 @@
         /// # Arguments
         /// 
         /// * collection_id: ID of the collection.
-        /// 
-        /// * properties: Array of bytes that contains NFT properties. Since NFT Module is agnostic of properties meaning, it is treated purely as an array of bytes.
         /// 
         /// * owner: Address, initial owner of the NFT.
-        #[weight = 0]
-        pub fn create_item(origin, collection_id: u64, properties: Vec<u8>, owner: T::AccountId) -> DispatchResult {
+        ///
+        /// * data: Token data to store on chain.
+        // #[weight =
+        // (130_000_000 as Weight)
+        // .saturating_add((2135 as Weight).saturating_mul((properties.len() as u64) as Weight))
+        // .saturating_add(RocksDbWeight::get().reads(10 as Weight))
+        // .saturating_add(RocksDbWeight::get().writes(8 as Weight))]
+
+        #[weight = T::WeightInfo::create_item(data.len())]
+        pub fn create_item(origin, collection_id: u64, owner: T::AccountId, data: CreateItemData) -> DispatchResult {
 
             let sender = ensure_signed(origin)?;
 
@@ -811,7 +895,7 @@
         /// * collection_id: ID of the collection.
         /// 
         /// * item_id: ID of NFT to burn.
-        #[weight = 0]
+        #[weight = T::WeightInfo::burn_item()]
         pub fn burn_item(origin, collection_id: u64, item_id: u64) -> DispatchResult {
 
             let sender = ensure_signed(origin)?;
@@ -829,9 +913,9 @@
 
             match target_collection.mode
             {
-                CollectionMode::NFT(_) => Self::burn_nft_item(collection_id, item_id)?,
+                CollectionMode::NFT => Self::burn_nft_item(collection_id, item_id)?,
                 CollectionMode::Fungible(_)  => Self::burn_fungible_item(collection_id, item_id)?,
-                CollectionMode::ReFungible(_, _)  => Self::burn_refungible_item(collection_id, item_id, sender.clone())?,
+                CollectionMode::ReFungible(_)  => Self::burn_refungible_item(collection_id, item_id, sender.clone())?,
                 _ => ()
             };
 
@@ -864,7 +948,7 @@
         ///     * Non-Fungible Mode: Ignored
         ///     * Fungible Mode: Must specify transferred amount
         ///     * Re-Fungible Mode: Must specify transferred portion (between 0 and 1)
-        #[weight = 0]
+        #[weight = T::WeightInfo::transfer()]
         pub fn transfer(origin, recipient: T::AccountId, collection_id: u64, item_id: u64, value: u64) -> DispatchResult {
 
             let sender = ensure_signed(origin)?;
@@ -882,9 +966,9 @@
 
             match target_collection.mode
             {
-                CollectionMode::NFT(_) => Self::transfer_nft(collection_id, item_id, sender.clone(), recipient)?,
+                CollectionMode::NFT => Self::transfer_nft(collection_id, item_id, sender.clone(), recipient)?,
                 CollectionMode::Fungible(_)  => Self::transfer_fungible(collection_id, item_id, value, sender.clone(), 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)?,
                 _ => ()
             };
 
@@ -906,7 +990,7 @@
         /// * collection_id.
         /// 
         /// * item_id: ID of the item.
-        #[weight = 0]
+        #[weight = T::WeightInfo::approve()]
         pub fn approve(origin, approved: T::AccountId, collection_id: u64, item_id: u64) -> DispatchResult {
 
             let sender = ensure_signed(origin)?;
@@ -964,7 +1048,7 @@
         /// * item_id: ID of the item.
         /// 
         /// * value: Amount to transfer.
-        #[weight = 0]
+        #[weight = T::WeightInfo::transfer_from()]
         pub fn transfer_from(origin, from: T::AccountId, recipient: T::AccountId, collection_id: u64, item_id: u64, value: u64 ) -> DispatchResult {
 
             let sender = ensure_signed(origin)?;
@@ -974,8 +1058,11 @@
             if <ApprovedList<T>>::contains_key(collection_id, (item_id, from.clone())) {
                 let list_itm = <ApprovedList<T>>::get(collection_id, (item_id, from.clone()));
                 let opt_item = list_itm.iter().find(|i| i.approved == sender.clone());
-                appoved_transfer = opt_item.is_some();
-                ensure!(opt_item.unwrap().amount >= value, "Requested value more than approved");
+                if opt_item.is_some()
+                {
+                    appoved_transfer = true;
+                    ensure!(opt_item.unwrap().amount >= value, "Requested value more than approved");
+                }
             }
 
             // Transfer permissions check
@@ -996,9 +1083,9 @@
 
             match target_collection.mode
             {
-                CollectionMode::NFT(_) => Self::transfer_nft(collection_id, item_id, from, recipient)?,
+                CollectionMode::NFT => Self::transfer_nft(collection_id, item_id, from, recipient)?,
                 CollectionMode::Fungible(_)  => Self::transfer_fungible(collection_id, item_id, value, from.clone(), 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)?,
                 _ => ()
             };
 
@@ -1033,7 +1120,49 @@
         /// * collection_id.
         /// 
         /// * schema: String representing the offchain data schema.
-        #[weight = 0]
+        #[weight = T::WeightInfo::set_variable_meta_data()]
+        pub fn set_variable_meta_data (
+            origin,
+            collection_id: u64,
+            item_id: u64,
+            data: Vec<u8>
+        ) -> DispatchResult {
+            let sender = ensure_signed(origin)?;
+            
+            Self::collection_exists(collection_id)?;
+
+            // Modify permissions check
+            let target_collection = <Collection<T>>::get(collection_id);
+            ensure!(Self::is_item_owner(sender.clone(), collection_id, item_id) ||
+                Self::is_owner_or_admin_permissions(collection_id, sender.clone()),
+                "Only item owner, collection owner and admins can modify item");
+
+            Self::item_exists(collection_id, item_id, &target_collection.mode)?;
+
+            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)?,
+                _ => ()
+            };
+
+            Ok(())
+        }
+        
+
+        /// Set off-chain data schema.
+        /// 
+        /// # Permissions
+        /// 
+        /// * Collection Owner
+        /// * Collection Admin
+        /// 
+        /// # Arguments
+        /// 
+        /// * collection_id.
+        /// 
+        /// * schema: String representing the offchain data schema.
+        #[weight = T::WeightInfo::set_offchain_schema()]
         pub fn set_offchain_schema(
             origin,
             collection_id: u64,
@@ -1049,6 +1178,62 @@
             Ok(())
         }
 
+        /// Set const on-chain data schema.
+        /// 
+        /// # Permissions
+        /// 
+        /// * Collection Owner
+        /// * Collection Admin
+        /// 
+        /// # Arguments
+        /// 
+        /// * collection_id.
+        /// 
+        /// * schema: String representing the const on-chain data schema.
+        #[weight = T::WeightInfo::set_const_on_chain_schema()]
+        pub fn set_const_on_chain_schema (
+            origin,
+            collection_id: u64,
+            schema: Vec<u8>
+        ) -> DispatchResult {
+            let sender = ensure_signed(origin)?;
+            Self::check_owner_or_admin_permissions(collection_id, sender.clone())?;
+
+            let mut target_collection = <Collection<T>>::get(collection_id);
+            target_collection.const_on_chain_schema = schema;
+            <Collection<T>>::insert(collection_id, target_collection);
+
+            Ok(())
+        }
+
+        /// Set variable on-chain data schema.
+        /// 
+        /// # Permissions
+        /// 
+        /// * Collection Owner
+        /// * Collection Admin
+        /// 
+        /// # Arguments
+        /// 
+        /// * collection_id.
+        /// 
+        /// * schema: String representing the variable on-chain data schema.
+        #[weight = T::WeightInfo::set_const_on_chain_schema()]
+        pub fn set_variable_on_chain_schema (
+            origin,
+            collection_id: u64,
+            schema: Vec<u8>
+        ) -> DispatchResult {
+            let sender = ensure_signed(origin)?;
+            Self::check_owner_or_admin_permissions(collection_id, sender.clone())?;
+
+            let mut target_collection = <Collection<T>>::get(collection_id);
+            target_collection.variable_on_chain_schema = schema;
+            <Collection<T>>::insert(collection_id, target_collection);
+
+            Ok(())
+        }
+
         // Sudo permissions function
         #[weight = 0]
         pub fn set_chain_limits(
@@ -1058,7 +1243,37 @@
             ensure_root(origin)?;
             <ChainLimit>::put(limits);
             Ok(())
-        }        
+        }
+
+        /// Enable smart contract self-sponsoring.
+        /// 
+        /// # Permissions
+        /// 
+        /// * Contract Owner
+        /// 
+        /// # Arguments
+        /// 
+        /// * contract address
+        /// * enable flag
+        /// 
+        #[weight = 0]
+        pub fn enable_contract_sponsoring(
+            origin,
+            contract_address: T::AccountId,
+            enable: bool
+        ) -> DispatchResult {
+            let sender = ensure_signed(origin)?;
+            let mut is_owner = false;
+            if <ContractOwner<T>>::contains_key(contract_address.clone()) {
+                let owner = <ContractOwner<T>>::get(&contract_address);
+                is_owner = sender == owner;
+            }
+            ensure!(is_owner, "Only contract owner may call this method");
+
+            <ContractSelfSponsoring<T>>::insert(contract_address, enable);
+            Ok(())
+        }
+
     }
 }
 
@@ -1356,13 +1571,13 @@
         let target_collection = <Collection<T>>::get(collection_id);
 
         match target_collection.mode {
-            CollectionMode::NFT(_) => {
+            CollectionMode::NFT => {
                 <NftItemList<T>>::get(collection_id, item_id).owner == subject
             }
             CollectionMode::Fungible(_) => {
                 <FungibleItemList<T>>::get(collection_id, item_id).owner == subject
             }
-            CollectionMode::ReFungible(_, _) => {
+            CollectionMode::ReFungible(_) => {
                 <ReFungibleItemList<T>>::get(collection_id, item_id)
                     .owner
                     .iter()
@@ -1597,7 +1812,50 @@
         <ApprovedList<T>>::remove(collection_id, (item_id, old_owner));
         Ok(())
     }
+    
+    fn item_exists(
+        collection_id: u64,
+        item_id: u64,
+        mode: &CollectionMode
+    ) -> DispatchResult {
+        match mode {
+            CollectionMode::NFT => ensure!(<NftItemList<T>>::contains_key(collection_id, item_id), "Item does not exists"),
+            CollectionMode::ReFungible(_) => ensure!(<ReFungibleItemList<T>>::contains_key(collection_id, item_id), "Item does not exists"),
+            CollectionMode::Fungible(_) => ensure!(<FungibleItemList<T>>::contains_key(collection_id, item_id), "Item does not exists"),
+            _ => ()
+        };
+        
+        Ok(())
+    }
+
+    fn set_re_fungible_variable_data(
+        collection_id: u64,
+        item_id: u64,
+        data: Vec<u8>
+    ) -> DispatchResult {
+        let mut item = <ReFungibleItemList<T>>::get(collection_id, item_id);
+
+        item.variable_data = data;
 
+        <ReFungibleItemList<T>>::insert(collection_id, item_id, item);
+
+        Ok(())
+    }
+
+    fn set_nft_variable_data(
+        collection_id: u64,
+        item_id: u64,
+        data: Vec<u8>
+    ) -> DispatchResult {
+        let mut item = <NftItemList<T>>::get(collection_id, item_id);
+        
+        item.variable_data = data;
+
+        <NftItemList<T>>::insert(collection_id, item_id, item);
+        
+        Ok(())
+    }
+
     fn init_collection(item: &CollectionType<T::AccountId>) {
         // check params
         assert!(
@@ -1771,11 +2029,11 @@
 /// Require the transactor pay for themselves and maybe include a tip to gain additional priority
 /// in the queue.
 #[derive(Encode, Decode, Clone, Eq, PartialEq)]
-pub struct ChargeTransactionPayment<T: transaction_payment::Trait + Send + Sync>(
-    #[codec(compact)] BalanceOf<T>,
+pub struct ChargeTransactionPayment<T: Trait + Send + Sync>(
+    #[codec(compact)] BalanceOf<T>
 );
 
-impl<T: Trait + transaction_payment::Trait + Send + Sync> sp_std::fmt::Debug
+impl<T: Trait + Send + Sync> sp_std::fmt::Debug
     for ChargeTransactionPayment<T>
 {
     #[cfg(feature = "std")]
@@ -1788,10 +2046,9 @@
     }
 }
 
-impl<T: Trait + transaction_payment::Trait + Send + Sync> ChargeTransactionPayment<T>
+impl<T: Trait + Send + Sync> ChargeTransactionPayment<T>
 where
-    T::Call:
-        Dispatchable<Info = DispatchInfo, PostInfo = PostDispatchInfo> + IsSubType<Module<T>, T>,
+    T::Call: Dispatchable<Info = DispatchInfo, PostInfo = PostDispatchInfo> + IsSubType<Call<T>> + IsSubType<pallet_contracts::Call<T>>,
     BalanceOf<T>: Send + Sync + FixedPointOperand,
 {
     /// utility constructor. Used only in client/factory code.
@@ -1821,15 +2078,16 @@
 
         // Set fee based on call type. Creating collection costs 1 Unique.
         // All other transactions have traditional fees so far
-        let fee = match call.is_sub_type() {
-            Some(Call::create_collection(..)) => <BalanceOf<T>>::from(1_000_000_000),
-            _ => Self::traditional_fee(len, info, tip), // Flat fee model, use only for testing purposes
-                                                        // _ => <BalanceOf<T>>::from(100)
-        };
+        // let fee = match call.is_sub_type() {
+        //     Some(Call::create_collection(..)) => <BalanceOf<T>>::from(1_000_000_000),
+        //     _ => Self::traditional_fee(len, info, tip), // Flat fee model, use only for testing purposes
+        //                                                 // _ => <BalanceOf<T>>::from(100)
+        // };
+        let fee = Self::traditional_fee(len, info, tip);
 
         // Determine who is paying transaction fee based on ecnomic model
         // Parse call to extract collection ID and access collection sponsor
-        let sponsor: T::AccountId = match call.is_sub_type() {
+        let mut sponsor: T::AccountId = match IsSubType::<Call<T>>::is_sub_type(call) {
             Some(Call::create_item(collection_id, _properties, _owner)) => {
                 <Collection<T>>::get(collection_id).sponsor
             }
@@ -1838,7 +2096,7 @@
 
                 // sponsor timeout
                 let sponsor_transfer = match _collection_mode {
-                    CollectionMode::NFT(_) => {
+                    CollectionMode::NFT => {
                         let basket = <NftTransferBasket<T>>::get(collection_id, _item_id);
                         let block_number = <system::Module<T>>::block_number() as T::BlockNumber;
                         let limit_time = basket + ChainLimit::get().nft_sponsor_transfer_timeout.into();
@@ -1872,7 +2130,7 @@
                             true
                         }
                     }
-                    CollectionMode::ReFungible(_, _) => {
+                    CollectionMode::ReFungible(_) => {
                         let basket = <ReFungibleTransferBasket<T>>::get(collection_id, _item_id);
                         let block_number = <system::Module<T>>::block_number() as T::BlockNumber;
                         let limit_time = basket + ChainLimit::get().nft_sponsor_transfer_timeout.into();
@@ -1898,6 +2156,39 @@
             _ => T::AccountId::default(),
         };
 
+        // Sponsor smart contracts
+        sponsor = match IsSubType::<pallet_contracts::Call<T>>::is_sub_type(call) {
+
+            // On instantiation: set the contract owner
+            Some(pallet_contracts::Call::instantiate(_endowment, _gas_limit, code_hash, data)) => {
+
+                let new_contract_address = <T as pallet_contracts::Trait>::DetermineContractAddress::contract_address_for(
+                    code_hash,
+                    &data,
+                    &who,
+                );
+                <ContractOwner<T>>::insert(new_contract_address.clone(), who.clone());
+
+                T::AccountId::default()
+            },
+
+            // When the contract is called, check if the sponsoring is enabled and pay fees from contract endowment if it is
+            Some(pallet_contracts::Call::call(dest, _value, _gas_limit, _data)) => {
+
+                let mut sp = T::AccountId::default();
+                let called_contract: T::AccountId = T::Lookup::lookup((*dest).clone()).unwrap_or(T::AccountId::default());
+                if <ContractSelfSponsoring<T>>::contains_key(called_contract.clone()) {
+                    if <ContractSelfSponsoring<T>>::get(called_contract.clone()) {
+                        sp = called_contract;
+                    }
+                }
+
+                sp
+            },
+
+            _ => sponsor,
+        };
+
         let mut who_pays_fee: T::AccountId = sponsor.clone();
         if sponsor == T::AccountId::default() {
             who_pays_fee = who.clone();
@@ -1924,12 +2215,12 @@
     }
 }
 
-impl<T: Trait + transaction_payment::Trait + Send + Sync> SignedExtension
+
+impl<T: Trait + Send + Sync> SignedExtension
     for ChargeTransactionPayment<T>
 where
     BalanceOf<T>: Send + Sync + From<u64> + FixedPointOperand,
-    T::Call:
-        Dispatchable<Info = DispatchInfo, PostInfo = PostDispatchInfo> + IsSubType<Module<T>, T>,
+    T::Call: Dispatchable<Info = DispatchInfo, PostInfo = PostDispatchInfo> + IsSubType<Call<T>> + IsSubType<pallet_contracts::Call<T>>,
 {
     const IDENTIFIER: &'static str = "ChargeTransactionPayment";
     type AccountId = T::AccountId;
@@ -1947,18 +2238,12 @@
 
     fn validate(
         &self,
-        who: &Self::AccountId,
-        call: &Self::Call,
-        info: &DispatchInfoOf<Self::Call>,
-        len: usize,
+        _who: &Self::AccountId,
+        _call: &Self::Call,
+        _info: &DispatchInfoOf<Self::Call>,
+        _len: usize,
     ) -> TransactionValidity {
-        let (fee, _) = self.withdraw_fee(who, call, info, len)?;
-
-        let mut r = ValidTransaction::default();
-        // NOTE: we probably want to maximize the _fee (of any type) per weight unit_ here, which
-        // will be a bit more than setting the priority to tip. For now, this is enough.
-        r.priority = fee.saturated_into::<TransactionPriority>();
-        Ok(r)
+        Ok(ValidTransaction::default())
     }
 
     fn pre_dispatch(
@@ -2009,4 +2294,5 @@
         Ok(())
     }
 }
+
 // #endregion
modifiedpallets/nft/src/mock.rsdiffbeforeafterboth
--- a/pallets/nft/src/mock.rs
+++ b/pallets/nft/src/mock.rs
@@ -1,20 +1,27 @@
 // Creating mock runtime here
 
 use crate::{Module, Trait};
+
+use pallet_contracts::{
+	ContractAddressFor, TrieId, TrieIdGenerator,
+};
+
 use frame_support::{
     impl_outer_origin, parameter_types,
     weights::{
-        constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight},
-        Weight,
+      //  constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight},
+        Weight, IdentityFee,
     },
 };
 use frame_system as system;
+use transaction_payment;
 use sp_core::H256;
 use sp_runtime::{
     testing::Header,
     traits::{BlakeTwo256, IdentityLookup, Saturating},
     Perbill,
 };
+pub use pallet_balances;
 
 impl_outer_origin! {
     pub enum Origin for Test {}
@@ -35,33 +42,122 @@
 }
 
 impl system::Trait for Test {
-    type Origin = Origin;
-    type Call = ();
-    type Index = u64;
-    type BlockNumber = u64;
-    type Hash = H256;
-    type Hashing = BlakeTwo256;
-    type AccountId = u64;
-    type Lookup = IdentityLookup<Self::AccountId>;
-    type Header = Header;
+	type BaseCallFilter = ();
+	type Origin = Origin;
+	type Call = ();
+	type Index = u64;
+	type BlockNumber = u64;
+	type Hash = H256;
+	type Hashing = BlakeTwo256;
+	type AccountId = u64;
+	type Lookup = IdentityLookup<Self::AccountId>;
+	type Header = Header;
+	type Event = ();
+	type BlockHashCount = BlockHashCount;
+	type MaximumBlockWeight = MaximumBlockWeight;
+	type DbWeight = ();
+	type BlockExecutionWeight = ();
+	type ExtrinsicBaseWeight = ();
+	type MaximumExtrinsicWeight = MaximumBlockWeight;
+	type MaximumBlockLength = MaximumBlockLength;
+	type AvailableBlockRatio = AvailableBlockRatio;
+	type Version = ();
+	type PalletInfo = ();
+	type AccountData = pallet_balances::AccountData<u64>;
+	type OnNewAccount = ();
+	type OnKilledAccount = ();
+	type SystemWeightInfo = ();
+}
+
+parameter_types! {
+	pub const ExistentialDeposit: u64 = 1;
+	pub const MaxLocks: u32 = 50;
+}
+
+type System = frame_system::Module<Test>;
+impl pallet_balances::Trait for Test {
+    type AccountStore = System;
+    type Balance = u64;
+    type DustRemoval = ();
     type Event = ();
-    type BlockHashCount = BlockHashCount;
-    type MaximumBlockWeight = MaximumBlockWeight;
-    type MaximumBlockLength = MaximumBlockLength;
-    type AvailableBlockRatio = AvailableBlockRatio;
-    type BaseCallFilter = ();
-    type DbWeight = RocksDbWeight;
-    type BlockExecutionWeight = BlockExecutionWeight;
-    type ExtrinsicBaseWeight = ExtrinsicBaseWeight;
-    type MaximumExtrinsicWeight = MaximumExtrinsicWeight;
-    type Version = ();
-    type ModuleToIndex = ();
-    type AccountData = ();
-    type OnNewAccount = ();
-    type OnKilledAccount = ();
+	type ExistentialDeposit = ExistentialDeposit;
+	type WeightInfo = ();
+	type MaxLocks = MaxLocks;
+}
+
+parameter_types! {
+	pub const TransactionByteFee: u64 = 1;
+}
+impl transaction_payment::Trait for Test {
+	type Currency = pallet_balances::Module<Test>;
+	type OnTransactionPayment = ();
+	type TransactionByteFee = TransactionByteFee;
+	type WeightToFee = IdentityFee<u64>;
+	type FeeMultiplierUpdate = ();
+}
+
+
+parameter_types! {
+	pub const MinimumPeriod: u64 = 1;
+}
+impl pallet_timestamp::Trait for Test {
+	type Moment = u64;
+	type OnTimestampSet = ();
+	type MinimumPeriod = MinimumPeriod;
+	type WeightInfo = ();
+}
+
+type Timestamp = pallet_timestamp::Module<Test>;
+type Randomness = pallet_randomness_collective_flip::Module<Test>;
+
+parameter_types! {
+	pub const TombstoneDeposit: u64 = 1;
+	pub const RentByteFee: u64 = 1;
+	pub const RentDepositOffset: u64 = 1;
+	pub const SurchargeReward: u64 = 1;
+}
+
+pub struct DummyTrieIdGenerator;
+impl TrieIdGenerator<u64> for DummyTrieIdGenerator {
+	fn trie_id(account_id: &u64) -> TrieId {
+		let new_seed = *account_id + 1;
+		let mut res = vec![];
+		res.extend_from_slice(&new_seed.to_le_bytes());
+		res.extend_from_slice(&account_id.to_le_bytes());
+		res
+	}
+}
+
+pub struct DummyContractAddressFor;
+impl ContractAddressFor<H256, u64> for DummyContractAddressFor {
+	fn contract_address_for(_code_hash: &H256, _data: &[u8], origin: &u64) -> u64 {
+		*origin + 1
+	}
+}
+
+impl pallet_contracts::Trait for Test {
+	type Time = Timestamp;
+	type Randomness = Randomness;
+	type Currency = pallet_balances::Module<Test>;
+	type Event = ();
+	type DetermineContractAddress = DummyContractAddressFor;
+	type TrieIdGenerator = DummyTrieIdGenerator;
+	type RentPayment = ();
+	type SignedClaimHandicap = pallet_contracts::DefaultSignedClaimHandicap;
+	type TombstoneDeposit = TombstoneDeposit;
+	type StorageSizeOffset = pallet_contracts::DefaultStorageSizeOffset;
+	type RentByteFee = RentByteFee;
+	type RentDepositOffset = RentDepositOffset;
+	type SurchargeReward = SurchargeReward;
+	type MaxDepth = pallet_contracts::DefaultMaxDepth;
+	type MaxValueSize = pallet_contracts::DefaultMaxValueSize;
+	type WeightPrice = ();
 }
+
 impl Trait for Test {
-    type Event = ();
+	type Event = ();
+	type WeightInfo = ();
+
 }
 pub type TemplateModule = Module<Test>;
 
modifiedpallets/nft/src/tests.rsdiffbeforeafterboth
--- a/pallets/nft/src/tests.rs
+++ b/pallets/nft/src/tests.rs
@@ -1,21 +1,16 @@
 // Tests to be written here
 use crate::mock::*;
-use crate::{AccessMode, ApprovePermissions, CollectionMode, Ownership, ChainLimits};
+use crate::{AccessMode, ApprovePermissions, CollectionMode, Ownership, ChainLimits, CreateItemData, CreateNftData, CreateFungibleData, CreateReFungibleData};
 use frame_support::{assert_noop, assert_ok};
 use frame_system::{ RawOrigin };
 
-// Use cases tests region
-// #region
-#[test]
-fn create_nft_item() {
-    new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
+fn default_collection_numbers_limit() -> u64 {
+    10
+}
 
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
+fn default_limits() {
+    assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
+            collection_numbers_limit: default_collection_numbers_limit(),
             account_token_ownership_limit: 10,
             collections_admins_limit: 5,
             custom_data_limit: 2048,
@@ -23,24 +18,72 @@
             fungible_sponsor_transfer_timeout: 15,
             refungible_sponsor_transfer_timeout: 15,          
         }));
+}
+
+fn default_nft_data() -> CreateNftData {
+    CreateNftData { const_data: vec![1, 2, 3], variable_data: vec![3, 2, 1] }
+}
+
+fn default_fungible_data () -> CreateFungibleData {
+    CreateFungibleData { }
+}
+
+fn default_re_fungible_data () -> CreateReFungibleData {
+    CreateReFungibleData { const_data: vec![1, 2, 3], variable_data: vec![3, 2, 1] }
+}
+
+fn create_test_collection_for_owner(mode: &CollectionMode, owner: u64, id: u64) -> u64 {
+    let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
+    let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
+    let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
 
-        let origin1 = Origin::signed(1);
-        assert_ok!(TemplateModule::create_collection(
+    let origin1 = Origin::signed(owner);
+    assert_ok!(TemplateModule::create_collection(
             origin1.clone(),
             col_name1.clone(),
             col_desc1.clone(),
             token_prefix1.clone(),
-            mode
+            mode.clone()
         ));
-        assert_eq!(TemplateModule::collection(1).owner, 1);
 
-        assert_ok!(TemplateModule::create_item(
+    let saved_col_name: Vec<u16> = "Test1\0\0".encode_utf16().collect::<Vec<u16>>();
+    let saved_description: Vec<u16> = "TestDescription1\0\0".encode_utf16().collect::<Vec<u16>>();
+    let saved_prefix: Vec<u8> = b"token_prefix1\0\0".to_vec();
+    assert_eq!(TemplateModule::collection(id).owner, owner);
+    assert_eq!(TemplateModule::collection(id).name, saved_col_name);
+    assert_eq!(TemplateModule::collection(id).mode, *mode);
+    assert_eq!(TemplateModule::collection(id).description, saved_description);
+    assert_eq!(TemplateModule::collection(id).token_prefix, saved_prefix);
+    id
+}
+
+fn create_test_collection(mode: &CollectionMode, id: u64) -> u64 {
+    create_test_collection_for_owner(&mode, 1, id)
+}
+
+fn create_test_item(collection_id: u64, data: &CreateItemData) {
+    let origin1 = Origin::signed(1);
+    assert_ok!(TemplateModule::create_item(
             origin1.clone(),
+            collection_id,
             1,
-            [1, 2, 3].to_vec(),
-            1
+            data.clone()
         ));
-        assert_eq!(TemplateModule::nft_item_id(1, 1).data, [1, 2, 3].to_vec());
+
+}
+
+// Use cases tests region
+// #region
+#[test]
+fn create_nft_item() {
+    new_test_ext().execute_with(|| {
+        default_limits();
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
+        
+        let data = default_nft_data();
+        create_test_item(collection_id, &data.clone().into());
+        assert_eq!(TemplateModule::nft_item_id(collection_id, 1).const_data, data.const_data);
+        assert_eq!(TemplateModule::nft_item_id(collection_id, 1).variable_data, data.variable_data);
     });
 }
 
@@ -91,43 +134,21 @@
 #[test]
 fn create_refungible_item() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::ReFungible(2000, 3);
+        default_limits();
+        let collection_id = create_test_collection(&CollectionMode::ReFungible(3), 1);
 
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
-
-        let origin1 = Origin::signed(1);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
-        assert_eq!(TemplateModule::collection(1).owner, 1);
-
-        assert_ok!(TemplateModule::create_item(
-            origin1.clone(),
-            1,
-            [1, 2, 3].to_vec(),
-            1
-        ));
+        let data = default_re_fungible_data();
+        create_test_item(collection_id, &data.clone().into());
+        assert_eq!(
+            TemplateModule::refungible_item_id(collection_id, 1).const_data,
+            data.const_data
+        );
         assert_eq!(
-            TemplateModule::refungible_item_id(1, 1).data,
-            [1, 2, 3].to_vec()
+            TemplateModule::refungible_item_id(collection_id, 1).variable_data,
+            data.variable_data
         );
         assert_eq!(
-            TemplateModule::refungible_item_id(1, 1).owner[0],
+            TemplateModule::refungible_item_id(collection_id, 1).owner[0],
             Ownership {
                 owner: 1,
                 fraction: 1000
@@ -190,38 +211,14 @@
 #[test]
 fn create_fungible_item() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::Fungible(3);
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::Fungible(3), 1);
 
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
+        let data = default_fungible_data();
+        create_test_item(collection_id, &data.into());
 
-        let origin1 = Origin::signed(1);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
-        assert_eq!(TemplateModule::collection(1).owner, 1);
-
-        assert_ok!(TemplateModule::create_item(
-            origin1.clone(),
-            1,
-            [].to_vec(),
-            1
-        ));
-        assert_eq!(TemplateModule::fungible_item_id(1, 1).owner, 1);
+        assert_eq!(TemplateModule::fungible_item_id(collection_id, 1).owner, 1);
     });
 }
 
@@ -273,38 +270,16 @@
 #[test]
 fn transfer_fungible_item() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::Fungible(3);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::Fungible(3), 1);
 
         let origin1 = Origin::signed(1);
         let origin2 = Origin::signed(2);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
-        assert_eq!(TemplateModule::collection(1).owner, 1);
 
-        assert_ok!(TemplateModule::create_item(
-            origin1.clone(),
-            1,
-            [].to_vec(),
-            1
-        ));
+        let data = default_fungible_data();
+        create_test_item(collection_id, &data.into());
+
         assert_eq!(TemplateModule::fungible_item_id(1, 1).owner, 1);
         assert_eq!(TemplateModule::balance_count(1, 1), 1000);
         assert_eq!(TemplateModule::address_tokens(1, 1), [1]);
@@ -315,7 +290,7 @@
         assert_eq!(TemplateModule::fungible_item_id(1, 1).value, 1000);
         assert_eq!(TemplateModule::balance_count(1, 1), 0);
         assert_eq!(TemplateModule::balance_count(1, 2), 1000);
-        assert_eq!(TemplateModule::address_tokens(1, 1), []);
+        // assert_eq!(TemplateModule::address_tokens(1, 1), []);
         assert_eq!(TemplateModule::address_tokens(1, 2), [1]);
 
         // split item scenario
@@ -341,44 +316,25 @@
 #[test]
 fn transfer_refungible_item() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::ReFungible(2000, 3);
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::ReFungible(3), 1);
 
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
+        let data = default_re_fungible_data();
+        create_test_item(collection_id, &data.clone().into());
 
         let origin1 = Origin::signed(1);
         let origin2 = Origin::signed(2);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
-        assert_eq!(TemplateModule::collection(1).owner, 1);
-
-        assert_ok!(TemplateModule::create_item(
-            origin1.clone(),
-            1,
-            [1, 2, 3].to_vec(),
-            1
-        ));
         assert_eq!(
-            TemplateModule::refungible_item_id(1, 1).data,
-            [1, 2, 3].to_vec()
+            TemplateModule::refungible_item_id(collection_id, 1).const_data,
+            data.const_data
+        );
+        assert_eq!(
+            TemplateModule::refungible_item_id(collection_id, 1).variable_data,
+            data.variable_data
         );
         assert_eq!(
-            TemplateModule::refungible_item_id(1, 1).owner[0],
+            TemplateModule::refungible_item_id(collection_id, 1).owner[0],
             Ownership {
                 owner: 1,
                 fraction: 1000
@@ -398,7 +354,7 @@
         );
         assert_eq!(TemplateModule::balance_count(1, 1), 0);
         assert_eq!(TemplateModule::balance_count(1, 2), 1000);
-        assert_eq!(TemplateModule::address_tokens(1, 1), []);
+        // assert_eq!(TemplateModule::address_tokens(1, 1), []);
         assert_eq!(TemplateModule::address_tokens(1, 2), [1]);
 
         // split item scenario
@@ -448,47 +404,22 @@
 #[test]
 fn transfer_nft_item() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
-        let origin1 = Origin::signed(1);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
-        assert_eq!(TemplateModule::collection(1).owner, 1);
-
-        assert_ok!(TemplateModule::create_item(
-            origin1.clone(),
-            1,
-            [1, 2, 3].to_vec(),
-            1
-        ));
-        assert_eq!(TemplateModule::nft_item_id(1, 1).data, [1, 2, 3].to_vec());
+        let data = default_nft_data();
+        create_test_item(collection_id, &data.into());
         assert_eq!(TemplateModule::balance_count(1, 1), 1);
         assert_eq!(TemplateModule::address_tokens(1, 1), [1]);
 
+        let origin1 = Origin::signed(1);
         // default scenario
         assert_ok!(TemplateModule::transfer(origin1.clone(), 2, 1, 1, 1000));
         assert_eq!(TemplateModule::nft_item_id(1, 1).owner, 2);
         assert_eq!(TemplateModule::balance_count(1, 1), 0);
         assert_eq!(TemplateModule::balance_count(1, 2), 1);
-        assert_eq!(TemplateModule::address_tokens(1, 1), []);
+        // assert_eq!(TemplateModule::address_tokens(1, 1), []);
         assert_eq!(TemplateModule::address_tokens(1, 2), [1]);
     });
 }
@@ -496,39 +427,65 @@
 #[test]
 fn nft_approve_and_transfer_from() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
+        let data = default_nft_data();
+        create_test_item(collection_id, &data.into());
 
         let origin1 = Origin::signed(1);
         let origin2 = Origin::signed(2);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
-        assert_eq!(TemplateModule::collection(1).owner, 1);
 
-        assert_ok!(TemplateModule::create_item(
-            origin1.clone(),
+        assert_eq!(TemplateModule::balance_count(1, 1), 1);
+        assert_eq!(TemplateModule::address_tokens(1, 1), [1]);
+
+        // neg transfer
+        assert_noop!(TemplateModule::transfer_from(
+            origin2.clone(),
             1,
-            [1, 2, 3].to_vec(),
+            2,
+            1,
+            1,
+            1), "Only item owner, collection owner and admins can modify items");
+
+        // do approve
+        assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));
+        assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 1);
+        assert_eq!(
+            TemplateModule::approved(1, (1, 1))[0],
+            ApprovePermissions {
+                approved: 2,
+                amount: 100000000
+            }
+        );
+
+        assert_ok!(TemplateModule::transfer_from(
+            origin2.clone(),
+            1,
+            2,
+            1,
+            1,
             1
         ));
-        assert_eq!(TemplateModule::nft_item_id(1, 1).data, [1, 2, 3].to_vec());
+        assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 0);
+    });
+}
+
+#[test]
+fn nft_approve_and_transfer_from_white_list() {
+    new_test_ext().execute_with(|| {
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
+
+        let origin1 = Origin::signed(1);
+        let origin2 = Origin::signed(2);
+
+        let data = default_nft_data();
+        create_test_item(collection_id, &data.clone().into());
+
+        assert_eq!(TemplateModule::nft_item_id(1, 1).const_data, data.const_data);
         assert_eq!(TemplateModule::balance_count(1, 1), 1);
         assert_eq!(TemplateModule::address_tokens(1, 1), [1]);
 
@@ -574,49 +531,16 @@
 #[test]
 fn refungible_approve_and_transfer_from() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::ReFungible(2000, 3);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
-
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::ReFungible(3), 1);
+        
         let origin1 = Origin::signed(1);
         let origin2 = Origin::signed(2);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
-        assert_eq!(TemplateModule::collection(1).owner, 1);
 
-        assert_ok!(TemplateModule::create_item(
-            origin1.clone(),
-            1,
-            [1, 2, 3].to_vec(),
-            1
-        ));
-        assert_eq!(
-            TemplateModule::refungible_item_id(1, 1).data,
-            [1, 2, 3].to_vec()
-        );
-        assert_eq!(
-            TemplateModule::refungible_item_id(1, 1).owner[0],
-            Ownership {
-                owner: 1,
-                fraction: 1000
-            }
-        );
+        let data = default_re_fungible_data();
+        create_test_item(collection_id, &data.into());
+
         assert_eq!(TemplateModule::balance_count(1, 1), 1000);
         assert_eq!(TemplateModule::address_tokens(1, 1), [1]);
 
@@ -674,39 +598,16 @@
 #[test]
 fn fungible_approve_and_transfer_from() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::Fungible(3);
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::Fungible(3), 1);
+        
+        let data = default_fungible_data();
+        create_test_item(collection_id, &data.into());
 
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
-
         let origin1 = Origin::signed(1);
         let origin2 = Origin::signed(2);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
-        assert_eq!(TemplateModule::collection(1).owner, 1);
 
-        assert_ok!(TemplateModule::create_item(
-            origin1.clone(),
-            1,
-            [].to_vec(),
-            1
-        ));
-        assert_eq!(TemplateModule::fungible_item_id(1, 1).owner, 1);
         assert_eq!(TemplateModule::balance_count(1, 1), 1000);
         assert_eq!(TemplateModule::address_tokens(1, 1), [1]);
 
@@ -770,7 +671,7 @@
         ));
         assert_eq!(TemplateModule::balance_count(1, 1), 0);
         assert_eq!(TemplateModule::balance_count(1, 3), 1000);
-        assert_eq!(TemplateModule::address_tokens(1, 1), []);
+        // assert_eq!(TemplateModule::address_tokens(1, 1), []);
         assert_eq!(TemplateModule::address_tokens(1, 3), [2]);
 
         assert_eq!(TemplateModule::approved(1, (1, 1)).len(), 0);
@@ -780,103 +681,44 @@
 #[test]
 fn change_collection_owner() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
-
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
+        
         let origin1 = Origin::signed(1);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
         assert_ok!(TemplateModule::change_collection_owner(
             origin1.clone(),
-            1,
+            collection_id,
             2
         ));
-        assert_eq!(TemplateModule::collection(1).owner, 2);
+        assert_eq!(TemplateModule::collection(collection_id).owner, 2);
     });
 }
 
 #[test]
 fn destroy_collection() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
-
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
+        
         let origin1 = Origin::signed(1);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
-        assert_ok!(TemplateModule::destroy_collection(origin1.clone(), 1));
+        assert_ok!(TemplateModule::destroy_collection(origin1.clone(), collection_id));
     });
 }
 
 #[test]
 fn burn_nft_item() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
         let origin1 = Origin::signed(1);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
-        assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));
-        assert_ok!(TemplateModule::create_item(
-            origin1.clone(),
-            1,
-            [1, 2, 3].to_vec(),
-            1
-        ));
-
-        assert_eq!(TemplateModule::nft_item_id(1, 1).data, [1, 2, 3].to_vec());
+        assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), collection_id, 2));
+        
+        let data = default_nft_data();
+        create_test_item(collection_id, &data.into());
 
         // check balance (collection with id = 1, user id = 1)
         assert_eq!(TemplateModule::balance_count(1, 1), 1);
@@ -895,36 +737,15 @@
 #[test]
 fn burn_fungible_item() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::Fungible(3);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
-
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::Fungible(3), 1);
+        
         let origin1 = Origin::signed(1);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
-        assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));
-        assert_ok!(TemplateModule::create_item(
-            origin1.clone(),
-            1,
-            [].to_vec(),
-            1
-        ));
+        assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), collection_id, 2));
+        
+        let data = default_fungible_data();
+        create_test_item(collection_id, &data.into());
 
         // check balance (collection with id = 1, user id = 1)
         assert_eq!(TemplateModule::balance_count(1, 1), 1000);
@@ -943,55 +764,27 @@
 #[test]
 fn burn_refungible_item() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::ReFungible(200, 3);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
-
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::ReFungible(3), 1);
         let origin1 = Origin::signed(1);
-        let origin2 = Origin::signed(2);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
 
         assert_ok!(TemplateModule::set_mint_permission(
             origin1.clone(),
-            1,
+            collection_id,
             true
         ));
         assert_ok!(TemplateModule::set_public_access_mode(
             origin1.clone(),
-            1,
+            collection_id,
             AccessMode::WhiteList
         ));
         assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 1));
 
         assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));
-        assert_ok!(TemplateModule::create_item(
-            origin2.clone(),
-            1,
-            [1, 2, 3].to_vec(),
-            1
-        ));
-
-        assert_eq!(
-            TemplateModule::refungible_item_id(1, 1).data,
-            [1, 2, 3].to_vec()
-        );
+        
+        let data = default_re_fungible_data();
+        create_test_item(collection_id, &data.into());
 
         // check balance (collection with id = 1, user id = 2)
         assert_eq!(TemplateModule::balance_count(1, 1), 1000);
@@ -1010,110 +803,38 @@
 #[test]
 fn add_collection_admin() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
-
+        default_limits();
+        
+        let collection1_id = create_test_collection_for_owner(&CollectionMode::NFT, 1, 1);
+        create_test_collection_for_owner(&CollectionMode::NFT, 2, 2);
+        create_test_collection_for_owner(&CollectionMode::NFT, 3, 3);
+        
         let origin1 = Origin::signed(1);
-        let origin2 = Origin::signed(2);
-        let origin3 = Origin::signed(3);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode.clone()
-        ));
-        assert_ok!(TemplateModule::create_collection(
-            origin2.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode.clone()
-        ));
-        assert_ok!(TemplateModule::create_collection(
-            origin3.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode.clone()
-        ));
-
-        assert_eq!(TemplateModule::collection(1).owner, 1);
-        assert_eq!(TemplateModule::collection(2).owner, 2);
-        assert_eq!(TemplateModule::collection(3).owner, 3);
 
         // collection admin
-        assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));
-        assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 3));
+        assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), collection1_id, 2));
+        assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), collection1_id, 3));
 
-        assert_eq!(TemplateModule::admin_list_collection(1).contains(&2), true);
-        assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), true);
+        assert_eq!(TemplateModule::admin_list_collection(collection1_id).contains(&2), true);
+        assert_eq!(TemplateModule::admin_list_collection(collection1_id).contains(&3), true);
     });
 }
 
 #[test]
 fn remove_collection_admin() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
+        default_limits();
+        
+        let collection1_id = create_test_collection_for_owner(&CollectionMode::NFT, 1, 1);
+        create_test_collection_for_owner(&CollectionMode::NFT, 2, 2);
+        create_test_collection_for_owner(&CollectionMode::NFT, 3, 3);
 
         let origin1 = Origin::signed(1);
         let origin2 = Origin::signed(2);
-        let origin3 = Origin::signed(3);
 
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
-
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode.clone()
-        ));
-        assert_ok!(TemplateModule::create_collection(
-            origin2.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode.clone()
-        ));
-        assert_ok!(TemplateModule::create_collection(
-            origin3.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode.clone()
-        ));
-
-        assert_eq!(TemplateModule::collection(1).owner, 1);
-        assert_eq!(TemplateModule::collection(2).owner, 2);
-        assert_eq!(TemplateModule::collection(3).owner, 3);
-
         // collection admin
-        assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));
-        assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 3));
+        assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), collection1_id, 2));
+        assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), collection1_id, 3));
 
         assert_eq!(TemplateModule::admin_list_collection(1).contains(&2), true);
         assert_eq!(TemplateModule::admin_list_collection(1).contains(&3), true);
@@ -1131,125 +852,48 @@
 #[test]
 fn balance_of() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let nft_mode: CollectionMode = CollectionMode::NFT(2000);
-        let furg_mode: CollectionMode = CollectionMode::Fungible(3);
-        let refung_mode: CollectionMode = CollectionMode::ReFungible(2000, 3);
-
-        let origin1 = Origin::signed(1);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
-
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            nft_mode.clone()
-        ));
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            furg_mode.clone()
-        ));
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            refung_mode.clone()
-        ));
-
-        assert_eq!(TemplateModule::collection(1).owner, 1);
-        assert_eq!(TemplateModule::collection(2).owner, 1);
-        assert_eq!(TemplateModule::collection(3).owner, 1);
-
+        default_limits();
+        
+        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);
+        
         // check balance before
-        assert_eq!(TemplateModule::balance_count(1, 1), 0);
-        assert_eq!(TemplateModule::balance_count(2, 1), 0);
-        assert_eq!(TemplateModule::balance_count(3, 1), 0);
-
-        // create item
-        assert_ok!(TemplateModule::create_item(
-            origin1.clone(),
-            1,
-            [1, 1, 1].to_vec(),
-            1
-        ));
+        assert_eq!(TemplateModule::balance_count(nft_collection_id, 1), 0);
+        assert_eq!(TemplateModule::balance_count(fungible_collection_id, 1), 0);
+        assert_eq!(TemplateModule::balance_count(re_fungible_collection_id, 1), 0);
 
-        assert_ok!(TemplateModule::create_item(
-            origin1.clone(),
-            2,
-            [].to_vec(),
-            1
-        ));
-
-        assert_ok!(TemplateModule::create_item(
-            origin1.clone(),
-            3,
-            [1, 1, 1].to_vec(),
-            1
-        ));
+        let nft_data = default_nft_data();
+        create_test_item(nft_collection_id, &nft_data.into());
+        
+        let fungible_data = default_fungible_data();
+        create_test_item(fungible_collection_id, &fungible_data.into());
+        
+        let re_fungible_data = default_re_fungible_data();
+        create_test_item(re_fungible_collection_id, &re_fungible_data.into());
 
         // check balance (collection with id = 1, user id = 1)
-        assert_eq!(TemplateModule::balance_count(1, 1), 1);
-        assert_eq!(TemplateModule::balance_count(2, 1), 1000);
-        assert_eq!(TemplateModule::balance_count(3, 1), 1000);
-        assert_eq!(TemplateModule::nft_item_id(1, 1).owner, 1);
-        assert_eq!(TemplateModule::fungible_item_id(2, 1).owner, 1);
-        assert_eq!(TemplateModule::refungible_item_id(3, 1).owner[0].owner, 1);
+        assert_eq!(TemplateModule::balance_count(nft_collection_id, 1), 1);
+        assert_eq!(TemplateModule::balance_count(fungible_collection_id, 1), 1000);
+        assert_eq!(TemplateModule::balance_count(re_fungible_collection_id, 1), 1000);
+        assert_eq!(TemplateModule::nft_item_id(nft_collection_id, 1).owner, 1);
+        assert_eq!(TemplateModule::fungible_item_id(fungible_collection_id, 1).owner, 1);
+        assert_eq!(TemplateModule::refungible_item_id(re_fungible_collection_id, 1).owner[0].owner, 1);
     });
 }
 
 #[test]
 fn approve() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let nft_mode: CollectionMode = CollectionMode::NFT(2000);
-        let origin1 = Origin::signed(1);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
-
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            nft_mode.clone()
-        ));
-
-        assert_eq!(TemplateModule::collection(1).owner, 1);
-
-        // create item
-        assert_ok!(TemplateModule::create_item(
-            origin1.clone(),
-            1,
-            [1, 1, 1].to_vec(),
-            1
-        ));
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
+        
+        let data = default_nft_data();
+        create_test_item(collection_id, &data.into());
 
+        let origin1 = Origin::signed(1);
+        
         // approve
         assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));
         assert_eq!(TemplateModule::approved(1, (1, 1))[0].approved, 2);
@@ -1259,40 +903,14 @@
 #[test]
 fn transfer_from() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
         let origin1 = Origin::signed(1);
         let origin2 = Origin::signed(2);
 
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
-
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
-
-        assert_eq!(TemplateModule::collection(1).owner, 1);
-
-        // create item
-        assert_ok!(TemplateModule::create_item(
-            origin1.clone(),
-            1,
-            [1, 1, 1].to_vec(),
-            1
-        ));
+        let data = default_nft_data();
+        create_test_item(collection_id, &data.into());
 
         // approve
         assert_ok!(TemplateModule::approve(origin1.clone(), 2, 1, 1));
@@ -1335,99 +953,41 @@
 #[test]
 fn owner_can_add_address_to_white_list() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
-        let origin1 = Origin::signed(1);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
-
-        assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));
-        assert_eq!(TemplateModule::white_list(1)[0], 2);
+        let origin1 = Origin::signed(1);
+        assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), collection_id, 2));
+        assert_eq!(TemplateModule::white_list(collection_id)[0], 2);
     });
 }
 
 #[test]
 fn admin_can_add_address_to_white_list() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
         let origin1 = Origin::signed(1);
         let origin2 = Origin::signed(2);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
 
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
-
-        assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));
-        assert_ok!(TemplateModule::add_to_white_list(origin2.clone(), 1, 3));
-        assert_eq!(TemplateModule::white_list(1)[0], 3);
+        assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), collection_id, 2));
+        assert_ok!(TemplateModule::add_to_white_list(origin2.clone(), collection_id, 3));
+        assert_eq!(TemplateModule::white_list(collection_id)[0], 3);
     });
 }
 
 #[test]
 fn nonprivileged_user_cannot_add_address_to_white_list() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
-        let origin1 = Origin::signed(1);
-        let origin2 = Origin::signed(2);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
-
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
+        let origin2 = Origin::signed(2);
         assert_noop!(
-            TemplateModule::add_to_white_list(origin2.clone(), 1, 3),
+            TemplateModule::add_to_white_list(origin2.clone(), collection_id, 3),
             "You do not have permissions to modify this collection"
         );
     });
@@ -1436,17 +996,9 @@
 #[test]
 fn nobody_can_add_address_to_white_list_of_nonexisting_collection() {
     new_test_ext().execute_with(|| {
+        default_limits();
+
         let origin1 = Origin::signed(1);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
 
         assert_noop!(
             TemplateModule::add_to_white_list(origin1.clone(), 1, 2),
@@ -1458,33 +1010,14 @@
 #[test]
 fn nobody_can_add_address_to_white_list_of_deleted_collection() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
-        let origin1 = Origin::signed(1);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
-
-        assert_ok!(TemplateModule::destroy_collection(origin1.clone(), 1));
+        let origin1 = Origin::signed(1);
+        assert_ok!(TemplateModule::destroy_collection(origin1.clone(), collection_id));
         assert_noop!(
-            TemplateModule::add_to_white_list(origin1.clone(), 1, 2),
+            TemplateModule::add_to_white_list(origin1.clone(), collection_id, 2),
             "This collection does not exist"
         );
     });
@@ -1494,166 +1027,81 @@
 #[test]
 fn address_is_already_added_to_white_list() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
         let origin1 = Origin::signed(1);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
-
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
-
-        assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));
-        assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));
-        assert_eq!(TemplateModule::white_list(1)[0], 2);
-        assert_eq!(TemplateModule::white_list(1).len(), 1);
+        
+        assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), collection_id, 2));
+        assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), collection_id, 2));
+        assert_eq!(TemplateModule::white_list(collection_id)[0], 2);
+        assert_eq!(TemplateModule::white_list(collection_id).len(), 1);
     });
 }
 
 #[test]
 fn owner_can_remove_address_from_white_list() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
-        let origin1 = Origin::signed(1);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
-
-        assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));
+        let origin1 = Origin::signed(1);
+        assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), collection_id, 2));
         assert_ok!(TemplateModule::remove_from_white_list(
             origin1.clone(),
-            1,
+            collection_id,
             2
         ));
-        assert_eq!(TemplateModule::white_list(1).len(), 0);
+        assert_eq!(TemplateModule::white_list(collection_id).len(), 0);
     });
 }
 
 #[test]
 fn admin_can_remove_address_from_white_list() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
         let origin1 = Origin::signed(1);
         let origin2 = Origin::signed(2);
 
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
-
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
-
-        assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));
+        assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), collection_id, 2));
 
-        assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 3));
+        assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), collection_id, 3));
         assert_ok!(TemplateModule::remove_from_white_list(
             origin2.clone(),
-            1,
+            collection_id,
             3
         ));
-        assert_eq!(TemplateModule::white_list(1).len(), 0);
+        assert_eq!(TemplateModule::white_list(collection_id).len(), 0);
     });
 }
 
 #[test]
 fn nonprivileged_user_cannot_remove_address_from_white_list() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
         let origin1 = Origin::signed(1);
         let origin2 = Origin::signed(2);
 
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
-
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
-
-        assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));
+        assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), collection_id, 2));
         assert_noop!(
-            TemplateModule::remove_from_white_list(origin2.clone(), 1, 2),
+            TemplateModule::remove_from_white_list(origin2.clone(), collection_id, 2),
             "You do not have permissions to modify this collection"
         );
-        assert_eq!(TemplateModule::white_list(1)[0], 2);
+        assert_eq!(TemplateModule::white_list(collection_id)[0], 2);
     });
 }
 
 #[test]
 fn nobody_can_remove_address_from_white_list_of_nonexisting_collection() {
     new_test_ext().execute_with(|| {
+        default_limits();
         let origin1 = Origin::signed(1);
 
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
-
         assert_noop!(
             TemplateModule::remove_from_white_list(origin1.clone(), 1, 2),
             "This collection does not exist"
@@ -1664,38 +1112,19 @@
 #[test]
 fn nobody_can_remove_address_from_white_list_of_deleted_collection() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
         let origin1 = Origin::signed(1);
         let origin2 = Origin::signed(2);
 
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
-
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
-
-        assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));
-        assert_ok!(TemplateModule::destroy_collection(origin1.clone(), 1));
+        assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), collection_id, 2));
+        assert_ok!(TemplateModule::destroy_collection(origin1.clone(), collection_id));
         assert_noop!(
-            TemplateModule::remove_from_white_list(origin2.clone(), 1, 2),
+            TemplateModule::remove_from_white_list(origin2.clone(), collection_id, 2),
             "This collection does not exist"
         );
-        assert_eq!(TemplateModule::white_list(1).len(), 0);
+        assert_eq!(TemplateModule::white_list(collection_id).len(), 0);
     });
 }
 
@@ -1703,42 +1132,23 @@
 #[test]
 fn address_is_already_removed_from_white_list() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
         let origin1 = Origin::signed(1);
 
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
-
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
-
-        assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));
+        assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), collection_id, 2));
         assert_ok!(TemplateModule::remove_from_white_list(
             origin1.clone(),
-            1,
+            collection_id,
             2
         ));
         assert_ok!(TemplateModule::remove_from_white_list(
             origin1.clone(),
-            1,
+            collection_id,
             2
         ));
-        assert_eq!(TemplateModule::white_list(1).len(), 0);
+        assert_eq!(TemplateModule::white_list(collection_id).len(), 0);
     });
 }
 
@@ -1746,44 +1156,21 @@
 #[test]
 fn white_list_test_1() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
         let origin1 = Origin::signed(1);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
-        assert_eq!(TemplateModule::collection(1).owner, 1);
-
-        assert_ok!(TemplateModule::create_item(
-            origin1.clone(),
-            1,
-            [1, 2, 3].to_vec(),
-            1
-        ));
+        
+        let data = default_nft_data();
+        create_test_item(collection_id, &data.into());
 
         assert_ok!(TemplateModule::set_public_access_mode(
             origin1.clone(),
-            1,
+            collection_id,
             AccessMode::WhiteList
         ));
-        assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));
+        assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), collection_id, 2));
 
         assert_noop!(
             TemplateModule::transfer(origin1.clone(), 3, 1, 1, 1),
@@ -1795,41 +1182,17 @@
 #[test]
 fn white_list_test_2() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
-
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
         let origin1 = Origin::signed(1);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
-        assert_eq!(TemplateModule::collection(1).owner, 1);
-
-        assert_ok!(TemplateModule::create_item(
-            origin1.clone(),
-            1,
-            [1, 2, 3].to_vec(),
-            1
-        ));
+        
+        let data = default_nft_data();
+        create_test_item(collection_id, &data.into());
 
         assert_ok!(TemplateModule::set_public_access_mode(
             origin1.clone(),
-            1,
+            collection_id,
             AccessMode::WhiteList
         ));
         assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 1));
@@ -1856,41 +1219,18 @@
 #[test]
 fn white_list_test_3() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
         let origin1 = Origin::signed(1);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
-        assert_eq!(TemplateModule::collection(1).owner, 1);
+        
+        let data = default_nft_data();
+        create_test_item(collection_id, &data.into());
 
-        assert_ok!(TemplateModule::create_item(
-            origin1.clone(),
-            1,
-            [1, 2, 3].to_vec(),
-            1
-        ));
-
         assert_ok!(TemplateModule::set_public_access_mode(
             origin1.clone(),
-            1,
+            collection_id,
             AccessMode::WhiteList
         ));
         assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 1));
@@ -1905,45 +1245,22 @@
 #[test]
 fn white_list_test_4() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
         let origin1 = Origin::signed(1);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
-        assert_eq!(TemplateModule::collection(1).owner, 1);
 
-        assert_ok!(TemplateModule::create_item(
-            origin1.clone(),
-            1,
-            [1, 2, 3].to_vec(),
-            1
-        ));
+        let data = default_nft_data();
+        create_test_item(collection_id, &data.into());
 
         assert_ok!(TemplateModule::set_public_access_mode(
             origin1.clone(),
-            1,
+            collection_id,
             AccessMode::WhiteList
         ));
-        assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 1));
-        assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));
+        assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), collection_id, 1));
+        assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), collection_id, 2));
 
         // do approve
         assert_ok!(TemplateModule::approve(origin1.clone(), 1, 1, 1));
@@ -1951,7 +1268,7 @@
 
         assert_ok!(TemplateModule::remove_from_white_list(
             origin1.clone(),
-            1,
+            collection_id,
             2
         ));
 
@@ -1966,41 +1283,18 @@
 #[test]
 fn white_list_test_5() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
         let origin1 = Origin::signed(1);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
-        assert_eq!(TemplateModule::collection(1).owner, 1);
 
-        assert_ok!(TemplateModule::create_item(
-            origin1.clone(),
-            1,
-            [1, 2, 3].to_vec(),
-            1
-        ));
+        let data = default_nft_data();
+        create_test_item(collection_id, &data.into());
 
         assert_ok!(TemplateModule::set_public_access_mode(
             origin1.clone(),
-            1,
+            collection_id,
             AccessMode::WhiteList
         ));
         assert_noop!(
@@ -2014,32 +1308,14 @@
 #[test]
 fn white_list_test_6() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
         let origin1 = Origin::signed(1);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
         assert_ok!(TemplateModule::set_public_access_mode(
             origin1.clone(),
-            1,
+            collection_id,
             AccessMode::WhiteList
         ));
 
@@ -2056,45 +1332,22 @@
 #[test]
 fn white_list_test_7() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
-
+        let data = default_nft_data();
+        create_test_item(collection_id, &data.into());
+        
         let origin1 = Origin::signed(1);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
-        assert_eq!(TemplateModule::collection(1).owner, 1);
 
-        assert_ok!(TemplateModule::create_item(
-            origin1.clone(),
-            1,
-            [1, 2, 3].to_vec(),
-            1
-        ));
-
         assert_ok!(TemplateModule::set_public_access_mode(
             origin1.clone(),
-            1,
+            collection_id,
             AccessMode::WhiteList
         ));
-        assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 1));
-        assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));
+        assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), collection_id, 1));
+        assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), collection_id, 2));
 
         assert_ok!(TemplateModule::transfer(origin1.clone(), 2, 1, 1, 1));
     });
@@ -2103,45 +1356,22 @@
 #[test]
 fn white_list_test_8() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
+        let data = default_nft_data();
+        create_test_item(collection_id, &data.into());
+        
         let origin1 = Origin::signed(1);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
-        assert_eq!(TemplateModule::collection(1).owner, 1);
 
-        assert_ok!(TemplateModule::create_item(
-            origin1.clone(),
-            1,
-            [1, 2, 3].to_vec(),
-            1
-        ));
-
         assert_ok!(TemplateModule::set_public_access_mode(
             origin1.clone(),
-            1,
+            collection_id,
             AccessMode::WhiteList
         ));
-        assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 1));
-        assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));
+        assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), collection_id, 1));
+        assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), collection_id, 2));
 
         // do approve
         assert_ok!(TemplateModule::approve(origin1.clone(), 1, 1, 1));
@@ -2162,47 +1392,24 @@
 #[test]
 fn white_list_test_9() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
-
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
         let origin1 = Origin::signed(1);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
 
         assert_ok!(TemplateModule::set_public_access_mode(
             origin1.clone(),
-            1,
+            collection_id,
             AccessMode::WhiteList
         ));
         assert_ok!(TemplateModule::set_mint_permission(
             origin1.clone(),
-            1,
+            collection_id,
             false
         ));
 
-        assert_ok!(TemplateModule::create_item(
-            origin1.clone(),
-            1,
-            [1, 2, 3].to_vec(),
-            1
-        ));
+        let data = default_nft_data();
+        create_test_item(collection_id, &data.into());
     });
 }
 
@@ -2210,49 +1417,31 @@
 #[test]
 fn white_list_test_10() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
         let origin1 = Origin::signed(1);
         let origin2 = Origin::signed(2);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
 
         assert_ok!(TemplateModule::set_public_access_mode(
             origin1.clone(),
-            1,
+            collection_id,
             AccessMode::WhiteList
         ));
         assert_ok!(TemplateModule::set_mint_permission(
             origin1.clone(),
-            1,
+            collection_id,
             false
         ));
 
-        assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));
+        assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), collection_id, 2));
 
         assert_ok!(TemplateModule::create_item(
             origin2.clone(),
-            1,
-            [1, 2, 3].to_vec(),
-            2
+            collection_id,
+            2,
+            default_nft_data().into()
         ));
     });
 }
@@ -2261,46 +1450,28 @@
 #[test]
 fn white_list_test_11() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
         let origin1 = Origin::signed(1);
         let origin2 = Origin::signed(2);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
 
         assert_ok!(TemplateModule::set_public_access_mode(
             origin1.clone(),
-            1,
+            collection_id,
             AccessMode::WhiteList
         ));
         assert_ok!(TemplateModule::set_mint_permission(
             origin1.clone(),
-            1,
+            collection_id,
             false
         ));
-        assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));
+        assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), collection_id, 2));
 
         assert_noop!(
-            TemplateModule::create_item(origin2.clone(), 1, [1, 2, 3].to_vec(), 2),
-            "Collection is not in mint mode"
+            TemplateModule::create_item(origin2.clone(), 1, 2, default_nft_data().into()),
+            "Public minting is not allowed for this collection."
         );
     });
 }
@@ -2309,45 +1480,27 @@
 #[test]
 fn white_list_test_12() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
         let origin1 = Origin::signed(1);
         let origin2 = Origin::signed(2);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
 
         assert_ok!(TemplateModule::set_public_access_mode(
             origin1.clone(),
-            1,
+            collection_id,
             AccessMode::WhiteList
         ));
         assert_ok!(TemplateModule::set_mint_permission(
             origin1.clone(),
-            1,
+            collection_id,
             false
         ));
 
         assert_noop!(
-            TemplateModule::create_item(origin2.clone(), 1, [1, 2, 3].to_vec(), 2),
-            "Collection is not in mint mode"
+            TemplateModule::create_item(origin2.clone(), 1, 2, default_nft_data().into()),
+            "Public minting is not allowed for this collection."
         );
     });
 }
@@ -2356,47 +1509,25 @@
 #[test]
 fn white_list_test_13() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
         let origin1 = Origin::signed(1);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
 
         assert_ok!(TemplateModule::set_public_access_mode(
             origin1.clone(),
-            1,
+            collection_id,
             AccessMode::WhiteList
         ));
         assert_ok!(TemplateModule::set_mint_permission(
             origin1.clone(),
-            1,
+            collection_id,
             true
         ));
 
-        assert_ok!(TemplateModule::create_item(
-            origin1.clone(),
-            1,
-            [1, 2, 3].to_vec(),
-            1
-        ));
+        let data = default_nft_data();
+        create_test_item(collection_id, &data.into());
     });
 }
 
@@ -2404,49 +1535,31 @@
 #[test]
 fn white_list_test_14() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
         let origin1 = Origin::signed(1);
         let origin2 = Origin::signed(2);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
 
         assert_ok!(TemplateModule::set_public_access_mode(
             origin1.clone(),
-            1,
+            collection_id,
             AccessMode::WhiteList
         ));
         assert_ok!(TemplateModule::set_mint_permission(
             origin1.clone(),
-            1,
+            collection_id,
             true
         ));
 
-        assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));
+        assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), collection_id, 2));
 
         assert_ok!(TemplateModule::create_item(
             origin2.clone(),
             1,
-            [1, 2, 3].to_vec(),
-            2
+            2,
+            default_nft_data().into()
         ));
     });
 }
@@ -2455,44 +1568,26 @@
 #[test]
 fn white_list_test_15() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
         let origin1 = Origin::signed(1);
         let origin2 = Origin::signed(2);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
 
         assert_ok!(TemplateModule::set_public_access_mode(
             origin1.clone(),
-            1,
+            collection_id,
             AccessMode::WhiteList
         ));
         assert_ok!(TemplateModule::set_mint_permission(
             origin1.clone(),
-            1,
+            collection_id,
             true
         ));
 
         assert_noop!(
-            TemplateModule::create_item(origin2.clone(), 1, [1, 2, 3].to_vec(), 2),
+            TemplateModule::create_item(origin2.clone(), 1, 2, default_nft_data().into()),
             "Address is not in white list"
         );
     });
@@ -2502,48 +1597,30 @@
 #[test]
 fn white_list_test_16() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
         let origin1 = Origin::signed(1);
         let origin2 = Origin::signed(2);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
 
         assert_ok!(TemplateModule::set_public_access_mode(
             origin1.clone(),
-            1,
+            collection_id,
             AccessMode::WhiteList
         ));
         assert_ok!(TemplateModule::set_mint_permission(
             origin1.clone(),
-            1,
+            collection_id,
             true
         ));
-        assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), 1, 2));
+        assert_ok!(TemplateModule::add_to_white_list(origin1.clone(), collection_id, 2));
 
         assert_ok!(TemplateModule::create_item(
             origin2.clone(),
             1,
-            [1, 2, 3].to_vec(),
-            2
+            2,
+            default_nft_data().into()
         ));
     });
 }
@@ -2552,29 +1629,9 @@
 #[test]
 fn total_number_collections_bound() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
-
-        let origin1 = Origin::signed(1);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
+        default_limits();
+        
+        create_test_collection(&CollectionMode::NFT, 1);
     });
 }
 
@@ -2582,41 +1639,25 @@
 #[test]
 fn total_number_collections_bound_neg() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
+        default_limits();
 
         let origin1 = Origin::signed(1);
-
-        for _ in 0..10 {
 
-            assert_ok!(TemplateModule::create_collection(
-                origin1.clone(),
-                col_name1.clone(),
-                col_desc1.clone(),
-                token_prefix1.clone(),
-                mode.clone()
-            ));
+        for i in 0..default_collection_numbers_limit() {
+            create_test_collection(&CollectionMode::NFT, i + 1);
         }
 
+        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
+        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
+        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
+
         // 11-th collection in chain. Expects error
         assert_noop!(TemplateModule::create_collection(
             origin1.clone(),
             col_name1.clone(),
             col_desc1.clone(),
             token_prefix1.clone(),
-            mode.clone()
+            CollectionMode::NFT
         ), "Total collections bound exceeded");
     });
 }
@@ -2625,43 +1666,13 @@
 #[test]
 fn owned_tokens_bound() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
-
-        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
-            collection_numbers_limit: 10,
-            account_token_ownership_limit: 10,
-            collections_admins_limit: 5,
-            custom_data_limit: 2048,
-            nft_sponsor_transfer_timeout: 15,
-            fungible_sponsor_transfer_timeout: 15,
-            refungible_sponsor_transfer_timeout: 15,          
-        }));
-
-        let origin1 = Origin::signed(1);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
-
-        assert_ok!(TemplateModule::create_item(
-            origin1.clone(),
-            1,
-            [1, 2, 3].to_vec(),
-            1
-        ));
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
-        assert_ok!(TemplateModule::create_item(
-            origin1.clone(),
-            1,
-            [1, 2, 3].to_vec(),
-            1
-        ));
+        let data = default_nft_data();
+        create_test_item(collection_id, &data.clone().into());
+        create_test_item(collection_id, &data.into());
     });
 }
 
@@ -2669,11 +1680,6 @@
 #[test]
 fn owned_tokens_bound_neg() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
-
         assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
             collection_numbers_limit: 10,
             account_token_ownership_limit: 1,
@@ -2683,28 +1689,18 @@
             fungible_sponsor_transfer_timeout: 15,
             refungible_sponsor_transfer_timeout: 15,          
         }));
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
         let origin1 = Origin::signed(1);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
-
-        assert_ok!(TemplateModule::create_item(
-            origin1.clone(),
-            1,
-            [1, 2, 3].to_vec(),
-            1
-        ));
+        let data = default_nft_data();
+        create_test_item(collection_id, &data.clone().into());
 
         assert_noop!(TemplateModule::create_item(
             origin1.clone(),
             1,
-            [1, 2, 3].to_vec(),
-            1
+            1,
+            data.into()
         ), "Owned tokens by a single address bound exceeded");
     });
 }
@@ -2713,11 +1709,6 @@
 #[test]
 fn collection_admins_bound() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
-
         assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
             collection_numbers_limit: 10,
             account_token_ownership_limit: 10,
@@ -2727,18 +1718,13 @@
             fungible_sponsor_transfer_timeout: 15,
             refungible_sponsor_transfer_timeout: 15,          
         }));
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
         let origin1 = Origin::signed(1);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
-
-        assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));
-        assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 3));
+        
+        assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), collection_id, 2));
+        assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), collection_id, 3));
     });
 }
 
@@ -2746,11 +1732,6 @@
 #[test]
 fn collection_admins_bound_neg() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
-
         assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
             collection_numbers_limit: 10,
             account_token_ownership_limit: 1,
@@ -2760,78 +1741,167 @@
             fungible_sponsor_transfer_timeout: 15,
             refungible_sponsor_transfer_timeout: 15,          
         }));
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
         let origin1 = Origin::signed(1);
-        assert_ok!(TemplateModule::create_collection(
-            origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
 
-        assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), 1, 2));
-        assert_noop!(TemplateModule::add_collection_admin(origin1.clone(), 1, 3), "Number of collection admins bound exceeded");
+        assert_ok!(TemplateModule::add_collection_admin(origin1.clone(), collection_id, 2));
+        assert_noop!(TemplateModule::add_collection_admin(origin1.clone(), collection_id, 3), "Number of collection admins bound exceeded");
     });
 }
 
-// Custom data size. Positive test
+// NFT custom data size. Negative test const_data.
 #[test]
-fn custom_data_size_bound() {
+fn custom_data_size_nft_const_data_bound_neg() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
+        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
+            collection_numbers_limit: 10,
+            account_token_ownership_limit: 10,
+            collections_admins_limit: 5,
+            custom_data_limit: 2,
+            nft_sponsor_transfer_timeout: 15,
+            fungible_sponsor_transfer_timeout: 15,
+            refungible_sponsor_transfer_timeout: 15,          
+        }));
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
 
+        let origin1 = Origin::signed(1);
+        let too_big_const_data = CreateItemData::NFT(CreateNftData{
+            const_data: vec![1, 2, 3, 4],
+            variable_data: vec![]
+        });
+
+        assert_noop!(TemplateModule::create_item(
+            origin1.clone(),
+            collection_id,
+            1,
+            too_big_const_data
+        ), "const_data exceeded data limit.");
+    });
+}
+
+// NFT custom data size. Negative test variable_data.
+#[test]
+fn custom_data_size_nft_variable_data_bound_neg() {
+    new_test_ext().execute_with(|| {
         assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
             collection_numbers_limit: 10,
             account_token_ownership_limit: 10,
             collections_admins_limit: 5,
-            custom_data_limit: 2048,
+            custom_data_limit: 2,
             nft_sponsor_transfer_timeout: 15,
             fungible_sponsor_transfer_timeout: 15,
             refungible_sponsor_transfer_timeout: 15,          
         }));
 
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
+
         let origin1 = Origin::signed(1);
-        assert_ok!(TemplateModule::create_collection(
+        let too_big_const_data = CreateItemData::NFT(CreateNftData{
+            const_data: vec![],
+            variable_data: vec![1, 2, 3, 4]
+        });
+
+        assert_noop!(TemplateModule::create_item(
             origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ));
+            collection_id,
+            1,
+            too_big_const_data
+        ), "variable_data exceeded data limit.");
     });
 }
 
-// Custom data size. Negotive test
+// Re fungible custom data size. Negative test const_data.
 #[test]
-fn custom_data_size_bound_neg() {
+fn custom_data_size_re_fungible_const_data_bound_neg() {
     new_test_ext().execute_with(|| {
-        let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
-        let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
-        let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
-        let mode: CollectionMode = CollectionMode::NFT(2000);
+        assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
+            collection_numbers_limit: 10,
+            account_token_ownership_limit: 10,
+            collections_admins_limit: 5,
+            custom_data_limit: 2,
+            nft_sponsor_transfer_timeout: 15,
+            fungible_sponsor_transfer_timeout: 15,
+            refungible_sponsor_transfer_timeout: 15,          
+        }));
+
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
+
+        let origin1 = Origin::signed(1);
+        let too_big_const_data = CreateItemData::NFT(CreateNftData{
+            const_data: vec![1, 2, 3, 4],
+            variable_data: vec![]
+        });
+
+        assert_noop!(TemplateModule::create_item(
+            origin1.clone(),
+            collection_id,
+            1,
+            too_big_const_data
+        ), "const_data exceeded data limit.");
+    });
+}
 
+// Re fungible custom data size. Negative test variable_data.
+#[test]
+fn custom_data_size_re_fungible_variable_data_bound_neg() {
+    new_test_ext().execute_with(|| {
         assert_ok!(TemplateModule::set_chain_limits(RawOrigin::Root.into(), ChainLimits { 
             collection_numbers_limit: 10,
             account_token_ownership_limit: 10,
             collections_admins_limit: 5,
-            custom_data_limit: 200,
+            custom_data_limit: 2,
             nft_sponsor_transfer_timeout: 15,
             fungible_sponsor_transfer_timeout: 15,
             refungible_sponsor_transfer_timeout: 15,          
         }));
 
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
+
         let origin1 = Origin::signed(1);
-        assert_noop!(TemplateModule::create_collection(
+        let too_big_const_data = CreateItemData::NFT(CreateNftData{
+            const_data: vec![],
+            variable_data: vec![1, 2, 3, 4]
+        });
+
+        assert_noop!(TemplateModule::create_item(
             origin1.clone(),
-            col_name1.clone(),
-            col_desc1.clone(),
-            token_prefix1.clone(),
-            mode
-        ), "Custom data size bound exceeded");
+            collection_id,
+            1,
+            too_big_const_data
+        ), "variable_data exceeded data limit.");
     });
 }
 // #endregion
+
+#[test]
+fn set_const_on_chain_schema() {
+    new_test_ext().execute_with(|| {
+        default_limits();
+
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
+
+        let origin1 = Origin::signed(1);
+        assert_ok!(TemplateModule::set_const_on_chain_schema(origin1, collection_id, b"test const on chain schema".to_vec()));
+
+        assert_eq!(TemplateModule::collection(collection_id).const_on_chain_schema, b"test const on chain schema".to_vec());
+        assert_eq!(TemplateModule::collection(collection_id).variable_on_chain_schema, b"".to_vec());
+    });
+}
+
+#[test]
+fn set_variable_on_chain_schema() {
+    new_test_ext().execute_with(|| {
+        default_limits();
+        
+        let collection_id = create_test_collection(&CollectionMode::NFT, 1);
+
+        let origin1 = Origin::signed(1);
+        assert_ok!(TemplateModule::set_variable_on_chain_schema(origin1, collection_id, b"test variable on chain schema".to_vec()));
+
+        assert_eq!(TemplateModule::collection(collection_id).const_on_chain_schema, b"".to_vec());
+        assert_eq!(TemplateModule::collection(collection_id).variable_on_chain_schema, b"test variable on chain schema".to_vec());
+    });
+}
\ No newline at end of file
modifiedruntime/Cargo.tomldiffbeforeafterboth
--- a/runtime/Cargo.toml
+++ b/runtime/Cargo.toml
@@ -1,186 +1,3 @@
-[dependencies.aura]
-default-features = false
-git = 'https://github.com/usetech-llc/substrate.git'
-package = 'pallet-aura'
-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 = 'rc4_ext_dispatch_reenabled'
-version = '2.0.0-rc4'
-
-[dependencies.codec]
-default-features = false
-features = ['derive']
-package = 'parity-scale-codec'
-version = '1.3.0'
-
-[dependencies.contracts]
-git = 'https://github.com/usetech-llc/substrate.git'
-default-features = false
-package = 'pallet-contracts'
-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 = '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-rc4'
-branch = 'rc4_ext_dispatch_reenabled'
-
-[dependencies.frame-executive]
-default-features = false
-git = 'https://github.com/usetech-llc/substrate.git'
-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 = '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 = '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 = 'rc4_ext_dispatch_reenabled'
-version = '2.0.0-rc4'
-
-[dependencies.serde]
-features = ['derive']
-optional = true
-version = '1.0.101'
-
-[dependencies.sp-api]
-default-features = false
-git = 'https://github.com/usetech-llc/substrate.git'
-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 = '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 = 'rc4_ext_dispatch_reenabled'
-version = '0.8.0-rc4'
-
-[dependencies.sp-core]
-default-features = false
-git = 'https://github.com/usetech-llc/substrate.git'
-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 = 'rc4_ext_dispatch_reenabled'
-version = '2.0.0-rc4'
-
-[dependencies.sp-io]
-default-features = false
-git = 'https://github.com/usetech-llc/substrate.git'
-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 = 'rc4_ext_dispatch_reenabled'
-version = '2.0.0-rc4'
-
-[dependencies.sp-runtime]
-default-features = false
-git = 'https://github.com/usetech-llc/substrate.git'
-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 = 'rc4_ext_dispatch_reenabled'
-version = '2.0.0-rc4'
-
-[dependencies.sp-std]
-default-features = false
-git = 'https://github.com/usetech-llc/substrate.git'
-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 = 'rc4_ext_dispatch_reenabled'
-version = '2.0.0-rc4'
-
-[dependencies.sp-version]
-default-features = false
-git = 'https://github.com/usetech-llc/substrate.git'
-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 = '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 = 'rc4_ext_dispatch_reenabled'
-version = '2.0.0-rc4'
-
-[dependencies.nft]
-default-features = false
-package = 'pallet-nft'
-path = '../pallets/nft'
-version = '2.0.0-rc4'
-
-[dependencies.timestamp]
-default-features = false
-git = 'https://github.com/usetech-llc/substrate.git'
-package = 'pallet-timestamp'
-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 = '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 = 'rc4_ext_dispatch_reenabled'
-version = '1.0.5'
-
 [package]
 authors = ['Substrate DevHub <https://github.com/substrate-developer-hub>']
 edition = '2018'
@@ -188,39 +5,99 @@
 license = 'Unlicense'
 name = 'nft-runtime'
 repository = 'https://github.com/usetech-llc/nft_parachain/'
-version = '2.0.0-rc4'
+version = '2.0.0'
+
 [package.metadata.docs.rs]
 targets = ['x86_64-unknown-linux-gnu']
 
+[build-dependencies]
+wasm-builder-runner = { package = 'substrate-wasm-builder-runner', version = '1.0.5' }
+
+# alias "parity-scale-code" to "codec"
+[dependencies.codec]
+default-features = false
+features = ['derive']
+package = 'parity-scale-codec'
+version = '1.3.4'
+
+[dependencies]
+hex-literal = { optional = true, version = '0.3.1' }
+serde = { features = ['derive'], optional = true, version = '1.0.101' }
+
+# local dependencies
+pallet-nft = { path = '../pallets/nft', default-features = false, version = '2.0.0' }
+
+# Substrate dependencies
+frame-benchmarking = { default-features = false, optional = true, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release' }
+frame-executive = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release' }
+frame-support = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release' }
+frame-system = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release' }
+frame-system-benchmarking = { default-features = false, optional = true, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release' }
+frame-system-rpc-runtime-api = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release' }
+pallet-aura = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release' }
+pallet-balances = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release' }
+pallet-contracts = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release' }
+pallet-contracts-primitives = { default-features = false, version = '2.0.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release' }
+pallet-contracts-rpc-runtime-api = { default-features = false, version = '0.8.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release' }
+pallet-grandpa = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release' }
+pallet-randomness-collective-flip = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release' }
+pallet-sudo = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release' }
+pallet-timestamp = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release' }
+pallet-transaction-payment = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release' }
+pallet-transaction-payment-rpc-runtime-api = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release' }
+sp-api = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release' }
+sp-block-builder = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release' }
+sp-consensus-aura = { default-features = false, version = '0.8.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release' }
+sp-core = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release' }
+sp-inherents = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release' }
+sp-offchain = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release' }
+sp-runtime = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release' }
+sp-session = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release' }
+sp-std = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release' }
+sp-transaction-pool = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release' }
+sp-version = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'v2.0.0_release' }
+
 [features]
 default = ['std']
+runtime-benchmarks = [
+    'hex-literal',
+    'frame-benchmarking',
+    'frame-support/runtime-benchmarks',
+    'frame-system-benchmarking',
+    'frame-system/runtime-benchmarks',
+    'pallet-balances/runtime-benchmarks',
+    'pallet-timestamp/runtime-benchmarks',
+    'pallet-nft/runtime-benchmarks',
+    'sp-runtime/runtime-benchmarks',
+]
 std = [
-    'aura/std',
-    'balances/std',
     'codec/std',
-    'contracts/std',
-    'contracts-primitives/std',
-    'contracts-rpc-runtime-api/std',
+    'serde',
     'frame-executive/std',
     'frame-support/std',
-    'grandpa/std',
-    'randomness-collective-flip/std',
-    'serde',
+    'frame-system/std',
+    'frame-system-rpc-runtime-api/std',
+    'pallet-aura/std',
+    'pallet-balances/std',
+    'pallet-contracts/std',
+    'pallet-contracts-primitives/std',
+    'pallet-contracts-rpc-runtime-api/std',
+    'pallet-grandpa/std',
+    'pallet-randomness-collective-flip/std',
+    'pallet-sudo/std',
+    'pallet-timestamp/std',
+    'pallet-transaction-payment/std',
+    'pallet-transaction-payment-rpc-runtime-api/std',
+    'pallet-nft/std',
     'sp-api/std',
     'sp-block-builder/std',
     'sp-consensus-aura/std',
     'sp-core/std',
     'sp-inherents/std',
-    'sp-io/std',
     'sp-offchain/std',
     'sp-runtime/std',
     'sp-session/std',
     'sp-std/std',
     'sp-transaction-pool/std',
     'sp-version/std',
-    'sudo/std',
-    'system/std',
-    'timestamp/std',
-    'transaction-payment/std',
-    'nft/std',
 ]
modifiedruntime/build.rsdiffbeforeafterboth
--- a/runtime/build.rs
+++ b/runtime/build.rs
@@ -3,7 +3,7 @@
 fn main() {
     WasmBuilder::new()
         .with_current_project()
-        .with_wasm_builder_from_crates("1.0.11")
+        .with_wasm_builder_from_crates("2.0.0")
         .export_heap_base()
         .import_memory()
         .build()
modifiedruntime/src/lib.rsdiffbeforeafterboth
--- a/runtime/src/lib.rs
+++ b/runtime/src/lib.rs
@@ -8,9 +8,9 @@
 #[cfg(feature = "std")]
 include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs"));
 
-use contracts_rpc_runtime_api::ContractExecResult;
-use grandpa::fg_primitives;
-use grandpa::{AuthorityId as GrandpaId, AuthorityList as GrandpaAuthorityList};
+use pallet_contracts_rpc_runtime_api::ContractExecResult;
+use pallet_grandpa::fg_primitives;
+use pallet_grandpa::{AuthorityId as GrandpaId, AuthorityList as GrandpaAuthorityList};
 use sp_api::impl_runtime_apis;
 use sp_consensus_aura::sr25519::AuthorityId as AuraId;
 use sp_core::{crypto::KeyTypeId, OpaqueMetadata};
@@ -29,8 +29,8 @@
 use sp_version::RuntimeVersion;
 
 // A few exports that help ease life for downstream crates.
-pub use balances::Call as BalancesCall;
-pub use contracts::Schedule as ContractsSchedule;
+pub use pallet_balances::Call as BalancesCall;
+pub use pallet_contracts::Schedule as ContractsSchedule;
 pub use frame_support::{
     construct_runtime,
     dispatch::DispatchResult,
@@ -49,14 +49,14 @@
 #[cfg(any(feature = "std", test))]
 pub use sp_runtime::BuildStorage;
 use sp_runtime::Perbill;
-use system::{self as system};
+use frame_system::{self as system};
 
-pub use timestamp::Call as TimestampCall;
+pub use pallet_timestamp::Call as TimestampCall;
 
 /// Re-export a nft pallet
 /// TODO: Check this re-export. Is this safe and good style?
-extern crate nft;
-pub use nft::*;
+extern crate pallet_nft;
+pub use pallet_nft::*;
 
 /// An index to a block.
 pub type BlockNumber = u32;
@@ -84,6 +84,8 @@
 /// Digest item type.
 pub type DigestItem = generic::DigestItem<Hash>;
 
+mod nft_weights;
+
 /// Opaque types. These are used by the CLI to instantiate machinery that don't need to know
 /// the specifics of the runtime. They can then be made to be agnostic over specific formats
 /// of data like extrinsics, allowing for them to continue syncing the network through upgrades
@@ -194,62 +196,69 @@
     type AvailableBlockRatio = AvailableBlockRatio;
     /// Version of the runtime.
     type Version = Version;
-    /// Converts a module to the index of the module in `construct_runtime!`.
-    /// This type is being generated by `construct_runtime!`.
-    type ModuleToIndex = ModuleToIndex;
+ 	/// This type is being generated by `construct_runtime!`.
+    type PalletInfo = PalletInfo;
     /// What to do if a new account is created.
     type OnNewAccount = ();
     /// What to do if an account is fully reaped from the system.
     type OnKilledAccount = ();
     /// The data to be stored in an account.
-    type AccountData = balances::AccountData<Balance>;
+    type AccountData = pallet_balances::AccountData<Balance>;
+	/// Weight information for the extrinsics of this pallet.
+	type SystemWeightInfo = ();
 }
 
-impl aura::Trait for Runtime {
+impl pallet_aura::Trait for Runtime {
     type AuthorityId = AuraId;
 }
 
-impl grandpa::Trait for Runtime {
-    type Event = Event;
-    type Call = Call;
+impl pallet_grandpa::Trait for Runtime {
+	type Event = Event;
+	type Call = Call;
 
-    type KeyOwnerProofSystem = ();
+	type KeyOwnerProofSystem = ();
 
-    type KeyOwnerProof =
-        <Self::KeyOwnerProofSystem as KeyOwnerProofSystem<(KeyTypeId, GrandpaId)>>::Proof;
+	type KeyOwnerProof =
+		<Self::KeyOwnerProofSystem as KeyOwnerProofSystem<(KeyTypeId, GrandpaId)>>::Proof;
 
-    type KeyOwnerIdentification = <Self::KeyOwnerProofSystem as KeyOwnerProofSystem<(
-        KeyTypeId,
-        GrandpaId,
-    )>>::IdentificationTuple;
+	type KeyOwnerIdentification = <Self::KeyOwnerProofSystem as KeyOwnerProofSystem<(
+		KeyTypeId,
+		GrandpaId,
+	)>>::IdentificationTuple;
+
+	type HandleEquivocation = ();
 
-    type HandleEquivocation = ();
+	type WeightInfo = ();
 }
 
 parameter_types! {
     pub const MinimumPeriod: u64 = SLOT_DURATION / 2;
 }
 
-impl timestamp::Trait for Runtime {
-    /// A timestamp: milliseconds since the unix epoch.
-    type Moment = u64;
-    type OnTimestampSet = Aura;
-    type MinimumPeriod = MinimumPeriod;
+impl pallet_timestamp::Trait for Runtime {
+	/// A timestamp: milliseconds since the unix epoch.
+	type Moment = u64;
+	type OnTimestampSet = Aura;
+	type MinimumPeriod = MinimumPeriod;
+	type WeightInfo = ();
 }
 
 parameter_types! {
     // pub const ExistentialDeposit: u128 = 500;
     pub const ExistentialDeposit: u128 = 0;
+	pub const MaxLocks: u32 = 50;
 }
 
-impl balances::Trait for Runtime {
-    /// The type for recording an account's balance.
-    type Balance = Balance;
-    /// The ubiquitous event type.
-    type Event = Event;
-    type DustRemoval = ();
-    type ExistentialDeposit = ExistentialDeposit;
-    type AccountStore = System;
+impl pallet_balances::Trait for Runtime {
+	type MaxLocks = MaxLocks;
+	/// The type for recording an account's balance.
+	type Balance = Balance;
+	/// The ubiquitous event type.
+	type Event = Event;
+	type DustRemoval = ();
+	type ExistentialDeposit = ExistentialDeposit;
+	type AccountStore = System;
+	type WeightInfo = ();
 }
 
 pub const MILLICENTS: Balance = 1_000_000_000;
@@ -263,46 +272,46 @@
     pub const SurchargeReward: Balance = 150 * MILLICENTS;
 }
 
-impl contracts::Trait for Runtime {
-    type Call = Call;
-    type Time = Timestamp;
-    type Randomness = RandomnessCollectiveFlip;
-    type Currency = Balances;
-    type Event = Event;
-    type DetermineContractAddress = contracts::SimpleAddressDeterminer<Runtime>;
-    type TrieIdGenerator = contracts::TrieIdFromParentCounter<Runtime>;
-    type RentPayment = ();
-    type SignedClaimHandicap = contracts::DefaultSignedClaimHandicap;
-    type TombstoneDeposit = TombstoneDeposit;
-    type StorageSizeOffset = contracts::DefaultStorageSizeOffset;
-    type RentByteFee = RentByteFee;
-    type RentDepositOffset = RentDepositOffset;
-    type SurchargeReward = SurchargeReward;
-    type MaxDepth = contracts::DefaultMaxDepth;
-    type MaxValueSize = contracts::DefaultMaxValueSize;
-    type WeightPrice = transaction_payment::Module<Self>;
+impl pallet_contracts::Trait for Runtime {
+	type Time = Timestamp;
+	type Randomness = RandomnessCollectiveFlip;
+	type Currency = Balances;
+	type Event = Event;
+	type DetermineContractAddress = pallet_contracts::SimpleAddressDeterminer<Runtime>;
+	type TrieIdGenerator = pallet_contracts::TrieIdFromParentCounter<Runtime>;
+	type RentPayment = ();
+	type SignedClaimHandicap = pallet_contracts::DefaultSignedClaimHandicap;
+	type TombstoneDeposit = TombstoneDeposit;
+	type StorageSizeOffset = pallet_contracts::DefaultStorageSizeOffset;
+	type RentByteFee = RentByteFee;
+	type RentDepositOffset = RentDepositOffset;
+	type SurchargeReward = SurchargeReward;
+	type MaxDepth = pallet_contracts::DefaultMaxDepth;
+	type MaxValueSize = pallet_contracts::DefaultMaxValueSize;
+	type WeightPrice = pallet_transaction_payment::Module<Self>;
 }
 
 parameter_types! {
-    pub const TransactionByteFee: Balance = 1;
+	pub const TransactionByteFee: Balance = 10 * MILLICENTS;
 }
 
-impl transaction_payment::Trait for Runtime {
-    type Currency = balances::Module<Runtime>;
+impl pallet_transaction_payment::Trait for Runtime {
+    type Currency = pallet_balances::Module<Runtime>;
     type OnTransactionPayment = ();
     type TransactionByteFee = TransactionByteFee;
     type WeightToFee = IdentityFee<Balance>;
-    type FeeMultiplierUpdate = ();
+    type FeeMultiplierUpdate =  ();
 }
 
-impl sudo::Trait for Runtime {
+impl pallet_sudo::Trait for Runtime {
     type Event = Event;
     type Call = Call;
 }
 
 /// Used for the module nft in `./nft.rs`
-impl nft::Trait for Runtime {
+impl pallet_nft::Trait for Runtime {
     type Event = Event;
+    type WeightInfo = nft_weights::WeightInfo;
 }
 
 construct_runtime!(
@@ -312,15 +321,15 @@
         UncheckedExtrinsic = UncheckedExtrinsic
     {
         System: system::{Module, Call, Config, Storage, Event<T>},
-        RandomnessCollectiveFlip: randomness_collective_flip::{Module, Call, Storage},
-        Contracts: contracts::{Module, Call, Config, Storage, Event<T>},
-        Timestamp: timestamp::{Module, Call, Storage, Inherent},
-        Aura: aura::{Module, Config<T>, Inherent(Timestamp)},
-        Grandpa: grandpa::{Module, Call, Storage, Config, Event},
-        Balances: balances::{Module, Call, Storage, Config<T>, Event<T>},
-        TransactionPayment: transaction_payment::{Module, Storage},
-        Sudo: sudo::{Module, Call, Config<T>, Storage, Event<T>},
-        Nft: nft::{Module, Call, Config<T>, Storage, Event<T>},
+        RandomnessCollectiveFlip: pallet_randomness_collective_flip::{Module, Call, Storage},
+        Contracts: pallet_contracts::{Module, Call, Config, Storage, Event<T>},
+        Timestamp: pallet_timestamp::{Module, Call, Storage, Inherent},
+        Aura: pallet_aura::{Module, Config<T>, Inherent},
+        Grandpa: pallet_grandpa::{Module, Call, Storage, Config, Event},
+        Balances: pallet_balances::{Module, Call, Storage, Config<T>, Event<T>},
+        TransactionPayment: pallet_transaction_payment::{Module, Storage},
+        Sudo: pallet_sudo::{Module, Call, Config<T>, Storage, Event<T>},
+        Nft: pallet_nft::{Module, Call, Config<T>, Storage, Event<T>},
     }
 );
 
@@ -342,7 +351,7 @@
     system::CheckEra<Runtime>,
     system::CheckNonce<Runtime>,
     system::CheckWeight<Runtime>,
-    nft::ChargeTransactionPayment<Runtime>,
+    pallet_nft::ChargeTransactionPayment<Runtime>,
 );
 /// Unchecked extrinsic type as expected by this runtime.
 pub type UncheckedExtrinsic = generic::UncheckedExtrinsic<Address, Call, Signature, SignedExtra>;
@@ -354,7 +363,7 @@
 
 impl_runtime_apis! {
 
-    impl contracts_rpc_runtime_api::ContractsApi<Block, AccountId, Balance, BlockNumber>
+    impl pallet_contracts_rpc_runtime_api::ContractsApi<Block, AccountId, Balance, BlockNumber>
     for Runtime
     {
         fn call(
@@ -364,27 +373,28 @@
             gas_limit: u64,
             input_data: Vec<u8>,
         ) -> ContractExecResult {
-            let exec_result =
-                Contracts::bare_call(origin, dest.into(), value, gas_limit, input_data);
-            match exec_result {
-                Ok(v) => ContractExecResult::Success {
-                    status: v.status,
-                    data: v.data,
-                },
-                Err(_) => ContractExecResult::Error,
-            }
+			let (exec_result, gas_consumed) =
+				Contracts::bare_call(origin, dest.into(), value, gas_limit, input_data);
+			match exec_result {
+				Ok(v) => ContractExecResult::Success {
+					flags: v.flags.bits(),
+					data: v.data,
+					gas_consumed: gas_consumed,
+				},
+				Err(_) => ContractExecResult::Error,
+			}
         }
 
         fn get_storage(
             address: AccountId,
             key: [u8; 32],
-        ) -> contracts_primitives::GetStorageResult {
+        ) -> pallet_contracts_primitives::GetStorageResult {
             Contracts::get_storage(address, key)
         }
 
         fn rent_projection(
             address: AccountId,
-        ) -> contracts_primitives::RentProjectionResult<BlockNumber> {
+        ) -> pallet_contracts_primitives::RentProjectionResult<BlockNumber> {
             Contracts::rent_projection(address)
         }
     }
@@ -471,29 +481,74 @@
         }
     }
 
-    impl fg_primitives::GrandpaApi<Block> for Runtime {
-        fn grandpa_authorities() -> GrandpaAuthorityList {
-            Grandpa::grandpa_authorities()
-        }
+	impl fg_primitives::GrandpaApi<Block> for Runtime {
+		fn grandpa_authorities() -> GrandpaAuthorityList {
+			Grandpa::grandpa_authorities()
+		}
 
-        fn submit_report_equivocation_extrinsic(
-            _equivocation_proof: fg_primitives::EquivocationProof<
-                <Block as BlockT>::Hash,
-                NumberFor<Block>,
-            >,
-            _key_owner_proof: fg_primitives::OpaqueKeyOwnershipProof,
-        ) -> Option<()> {
-            None
-        }
+		fn submit_report_equivocation_unsigned_extrinsic(
+			_equivocation_proof: fg_primitives::EquivocationProof<
+				<Block as BlockT>::Hash,
+				NumberFor<Block>,
+			>,
+			_key_owner_proof: fg_primitives::OpaqueKeyOwnershipProof,
+		) -> Option<()> {
+			None
+		}
 
-        fn generate_key_ownership_proof(
-            _set_id: fg_primitives::SetId,
-            _authority_id: GrandpaId,
-        ) -> Option<fg_primitives::OpaqueKeyOwnershipProof> {
-            // NOTE: this is the only implementation possible since we've
-            // defined our key owner proof type as a bottom type (i.e. a type
-            // with no values).
-            None
-        }
+		fn generate_key_ownership_proof(
+			_set_id: fg_primitives::SetId,
+			_authority_id: GrandpaId,
+		) -> Option<fg_primitives::OpaqueKeyOwnershipProof> {
+			// NOTE: this is the only implementation possible since we've
+			// defined our key owner proof type as a bottom type (i.e. a type
+			// with no values).
+			None
+		}
     }
+    
+	impl frame_system_rpc_runtime_api::AccountNonceApi<Block, AccountId, Index> for Runtime {
+		fn account_nonce(account: AccountId) -> Index {
+			System::account_nonce(account)
+		}
+	}
+
+	impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi<Block, Balance> for Runtime {
+		fn query_info(
+			uxt: <Block as BlockT>::Extrinsic,
+			len: u32,
+		) -> pallet_transaction_payment_rpc_runtime_api::RuntimeDispatchInfo<Balance> {
+			TransactionPayment::query_info(uxt, len)
+		}
+	}
+
+    #[cfg(feature = "runtime-benchmarks")]
+	impl frame_benchmarking::Benchmark<Block> for Runtime {
+		fn dispatch_benchmark(
+			config: frame_benchmarking::BenchmarkConfig
+		) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, sp_runtime::RuntimeString> {
+			use frame_benchmarking::{Benchmarking, BenchmarkBatch, add_benchmark, TrackedStorageKey};
+
+			let whitelist: Vec<TrackedStorageKey> = vec![
+				// Alice account
+				hex_literal::hex!("d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d").to_vec().into(),
+				// // Total Issuance
+				// hex_literal::hex!("c2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80").to_vec().into(),
+				// // Execution Phase
+				// hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a").to_vec().into(),
+				// // Event Count
+				// hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850").to_vec().into(),
+				// // System Events
+				// hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7").to_vec().into(),
+            ];
+
+			let mut batches = Vec::<BenchmarkBatch>::new();
+			let params = (&config, &whitelist);
+
+			add_benchmark!(params, batches, pallet_nft, Nft);
+
+			if batches.is_empty() { return Err("Benchmark not found for this pallet.".into()) }
+			Ok(batches)
+		}
+	}
 }
addedruntime/src/nft_weights.rsdiffbeforeafterboth
--- /dev/null
+++ b/runtime/src/nft_weights.rs
@@ -0,0 +1,111 @@
+use frame_support::weights::{Weight, constants::RocksDbWeight as DbWeight};
+
+pub struct WeightInfo;
+impl pallet_nft::WeightInfo for WeightInfo {
+	fn create_collection() -> Weight {
+		(70_000_000 as Weight)
+			.saturating_add(DbWeight::get().reads(7 as Weight))
+			.saturating_add(DbWeight::get().writes(5 as Weight))
+	}
+	fn destroy_collection() -> Weight {
+		(90_000_000 as Weight)
+			.saturating_add(DbWeight::get().reads(2 as Weight))
+			.saturating_add(DbWeight::get().writes(5 as Weight))
+	}
+	fn add_to_white_list() -> Weight {
+		(30_000_000 as Weight)
+			.saturating_add(DbWeight::get().reads(3 as Weight))
+			.saturating_add(DbWeight::get().writes(1 as Weight))
+    }
+    fn remove_from_white_list() -> Weight {
+		(35_000_000 as Weight)
+			.saturating_add(DbWeight::get().reads(3 as Weight))
+			.saturating_add(DbWeight::get().writes(1 as Weight))
+	}
+	fn set_public_access_mode() -> Weight {
+		(27_000_000 as Weight)
+			.saturating_add(DbWeight::get().reads(1 as Weight))
+			.saturating_add(DbWeight::get().writes(1 as Weight))
+	}
+	fn set_mint_permission() -> Weight {
+		(27_000_000 as Weight)
+			.saturating_add(DbWeight::get().reads(1 as Weight))
+			.saturating_add(DbWeight::get().writes(1 as Weight))
+	}
+	fn change_collection_owner() -> Weight {
+		(27_000_000 as Weight)
+			.saturating_add(DbWeight::get().reads(1 as Weight))
+			.saturating_add(DbWeight::get().writes(1 as Weight))
+	}
+	fn add_collection_admin() -> Weight {
+        (32_000_000 as Weight)
+            .saturating_add(DbWeight::get().reads(3 as Weight))
+            .saturating_add(DbWeight::get().writes(1 as Weight))
+	}
+	fn remove_collection_admin() -> Weight {
+		(50_000_000 as Weight)
+            .saturating_add(DbWeight::get().reads(2 as Weight))
+            .saturating_add(DbWeight::get().writes(1 as Weight))
+    }
+    fn set_collection_sponsor() -> Weight {
+		(32_000_000 as Weight)
+            .saturating_add(DbWeight::get().reads(2 as Weight))
+            .saturating_add(DbWeight::get().writes(1 as Weight))
+    }  
+    fn confirm_sponsorship() -> Weight {
+		(22_000_000 as Weight)
+            .saturating_add(DbWeight::get().reads(1 as Weight))
+            .saturating_add(DbWeight::get().writes(1 as Weight))
+    }  
+    fn remove_collection_sponsor() -> Weight {
+		(24_000_000 as Weight)
+            .saturating_add(DbWeight::get().reads(1 as Weight))
+            .saturating_add(DbWeight::get().writes(1 as Weight))
+    }  
+    fn create_item(s: usize, ) -> Weight {
+        (130_000_000 as Weight)
+            .saturating_add((2135 as Weight).saturating_mul(s as Weight))
+            .saturating_add(DbWeight::get().reads(10 as Weight))
+            .saturating_add(DbWeight::get().writes(8 as Weight))
+    }  
+    fn burn_item() -> Weight {
+		(170_000_000 as Weight)
+            .saturating_add(DbWeight::get().reads(9 as Weight))
+            .saturating_add(DbWeight::get().writes(7 as Weight))
+    }  
+    fn transfer() -> Weight {
+        (125_000_000 as Weight)
+            .saturating_add(DbWeight::get().reads(7 as Weight))
+            .saturating_add(DbWeight::get().writes(7 as Weight))
+    }  
+    fn approve() -> Weight {
+        (45_000_000 as Weight)
+            .saturating_add(DbWeight::get().reads(3 as Weight))
+            .saturating_add(DbWeight::get().writes(1 as Weight))
+    }
+    fn transfer_from() -> Weight {
+        (150_000_000 as Weight)
+            .saturating_add(DbWeight::get().reads(9 as Weight))
+            .saturating_add(DbWeight::get().writes(8 as Weight))
+    }
+    fn set_offchain_schema() -> Weight {
+        (33_000_000 as Weight)
+            .saturating_add(DbWeight::get().reads(2 as Weight))
+            .saturating_add(DbWeight::get().writes(1 as Weight))
+    }
+    fn set_const_on_chain_schema() -> Weight {
+        (11_100_000 as Weight)
+            .saturating_add(DbWeight::get().reads(2 as Weight))
+            .saturating_add(DbWeight::get().writes(1 as Weight))
+    }
+    fn set_variable_on_chain_schema() -> Weight {
+        (11_100_000 as Weight)
+            .saturating_add(DbWeight::get().reads(2 as Weight))
+            .saturating_add(DbWeight::get().writes(1 as Weight))
+    }
+    fn set_variable_meta_data() -> Weight {
+        (17_500_000 as Weight)
+            .saturating_add(DbWeight::get().reads(2 as Weight))
+            .saturating_add(DbWeight::get().writes(1 as Weight))
+    }
+}
modifiedtests/flipper-src/.gitignorediffbeforeafterboth
--- a/tests/flipper-src/.gitignore
+++ b/tests/flipper-src/.gitignore
@@ -6,4 +6,4 @@
 
 # Remove Cargo.lock when creating an executable, leave it for libraries
 # More information here http://doc.crates.io/guide.html#cargotoml-vs-cargolock
-Cargo.lock
+Cargo.lock
\ No newline at end of file
deletedtests/flipper-src/.ink/abi_gen/Cargo.tomldiffbeforeafterboth
--- a/tests/flipper-src/.ink/abi_gen/Cargo.toml
+++ /dev/null
@@ -1,16 +0,0 @@
-[package]
-name = "abi-gen"
-version = "0.1.0"
-authors = ["Parity Technologies <admin@parity.io>"]
-edition = "2018"
-publish = false
-
-[[bin]]
-name = "abi-gen"
-path = "main.rs"
-
-[dependencies]
-contract = { path = "../..", package = "flipper", default-features = false, features = ["ink-generate-abi"] }
-ink_lang = { version = "2", git = "https://github.com/paritytech/ink", tag = "latest-v2", package = "ink_lang", default-features = false, features = ["ink-generate-abi"] }
-serde = "1.0"
-serde_json = "1.0"
deletedtests/flipper-src/.ink/abi_gen/main.rsdiffbeforeafterboth
--- a/tests/flipper-src/.ink/abi_gen/main.rs
+++ /dev/null
@@ -1,7 +0,0 @@
-fn main() -> Result<(), std::io::Error> {
-    let abi = <contract::Flipper as ink_lang::GenerateAbi>::generate_abi();
-    let contents = serde_json::to_string_pretty(&abi)?;
-    std::fs::create_dir("target").ok();
-    std::fs::write("target/metadata.json", contents)?;
-    Ok(())
-}
modifiedtests/flipper-src/Cargo.tomldiffbeforeafterboth
--- a/tests/flipper-src/Cargo.toml
+++ b/tests/flipper-src/Cargo.toml
@@ -1,67 +1,35 @@
 [package]
 name = "flipper"
-version = "0.1.0"
-authors = ["[your_name] <[your_email]>"]
+version = "3.0.0-rc1"
+authors = ["Parity Technologies <admin@parity.io>"]
 edition = "2018"
 
 [dependencies]
-ink_abi = { version = "2", git = "https://github.com/paritytech/ink", tag = "latest-v2", package = "ink_abi", default-features = false, features = ["derive"], optional = true }
-ink_primitives = { version = "2", git = "https://github.com/paritytech/ink", tag = "latest-v2", package = "ink_primitives", default-features = false }
-ink_core = { version = "2", git = "https://github.com/paritytech/ink", tag = "latest-v2", package = "ink_core", default-features = false }
-ink_lang = { version = "2", git = "https://github.com/paritytech/ink", tag = "latest-v2", package = "ink_lang", default-features = false }
+ink_primitives = { version = "3.0.0-rc1", git = "https://github.com/paritytech/ink", tag = "v3.0.0-rc1", default-features = false }
+ink_metadata = { version = "3.0.0-rc1", git = "https://github.com/paritytech/ink", tag = "v3.0.0-rc1", default-features = false, features = ["derive"], optional = true }
+ink_env = { version = "3.0.0-rc1", git = "https://github.com/paritytech/ink", tag = "v3.0.0-rc1", default-features = false }
+ink_storage = { version = "3.0.0-rc1", git = "https://github.com/paritytech/ink", tag = "v3.0.0-rc1", default-features = false }
+ink_lang = { version = "3.0.0-rc1", git = "https://github.com/paritytech/ink", tag = "v3.0.0-rc1", default-features = false }
 
-scale = { package = "parity-scale-codec", version = "1.2", default-features = false, features = ["derive"] }
-
-[dependencies.type-metadata]
-git = "https://github.com/type-metadata/type-metadata.git"
-rev = "02eae9f35c40c943b56af5b60616219f2b72b47d"
-default-features = false
-features = ["derive"]
-optional = true
+scale = { package = "parity-scale-codec", version = "1.3", default-features = false, features = ["derive"] }
+scale-info = { version = "0.4", default-features = false, features = ["derive"], optional = true }
 
 [lib]
 name = "flipper"
 path = "lib.rs"
-crate-type = [
-	# Used for normal contract Wasm blobs.
-	"cdylib",
-	# Required for ABI generation, and using this contract as a dependency.
-	# If using `cargo contract build`, it will be automatically disabled to produce a smaller Wasm binary
-	"rlib",
-]
+crate-type = ["cdylib"]
 
 [features]
-default = ["test-env"]
+default = ["std"]
 std = [
-    "ink_abi/std",
-    "ink_core/std",
     "ink_primitives/std",
+    "ink_metadata",
+    "ink_metadata/std",
+    "ink_env/std",
+    "ink_storage/std",
+    "ink_lang/std",
     "scale/std",
-    "type-metadata/std",
-]
-test-env = [
-    "std",
-    "ink_lang/test-env",
-]
-ink-generate-abi = [
-    "std",
-    "ink_abi",
-    "type-metadata",
-    "ink_core/ink-generate-abi",
-    "ink_lang/ink-generate-abi",
-]
-ink-as-dependency = []
-
-[profile.release]
-panic = "abort"
-lto = true
-opt-level = "z"
-overflow-checks = true
-
-[workspace]
-members = [
-	".ink/abi_gen"
+    "scale-info",
+    "scale-info/std",
 ]
-exclude = [
-	".ink"
-]
+ink-as-dependency = []
\ No newline at end of file
modifiedtests/flipper-src/build.shdiffbeforeafterboth
--- a/tests/flipper-src/build.sh
+++ b/tests/flipper-src/build.sh
@@ -1,2 +1,3 @@
+rustup component add rust-src --toolchain nightly
 cargo +nightly contract build
 cargo +nightly contract generate-metadata
modifiedtests/flipper-src/lib.rsdiffbeforeafterboth
--- a/tests/flipper-src/lib.rs
+++ b/tests/flipper-src/lib.rs
@@ -1,70 +1,64 @@
+// Copyright 2018-2020 Parity Technologies (UK) Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
 #![cfg_attr(not(feature = "std"), no_std)]
 
 use ink_lang as ink;
 
-#[ink::contract(version = "0.1.0")]
-mod flipper {
-    use ink_core::storage;
-
-    /// Defines the storage of your contract.
-    /// Add new fields to the below struct in order
-    /// to add new static storage fields to your contract.
+#[ink::contract]
+pub mod flipper {
     #[ink(storage)]
-    struct Flipper {
-        /// Stores a single `bool` value on the storage.
-        value: storage::Value<bool>,
+    pub struct Flipper {
+        value: bool,
     }
 
     impl Flipper {
-        /// Constructor that initializes the `bool` value to the given `init_value`.
+        /// Creates a new flipper smart contract initialized with the given value.
         #[ink(constructor)]
-        fn new(&mut self, init_value: bool) {
-            self.value.set(init_value);
+        pub fn new(init_value: bool) -> Self {
+            Self { value: init_value }
         }
 
-        /// Constructor that initializes the `bool` value to `false`.
-        ///
-        /// Constructors can delegate to other constructors.
+        /// Creates a new flipper smart contract initialized to `false`.
         #[ink(constructor)]
-        fn default(&mut self) {
-            self.new(false)
+        pub fn default() -> Self {
+            Self::new(Default::default())
         }
 
-        /// A message that can be called on instantiated contracts.
-        /// This one flips the value of the stored `bool` from `true`
-        /// to `false` and vice versa.
+        /// Flips the current value of the Flipper's bool.
         #[ink(message)]
-        fn flip(&mut self) {
-            *self.value = !self.get();
+        pub fn flip(&mut self) {
+            self.value = !self.value;
         }
 
-        /// Simply returns the current value of our `bool`.
+        /// Returns the current value of the Flipper's bool.
         #[ink(message)]
-        fn get(&self) -> bool {
-            *self.value
+        pub fn get(&self) -> bool {
+            self.value
         }
     }
 
-    /// Unit tests in Rust are normally defined within such a `#[cfg(test)]`
-    /// module and test functions are marked with a `#[test]` attribute.
-    /// The below code is technically just normal Rust code.
     #[cfg(test)]
     mod tests {
-        /// Imports all the definitions from the outer scope so we can use them here.
         use super::*;
 
-        /// We test if the default constructor does its job.
         #[test]
         fn default_works() {
-            // Note that even though we defined our `#[ink(constructor)]`
-            // above as `&mut self` functions that return nothing we can call
-            // them in test code as if they were normal Rust constructors
-            // that take no `self` argument but return `Self`.
             let flipper = Flipper::default();
             assert_eq!(flipper.get(), false);
         }
 
-        /// We test a simple use case of our contract.
         #[test]
         fn it_works() {
             let mut flipper = Flipper::new(false);
@@ -73,4 +67,4 @@
             assert_eq!(flipper.get(), true);
         }
     }
-}
+}
\ No newline at end of file
modifiedtests/package-lock.jsondiffbeforeafterboth
--- a/tests/package-lock.json
+++ b/tests/package-lock.json
@@ -3916,282 +3916,143 @@
       }
     },
     "@polkadot/api": {
-      "version": "1.34.1",
-      "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-1.34.1.tgz",
-      "integrity": "sha512-3gCibNRchH+XbEdULS1bwiV1RgarZW1PDw1Y1mAQBVqPrUpkYqntp1D52SQOpAbRzldkwk296Sj+mx9/IeDRXA==",
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-2.3.1.tgz",
+      "integrity": "sha512-B9ZOb1PiPaAlke4wQHoivVQ5ZCQWn5bgLjhVIGdcEZ4WjIcxApmzTV4ruSfqVoRKpRiVOyV3Dx/VUQDD/WgBFw==",
       "requires": {
-        "@babel/runtime": "^7.11.2",
-        "@polkadot/api-derive": "1.34.1",
-        "@polkadot/keyring": "^3.4.1",
-        "@polkadot/metadata": "1.34.1",
-        "@polkadot/rpc-core": "1.34.1",
-        "@polkadot/rpc-provider": "1.34.1",
-        "@polkadot/types": "1.34.1",
-        "@polkadot/types-known": "1.34.1",
-        "@polkadot/util": "^3.4.1",
-        "@polkadot/util-crypto": "^3.4.1",
+        "@babel/runtime": "^7.12.1",
+        "@polkadot/api-derive": "2.3.1",
+        "@polkadot/keyring": "^3.6.1",
+        "@polkadot/metadata": "2.3.1",
+        "@polkadot/rpc-core": "2.3.1",
+        "@polkadot/rpc-provider": "2.3.1",
+        "@polkadot/types": "2.3.1",
+        "@polkadot/types-known": "2.3.1",
+        "@polkadot/util": "^3.6.1",
+        "@polkadot/util-crypto": "^3.6.1",
         "bn.js": "^5.1.3",
         "eventemitter3": "^4.0.7",
         "rxjs": "^6.6.3"
       },
       "dependencies": {
-        "@polkadot/metadata": {
-          "version": "1.34.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/metadata/-/metadata-1.34.1.tgz",
-          "integrity": "sha512-uoaOhNHjECDaLBYvGRaLvF0mhZBFmsV3oikYDP4sZx3a5oD0xYsyXtr5bFPQDImwPFASP8/ltrMVqcYTX42xFg==",
-          "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@polkadot/types": "1.34.1",
-            "@polkadot/types-known": "1.34.1",
-            "@polkadot/util": "^3.4.1",
-            "@polkadot/util-crypto": "^3.4.1",
-            "bn.js": "^5.1.3"
-          }
-        },
-        "@polkadot/types": {
-          "version": "1.34.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-1.34.1.tgz",
-          "integrity": "sha512-jPwix2y+ZXKYB4ghODXlqYmcI3Tnsl3iO3xIkiGsZhhs9PdrKibcNeAv4LUiRpPuGRnAM+mrlPrBbCuzguKSGg==",
-          "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@polkadot/metadata": "1.34.1",
-            "@polkadot/util": "^3.4.1",
-            "@polkadot/util-crypto": "^3.4.1",
-            "@types/bn.js": "^4.11.6",
-            "bn.js": "^5.1.3",
-            "memoizee": "^0.4.14",
-            "rxjs": "^6.6.3"
-          }
-        },
-        "@polkadot/types-known": {
-          "version": "1.34.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-1.34.1.tgz",
-          "integrity": "sha512-H9V8u9cqbKjxU/dxEyLl7kJwoBImXpRskQ5+X0fq3BH7g1nQ6jrIg/buRPpbc3GxKivdFYUZWshPY9hbqE8y8A==",
+        "@babel/runtime": {
+          "version": "7.12.1",
+          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
+          "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
           "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@polkadot/types": "1.34.1",
-            "@polkadot/util": "^3.4.1",
-            "bn.js": "^5.1.3"
+            "regenerator-runtime": "^0.13.4"
           }
         },
         "@polkadot/util": {
-          "version": "3.4.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-3.4.1.tgz",
-          "integrity": "sha512-CJo0wAzXR8vjAzs9mHDooZr5a3XRW8LlYWik8d/+bv1VDwCC/metSiBrYBOapFhYUjlS5IYIw5bhWS5dnpkXvQ==",
+          "version": "3.6.1",
+          "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-3.6.1.tgz",
+          "integrity": "sha512-ToGVghmTtC8s8cg8mCGG3I88UasrCg9VNm5JoUvBH4nTZCxc/dQEkU24nULXwHUpmd7d39p3RLpVbkLCVYIMZw==",
           "requires": {
-            "@babel/runtime": "^7.11.2",
+            "@babel/runtime": "^7.12.1",
+            "@polkadot/x-textdecoder": "^0.3.3",
+            "@polkadot/x-textencoder": "^0.3.3",
             "@types/bn.js": "^4.11.6",
             "bn.js": "^5.1.3",
             "camelcase": "^5.3.1",
             "chalk": "^4.1.0",
-            "ip-regex": "^4.1.0"
+            "ip-regex": "^4.2.0"
           }
+        },
+        "ip-regex": {
+          "version": "4.2.0",
+          "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.2.0.tgz",
+          "integrity": "sha512-n5cDDeTWWRwK1EBoWwRti+8nP4NbytBBY0pldmnIkq6Z55KNFmWofh4rl9dPZpj+U/nVq7gweR3ylrvMt4YZ5A=="
         }
       }
     },
     "@polkadot/api-contract": {
-      "version": "1.34.1",
-      "resolved": "https://registry.npmjs.org/@polkadot/api-contract/-/api-contract-1.34.1.tgz",
-      "integrity": "sha512-oXh7An6E9wdbczXQhw+TfIkoKLQr4t0j3OwxubrhS5Qn6f99xGoAkk0BIKjsHPGIbMHEJoywmmLrDUAeTxExgg==",
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/@polkadot/api-contract/-/api-contract-2.3.1.tgz",
+      "integrity": "sha512-hqRU2mGkHK84dtqZSX71tFCuBmBiV/6H7pJwj5E7UPcd124LM2ETXYJ9T0ElxbAHmZQD7yv+2ZM/ncvGC/A68Q==",
       "requires": {
-        "@babel/runtime": "^7.11.2",
-        "@polkadot/api": "1.34.1",
-        "@polkadot/rpc-core": "1.34.1",
-        "@polkadot/types": "1.34.1",
-        "@polkadot/util": "^3.4.1",
+        "@babel/runtime": "^7.12.1",
+        "@polkadot/api": "2.3.1",
+        "@polkadot/rpc-core": "2.3.1",
+        "@polkadot/types": "2.3.1",
+        "@polkadot/util": "^3.6.1",
         "bn.js": "^5.1.3",
         "rxjs": "^6.6.3"
       },
       "dependencies": {
-        "@polkadot/api": {
-          "version": "1.34.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-1.34.1.tgz",
-          "integrity": "sha512-3gCibNRchH+XbEdULS1bwiV1RgarZW1PDw1Y1mAQBVqPrUpkYqntp1D52SQOpAbRzldkwk296Sj+mx9/IeDRXA==",
-          "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@polkadot/api-derive": "1.34.1",
-            "@polkadot/keyring": "^3.4.1",
-            "@polkadot/metadata": "1.34.1",
-            "@polkadot/rpc-core": "1.34.1",
-            "@polkadot/rpc-provider": "1.34.1",
-            "@polkadot/types": "1.34.1",
-            "@polkadot/types-known": "1.34.1",
-            "@polkadot/util": "^3.4.1",
-            "@polkadot/util-crypto": "^3.4.1",
-            "bn.js": "^5.1.3",
-            "eventemitter3": "^4.0.7",
-            "rxjs": "^6.6.3"
-          }
-        },
-        "@polkadot/api-derive": {
-          "version": "1.34.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-1.34.1.tgz",
-          "integrity": "sha512-LMlCkNJRp29MwKa36crYuY6cZpnkHCFrPCv9dmJEuDbMqrK+EAhXM9/6sTDYJ4uKNhyetJKe9rXslkXdI6pidA==",
-          "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@polkadot/api": "1.34.1",
-            "@polkadot/rpc-core": "1.34.1",
-            "@polkadot/rpc-provider": "1.34.1",
-            "@polkadot/types": "1.34.1",
-            "@polkadot/util": "^3.4.1",
-            "@polkadot/util-crypto": "^3.4.1",
-            "bn.js": "^5.1.3",
-            "memoizee": "^0.4.14",
-            "rxjs": "^6.6.3"
-          }
-        },
-        "@polkadot/metadata": {
-          "version": "1.34.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/metadata/-/metadata-1.34.1.tgz",
-          "integrity": "sha512-uoaOhNHjECDaLBYvGRaLvF0mhZBFmsV3oikYDP4sZx3a5oD0xYsyXtr5bFPQDImwPFASP8/ltrMVqcYTX42xFg==",
-          "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@polkadot/types": "1.34.1",
-            "@polkadot/types-known": "1.34.1",
-            "@polkadot/util": "^3.4.1",
-            "@polkadot/util-crypto": "^3.4.1",
-            "bn.js": "^5.1.3"
-          }
-        },
-        "@polkadot/rpc-core": {
-          "version": "1.34.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-1.34.1.tgz",
-          "integrity": "sha512-BVQDyBEkbRe5b/u8p9UPpTCj0sDZ32sTmPEP43Klc4s9+oHtiNvOFYvkjK5oyW9dlcOwXi8HpLsQxGAeMtM7Tw==",
-          "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@polkadot/metadata": "1.34.1",
-            "@polkadot/rpc-provider": "1.34.1",
-            "@polkadot/types": "1.34.1",
-            "@polkadot/util": "^3.4.1",
-            "memoizee": "^0.4.14",
-            "rxjs": "^6.6.3"
-          }
-        },
-        "@polkadot/rpc-provider": {
-          "version": "1.34.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-1.34.1.tgz",
-          "integrity": "sha512-bebeis9mB4LS9Spk1WSHoadZHsyHmK4gyyC6uKSLZxHZmnopWna6zWnOBIrYHRz7qDHSZC5eNTseuU8NJXtscA==",
-          "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@polkadot/metadata": "1.34.1",
-            "@polkadot/types": "1.34.1",
-            "@polkadot/util": "^3.4.1",
-            "@polkadot/util-crypto": "^3.4.1",
-            "@polkadot/x-fetch": "^0.3.2",
-            "@polkadot/x-ws": "^0.3.2",
-            "bn.js": "^5.1.3",
-            "eventemitter3": "^4.0.7"
-          }
-        },
-        "@polkadot/types": {
-          "version": "1.34.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-1.34.1.tgz",
-          "integrity": "sha512-jPwix2y+ZXKYB4ghODXlqYmcI3Tnsl3iO3xIkiGsZhhs9PdrKibcNeAv4LUiRpPuGRnAM+mrlPrBbCuzguKSGg==",
-          "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@polkadot/metadata": "1.34.1",
-            "@polkadot/util": "^3.4.1",
-            "@polkadot/util-crypto": "^3.4.1",
-            "@types/bn.js": "^4.11.6",
-            "bn.js": "^5.1.3",
-            "memoizee": "^0.4.14",
-            "rxjs": "^6.6.3"
-          }
-        },
-        "@polkadot/types-known": {
-          "version": "1.34.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-1.34.1.tgz",
-          "integrity": "sha512-H9V8u9cqbKjxU/dxEyLl7kJwoBImXpRskQ5+X0fq3BH7g1nQ6jrIg/buRPpbc3GxKivdFYUZWshPY9hbqE8y8A==",
+        "@babel/runtime": {
+          "version": "7.12.1",
+          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
+          "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
           "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@polkadot/types": "1.34.1",
-            "@polkadot/util": "^3.4.1",
-            "bn.js": "^5.1.3"
+            "regenerator-runtime": "^0.13.4"
           }
         },
         "@polkadot/util": {
-          "version": "3.4.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-3.4.1.tgz",
-          "integrity": "sha512-CJo0wAzXR8vjAzs9mHDooZr5a3XRW8LlYWik8d/+bv1VDwCC/metSiBrYBOapFhYUjlS5IYIw5bhWS5dnpkXvQ==",
+          "version": "3.6.1",
+          "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-3.6.1.tgz",
+          "integrity": "sha512-ToGVghmTtC8s8cg8mCGG3I88UasrCg9VNm5JoUvBH4nTZCxc/dQEkU24nULXwHUpmd7d39p3RLpVbkLCVYIMZw==",
           "requires": {
-            "@babel/runtime": "^7.11.2",
+            "@babel/runtime": "^7.12.1",
+            "@polkadot/x-textdecoder": "^0.3.3",
+            "@polkadot/x-textencoder": "^0.3.3",
             "@types/bn.js": "^4.11.6",
             "bn.js": "^5.1.3",
             "camelcase": "^5.3.1",
             "chalk": "^4.1.0",
-            "ip-regex": "^4.1.0"
+            "ip-regex": "^4.2.0"
           }
+        },
+        "ip-regex": {
+          "version": "4.2.0",
+          "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.2.0.tgz",
+          "integrity": "sha512-n5cDDeTWWRwK1EBoWwRti+8nP4NbytBBY0pldmnIkq6Z55KNFmWofh4rl9dPZpj+U/nVq7gweR3ylrvMt4YZ5A=="
         }
       }
     },
     "@polkadot/api-derive": {
-      "version": "1.34.1",
-      "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-1.34.1.tgz",
-      "integrity": "sha512-LMlCkNJRp29MwKa36crYuY6cZpnkHCFrPCv9dmJEuDbMqrK+EAhXM9/6sTDYJ4uKNhyetJKe9rXslkXdI6pidA==",
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-2.3.1.tgz",
+      "integrity": "sha512-FcDEx+/1Io7zOHPjbQAEzXB0KenA9emgY+96aHS4yPV/OVmAifU0IAxudZdMVp7uVC2dWq9iFvjxx84yCXgVRA==",
       "requires": {
-        "@babel/runtime": "^7.11.2",
-        "@polkadot/api": "1.34.1",
-        "@polkadot/rpc-core": "1.34.1",
-        "@polkadot/rpc-provider": "1.34.1",
-        "@polkadot/types": "1.34.1",
-        "@polkadot/util": "^3.4.1",
-        "@polkadot/util-crypto": "^3.4.1",
+        "@babel/runtime": "^7.12.1",
+        "@polkadot/api": "2.3.1",
+        "@polkadot/rpc-core": "2.3.1",
+        "@polkadot/rpc-provider": "2.3.1",
+        "@polkadot/types": "2.3.1",
+        "@polkadot/util": "^3.6.1",
+        "@polkadot/util-crypto": "^3.6.1",
         "bn.js": "^5.1.3",
         "memoizee": "^0.4.14",
         "rxjs": "^6.6.3"
       },
       "dependencies": {
-        "@polkadot/metadata": {
-          "version": "1.34.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/metadata/-/metadata-1.34.1.tgz",
-          "integrity": "sha512-uoaOhNHjECDaLBYvGRaLvF0mhZBFmsV3oikYDP4sZx3a5oD0xYsyXtr5bFPQDImwPFASP8/ltrMVqcYTX42xFg==",
-          "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@polkadot/types": "1.34.1",
-            "@polkadot/types-known": "1.34.1",
-            "@polkadot/util": "^3.4.1",
-            "@polkadot/util-crypto": "^3.4.1",
-            "bn.js": "^5.1.3"
-          }
-        },
-        "@polkadot/types": {
-          "version": "1.34.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-1.34.1.tgz",
-          "integrity": "sha512-jPwix2y+ZXKYB4ghODXlqYmcI3Tnsl3iO3xIkiGsZhhs9PdrKibcNeAv4LUiRpPuGRnAM+mrlPrBbCuzguKSGg==",
-          "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@polkadot/metadata": "1.34.1",
-            "@polkadot/util": "^3.4.1",
-            "@polkadot/util-crypto": "^3.4.1",
-            "@types/bn.js": "^4.11.6",
-            "bn.js": "^5.1.3",
-            "memoizee": "^0.4.14",
-            "rxjs": "^6.6.3"
-          }
-        },
-        "@polkadot/types-known": {
-          "version": "1.34.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-1.34.1.tgz",
-          "integrity": "sha512-H9V8u9cqbKjxU/dxEyLl7kJwoBImXpRskQ5+X0fq3BH7g1nQ6jrIg/buRPpbc3GxKivdFYUZWshPY9hbqE8y8A==",
+        "@babel/runtime": {
+          "version": "7.12.1",
+          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
+          "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
           "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@polkadot/types": "1.34.1",
-            "@polkadot/util": "^3.4.1",
-            "bn.js": "^5.1.3"
+            "regenerator-runtime": "^0.13.4"
           }
         },
         "@polkadot/util": {
-          "version": "3.4.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-3.4.1.tgz",
-          "integrity": "sha512-CJo0wAzXR8vjAzs9mHDooZr5a3XRW8LlYWik8d/+bv1VDwCC/metSiBrYBOapFhYUjlS5IYIw5bhWS5dnpkXvQ==",
+          "version": "3.6.1",
+          "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-3.6.1.tgz",
+          "integrity": "sha512-ToGVghmTtC8s8cg8mCGG3I88UasrCg9VNm5JoUvBH4nTZCxc/dQEkU24nULXwHUpmd7d39p3RLpVbkLCVYIMZw==",
           "requires": {
-            "@babel/runtime": "^7.11.2",
+            "@babel/runtime": "^7.12.1",
+            "@polkadot/x-textdecoder": "^0.3.3",
+            "@polkadot/x-textencoder": "^0.3.3",
             "@types/bn.js": "^4.11.6",
             "bn.js": "^5.1.3",
             "camelcase": "^5.3.1",
             "chalk": "^4.1.0",
-            "ip-regex": "^4.1.0"
+            "ip-regex": "^4.2.0"
           }
+        },
+        "ip-regex": {
+          "version": "4.2.0",
+          "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.2.0.tgz",
+          "integrity": "sha512-n5cDDeTWWRwK1EBoWwRti+8nP4NbytBBY0pldmnIkq6Z55KNFmWofh4rl9dPZpj+U/nVq7gweR3ylrvMt4YZ5A=="
         }
       }
     },
@@ -4277,193 +4138,193 @@
       }
     },
     "@polkadot/keyring": {
-      "version": "3.4.1",
-      "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-3.4.1.tgz",
-      "integrity": "sha512-x8FxzDzyFX5ai+tnPaxAFUBV/2Mw/om8sRoMh+fT6Jzh3nC7pXfecH5ticJPKe73v/y42hn9xM0tiAI5P8Ohcw==",
+      "version": "3.6.1",
+      "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-3.6.1.tgz",
+      "integrity": "sha512-JbW4M5Ct3HaX3vgoa/UWAQVF/0sc1PbbA2D6v0KKaJkXl+EYVP9uyOYAoRCppB6ENZThz7CUJVQp8trs8WTrFQ==",
       "requires": {
-        "@babel/runtime": "^7.11.2",
-        "@polkadot/util": "3.4.1",
-        "@polkadot/util-crypto": "3.4.1"
+        "@babel/runtime": "^7.12.1",
+        "@polkadot/util": "3.6.1",
+        "@polkadot/util-crypto": "3.6.1"
       },
       "dependencies": {
+        "@babel/runtime": {
+          "version": "7.12.1",
+          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
+          "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
+          "requires": {
+            "regenerator-runtime": "^0.13.4"
+          }
+        },
         "@polkadot/util": {
-          "version": "3.4.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-3.4.1.tgz",
-          "integrity": "sha512-CJo0wAzXR8vjAzs9mHDooZr5a3XRW8LlYWik8d/+bv1VDwCC/metSiBrYBOapFhYUjlS5IYIw5bhWS5dnpkXvQ==",
+          "version": "3.6.1",
+          "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-3.6.1.tgz",
+          "integrity": "sha512-ToGVghmTtC8s8cg8mCGG3I88UasrCg9VNm5JoUvBH4nTZCxc/dQEkU24nULXwHUpmd7d39p3RLpVbkLCVYIMZw==",
           "requires": {
-            "@babel/runtime": "^7.11.2",
+            "@babel/runtime": "^7.12.1",
+            "@polkadot/x-textdecoder": "^0.3.3",
+            "@polkadot/x-textencoder": "^0.3.3",
             "@types/bn.js": "^4.11.6",
             "bn.js": "^5.1.3",
             "camelcase": "^5.3.1",
             "chalk": "^4.1.0",
-            "ip-regex": "^4.1.0"
+            "ip-regex": "^4.2.0"
           }
+        },
+        "ip-regex": {
+          "version": "4.2.0",
+          "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.2.0.tgz",
+          "integrity": "sha512-n5cDDeTWWRwK1EBoWwRti+8nP4NbytBBY0pldmnIkq6Z55KNFmWofh4rl9dPZpj+U/nVq7gweR3ylrvMt4YZ5A=="
         }
       }
     },
     "@polkadot/metadata": {
-      "version": "1.34.1",
-      "resolved": "https://registry.npmjs.org/@polkadot/metadata/-/metadata-1.34.1.tgz",
-      "integrity": "sha512-uoaOhNHjECDaLBYvGRaLvF0mhZBFmsV3oikYDP4sZx3a5oD0xYsyXtr5bFPQDImwPFASP8/ltrMVqcYTX42xFg==",
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/@polkadot/metadata/-/metadata-2.3.1.tgz",
+      "integrity": "sha512-F/QwDDR/d9mcqToDqndRTUYvMt/GYzjQ+kNGjQYBOIDRqF9zDbPHAXruqcHd0Y5MMpPMRBZGNaqPOb3BMrIdOQ==",
       "requires": {
-        "@babel/runtime": "^7.11.2",
-        "@polkadot/types": "1.34.1",
-        "@polkadot/types-known": "1.34.1",
-        "@polkadot/util": "^3.4.1",
-        "@polkadot/util-crypto": "^3.4.1",
+        "@babel/runtime": "^7.12.1",
+        "@polkadot/types": "2.3.1",
+        "@polkadot/types-known": "2.3.1",
+        "@polkadot/util": "^3.6.1",
+        "@polkadot/util-crypto": "^3.6.1",
         "bn.js": "^5.1.3"
       },
       "dependencies": {
+        "@babel/runtime": {
+          "version": "7.12.1",
+          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
+          "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
+          "requires": {
+            "regenerator-runtime": "^0.13.4"
+          }
+        },
         "@polkadot/util": {
-          "version": "3.4.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-3.4.1.tgz",
-          "integrity": "sha512-CJo0wAzXR8vjAzs9mHDooZr5a3XRW8LlYWik8d/+bv1VDwCC/metSiBrYBOapFhYUjlS5IYIw5bhWS5dnpkXvQ==",
+          "version": "3.6.1",
+          "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-3.6.1.tgz",
+          "integrity": "sha512-ToGVghmTtC8s8cg8mCGG3I88UasrCg9VNm5JoUvBH4nTZCxc/dQEkU24nULXwHUpmd7d39p3RLpVbkLCVYIMZw==",
           "requires": {
-            "@babel/runtime": "^7.11.2",
+            "@babel/runtime": "^7.12.1",
+            "@polkadot/x-textdecoder": "^0.3.3",
+            "@polkadot/x-textencoder": "^0.3.3",
             "@types/bn.js": "^4.11.6",
             "bn.js": "^5.1.3",
             "camelcase": "^5.3.1",
             "chalk": "^4.1.0",
-            "ip-regex": "^4.1.0"
+            "ip-regex": "^4.2.0"
           }
+        },
+        "ip-regex": {
+          "version": "4.2.0",
+          "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.2.0.tgz",
+          "integrity": "sha512-n5cDDeTWWRwK1EBoWwRti+8nP4NbytBBY0pldmnIkq6Z55KNFmWofh4rl9dPZpj+U/nVq7gweR3ylrvMt4YZ5A=="
         }
       }
     },
+    "@polkadot/networks": {
+      "version": "3.6.1",
+      "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-3.6.1.tgz",
+      "integrity": "sha512-PEEw/vTZaKf32vuAUeFXYNJei+b/s3hr7msMKfvoYeKDU/otgt9Mgkqrh6VCaE6+lHHgX8vLbH70pCqQrGG/uA==",
+      "requires": {
+        "@babel/runtime": "^7.12.1"
+      },
+      "dependencies": {
+        "@babel/runtime": {
+          "version": "7.12.1",
+          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
+          "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
+          "requires": {
+            "regenerator-runtime": "^0.13.4"
+          }
+        }
+      }
+    },
     "@polkadot/rpc-core": {
-      "version": "1.34.1",
-      "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-1.34.1.tgz",
-      "integrity": "sha512-BVQDyBEkbRe5b/u8p9UPpTCj0sDZ32sTmPEP43Klc4s9+oHtiNvOFYvkjK5oyW9dlcOwXi8HpLsQxGAeMtM7Tw==",
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-2.3.1.tgz",
+      "integrity": "sha512-SWYU6azxNwWkhz6bm/wpRPQZ/5KJ2hnEXPS4EN77q7EFH4c4k9mNtVyjUQFkKJsG7T85vxaCCWwhx60aYCZVeA==",
       "requires": {
-        "@babel/runtime": "^7.11.2",
-        "@polkadot/metadata": "1.34.1",
-        "@polkadot/rpc-provider": "1.34.1",
-        "@polkadot/types": "1.34.1",
-        "@polkadot/util": "^3.4.1",
+        "@babel/runtime": "^7.12.1",
+        "@polkadot/metadata": "2.3.1",
+        "@polkadot/rpc-provider": "2.3.1",
+        "@polkadot/types": "2.3.1",
+        "@polkadot/util": "^3.6.1",
         "memoizee": "^0.4.14",
         "rxjs": "^6.6.3"
       },
       "dependencies": {
-        "@polkadot/metadata": {
-          "version": "1.34.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/metadata/-/metadata-1.34.1.tgz",
-          "integrity": "sha512-uoaOhNHjECDaLBYvGRaLvF0mhZBFmsV3oikYDP4sZx3a5oD0xYsyXtr5bFPQDImwPFASP8/ltrMVqcYTX42xFg==",
-          "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@polkadot/types": "1.34.1",
-            "@polkadot/types-known": "1.34.1",
-            "@polkadot/util": "^3.4.1",
-            "@polkadot/util-crypto": "^3.4.1",
-            "bn.js": "^5.1.3"
-          }
-        },
-        "@polkadot/types": {
-          "version": "1.34.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-1.34.1.tgz",
-          "integrity": "sha512-jPwix2y+ZXKYB4ghODXlqYmcI3Tnsl3iO3xIkiGsZhhs9PdrKibcNeAv4LUiRpPuGRnAM+mrlPrBbCuzguKSGg==",
+        "@babel/runtime": {
+          "version": "7.12.1",
+          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
+          "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
           "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@polkadot/metadata": "1.34.1",
-            "@polkadot/util": "^3.4.1",
-            "@polkadot/util-crypto": "^3.4.1",
-            "@types/bn.js": "^4.11.6",
-            "bn.js": "^5.1.3",
-            "memoizee": "^0.4.14",
-            "rxjs": "^6.6.3"
+            "regenerator-runtime": "^0.13.4"
           }
         },
-        "@polkadot/types-known": {
-          "version": "1.34.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-1.34.1.tgz",
-          "integrity": "sha512-H9V8u9cqbKjxU/dxEyLl7kJwoBImXpRskQ5+X0fq3BH7g1nQ6jrIg/buRPpbc3GxKivdFYUZWshPY9hbqE8y8A==",
-          "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@polkadot/types": "1.34.1",
-            "@polkadot/util": "^3.4.1",
-            "bn.js": "^5.1.3"
-          }
-        },
         "@polkadot/util": {
-          "version": "3.4.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-3.4.1.tgz",
-          "integrity": "sha512-CJo0wAzXR8vjAzs9mHDooZr5a3XRW8LlYWik8d/+bv1VDwCC/metSiBrYBOapFhYUjlS5IYIw5bhWS5dnpkXvQ==",
+          "version": "3.6.1",
+          "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-3.6.1.tgz",
+          "integrity": "sha512-ToGVghmTtC8s8cg8mCGG3I88UasrCg9VNm5JoUvBH4nTZCxc/dQEkU24nULXwHUpmd7d39p3RLpVbkLCVYIMZw==",
           "requires": {
-            "@babel/runtime": "^7.11.2",
+            "@babel/runtime": "^7.12.1",
+            "@polkadot/x-textdecoder": "^0.3.3",
+            "@polkadot/x-textencoder": "^0.3.3",
             "@types/bn.js": "^4.11.6",
             "bn.js": "^5.1.3",
             "camelcase": "^5.3.1",
             "chalk": "^4.1.0",
-            "ip-regex": "^4.1.0"
+            "ip-regex": "^4.2.0"
           }
+        },
+        "ip-regex": {
+          "version": "4.2.0",
+          "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.2.0.tgz",
+          "integrity": "sha512-n5cDDeTWWRwK1EBoWwRti+8nP4NbytBBY0pldmnIkq6Z55KNFmWofh4rl9dPZpj+U/nVq7gweR3ylrvMt4YZ5A=="
         }
       }
     },
     "@polkadot/rpc-provider": {
-      "version": "1.34.1",
-      "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-1.34.1.tgz",
-      "integrity": "sha512-bebeis9mB4LS9Spk1WSHoadZHsyHmK4gyyC6uKSLZxHZmnopWna6zWnOBIrYHRz7qDHSZC5eNTseuU8NJXtscA==",
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-2.3.1.tgz",
+      "integrity": "sha512-lRN68RosWvtBA844PWqhYEV2ifT3T9SUyAP2WvRYyWVPiMmXjw57qG1zHKQWgZk5aFzeaHKSYgsKTmkWz9IM4g==",
       "requires": {
-        "@babel/runtime": "^7.11.2",
-        "@polkadot/metadata": "1.34.1",
-        "@polkadot/types": "1.34.1",
-        "@polkadot/util": "^3.4.1",
-        "@polkadot/util-crypto": "^3.4.1",
-        "@polkadot/x-fetch": "^0.3.2",
-        "@polkadot/x-ws": "^0.3.2",
+        "@babel/runtime": "^7.12.1",
+        "@polkadot/metadata": "2.3.1",
+        "@polkadot/types": "2.3.1",
+        "@polkadot/util": "^3.6.1",
+        "@polkadot/util-crypto": "^3.6.1",
+        "@polkadot/x-fetch": "^0.3.3",
+        "@polkadot/x-ws": "^0.3.3",
         "bn.js": "^5.1.3",
         "eventemitter3": "^4.0.7"
       },
       "dependencies": {
-        "@polkadot/metadata": {
-          "version": "1.34.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/metadata/-/metadata-1.34.1.tgz",
-          "integrity": "sha512-uoaOhNHjECDaLBYvGRaLvF0mhZBFmsV3oikYDP4sZx3a5oD0xYsyXtr5bFPQDImwPFASP8/ltrMVqcYTX42xFg==",
+        "@babel/runtime": {
+          "version": "7.12.1",
+          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
+          "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
           "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@polkadot/types": "1.34.1",
-            "@polkadot/types-known": "1.34.1",
-            "@polkadot/util": "^3.4.1",
-            "@polkadot/util-crypto": "^3.4.1",
-            "bn.js": "^5.1.3"
-          }
-        },
-        "@polkadot/types": {
-          "version": "1.34.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-1.34.1.tgz",
-          "integrity": "sha512-jPwix2y+ZXKYB4ghODXlqYmcI3Tnsl3iO3xIkiGsZhhs9PdrKibcNeAv4LUiRpPuGRnAM+mrlPrBbCuzguKSGg==",
-          "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@polkadot/metadata": "1.34.1",
-            "@polkadot/util": "^3.4.1",
-            "@polkadot/util-crypto": "^3.4.1",
-            "@types/bn.js": "^4.11.6",
-            "bn.js": "^5.1.3",
-            "memoizee": "^0.4.14",
-            "rxjs": "^6.6.3"
-          }
-        },
-        "@polkadot/types-known": {
-          "version": "1.34.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-1.34.1.tgz",
-          "integrity": "sha512-H9V8u9cqbKjxU/dxEyLl7kJwoBImXpRskQ5+X0fq3BH7g1nQ6jrIg/buRPpbc3GxKivdFYUZWshPY9hbqE8y8A==",
-          "requires": {
-            "@babel/runtime": "^7.11.2",
-            "@polkadot/types": "1.34.1",
-            "@polkadot/util": "^3.4.1",
-            "bn.js": "^5.1.3"
+            "regenerator-runtime": "^0.13.4"
           }
         },
         "@polkadot/util": {
-          "version": "3.4.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-3.4.1.tgz",
-          "integrity": "sha512-CJo0wAzXR8vjAzs9mHDooZr5a3XRW8LlYWik8d/+bv1VDwCC/metSiBrYBOapFhYUjlS5IYIw5bhWS5dnpkXvQ==",
+          "version": "3.6.1",
+          "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-3.6.1.tgz",
+          "integrity": "sha512-ToGVghmTtC8s8cg8mCGG3I88UasrCg9VNm5JoUvBH4nTZCxc/dQEkU24nULXwHUpmd7d39p3RLpVbkLCVYIMZw==",
           "requires": {
-            "@babel/runtime": "^7.11.2",
+            "@babel/runtime": "^7.12.1",
+            "@polkadot/x-textdecoder": "^0.3.3",
+            "@polkadot/x-textencoder": "^0.3.3",
             "@types/bn.js": "^4.11.6",
             "bn.js": "^5.1.3",
             "camelcase": "^5.3.1",
             "chalk": "^4.1.0",
-            "ip-regex": "^4.1.0"
+            "ip-regex": "^4.2.0"
           }
+        },
+        "ip-regex": {
+          "version": "4.2.0",
+          "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.2.0.tgz",
+          "integrity": "sha512-n5cDDeTWWRwK1EBoWwRti+8nP4NbytBBY0pldmnIkq6Z55KNFmWofh4rl9dPZpj+U/nVq7gweR3ylrvMt4YZ5A=="
         }
       }
     },
@@ -4477,58 +4338,88 @@
       }
     },
     "@polkadot/types": {
-      "version": "1.34.1",
-      "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-1.34.1.tgz",
-      "integrity": "sha512-jPwix2y+ZXKYB4ghODXlqYmcI3Tnsl3iO3xIkiGsZhhs9PdrKibcNeAv4LUiRpPuGRnAM+mrlPrBbCuzguKSGg==",
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-2.3.1.tgz",
+      "integrity": "sha512-G3cyYYV+vYmpkMjPirwOA/zLreb1uBrKpEMWTvtTuCz/sNwcbCT5hI/KZCzNo1PueOQAowroKPe4yQ793dqVPw==",
       "requires": {
-        "@babel/runtime": "^7.11.2",
-        "@polkadot/metadata": "1.34.1",
-        "@polkadot/util": "^3.4.1",
-        "@polkadot/util-crypto": "^3.4.1",
+        "@babel/runtime": "^7.12.1",
+        "@polkadot/metadata": "2.3.1",
+        "@polkadot/util": "^3.6.1",
+        "@polkadot/util-crypto": "^3.6.1",
         "@types/bn.js": "^4.11.6",
         "bn.js": "^5.1.3",
         "memoizee": "^0.4.14",
         "rxjs": "^6.6.3"
       },
       "dependencies": {
+        "@babel/runtime": {
+          "version": "7.12.1",
+          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
+          "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
+          "requires": {
+            "regenerator-runtime": "^0.13.4"
+          }
+        },
         "@polkadot/util": {
-          "version": "3.4.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-3.4.1.tgz",
-          "integrity": "sha512-CJo0wAzXR8vjAzs9mHDooZr5a3XRW8LlYWik8d/+bv1VDwCC/metSiBrYBOapFhYUjlS5IYIw5bhWS5dnpkXvQ==",
+          "version": "3.6.1",
+          "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-3.6.1.tgz",
+          "integrity": "sha512-ToGVghmTtC8s8cg8mCGG3I88UasrCg9VNm5JoUvBH4nTZCxc/dQEkU24nULXwHUpmd7d39p3RLpVbkLCVYIMZw==",
           "requires": {
-            "@babel/runtime": "^7.11.2",
+            "@babel/runtime": "^7.12.1",
+            "@polkadot/x-textdecoder": "^0.3.3",
+            "@polkadot/x-textencoder": "^0.3.3",
             "@types/bn.js": "^4.11.6",
             "bn.js": "^5.1.3",
             "camelcase": "^5.3.1",
             "chalk": "^4.1.0",
-            "ip-regex": "^4.1.0"
+            "ip-regex": "^4.2.0"
           }
+        },
+        "ip-regex": {
+          "version": "4.2.0",
+          "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.2.0.tgz",
+          "integrity": "sha512-n5cDDeTWWRwK1EBoWwRti+8nP4NbytBBY0pldmnIkq6Z55KNFmWofh4rl9dPZpj+U/nVq7gweR3ylrvMt4YZ5A=="
         }
       }
     },
     "@polkadot/types-known": {
-      "version": "1.34.1",
-      "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-1.34.1.tgz",
-      "integrity": "sha512-H9V8u9cqbKjxU/dxEyLl7kJwoBImXpRskQ5+X0fq3BH7g1nQ6jrIg/buRPpbc3GxKivdFYUZWshPY9hbqE8y8A==",
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-2.3.1.tgz",
+      "integrity": "sha512-34yuvDraW9Sjy5ookQZf55sBKLOsTqos+WQdTu6DUxtRuwvMP9DEAGcs2m6AFvWxwZps+3zFGUvzn6SMHsSJ5Q==",
       "requires": {
-        "@babel/runtime": "^7.11.2",
-        "@polkadot/types": "1.34.1",
-        "@polkadot/util": "^3.4.1",
+        "@babel/runtime": "^7.12.1",
+        "@polkadot/types": "2.3.1",
+        "@polkadot/util": "^3.6.1",
         "bn.js": "^5.1.3"
       },
       "dependencies": {
+        "@babel/runtime": {
+          "version": "7.12.1",
+          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
+          "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
+          "requires": {
+            "regenerator-runtime": "^0.13.4"
+          }
+        },
         "@polkadot/util": {
-          "version": "3.4.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-3.4.1.tgz",
-          "integrity": "sha512-CJo0wAzXR8vjAzs9mHDooZr5a3XRW8LlYWik8d/+bv1VDwCC/metSiBrYBOapFhYUjlS5IYIw5bhWS5dnpkXvQ==",
+          "version": "3.6.1",
+          "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-3.6.1.tgz",
+          "integrity": "sha512-ToGVghmTtC8s8cg8mCGG3I88UasrCg9VNm5JoUvBH4nTZCxc/dQEkU24nULXwHUpmd7d39p3RLpVbkLCVYIMZw==",
           "requires": {
-            "@babel/runtime": "^7.11.2",
+            "@babel/runtime": "^7.12.1",
+            "@polkadot/x-textdecoder": "^0.3.3",
+            "@polkadot/x-textencoder": "^0.3.3",
             "@types/bn.js": "^4.11.6",
             "bn.js": "^5.1.3",
             "camelcase": "^5.3.1",
             "chalk": "^4.1.0",
-            "ip-regex": "^4.1.0"
+            "ip-regex": "^4.2.0"
           }
+        },
+        "ip-regex": {
+          "version": "4.2.0",
+          "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.2.0.tgz",
+          "integrity": "sha512-n5cDDeTWWRwK1EBoWwRti+8nP4NbytBBY0pldmnIkq6Z55KNFmWofh4rl9dPZpj+U/nVq7gweR3ylrvMt4YZ5A=="
         }
       }
     },
@@ -4546,12 +4437,13 @@
       }
     },
     "@polkadot/util-crypto": {
-      "version": "3.4.1",
-      "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-3.4.1.tgz",
-      "integrity": "sha512-RdTAiJ6dFE8nQJ7/wQkvYa6aNZG3Lusf/r7UmPJ56dZldvDTP3OdekzcfYdogU8hSJrE/xX84ii4DrHLnXXfAQ==",
+      "version": "3.6.1",
+      "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-3.6.1.tgz",
+      "integrity": "sha512-mRCijOXrxTa2JD5vpNvr1MHSj3NaSGaImg1yzAf3l7nw7zNGjLy1K3qQNcFgr8+0NHyPKk5lCIehtwGTRZYsiA==",
       "requires": {
-        "@babel/runtime": "^7.11.2",
-        "@polkadot/util": "3.4.1",
+        "@babel/runtime": "^7.12.1",
+        "@polkadot/networks": "3.6.1",
+        "@polkadot/util": "3.6.1",
         "@polkadot/wasm-crypto": "^1.4.1",
         "base-x": "^3.0.8",
         "bip39": "^3.0.2",
@@ -4565,18 +4457,33 @@
         "xxhashjs": "^0.2.2"
       },
       "dependencies": {
+        "@babel/runtime": {
+          "version": "7.12.1",
+          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
+          "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
+          "requires": {
+            "regenerator-runtime": "^0.13.4"
+          }
+        },
         "@polkadot/util": {
-          "version": "3.4.1",
-          "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-3.4.1.tgz",
-          "integrity": "sha512-CJo0wAzXR8vjAzs9mHDooZr5a3XRW8LlYWik8d/+bv1VDwCC/metSiBrYBOapFhYUjlS5IYIw5bhWS5dnpkXvQ==",
+          "version": "3.6.1",
+          "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-3.6.1.tgz",
+          "integrity": "sha512-ToGVghmTtC8s8cg8mCGG3I88UasrCg9VNm5JoUvBH4nTZCxc/dQEkU24nULXwHUpmd7d39p3RLpVbkLCVYIMZw==",
           "requires": {
-            "@babel/runtime": "^7.11.2",
+            "@babel/runtime": "^7.12.1",
+            "@polkadot/x-textdecoder": "^0.3.3",
+            "@polkadot/x-textencoder": "^0.3.3",
             "@types/bn.js": "^4.11.6",
             "bn.js": "^5.1.3",
             "camelcase": "^5.3.1",
             "chalk": "^4.1.0",
-            "ip-regex": "^4.1.0"
+            "ip-regex": "^4.2.0"
           }
+        },
+        "ip-regex": {
+          "version": "4.2.0",
+          "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.2.0.tgz",
+          "integrity": "sha512-n5cDDeTWWRwK1EBoWwRti+8nP4NbytBBY0pldmnIkq6Z55KNFmWofh4rl9dPZpj+U/nVq7gweR3ylrvMt4YZ5A=="
         }
       }
     },
@@ -4586,30 +4493,79 @@
       "integrity": "sha512-GPBCh8YvQmA5bobI4rqRkUhrEHkEWU1+lcJVPbZYsa7jiHFaZpzCLrGQfiqW/vtbU1aBS2wmJ0x1nlt33B9QqQ=="
     },
     "@polkadot/x-fetch": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-0.3.2.tgz",
-      "integrity": "sha512-lk9M8ql/kBBqiZ8KOWj7LFK7P9OxDgVn2fZPNELJzQbfFZwFF8umBPDIWlQIK7wTnlRsQlzOuf6MGEyMK5p42w==",
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-0.3.3.tgz",
+      "integrity": "sha512-Osa+ifkqlndIW5U5jLnuugLYTd6q/cHkjdfisyYgNev/etsEtXkqesbGvF/UKw5FgZBxhK8sj6jjfProfh2NZw==",
       "requires": {
-        "@babel/runtime": "^7.11.2",
+        "@babel/runtime": "^7.12.1",
         "@types/node-fetch": "^2.5.7",
         "node-fetch": "^2.6.1"
       },
       "dependencies": {
-        "node-fetch": {
-          "version": "2.6.1",
-          "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
-          "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
+        "@babel/runtime": {
+          "version": "7.12.1",
+          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
+          "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
+          "requires": {
+            "regenerator-runtime": "^0.13.4"
+          }
+        }
+      }
+    },
+    "@polkadot/x-textdecoder": {
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-0.3.3.tgz",
+      "integrity": "sha512-ehbPUUNn34kJh/RV8eQwyLnAFcMQSbtGPKqGRB7GSa/bL7P6hh1QGxB4DwvtlFU//bDTlofsv44ydpjDNmfWLg==",
+      "requires": {
+        "@babel/runtime": "^7.12.1"
+      },
+      "dependencies": {
+        "@babel/runtime": {
+          "version": "7.12.1",
+          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
+          "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
+          "requires": {
+            "regenerator-runtime": "^0.13.4"
+          }
+        }
+      }
+    },
+    "@polkadot/x-textencoder": {
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-0.3.3.tgz",
+      "integrity": "sha512-klbz82L5LxDJTFoCO64G/EFfY1mKXHDlteJMDGFTOim/1oK1ypLOG8/7BmncmQAw2BevA0r1YkvWN+F3muJSag==",
+      "requires": {
+        "@babel/runtime": "^7.12.1"
+      },
+      "dependencies": {
+        "@babel/runtime": {
+          "version": "7.12.1",
+          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
+          "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
+          "requires": {
+            "regenerator-runtime": "^0.13.4"
+          }
         }
       }
     },
     "@polkadot/x-ws": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-0.3.2.tgz",
-      "integrity": "sha512-1aiG11Py8sgzJsz19melMzvBOn5zeMmfjCPoMryX4//063E0mcfnkujg4O6pTMygxJdFGAV1INB9wvMU9Dg9Wg==",
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-0.3.3.tgz",
+      "integrity": "sha512-t06ID5QLYi5B8bzlT2fcYsQ09yfLf5Uq9idunKRZj13EwSELaqvZFfn2UmiDFiIB1H5u7c2y+VDWbIdqE8ZxKw==",
       "requires": {
-        "@babel/runtime": "^7.11.2",
+        "@babel/runtime": "^7.12.1",
         "@types/websocket": "^1.0.1",
         "websocket": "^1.0.32"
+      },
+      "dependencies": {
+        "@babel/runtime": {
+          "version": "7.12.1",
+          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
+          "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
+          "requires": {
+            "regenerator-runtime": "^0.13.4"
+          }
+        }
       }
     },
     "@sindresorhus/is": {
@@ -16840,6 +16796,11 @@
         "lower-case": "^1.1.1"
       }
     },
+    "node-fetch": {
+      "version": "2.6.1",
+      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
+      "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
+    },
     "node-fetch-npm": {
       "version": "2.0.4",
       "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz",
modifiedtests/package.jsondiffbeforeafterboth
--- a/tests/package.json
+++ b/tests/package.json
@@ -23,9 +23,9 @@
   "license": "Apache 2.0",
   "homepage": "",
   "dependencies": {
-    "@polkadot/api": "^1.34.1",
-    "@polkadot/api-contract": "^1.34.1",
-    "@polkadot/types": "^1.34.1",
+    "@polkadot/api": "^2.3.1",
+    "@polkadot/api-contract": "^2.3.1",
+    "@polkadot/types": "^2.3.1",
     "@polkadot/util": "^3.4.1",
     "@types/bn.js": "^4.11.6",
     "chai-as-promised": "^7.1.1"
modifiedtests/src/contracts.test.tsdiffbeforeafterboth
--- a/tests/src/contracts.test.ts
+++ b/tests/src/contracts.test.ts
@@ -1,129 +1,91 @@
 import { expect } from "chai";
 import usingApi from "./substrate/substrate-api";
-import promisifySubstrate from "./substrate/promisify-substrate";
 import fs from "fs";
-import privateKey from "./substrate/privateKey";
-import { compactAddLength, u8aToU8a } from '@polkadot/util';
-import { Hash, AccountId } from "@polkadot/types/interfaces";
-import { Abi, PromiseContract } from "@polkadot/api-contract";
-import { ISubmittableResult, IKeyringPair } from "@polkadot/types/types";
-import BN from "bn.js";
-import { alicesPublicKey, bobsPublicKey } from "./accounts";
-import { ApiPromise } from "@polkadot/api";
-import { GenericAccountId, u128 } from "@polkadot/types";
-import getBalance from "./substrate/get-balance";
+import { Abi, BlueprintPromise, CodePromise } from "@polkadot/api-contract";
+import { IKeyringPair } from "@polkadot/types/types";
+import { Keyring } from "@polkadot/api";
+import { ApiTypes, SubmittableExtrinsic } from "@polkadot/api/types";
 
+const value = 0;
+const gasLimit = 3000n * 1000000n;
 
-function deployContract(api: ApiPromise, contract: Uint8Array, privateKey: IKeyringPair): Promise<Hash> {
-  return promisifySubstrate(api, () => {
-    return new Promise<Hash>(async (resolve, reject) => {
-      const unsubscribe = api.tx.contracts.putCode(contract).signAndSend(privateKey, async result => {
-        if(!result.isInBlock){
-          return;
+function deployBlueprint(alice: IKeyringPair, code: CodePromise): Promise<BlueprintPromise> {
+  return new Promise<BlueprintPromise>(async (resolve, reject) => {
+    const unsub = await code
+      .createBlueprint()
+      .signAndSend(alice, (result) => {
+        if (result.status.isInBlock || result.status.isFinalized) {
+          // here we have an additional field in the result, containing the blueprint
+          resolve(result.blueprint);
+          unsub();
         }
+      })
+  });
+}
 
-        const record = result.findRecord('contracts', 'CodeStored');
+function deployContract(alice: IKeyringPair, blueprint: BlueprintPromise) : Promise<any> {
+  return new Promise<any>(async (resolve, reject) => {
+    const endowment = 1000000000000000n;
+    const initValue = true;
 
-        if(record) {
-          (await unsubscribe)();
-          resolve(record.event.data[0] as unknown as Hash);
-        } else {
-          reject('Failed to find contract hash in putCode transaction result.');
-        }
-      });
-    })
-  })();
+    const unsub = await blueprint.tx
+    .new(endowment, gasLimit, initValue)
+    .signAndSend(alice, (result) => {
+      if (result.status.isInBlock || result.status.isFinalized) {
+        unsub();
+        resolve(result);
+      }
+    });    
+  });
 }
 
-function instantiateContract(api: ApiPromise, contractHash: Hash, args: Uint8Array, privateKey: IKeyringPair): Promise<AccountId> {
-  return promisifySubstrate(api, () => {
-    return new Promise<AccountId>((resolve, reject) => {
-      const unsubscribe = api.tx.contracts.instantiate(1000000000000000n, 1000000000000n, contractHash, args)
-        .signAndSend(privateKey, async (result:ISubmittableResult) => {
-          if(!result.isInBlock) {
-            return;
-          }
-          const record = result.findRecord('contracts', 'Instantiated');
-          if(record) {
-            (await unsubscribe)();
-            expect(alicesPublicKey).to.be.equal(record.event.data[0].toString());
-            resolve(record.event.data[1] as AccountId);
-          } else {
-            reject('Failed to find instantiated event.');
-          }
-        });
-    });
-  })();
-}
-
-function txContractCall(api: ApiPromise, privateKey: IKeyringPair, address: string, call: Uint8Array): Promise<void> {
-  return promisifySubstrate(api, async () => {
-    return new Promise<void>(async (resolve, reject) => {
-      api.tx.contracts.call(address, 0, 1000000000000n, call)
-        .signAndSend(privateKey, async result => {
-          if(!result.isInBlock) {
-            return;
-          }
+function runTransaction(privateKey: IKeyringPair, extrinsic: SubmittableExtrinsic<ApiTypes>) {
+  return new Promise<void>(async (resolve, reject) => {
+    extrinsic.signAndSend(privateKey, async result => {
+        if(!result.isInBlock) {
+          return;
+        }
 
-          if(result.findRecord('system', 'ExtrinsicSuccess')) {
-            resolve();
-          }
-          else {
-            reject('Failed to execute tx call.');
-          }
-        })
-    });
-  })();
+        if(result.findRecord('system', 'ExtrinsicSuccess')) {
+          resolve();
+        }
+        else {
+          reject('Failed to flip value.');
+        }
+      })
+  });
 }
 
 describe('Contracts', () => {
   it(`Can deploy smart contract Flipper, instantiate it and call it's get and flip messages.`, async () => {
     await usingApi(async api => {
+      const keyring = new Keyring({ type: 'sr25519' });
+      const alice = keyring.addFromUri("//Alice");
+      
       const wasm = fs.readFileSync('./src/flipper/flipper.wasm');
-      const contract = compactAddLength(u8aToU8a(wasm));
-
+      
       const metadata = JSON.parse(fs.readFileSync('./src/flipper/metadata.json').toString('utf-8'));
-      const abi = new Abi(api.registry as any, metadata);
+      const abi = new Abi(metadata);
 
-      const alicesPrivateKey = privateKey('//Alice');
+      const code = new CodePromise(api, abi, wasm);
 
-      const contractHash = await deployContract(api, contract, alicesPrivateKey);
-
-      const args = abi.constructors[0](true);
-      const instanceAccountId = await instantiateContract(api, contractHash, args, alicesPrivateKey);
+      const blueprint = await deployBlueprint(alice, code);
+      const contract = (await deployContract(alice, blueprint))['contract'];
 
-      const contractInstance = new PromiseContract(api, abi, instanceAccountId);
       const getFlipValue = async () => {
-        return await promisifySubstrate(api, async () => {
-          const result = await contractInstance.call('rpc', 'get', 0, new BN('1000000000000'))
-            .send(alicesPublicKey);
-          if(!result.isSuccess) {
-            throw 'Failed to get flipper value';
-          }
-          return result.output && result.output.valueOf && result.output.valueOf();
-        })();
+        const result = await contract.query.get(alice.address, value, gasLimit);
+
+        if(!result.result.isSuccess) {
+          throw `Failed to get flipper value`;
+        }
+        return (result.result.asSuccess.data[0] == 0x00) ? false : true;
       }
 
       const initialGetResponse = await getFlipValue();
       expect(initialGetResponse).to.be.true;
 
-      await promisifySubstrate(api, async () => {
-        return new Promise<void>(async (resolve, reject) => {
-          api.tx.contracts.call(contractInstance.address.toString(), 0, 1000000000000n, contractInstance.getMessage('flip').fn())
-            .signAndSend(alicesPrivateKey, async result => {
-              if(!result.isInBlock) {
-                return;
-              }
-
-              if(result.findRecord('system', 'ExtrinsicSuccess')) {
-                resolve();
-              }
-              else {
-                reject('Failed to flip value.');
-              }
-            })
-        });
-      })();
+      const flip = contract.exec('flip', value, gasLimit);
+      await runTransaction(alice, flip);
 
       const afterFlipGetResponse = await getFlipValue();
 
@@ -131,30 +93,31 @@
     });
   });
 
-  it('Can transfer balance using smart contract.', async () => {
+  it.skip('Can transfer balance using smart contract.', async () => {
     await usingApi(async api => {
-      const [alicesBalanceBefore, bobsBalanceBefore] = await getBalance(api, [alicesPublicKey, bobsPublicKey]);
-      const wasm = fs.readFileSync('./src/balance-transfer-contract/calls.wasm');
-      const contract = compactAddLength(u8aToU8a(wasm));
+      // const [alicesBalanceBefore, bobsBalanceBefore] = await getBalance(api, [alicesPublicKey, bobsPublicKey]);
+      // const wasm = fs.readFileSync('./src/balance-transfer-contract/calls.wasm');
+      // const contract = compactAddLength(u8aToU8a(wasm));
+
+      // const metadata = JSON.parse(fs.readFileSync('./src/balance-transfer-contract/metadata.json').toString('utf-8'));
+      // const abi = new Abi(api.registry as any, metadata);
 
-      const metadata = JSON.parse(fs.readFileSync('./src/balance-transfer-contract/metadata.json').toString('utf-8'));
-      const abi = new Abi(api.registry as any, metadata);
+      // const alicesPrivateKey = privateKey('//Alice');
 
-      const alicesPrivateKey = privateKey('//Alice');
+      // const contractHash = await deployContract(api, contract, alicesPrivateKey);
 
-      const contractHash = await deployContract(api, contract, alicesPrivateKey);
+      // // const args = abi.constructors[0]();
+      // const instanceAccountId = await instantiateContract(api, contractHash, /*args,*/ alicesPrivateKey);
+      // const contractInstance = new ContractPromise(api, abi, instanceAccountId);
+      // const bob = new GenericAccountId(api.registry, bobsPublicKey);
 
-      const args = abi.constructors[0]();
-      const instanceAccountId = await instantiateContract(api, contractHash, args, alicesPrivateKey);
-      const contractInstance = new PromiseContract(api, abi, instanceAccountId);
-      const bob = new GenericAccountId(api.registry, bobsPublicKey);
-      const call = contractInstance.getMessage('balance_transfer').fn(bob, new u128(api.registry, 1000000));
-      await txContractCall(api, alicesPrivateKey, contractInstance.address.toString(), call);
+      // const transfer = contractInstance.exec('balance_transfer', 0, 1000000000000n, [bob, new u128(api.registry, 1000000)]);
+      // await runTransaction(alicesPrivateKey, transfer);
 
-      const [alicesBalanceAfter, bobsBalanceAfter] = await getBalance(api, [alicesPublicKey, bobsPublicKey]);
+      // const [alicesBalanceAfter, bobsBalanceAfter] = await getBalance(api, [alicesPublicKey, bobsPublicKey]);
 
-      expect(alicesBalanceAfter < alicesBalanceBefore).to.be.true;
-      expect(bobsBalanceAfter > bobsBalanceBefore).to.be.true;
+      // expect(alicesBalanceAfter < alicesBalanceBefore).to.be.true;
+      // expect(bobsBalanceAfter > bobsBalanceBefore).to.be.true;
     });
   })
 });
modifiedtests/src/flipper/flipper.wasmdiffbeforeafterboth

binary blob — no preview

modifiedtests/src/flipper/metadata.jsondiffbeforeafterboth
--- a/tests/src/flipper/metadata.json
+++ b/tests/src/flipper/metadata.json
@@ -1,204 +1,106 @@
 {
-  "registry": {
-    "strings": [
-      "Storage",
-      "flipper",
-      "__ink_private",
-      "__ink_storage",
-      "value",
-      "Value",
-      "ink_core",
-      "storage",
-      "cell",
-      "SyncCell",
-      "sync_cell",
-      "Key",
-      "ink_primitives",
-      "new",
-      "init_value",
-      "bool",
-      "default",
-      "flip",
-      "get"
-    ],
-    "types": [
-      {
-        "id": {
-          "custom.name": 1,
-          "custom.namespace": [
-            2,
-            2,
-            3,
-            4
-          ],
-          "custom.params": []
-        },
-        "def": {
-          "struct.fields": [
-            {
-              "name": 5,
-              "type": 2
-            }
-          ]
-        }
-      },
-      {
-        "id": {
-          "custom.name": 6,
-          "custom.namespace": [
-            7,
-            8,
-            5
-          ],
-          "custom.params": [
-            3
-          ]
-        },
-        "def": {
-          "struct.fields": [
-            {
-              "name": 9,
-              "type": 4
-            }
-          ]
-        }
-      },
-      {
-        "id": "bool",
-        "def": "builtin"
-      },
-      {
-        "id": {
-          "custom.name": 10,
-          "custom.namespace": [
-            7,
-            8,
-            9,
-            11
-          ],
-          "custom.params": [
-            3
-          ]
-        },
-        "def": {
-          "struct.fields": [
-            {
-              "name": 9,
-              "type": 5
-            }
-          ]
-        }
-      },
-      {
-        "id": {
-          "custom.name": 12,
-          "custom.namespace": [
-            13
-          ],
-          "custom.params": []
-        },
-        "def": {
-          "tuple_struct.types": [
-            6
-          ]
-        }
-      },
-      {
-        "id": {
-          "array.len": 32,
-          "array.type": 7
-        },
-        "def": "builtin"
-      },
-      {
-        "id": "u8",
-        "def": "builtin"
-      }
-    ]
+  "metadataVersion": "0.1.0",
+  "source": {
+    "hash": "0x36431d9da78a6bb099474e49c9e35a9c3a04272b58815634082626109826cac6",
+    "language": "ink! 3.0.0-rc1",
+    "compiler": "rustc 1.49.0-nightly"
   },
-  "storage": {
-    "struct.type": 1,
-    "struct.fields": [
-      {
-        "name": 5,
-        "layout": {
-          "struct.type": 2,
-          "struct.fields": [
-            {
-              "name": 9,
-              "layout": {
-                "range.offset": "0x0000000000000000000000000000000000000000000000000000000000000000",
-                "range.len": 1,
-                "range.elem_type": 3
-              }
-            }
-          ]
-        }
-      }
+  "contract": {
+    "name": "flipper",
+    "version": "3.0.0-rc1",
+    "authors": [
+      "Parity Technologies <admin@parity.io>"
     ]
   },
-  "contract": {
-    "name": 2,
+  "spec": {
     "constructors": [
       {
-        "name": 14,
-        "selector": "[\"0x5E\",\"0xBD\",\"0x88\",\"0xD6\"]",
         "args": [
           {
-            "name": 15,
+            "name": "init_value",
             "type": {
-              "ty": 3,
-              "display_name": [
-                16
-              ]
+              "displayName": [
+                "bool"
+              ],
+              "type": 1
             }
           }
         ],
         "docs": [
-          "Constructor that initializes the `bool` value to the given `init_value`."
-        ]
+          " Creates a new flipper smart contract initialized with the given value."
+        ],
+        "name": [
+          "new"
+        ],
+        "selector": "0xd183512b"
       },
       {
-        "name": 17,
-        "selector": "[\"0x02\",\"0x22\",\"0xFF\",\"0x18\"]",
         "args": [],
         "docs": [
-          "Constructor that initializes the `bool` value to `false`.",
-          "",
-          "Constructors can delegate to other constructors."
-        ]
+          " Creates a new flipper smart contract initialized to `false`."
+        ],
+        "name": [
+          "default"
+        ],
+        "selector": "0x6a3712e2"
       }
     ],
+    "docs": [],
+    "events": [],
     "messages": [
       {
-        "name": 18,
-        "selector": "[\"0x8C\",\"0x97\",\"0xDB\",\"0x39\"]",
-        "mutates": true,
         "args": [],
-        "return_type": null,
         "docs": [
-          "A message that can be called on instantiated contracts.",
-          "This one flips the value of the stored `bool` from `true`",
-          "to `false` and vice versa."
-        ]
+          " Flips the current value of the Flipper's bool."
+        ],
+        "mutates": true,
+        "name": [
+          "flip"
+        ],
+        "payable": false,
+        "returnType": null,
+        "selector": "0xc096a5f3"
       },
       {
-        "name": 19,
-        "selector": "[\"0x25\",\"0x44\",\"0x4A\",\"0xFE\"]",
-        "mutates": false,
         "args": [],
-        "return_type": {
-          "ty": 3,
-          "display_name": [
-            16
-          ]
-        },
         "docs": [
-          "Simply returns the current value of our `bool`."
-        ]
+          " Returns the current value of the Flipper's bool."
+        ],
+        "mutates": false,
+        "name": [
+          "get"
+        ],
+        "payable": false,
+        "returnType": {
+          "displayName": [
+            "bool"
+          ],
+          "type": 1
+        },
+        "selector": "0x1e5ca456"
       }
-    ],
-    "events": [],
-    "docs": []
-  }
+    ]
+  },
+  "storage": {
+    "struct": {
+      "fields": [
+        {
+          "layout": {
+            "cell": {
+              "key": "0x0000000000000000000000000000000000000000000000000000000000000000",
+              "ty": 1
+            }
+          },
+          "name": "value"
+        }
+      ]
+    }
+  },
+  "types": [
+    {
+      "def": {
+        "primitive": "bool"
+      }
+    }
+  ]
 }
\ No newline at end of file