difftreelog
Merge branch 'develop' into feature/NFTPAR-96
in: master
# Conflicts: # pallets/nft/src/lib.rs # pallets/nft/src/tests.rs
34 files changed
.dockerignorediffbeforeafterboth--- a/.dockerignore
+++ b/.dockerignore
@@ -3,4 +3,4 @@
doc/
target/
chain-data*/
-smart_contract/
\ No newline at end of file
+smart_contract/
Cargo.lockdiffbeforeafterboth16source = "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]212122[[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"2728[[package]]29name = "adler32"30version = "1.1.0"31source = "registry+https://github.com/rust-lang/crates.io-index"32checksum = "567b077b825e468cc974f0020d4082ee6e03132512f207ef1a02fd5d00d1f32d"332734[[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]423643[[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",534754[[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]666067[[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]777178[[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]878188[[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]9091[[package]]92name = "ahash"93version = "0.3.8"94source = "registry+https://github.com/rust-lang/crates.io-index"95checksum = "e8fd72866655d1904d6b0997d0b07ba561047d070fbe29de039031c641b61217"969697[[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]116116117[[package]]117[[package]]134134135[[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"140140141[[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]149149150[[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]195196[[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]195206196[[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]220221[[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]233234[[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]253254[[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]201262202[[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]227289228[[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]237295238[[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]307308[[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]318319[[package]]320name = "atomic"321version = "0.4.6"322source = "registry+https://github.com/rust-lang/crates.io-index"323checksum = "64f46ca51dca4837f1520754d1c8c36636356b81553d928dc9c177025369a06e"324325[[package]]326name = "atomic-waker"327version = "1.0.0"328source = "registry+https://github.com/rust-lang/crates.io-index"329checksum = "065374052e7df7ee4047b1160cca5e1467a12351a40b3da123c870ba0b8eda2a"249330250[[package]]331[[package]]251name = "atty"332name = "atty"266347267[[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"272353273[[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]286367296source = "registry+https://github.com/rust-lang/crates.io-index"377source = "registry+https://github.com/rust-lang/crates.io-index"297checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7"378checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7"379380[[package]]381name = "base64"382version = "0.12.3"383source = "registry+https://github.com/rust-lang/crates.io-index"384checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff"385386[[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]298395299[[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]419420[[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]322434323[[package]]435[[package]]324name = "bitflags"436name = "bitflags"342 "radium",454 "radium",343]455]344345[[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]356456357[[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]413513417source = "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]422523423[[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]431532432[[package]]533[[package]]438 "byte-tools",539 "byte-tools",439]540]541542[[package]]543name = "block-padding"544version = "0.2.1"545source = "registry+https://github.com/rust-lang/crates.io-index"546checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae"440547441[[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]454561455[[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"594595[[package]]596name = "byteorder"597version = "0.5.3"598source = "registry+https://github.com/rust-lang/crates.io-index"599checksum = "0fc10e8cc6b2580fda3f36eb6dc5316657f812a3df879a44a66fc9f0fdbc4855"487600488[[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"629630[[package]]631name = "cache-padded"632version = "1.1.1"633source = "registry+https://github.com/rust-lang/crates.io-index"634checksum = "631ae5198c9be5e753e5cc215e1bd73c2b466a3565173db433f52bb9d3e66dba"516635517[[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"659660[[package]]661name = "cfg-if"662version = "1.0.0"663source = "registry+https://github.com/rust-lang/crates.io-index"664checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"540665541[[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]550675551[[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]563688564[[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]574701575[[package]]702[[package]]585712586[[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]600601[[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]609727610[[package]]728[[package]]611name = "cloudabi"729name = "cloudabi"616 "bitflags",734 "bitflags",617]735]736737[[package]]738name = "cloudabi"739version = "0.1.0"740source = "registry+https://github.com/rust-lang/crates.io-index"741checksum = "4344512281c643ae7638bbabc3af17a11307803ec8f0fcad9fae512a8bf36467"742dependencies = [743 "bitflags",744]745746[[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]618754619[[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]628764629[[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]638774664source = "registry+https://github.com/rust-lang/crates.io-index"800source = "registry+https://github.com/rust-lang/crates.io-index"665checksum = "8aebca1129a03dc6dc2b127edd729435bbc4a37e1d5f4d7513165089ceb02634"801checksum = "8aebca1129a03dc6dc2b127edd729435bbc4a37e1d5f4d7513165089ceb02634"802803[[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]811812[[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]831832[[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]841842[[package]]843name = "cranelift-codegen-shared"844version = "0.66.0"845source = "registry+https://github.com/rust-lang/crates.io-index"846checksum = "76ad12409e922e7697cd0bdc7dc26992f64a77c31880dfe5e3c7722f4710206d"847848[[package]]849name = "cranelift-entity"850version = "0.66.0"851source = "registry+https://github.com/rust-lang/crates.io-index"852checksum = "d97cdc58972ea065d107872cfb9079f4c92ade78a8af85aaff519a65b5d13f71"853dependencies = [854 "serde",855]856857[[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]868869[[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]879880[[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]666894667[[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]675903676[[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]711939712[[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]733961753source = "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]759987760[[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]996997[[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]7681006769[[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]10191020[[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]7811032782[[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"7871038788[[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]7981049799[[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]8161067817[[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]8261077841source = "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]8471098848[[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]8531108854[[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]11191120[[package]]1121name = "dyn-clone"1122version = "1.0.2"1123source = "registry+https://github.com/rust-lang/crates.io-index"1124checksum = "4c53dc3a653e0f64081026e4bf048d48fec9fce90c66e8326ca7292df0ff2d82"8651125866[[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]8711134872[[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]11481149[[package]]1150name = "either"1151version = "1.6.1"1152source = "registry+https://github.com/rust-lang/crates.io-index"1153checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"8821154883[[package]]1155[[package]]884name = "env_logger"1156name = "env_logger"8951167896[[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"9011173902[[package]]1174[[package]]903name = "erased-serde"1175name = "erased-serde"908 "serde",1180 "serde",909]1181]11821183[[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]11931194[[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]12031204[[package]]1205name = "event-listener"1206version = "2.5.1"1207source = "registry+https://github.com/rust-lang/crates.io-index"1208checksum = "f7531096570974c3a9dcf9e4b8e1cede1ec26cf5046219fb3b9d897503b9be59"9101209911[[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]9191218920[[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]9411240945source = "registry+https://github.com/rust-lang/crates.io-index"1244source = "registry+https://github.com/rust-lang/crates.io-index"946checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed"1245checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed"12461247[[package]]1248name = "fallible-iterator"1249version = "0.2.0"1250source = "registry+https://github.com/rust-lang/crates.io-index"1251checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7"12521253[[package]]1254name = "fastrand"1255version = "1.4.0"1256source = "registry+https://github.com/rust-lang/crates.io-index"1257checksum = "ca5faf057445ce5c9d4329e382b2ce7ca38550ef3b73a5348362d5f24e0c7fe3"1258dependencies = [1259 "instant",1260]9471261948[[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]12701271[[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]9561280957[[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",9891313990[[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",100813321009[[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]101613401017[[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]13581359[[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]103313761034[[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",104813921049[[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",105914031060[[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",108414281085[[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]109514391096[[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]110714511108[[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]111714611118[[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]14771478[[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]14911492[[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]113315001134[[package]]1501[[package]]1135name = "fs-swap"1502name = "fs-swap"116715341168[[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"117315401174[[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",118815551189[[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",120715741208[[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"121315801214[[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]122915961233source = "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",124516121246[[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",125716241258[[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"16301631[[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]126316451264[[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]127516571276[[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"128116631282[[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]129016721291[[package]]1673[[package]]130216841303[[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]13351336[[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]134717171348[[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]137417441375[[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",140617761407[[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]17871788[[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]141717981418[[package]]1799[[package]]1419name = "ghash"1800name = "ghash"1424 "polyval",1805 "polyval",1425]1806]18071808[[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]142618181427[[package]]1819[[package]]1428name = "gimli"1820name = "gimli"1449 "regex",1841 "regex",1450]1842]18431844[[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]145118561452[[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]19081909[[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]150319181504[[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]151319281514[[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]19381939[[package]]1940name = "hashbrown"1941version = "0.9.1"1942source = "registry+https://github.com/rust-lang/crates.io-index"1943checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04"152219441523[[package]]1945[[package]]1524name = "heck"1946name = "heck"153119531532[[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]154619681547[[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]155619741557[[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]156519801566[[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"20512052[[package]]2053name = "httpdate"2054version = "0.3.2"2055source = "registry+https://github.com/rust-lang/crates.io-index"2056checksum = "494b4d60369511e7dea41cf646832512a94e542f68bb9c49e54518e0f468eb47"163620571637[[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",167520961676[[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]169921201700[[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]17481749[[package]]1750name = "impl-serde"1751version = "0.2.3"1752source = "registry+https://github.com/rust-lang/crates.io-index"1753checksum = "58e3cae7e99c7ff5a995da2cf78dd0a5383740eda71d98cf7b1910c301ac69b8"1754dependencies = [1755 "serde",1756]175721691758[[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]177721891778[[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]22002201[[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]178722091788[[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]179322181794[[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]18032228185722821858[[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]186622911867[[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",188223071883[[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",189523201896[[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]190423291905[[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]191623411917[[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",193123561932[[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",194523701946[[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",195823831959[[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",197423991975[[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]198824131989[[package]]2414[[package]]201324382014[[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]202324482024[[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",203424592035[[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]205224772053[[package]]2478[[package]]205824832059[[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"206424892065[[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"207024952071[[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]20822083[[package]]2084name = "libflate_lz77"2085version = "1.0.0"2086source = "registry+https://github.com/rust-lang/crates.io-index"2087checksum = "3286f09f7d4926fc486334f28d8d2e6ebe4f7f9994494b6dab27ddfad2c9b11b"208825012089[[package]]2502[[package]]2090name = "libloading"2503name = "libloading"210425172105[[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]213525562136[[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",216925902170[[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]26002601[[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]217926112180[[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]26222623[[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]26392640[[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]219026652191[[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]220626812207[[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]223327082234[[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]225527302256[[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",227127462272[[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]229227682293[[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]27832784[[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]28012802[[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]28152816[[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]230728352308[[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]232228512323[[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]28672868[[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]233828792339[[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",235228932353[[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",237329132374[[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]238629262387[[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]241429542415[[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]243229712433[[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]29912992[[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]245230002453[[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]30093010[[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]246130182462[[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]247030272471[[package]]3028[[package]]2477 "hashbrown 0.6.3",3034 "hashbrown 0.6.3",2478]3035]30363037[[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]30453046[[package]]3047name = "lru_time_cache"3048version = "0.10.0"3049source = "registry+https://github.com/rust-lang/crates.io-index"3050checksum = "adb241df5c4caeb888755363fc95f8a896618dc0d435e9e775f7930cb099beab"30513052[[package]]3053name = "mach"3054version = "0.3.2"3055source = "registry+https://github.com/rust-lang/crates.io-index"3056checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa"3057dependencies = [3058 "libc",3059]30603061[[package]]3062name = "matchers"3063version = "0.0.1"3064source = "registry+https://github.com/rust-lang/crates.io-index"3065checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1"3066dependencies = [3067 "regex-automata",3068]247930692480[[package]]3070[[package]]2481name = "matches"3071name = "matches"251631062517[[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]252531152526[[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]253731262547source = "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]31443145[[package]]3146name = "minicbor"3147version = "0.5.1"3148source = "registry+https://github.com/rust-lang/crates.io-index"3149checksum = "2fc03ad6f8f548db7194a5ff5a6f96342ecae4e3ef67d2bf18bacc0e245cd041"3150dependencies = [3151 "minicbor-derive",3152]31533154[[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]255531642556[[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]256431742565[[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]32503251[[package]]3252name = "more-asserts"3253version = "0.2.1"3254source = "registry+https://github.com/rust-lang/crates.io-index"3255checksum = "0debeb9fcf88823ea64d64e4a815ab1643f33127d995978e099942ce38f25238"264032562641[[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]265532712656[[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"266132772662[[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]267532912685 "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]270133172702[[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]271233272713[[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]272633382727[[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]275833782759[[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]28282829[[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]283734522838[[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]284834632849[[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]285834732859[[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]286834832869[[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]28802881[[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]288934952890[[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]289935052907 "libc",3513 "libc",2908]3514]35153516[[package]]3517name = "object"3518version = "0.19.0"3519source = "registry+https://github.com/rust-lang/crates.io-index"3520checksum = "9cbca9424c482ee628fa549d9c812e2cd22f1180b9222c9200fdfa6eb31aecb2"290935212910[[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]35323533[[package]]3534name = "object"3535version = "0.21.1"3536source = "registry+https://github.com/rust-lang/crates.io-index"3537checksum = "37fd5004feb2ce328a52b0b3d01dbf4ffff72583493900ed15f22d4111c51693"35383539[[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]291535472916[[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]292435562925[[package]]3557[[package]]295135832952[[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]36023603[[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]297036172971[[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",298436312985[[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",300436523005[[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",301436623015[[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",303336813034[[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",304536933046[[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",306137093062[[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",308137313082[[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",309737493098[[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",311037623111[[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",313037823131[[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",314437963145[[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]316138143162[[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]38313832[[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]317638493177[[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]32033204[[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]322138763222[[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]32393240[[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]325438943255[[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",326739073268[[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]327939193280[[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",330439443305[[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]331939603324checksum = "f557c32c6d268a07c921471619c0295f5efad3a0e76d4f97a05c091a51d110b2"3965checksum = "f557c32c6d268a07c921471619c0295f5efad3a0e76d4f97a05c091a51d110b2"3325dependencies = [3966dependencies = [3326 "proc-macro2",3967 "proc-macro2",3327 "syn 1.0.34",3968 "syn",3328 "synstructure",3969 "synstructure",3329]3970]333039713334source = "registry+https://github.com/rust-lang/crates.io-index"3975source = "registry+https://github.com/rust-lang/crates.io-index"3335checksum = "ddfc878dac00da22f8f61e7af3157988424567ab01d9920b962ef7dcbd7cd865"3976checksum = "ddfc878dac00da22f8f61e7af3157988424567ab01d9920b962ef7dcbd7cd865"39773978[[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]39953996[[package]]3997name = "parking"3998version = "2.0.0"3999source = "registry+https://github.com/rust-lang/crates.io-index"4000checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72"40014002[[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]333640113337[[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]40324033[[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]40434044[[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]335740563358[[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]40854086[[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]338641003387[[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]341541303416[[package]]4131[[package]]344341583444[[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]345241673453[[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]346341783464[[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"346941843470[[package]]4185[[package]]3471name = "pin-utils"4186name = "pin-utils"347541903476[[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"348141963482[[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"42024203[[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]348742153488[[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]349642243497[[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]350642343507[[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"351242403513[[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]35244252353342613534[[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]354642743547[[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]355942853560[[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"356542913566[[package]]4292[[package]]3567name = "proc-macro-nested"4293name = "proc-macro-nested"357142973572[[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]35803581[[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]359543063596[[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]360943203644 "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]365043613651[[package]]4362[[package]]3658 "prost",4369 "prost",3659]4370]36603661[[package]]3662name = "protobuf"3663version = "2.16.2"3664source = "registry+https://github.com/rust-lang/crates.io-index"3665checksum = "d883f78645c21b7281d21305181aa1f4dd9e9363e7cf2566c93121552cff003e"366643713667[[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]36943695[[package]]3696name = "quote"3697version = "0.3.15"3698source = "registry+https://github.com/rust-lang/crates.io-index"3699checksum = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a"370043993701[[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]382845273829[[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]46074608[[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]390846183909[[package]]4619[[package]]3910name = "rawpointer"4620name = "rawpointer"391446243915[[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]392646363927[[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",395446643955[[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]46954696[[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]398547063986[[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]47184719[[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]399747283998[[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"47344735[[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]400347464004[[package]]4747[[package]]4005name = "remove_dir_all"4748name = "remove_dir_all"4010 "winapi 0.3.9",4753 "winapi 0.3.9",4011]4754]40124013[[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]402247554023[[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]403347614034[[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]40484049[[package]]4050name = "rle-decode-fast"4051version = "1.0.1"4052source = "registry+https://github.com/rust-lang/crates.io-index"4053checksum = "cabe4fa914dec5870285fa7f71f602645da47c486e68486d2b4ceb4a343e90ac"405447764055[[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",407447964075[[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]408648084087[[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"409248144093[[package]]4815[[package]]4094name = "rustc-hash"4816name = "rustc-hash"411348354114[[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",412648484127[[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]48864887[[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]48974898[[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]416449064165[[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",418849304189[[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]420449474205[[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",422049644221[[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]423149754232[[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]427150244272[[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",430750604308[[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",433650904337[[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",434751014348[[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",437851324379[[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",440051554401[[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",442751834428[[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",444452004445[[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]52155216[[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]445952334460[[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",449752704498[[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",451652884517[[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]453253044533[[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",455153234552[[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]460353774604[[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]461853924619[[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",464554194646[[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",465854324659[[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]466754414668[[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",469954734700[[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",472354974724[[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]473955154740[[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]480255774803[[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",481655914817[[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",483856124839[[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]485556314856[[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",487556524876[[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]57065707[[package]]5708name = "scoped-tls"5709version = "1.0.0"5710source = "registry+https://github.com/rust-lang/crates.io-index"5711checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2"57125713[[package]]5714name = "scopeguard"5715version = "0.3.3"5716source = "registry+https://github.com/rust-lang/crates.io-index"5717checksum = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27"492957184930[[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"57245725[[package]]5726name = "scroll"5727version = "0.10.2"5728source = "registry+https://github.com/rust-lang/crates.io-index"5729checksum = "fda28d4b4830b807a8b43f7b0e6b5df875311b3e7621d84577188c175b6ec1ec"5730dependencies = [5731 "scroll_derive",5732]57335734[[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]493557444936[[package]]5745[[package]]4937name = "sct"5746name = "sct"4943 "untrusted",5752 "untrusted",4944]5753]57545755[[package]]5756name = "secrecy"5757version = "0.6.0"5758source = "registry+https://github.com/rust-lang/crates.io-index"5759checksum = "9182278ed645df3477a9c27bfee0621c621aa16f6972635f7f795dae3d81070f"5760dependencies = [5761 "zeroize",5762]494557634946[[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",495857764959[[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"49834984[[package]]4985name = "send_wrapper"4986version = "0.2.0"4987source = "registry+https://github.com/rust-lang/crates.io-index"4988checksum = "a0eddf2e8f50ced781f288c19f18621fa72a3779e3cb58dbf23b07469b0abeb4"498958014990[[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]499858104999[[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]500958215010[[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]503258445033[[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]503858575039[[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]58955896[[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]59075908[[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]507659165077[[package]]5917[[package]]5078name = "shlex"5918name = "shlex"508259225083[[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]59325933[[package]]5934name = "signature"5935version = "1.2.2"5936source = "registry+https://github.com/rust-lang/crates.io-index"5937checksum = "29f060a7d147e33490ec10da418795238fd7545bba241504d6b31a409f2e6210"509259385093[[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]514259885143[[package]]5989[[package]]515159975152[[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"515760035158[[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]517560215176[[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]518760335188[[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]520760495208[[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",521960615220[[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",523460765235[[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]524660885247[[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",525861005259[[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]61136114[[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]527161245272[[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",528361365284[[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]529961535300[[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]530861625309[[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",533261885333[[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]62026203[[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]534662115347[[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",538862555389[[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]539762645398[[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]540762745408[[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",541862855419[[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",543463015435[[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",544463115445[[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",545663235457[[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]547763465478[[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",548863575489[[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",549863675499[[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]550763765508[[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]551663855517[[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",553864075539[[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]555364235554[[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]556564355566[[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",557864485579[[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]558764575588[[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",560064705601[[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",561064805611[[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]563165015632[[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"563665065637[[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",564865195649[[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",566265335663[[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]567265465673[[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]568865615689[[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",570265755703[[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",571465875715[[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",572665995727[[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]66376638[[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]576466465765[[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]577366565774[[package]]6657[[package]]578866715789[[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",579966825800[[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]581266955813[[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]583367165834[[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]584567295846[[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]67376738[[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]585367605854[[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]586767745868[[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"587267805873[[package]]6781[[package]]5874name = "subtle"6782name = "subtle"587867865879[[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"58845885[[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]589567925896[[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]59065907[[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]59175918[[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]592668035927[[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]59385939[[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]595368155954[[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"68216822[[package]]6823name = "target-lexicon"6824version = "0.10.0"6825source = "registry+https://github.com/rust-lang/crates.io-index"6826checksum = "ab0e7238dcc7b40a7be719a25365910f6807bd864f4cce6b2e6b873658e2b19d"595968275960[[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",599168595992[[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]600068686001[[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]601168796012[[package]]6880[[package]]602968976030[[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]603969086045dependencies = [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",606469336065[[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"607069396071[[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",609469636095[[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]612769966128[[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]613870076142source = "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]614870176153checksum = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671"7022checksum = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671"6154dependencies = [7023dependencies = [6155 "crossbeam-utils",7024 "crossbeam-utils",6156 "futures 0.1.29",7025 "futures 0.1.30",6157]7026]615870276159[[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]619170606196checksum = "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",622370926224[[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]623571046239source = "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]624471136245[[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]625471236255[[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]635572246356[[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]637072396371[[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]638272526383[[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]639372636394[[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]72727273[[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]72837284[[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]72937294[[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]640273156403[[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]641573286416[[package]]7329[[package]]643073436431[[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]643973546440[[package]]7355[[package]]644573606446[[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"64966497[[package]]6498name = "unicode-xid"6499version = "0.0.4"6500source = "registry+https://github.com/rust-lang/crates.io-index"6501checksum = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc"650274116503[[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]651874276519[[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]653074396531[[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]654074496541[[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"74837484[[package]]7485name = "vec-arena"7486version = "1.0.0"7487source = "registry+https://github.com/rust-lang/crates.io-index"7488checksum = "eafc1b9b2dfc6f5529177b62cf806484db55b32dc7c9658a118e11bbeb33061d"657474896575[[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"75077508[[package]]7509name = "waker-fn"7510version = "1.1.0"7511source = "registry+https://github.com/rust-lang/crates.io-index"7512checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca"659275136593[[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"75407541[[package]]7542name = "wasi"7543version = "0.10.0+wasi-snapshot-preview1"7544source = "registry+https://github.com/rust-lang/crates.io-index"7545checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"661975466620[[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]662975566630[[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]664475716645[[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]665675836657[[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]666675936667[[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]667976066680[[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"668576126686[[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]76507651[[package]]7652name = "wasmparser"7653version = "0.57.0"7654source = "registry+https://github.com/rust-lang/crates.io-index"7655checksum = "32fddd575d477c6e9702484139cf9f23dcd554b06d185ed0f56c857dd3a47aa6"76567657[[package]]7658name = "wasmparser"7659version = "0.59.0"7660source = "registry+https://github.com/rust-lang/crates.io-index"7661checksum = "a950e6a618f62147fd514ff445b2a0b53120d382751960797f85f058c7eda9b9"76627663[[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]76877688[[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]77037704[[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]77347735[[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]77637764[[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]77777778[[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]77967797[[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]78177818[[package]]7819name = "wast"7820version = "26.0.0"7821source = "registry+https://github.com/rust-lang/crates.io-index"7822checksum = "d54b3678343bfdf1768c16308a4b53823b70f7bb148d3d38225123d4306ec731"7823dependencies = [7824 "leb128",7825]78267827[[package]]7828name = "wat"7829version = "1.0.27"7830source = "registry+https://github.com/rust-lang/crates.io-index"7831checksum = "26b2dccbce4d0e14875091846e110a2369267b18ddd0d6423479b88dad914d71"7832dependencies = [7833 "wast",7834]672478356725[[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]78737874[[package]]7875name = "wepoll-sys"7876version = "3.0.0"7877source = "registry+https://github.com/rust-lang/crates.io-index"7878checksum = "142bc2cba3fe88be1a8fcb55c727fa4cd5b0cf2d7438722792e22f26f04bc1e0"7879dependencies = [7880 "cc",7881]676278826763[[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"68146815[[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]683279346833[[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]79557956[[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]685379666854[[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]686779806868[[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]687679896877[[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]80018002[[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]80108011[[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]80208021[[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]68888032Dockerfilediffbeforeafterboth--- 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 ======
README.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
doc/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
node/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']
node/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()
node/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),
}
node/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),
+ })
+ }
+ }
}
node/src/lib.rsdiffbeforeafterboth--- /dev/null
+++ b/node/src/lib.rs
@@ -0,0 +1,3 @@
+pub mod chain_spec;
+pub mod service;
+pub mod rpc;
node/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()
node/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
+}
node/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)
}
pallets/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"]
pallets/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
pallets/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))
+ // }
+}
pallets/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
pallets/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>;
pallets/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
runtime/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',
]
runtime/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()
runtime/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)
+ }
+ }
}
runtime/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))
+ }
+}
tests/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
tests/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"
tests/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(())
-}
tests/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
tests/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
tests/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
tests/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",
tests/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"
tests/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;
});
})
});
tests/src/flipper/flipper.wasmdiffbeforeafterbothbinary blob — no preview
tests/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