difftreelog
Merge remote-tracking branch 'origin/develop' into feature/NFTPAR-241
in: master
# Conflicts: # tests/package-lock.json # tests/src/substrate/substrate-api.ts
57 files changed
Cargo.lockdiffbeforeafterboth121213[[package]]13[[package]]14name = "addr2line"14name = "addr2line"15version = "0.14.0"15version = "0.14.1"16source = "registry+https://github.com/rust-lang/crates.io-index"16source = "registry+https://github.com/rust-lang/crates.io-index"17checksum = "7c0929d69e78dd9bf5408269919fcbcaeb2e35e5d43e5815517cdc6a8e11a423"17checksum = "a55f82cfe485775d02112886f4169bde0c5894d75e79ead7eafe7e40a25e45f7"18dependencies = [18dependencies = [19 "gimli 0.23.0",19 "gimli 0.23.0",20]20]65checksum = "63dd91889c49327ad7ef3b500fd1109dbd3c509a03db0d4a9ce413b79f575cb6"65checksum = "63dd91889c49327ad7ef3b500fd1109dbd3c509a03db0d4a9ce413b79f575cb6"66dependencies = [66dependencies = [67 "block-cipher",67 "block-cipher",68 "byteorder 1.3.4",68 "byteorder",69 "opaque-debug 0.3.0",69 "opaque-debug 0.3.0",70]70]717179 "opaque-debug 0.3.0",79 "opaque-debug 0.3.0",80]80]8182[[package]]83name = "ahash"84version = "0.2.19"85source = "registry+https://github.com/rust-lang/crates.io-index"86checksum = "29661b60bec623f0586702976ff4d0c9942dcb6723161c2df0eea78455cfedfb"87dependencies = [88 "const-random",89]9091[[package]]92name = "ahash"93version = "0.3.8"94source = "registry+https://github.com/rust-lang/crates.io-index"95checksum = "e8fd72866655d1904d6b0997d0b07ba561047d070fbe29de039031c641b61217"968197[[package]]82[[package]]98name = "ahash"83name = "ahash"109 "memchr",94 "memchr",110]95]111112[[package]]113name = "alga"114version = "0.9.3"115source = "registry+https://github.com/rust-lang/crates.io-index"116checksum = "4f823d037a7ec6ea2197046bafd4ae150e6bc36f9ca347404f46a46823fa84f2"117dependencies = [118 "approx",119 "num-complex",120 "num-traits",121]12296123[[package]]97[[package]]124name = "ansi_term"98name = "ansi_term"140114141[[package]]115[[package]]142name = "anyhow"116name = "anyhow"143version = "1.0.35"117version = "1.0.38"144source = "registry+https://github.com/rust-lang/crates.io-index"118source = "registry+https://github.com/rust-lang/crates.io-index"145checksum = "2c0df63cb2955042487fad3aefd2c6e3ae7389ac5dc1beb28921de0b69f779d4"119checksum = "afddf7f520a80dbf76e6f50a35bca42a2331ef227a28b3b6dc5c2e2338d114b1"146120147[[package]]121[[package]]148name = "approx"122name = "approx"153 "num-traits",127 "num-traits",154]128]155156[[package]]157name = "arc-swap"158version = "0.4.8"159source = "registry+https://github.com/rust-lang/crates.io-index"160checksum = "dabe5a181f83789739c194cbe5a897dde195078fac08568d09221fd6137a7ba8"161129162[[package]]130[[package]]163name = "arrayref"131name = "arrayref"220 "concurrent-queue",188 "concurrent-queue",221 "fastrand",189 "fastrand",222 "futures-lite",190 "futures-lite",223 "once_cell 1.5.2",191 "once_cell",224 "vec-arena",192 "vec-arena",225]193]226194227[[package]]195[[package]]228name = "async-global-executor"196name = "async-global-executor"229version = "1.4.3"197version = "2.0.2"230source = "registry+https://github.com/rust-lang/crates.io-index"198source = "registry+https://github.com/rust-lang/crates.io-index"231checksum = "73079b49cd26b8fd5a15f68fc7707fc78698dc2a3d61430f2a7a9430230dfa04"199checksum = "9586ec52317f36de58453159d48351bc244bc24ced3effc1fce22f3d48664af6"232dependencies = [200dependencies = [201 "async-channel",233 "async-executor",202 "async-executor",234 "async-io",203 "async-io",204 "async-mutex",205 "blocking",235 "futures-lite",206 "futures-lite",236 "num_cpus",207 "num_cpus",237 "once_cell 1.5.2",208 "once_cell",238]209]239210240[[package]]211[[package]]249 "libc",220 "libc",250 "log",221 "log",251 "nb-connect",222 "nb-connect",252 "once_cell 1.5.2",223 "once_cell",253 "parking",224 "parking",254 "polling",225 "polling",255 "vec-arena",226 "vec-arena",256 "waker-fn",227 "waker-fn",257 "winapi 0.3.9",228 "winapi 0.3.9",258]229]230231[[package]]232name = "async-lock"233version = "2.3.0"234source = "registry+https://github.com/rust-lang/crates.io-index"235checksum = "1996609732bde4a9988bc42125f55f2af5f3c36370e27c778d5191a4a1b63bfb"236dependencies = [237 "event-listener",238]259239260[[package]]240[[package]]261name = "async-mutex"241name = "async-mutex"277 "cfg-if 0.1.10",257 "cfg-if 0.1.10",278 "event-listener",258 "event-listener",279 "futures-lite",259 "futures-lite",280 "once_cell 1.5.2",260 "once_cell",281 "signal-hook",261 "signal-hook",282 "winapi 0.3.9",262 "winapi 0.3.9",283]263]284264285[[package]]265[[package]]286name = "async-std"266name = "async-std"287version = "1.8.0"267version = "1.9.0"288source = "registry+https://github.com/rust-lang/crates.io-index"268source = "registry+https://github.com/rust-lang/crates.io-index"289checksum = "8f9f84f1280a2b436a2c77c2582602732b6c2f4321d5494d6e799e6c367859a8"269checksum = "d9f06685bad74e0570f5213741bea82158279a4103d988e57bfada11ad230341"290dependencies = [270dependencies = [291 "async-channel",271 "async-channel",292 "async-global-executor",272 "async-global-executor",293 "async-io",273 "async-io",294 "async-mutex",274 "async-lock",295 "async-process",275 "async-process",296 "blocking",297 "crossbeam-utils 0.8.1",276 "crossbeam-utils 0.8.1",298 "futures-channel",277 "futures-channel",299 "futures-core",278 "futures-core",304 "log",283 "log",305 "memchr",284 "memchr",306 "num_cpus",285 "num_cpus",307 "once_cell 1.5.2",286 "once_cell",308 "pin-project-lite 0.2.0",287 "pin-project-lite 0.2.4",309 "pin-utils",288 "pin-utils",310 "slab",289 "slab",311 "wasm-bindgen-futures",290 "wasm-bindgen-futures",317source = "registry+https://github.com/rust-lang/crates.io-index"296source = "registry+https://github.com/rust-lang/crates.io-index"318checksum = "e91831deabf0d6d7ec49552e489aed63b7456a7a3c46cff62adad428110b0af0"297checksum = "e91831deabf0d6d7ec49552e489aed63b7456a7a3c46cff62adad428110b0af0"319320[[package]]321name = "async-tls"322version = "0.8.0"323source = "registry+https://github.com/rust-lang/crates.io-index"324checksum = "df097e3f506bec0e1a24f06bb3c962c228f36671de841ff579cb99f371772634"325dependencies = [326 "futures 0.3.8",327 "rustls",328 "webpki",329 "webpki-roots 0.19.0",330]331298332[[package]]299[[package]]333name = "async-trait"300name = "async-trait"340 "syn",307 "syn",341]308]309310[[package]]311name = "asynchronous-codec"312version = "0.5.0"313source = "registry+https://github.com/rust-lang/crates.io-index"314checksum = "fb4401f0a3622dad2e0763fa79e0eb328bc70fb7dccfdd645341f00d671247d6"315dependencies = [316 "bytes 1.0.1",317 "futures-sink",318 "futures-util",319 "memchr",320 "pin-project-lite 0.2.4",321]342322343[[package]]323[[package]]344name = "atomic"324name = "atomic"345version = "0.4.6"325version = "0.5.0"346source = "registry+https://github.com/rust-lang/crates.io-index"326source = "registry+https://github.com/rust-lang/crates.io-index"347checksum = "64f46ca51dca4837f1520754d1c8c36636356b81553d928dc9c177025369a06e"327checksum = "c3410529e8288c463bedb5930f82833bc0c90e5d2fe639a56582a4d09220b281"328dependencies = [329 "autocfg",330]348331349[[package]]332[[package]]350name = "atomic-waker"333name = "atomic-waker"363 "winapi 0.3.9",346 "winapi 0.3.9",364]347]365366[[package]]367name = "autocfg"368version = "0.1.7"369source = "registry+https://github.com/rust-lang/crates.io-index"370checksum = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2"371348372[[package]]349[[package]]373name = "autocfg"350name = "autocfg"377354378[[package]]355[[package]]379name = "backtrace"356name = "backtrace"380version = "0.3.55"357version = "0.3.56"381source = "registry+https://github.com/rust-lang/crates.io-index"358source = "registry+https://github.com/rust-lang/crates.io-index"382checksum = "ef5140344c85b01f9bbb4d4b7288a8aa4b3287ccef913a14bcc78a1063623598"359checksum = "9d117600f438b1707d4e4ae15d3595657288f8235a0eb593e80ecc98ab34e1bc"383dependencies = [360dependencies = [384 "addr2line",361 "addr2line",385 "cfg-if 1.0.0",362 "cfg-if 1.0.0",386 "libc",363 "libc",387 "miniz_oxide",364 "miniz_oxide",388 "object 0.22.0",365 "object 0.23.0",389 "rustc-demangle",366 "rustc-demangle",390]367]391368395source = "registry+https://github.com/rust-lang/crates.io-index"372source = "registry+https://github.com/rust-lang/crates.io-index"396checksum = "5024ee8015f02155eee35c711107ddd9a9bf3cb689cf2a9089c97e79b6e1ae83"373checksum = "5024ee8015f02155eee35c711107ddd9a9bf3cb689cf2a9089c97e79b6e1ae83"397398[[package]]399name = "base64"400version = "0.11.0"401source = "registry+https://github.com/rust-lang/crates.io-index"402checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7"403374404[[package]]375[[package]]405name = "base64"376name = "base64"419source = "registry+https://github.com/rust-lang/crates.io-index"390source = "registry+https://github.com/rust-lang/crates.io-index"420checksum = "f30d3a39baa26f9651f17b375061f3233dde33424a8b72b0dbe93a68a0bc896d"391checksum = "f30d3a39baa26f9651f17b375061f3233dde33424a8b72b0dbe93a68a0bc896d"421dependencies = [392dependencies = [422 "byteorder 1.3.4",393 "byteorder",423 "serde",394 "serde",424]395]425396444 "regex",415 "regex",445 "rustc-hash",416 "rustc-hash",446 "shlex",417 "shlex",447 "which",418 "which 3.1.1",448]419]449450[[package]]451name = "bip39"452version = "0.6.0-beta.1"453source = "registry+https://github.com/rust-lang/crates.io-index"454checksum = "7059804e226b3ac116519a252d7f5fb985a5ccc0e93255e036a5f7e7283323f4"455dependencies = [456 "failure",457 "hashbrown 0.1.8",458 "hmac",459 "once_cell 0.1.8",460 "pbkdf2",461 "rand 0.6.5",462 "sha2 0.8.2",463]464420465[[package]]421[[package]]466name = "bitflags"422name = "bitflags"467version = "1.2.1"423version = "1.2.1"468source = "registry+https://github.com/rust-lang/crates.io-index"424source = "registry+https://github.com/rust-lang/crates.io-index"469checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"425checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"470471[[package]]472name = "bitmask"473version = "0.5.0"474source = "registry+https://github.com/rust-lang/crates.io-index"475checksum = "5da9b3d9f6f585199287a473f4f8dfab6566cf827d15c00c219f53c645687ead"476426477[[package]]427[[package]]478name = "bitvec"428name = "bitvec"516 "constant_time_eq",466 "constant_time_eq",517]467]518519[[package]]520name = "blake2s_simd"521version = "0.5.11"522source = "registry+https://github.com/rust-lang/crates.io-index"523checksum = "9e461a7034e85b211a4acb57ee2e6730b32912b06c08cc242243c39fc21ae6a2"524dependencies = [525 "arrayref",526 "arrayvec 0.5.2",527 "constant_time_eq",528]529468530[[package]]469[[package]]531name = "block-buffer"470name = "block-buffer"535dependencies = [474dependencies = [536 "block-padding 0.1.5",475 "block-padding 0.1.5",537 "byte-tools",476 "byte-tools",538 "byteorder 1.3.4",477 "byteorder",539 "generic-array 0.12.3",478 "generic-array 0.12.3",540]479]541480584 "atomic-waker",523 "atomic-waker",585 "fastrand",524 "fastrand",586 "futures-lite",525 "futures-lite",587 "once_cell 1.5.2",526 "once_cell",588]527]589590[[package]]591name = "bs58"592version = "0.3.1"593source = "registry+https://github.com/rust-lang/crates.io-index"594checksum = "476e9cd489f9e121e02ffa6014a8ef220ecb15c05ed23fc34cca13925dc283fb"595528596[[package]]529[[package]]597name = "bs58"530name = "bs58"610543611[[package]]544[[package]]612name = "bumpalo"545name = "bumpalo"613version = "3.4.0"546version = "3.5.0"614source = "registry+https://github.com/rust-lang/crates.io-index"547source = "registry+https://github.com/rust-lang/crates.io-index"615checksum = "2e8c087f005730276d1096a652e92a8bacee2e2472bcc9715a74d2bec38b5820"548checksum = "f07aa6688c702439a1be0307b6a94dffe1168569e45b9500c1372bc580740d59"616549617[[package]]550[[package]]618name = "byte-slice-cast"551name = "byte-slice-cast"626source = "registry+https://github.com/rust-lang/crates.io-index"559source = "registry+https://github.com/rust-lang/crates.io-index"627checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7"560checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7"628629[[package]]630name = "byteorder"631version = "0.5.3"632source = "registry+https://github.com/rust-lang/crates.io-index"633checksum = "0fc10e8cc6b2580fda3f36eb6dc5316657f812a3df879a44a66fc9f0fdbc4855"634561635[[package]]562[[package]]636name = "byteorder"563name = "byteorder"637version = "1.3.4"564version = "1.4.2"638source = "registry+https://github.com/rust-lang/crates.io-index"565source = "registry+https://github.com/rust-lang/crates.io-index"639checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de"566checksum = "ae44d1a3d5a19df61dd0c8beb138458ac2a53a7ac09eba97d55592540004306b"640567641[[package]]568[[package]]642name = "bytes"569name = "bytes"643version = "0.4.12"570version = "0.4.12"644source = "registry+https://github.com/rust-lang/crates.io-index"571source = "registry+https://github.com/rust-lang/crates.io-index"645checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c"572checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c"646dependencies = [573dependencies = [647 "byteorder 1.3.4",574 "byteorder",648 "either",575 "either",649 "iovec",576 "iovec",650]577]656checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38"583checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38"657584658[[package]]585[[package]]659name = "c_linked_list"586name = "bytes"660version = "1.1.1"587version = "1.0.1"661source = "registry+https://github.com/rust-lang/crates.io-index"588source = "registry+https://github.com/rust-lang/crates.io-index"662checksum = "4964518bd3b4a8190e832886cdc0da9794f12e8e6c1613a9e90ff331c4c8724b"589checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040"663590664[[package]]591[[package]]665name = "cache-padded"592name = "cache-padded"733 "winapi 0.3.9",660 "winapi 0.3.9",734]661]662663[[package]]664name = "cipher"665version = "0.2.5"666source = "registry+https://github.com/rust-lang/crates.io-index"667checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801"668dependencies = [669 "generic-array 0.14.4",670]735671736[[package]]672[[package]]737name = "clang-sys"673name = "clang-sys"777 "cache-padded",713 "cache-padded",778]714]779780[[package]]781name = "const-random"782version = "0.1.13"783source = "registry+https://github.com/rust-lang/crates.io-index"784checksum = "f590d95d011aa80b063ffe3253422ed5aa462af4e9867d43ce8337562bac77c4"785dependencies = [786 "const-random-macro",787 "proc-macro-hack",788]789790[[package]]791name = "const-random-macro"792version = "0.1.13"793source = "registry+https://github.com/rust-lang/crates.io-index"794checksum = "615f6e27d000a2bffbc7f2f6a8669179378fa27ee4d0a509e985dfc0a7defb40"795dependencies = [796 "getrandom 0.2.0",797 "lazy_static",798 "proc-macro-hack",799 "tiny-keccak",800]801715802[[package]]716[[package]]803name = "const_fn"717name = "const_fn"804version = "0.4.4"718version = "0.4.5"805source = "registry+https://github.com/rust-lang/crates.io-index"719source = "registry+https://github.com/rust-lang/crates.io-index"806checksum = "cd51eab21ab4fd6a3bf889e2d0958c0a6e3a61ad04260325e919e652a2a62826"720checksum = "28b9d6de7f49e22cf97ad17fc4036ece69300032f45f78f30b4a4482cdc3f4a6"807721808[[package]]722[[package]]809name = "constant_time_eq"723name = "constant_time_eq"854source = "registry+https://github.com/rust-lang/crates.io-index"768source = "registry+https://github.com/rust-lang/crates.io-index"855checksum = "9d9badfe36176cb653506091693bc2bb1970c9bddfcd6ec7fac404f7eaec6f38"769checksum = "9d9badfe36176cb653506091693bc2bb1970c9bddfcd6ec7fac404f7eaec6f38"856dependencies = [770dependencies = [857 "byteorder 1.3.4",771 "byteorder",858 "cranelift-bforest",772 "cranelift-bforest",859 "cranelift-codegen-meta",773 "cranelift-codegen-meta",860 "cranelift-codegen-shared",774 "cranelift-codegen-shared",863 "log",777 "log",864 "regalloc",778 "regalloc",865 "serde",779 "serde",866 "smallvec 1.5.1",780 "smallvec 1.6.1",867 "target-lexicon",781 "target-lexicon",868 "thiserror",782 "thiserror",869]783]901dependencies = [815dependencies = [902 "cranelift-codegen",816 "cranelift-codegen",903 "log",817 "log",904 "smallvec 1.5.1",818 "smallvec 1.6.1",905 "target-lexicon",819 "target-lexicon",906]820]907821978source = "registry+https://github.com/rust-lang/crates.io-index"892source = "registry+https://github.com/rust-lang/crates.io-index"979checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace"893checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace"980dependencies = [894dependencies = [981 "autocfg 1.0.1",895 "autocfg",982 "cfg-if 0.1.10",896 "cfg-if 0.1.10",983 "crossbeam-utils 0.7.2",897 "crossbeam-utils 0.7.2",984 "lazy_static",898 "lazy_static",985 "maybe-uninit",899 "maybe-uninit",986 "memoffset 0.5.6",900 "memoffset 0.5.6",987 "scopeguard 1.1.0",901 "scopeguard",988]902]989903990[[package]]904[[package]]998 "crossbeam-utils 0.8.1",912 "crossbeam-utils 0.8.1",999 "lazy_static",913 "lazy_static",1000 "memoffset 0.6.1",914 "memoffset 0.6.1",1001 "scopeguard 1.1.0",915 "scopeguard",1002]916]10039171004[[package]]918[[package]]1018source = "registry+https://github.com/rust-lang/crates.io-index"932source = "registry+https://github.com/rust-lang/crates.io-index"1019checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8"933checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8"1020dependencies = [934dependencies = [1021 "autocfg 1.0.1",935 "autocfg",1022 "cfg-if 0.1.10",936 "cfg-if 0.1.10",1023 "lazy_static",937 "lazy_static",1024]938]1029source = "registry+https://github.com/rust-lang/crates.io-index"943source = "registry+https://github.com/rust-lang/crates.io-index"1030checksum = "02d96d1e189ef58269ebe5b97953da3274d83a93af647c2ddd6f9dab28cedb8d"944checksum = "02d96d1e189ef58269ebe5b97953da3274d83a93af647c2ddd6f9dab28cedb8d"1031dependencies = [945dependencies = [1032 "autocfg 1.0.1",946 "autocfg",1033 "cfg-if 1.0.0",947 "cfg-if 1.0.0",1034 "lazy_static",948 "lazy_static",1035]949]1069 "sct",983 "sct",1070]984]985986[[package]]987name = "ctor"988version = "0.1.18"989source = "registry+https://github.com/rust-lang/crates.io-index"990checksum = "10bcb9d7dcbf7002aaffbb53eac22906b64cdcc127971dcc387d8eb7c95d5560"991dependencies = [992 "quote",993 "syn",994]10719951072[[package]]996[[package]]1073name = "cuckoofilter"997name = "cuckoofilter"1074version = "0.3.2"998version = "0.5.0"1075source = "registry+https://github.com/rust-lang/crates.io-index"999source = "registry+https://github.com/rust-lang/crates.io-index"1076checksum = "8dd43f7cfaffe0a386636a10baea2ee05cc50df3b77bea4a456c9572a939bf1f"1000checksum = "b810a8449931679f64cd7eef1bbd0fa315801b6d5d9cdc1ace2804d6529eee18"1077dependencies = [1001dependencies = [1078 "byteorder 0.5.3",1002 "byteorder",1003 "fnv",1079 "rand 0.3.23",1004 "rand 0.7.3",1080]1005]108110061082[[package]]1007[[package]]1083name = "curve25519-dalek"1008name = "curve25519-dalek"1084version = "2.1.0"1009version = "2.1.2"1085source = "registry+https://github.com/rust-lang/crates.io-index"1010source = "registry+https://github.com/rust-lang/crates.io-index"1086checksum = "5d85653f070353a16313d0046f173f70d1aadd5b42600a14de626f0dfb3473a5"1011checksum = "434e1720189a637d44fe464f4df1e6eb900b4835255b14354497c78af37d9bb8"1087dependencies = [1012dependencies = [1088 "byteorder 1.3.4",1013 "byteorder",1089 "digest 0.8.1",1014 "digest 0.8.1",1090 "rand_core 0.5.1",1015 "rand_core 0.5.1",1091 "subtle 2.4.0",1016 "subtle 2.4.0",109410191095[[package]]1020[[package]]1096name = "curve25519-dalek"1021name = "curve25519-dalek"1097version = "3.0.0"1022version = "3.0.2"1098source = "registry+https://github.com/rust-lang/crates.io-index"1023source = "registry+https://github.com/rust-lang/crates.io-index"1099checksum = "c8492de420e9e60bc9a1d66e2dbb91825390b738a388606600663fc529b4b307"1024checksum = "f627126b946c25a4638eec0ea634fc52506dea98db118aae985118ce7c3d723f"1100dependencies = [1025dependencies = [1101 "byteorder 1.3.4",1026 "byteorder",1102 "digest 0.9.0",1027 "digest 0.9.0",1103 "rand_core 0.5.1",1028 "rand_core 0.5.1",1104 "subtle 2.4.0",1029 "subtle 2.4.0",1150 "dirs-sys",1075 "dirs-sys",1151]1076]10771078[[package]]1079name = "directories"1080version = "3.0.1"1081source = "registry+https://github.com/rust-lang/crates.io-index"1082checksum = "f8fed639d60b58d0f53498ab13d26f621fd77569cc6edb031f4cc36a2ad9da0f"1083dependencies = [1084 "dirs-sys",1085]115210861153[[package]]1087[[package]]1154name = "dirs-sys"1088name = "dirs-sys"1167source = "registry+https://github.com/rust-lang/crates.io-index"1101source = "registry+https://github.com/rust-lang/crates.io-index"1168checksum = "c4d33be9473d06f75f58220f71f7a9317aca647dc061dbd3c361b0bef505fbea"1102checksum = "c4d33be9473d06f75f58220f71f7a9317aca647dc061dbd3c361b0bef505fbea"1169dependencies = [1103dependencies = [1170 "byteorder 1.3.4",1104 "byteorder",1171 "quick-error",1105 "quick-error 1.2.3",1172]1106]117311071174[[package]]1108[[package]]119411281195[[package]]1129[[package]]1196name = "dyn-clone"1130name = "dyn-clone"1197version = "1.0.3"1131version = "1.0.4"1198source = "registry+https://github.com/rust-lang/crates.io-index"1132source = "registry+https://github.com/rust-lang/crates.io-index"1199checksum = "d55796afa1b20c2945ca8eabfc421839f2b766619209f1ede813cf2484f31804"1133checksum = "ee2626afccd7561a06cf1367e2950c4718ea04565e20fb5029b6c7d8ad09abcf"120011341201[[package]]1135[[package]]1202name = "ed25519"1136name = "ed25519"1213source = "registry+https://github.com/rust-lang/crates.io-index"1147source = "registry+https://github.com/rust-lang/crates.io-index"1214checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d"1148checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d"1215dependencies = [1149dependencies = [1216 "curve25519-dalek 3.0.0",1150 "curve25519-dalek 3.0.2",1217 "ed25519",1151 "ed25519",1218 "rand 0.7.3",1152 "rand 0.7.3",1219 "serde",1153 "serde",126812021269[[package]]1203[[package]]1270name = "erased-serde"1204name = "erased-serde"1271version = "0.3.12"1205version = "0.3.13"1272source = "registry+https://github.com/rust-lang/crates.io-index"1206source = "registry+https://github.com/rust-lang/crates.io-index"1273checksum = "6ca8b296792113e1500fd935ae487be6e00ce318952a6880555554824d6ebf38"1207checksum = "0465971a8cc1fa2455c8465aaa377131e1f1cf4983280f474a13e68793aa770c"1274dependencies = [1208dependencies = [1275 "serde",1209 "serde",1276]1210]1308source = "registry+https://github.com/rust-lang/crates.io-index"1242source = "registry+https://github.com/rust-lang/crates.io-index"1309checksum = "e43f2f1833d64e33f15592464d6fdd70f349dda7b1a53088eb83cd94014008c5"1243checksum = "e43f2f1833d64e33f15592464d6fdd70f349dda7b1a53088eb83cd94014008c5"1310dependencies = [1244dependencies = [1311 "futures 0.3.8",1245 "futures 0.3.12",1312]1246]131312471314[[package]]1248[[package]]1380checksum = "8feb87a63249689640ac9c011742c33139204e3c134293d3054022276869133b"1314checksum = "8feb87a63249689640ac9c011742c33139204e3c134293d3054022276869133b"1381dependencies = [1315dependencies = [1382 "either",1316 "either",1383 "futures 0.3.8",1317 "futures 0.3.12",1384 "futures-timer 2.0.2",1318 "futures-timer 2.0.2",1385 "log",1319 "log",1386 "num-traits",1320 "num-traits",139013241391[[package]]1325[[package]]1392name = "fixed-hash"1326name = "fixed-hash"1393version = "0.6.1"1327version = "0.7.0"1394source = "registry+https://github.com/rust-lang/crates.io-index"1328source = "registry+https://github.com/rust-lang/crates.io-index"1395checksum = "11498d382790b7a8f2fd211780bec78619bba81cdad3a283997c0c41f836759c"1329checksum = "cfcf0ed7fe52a17a03854ec54a9f76d6d84508d1c0e66bc1793301c73fc8493c"1396dependencies = [1330dependencies = [1397 "byteorder 1.3.4",1331 "byteorder",1398 "rand 0.7.3",1332 "rand 0.8.3",1399 "rustc-hex",1333 "rustc-hex",1400 "static_assertions",1334 "static_assertions",1401]1335]144313771444[[package]]1378[[package]]1445name = "fork-tree"1379name = "fork-tree"1446version = "2.0.0"1380version = "2.0.1"1447source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"1381source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"1448dependencies = [1382dependencies = [1449 "parity-scale-codec",1383 "parity-scale-codec",1450]1384]146113951462[[package]]1396[[package]]1463name = "frame-benchmarking"1397name = "frame-benchmarking"1464version = "2.0.0"1398version = "2.0.1"1465source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"1399source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"1466dependencies = [1400dependencies = [1467 "frame-support",1401 "frame-support",1468 "frame-system",1402 "frame-system",147914131480[[package]]1414[[package]]1481name = "frame-benchmarking-cli"1415name = "frame-benchmarking-cli"1482version = "2.0.0"1416version = "2.0.1"1483source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"1417source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"1484dependencies = [1418dependencies = [1419 "Inflector",1420 "chrono",1485 "frame-benchmarking",1421 "frame-benchmarking",1422 "handlebars",1486 "parity-scale-codec",1423 "parity-scale-codec",1487 "sc-cli",1424 "sc-cli",1488 "sc-client-db",1425 "sc-client-db",1489 "sc-executor",1426 "sc-executor",1490 "sc-service",1427 "sc-service",1428 "serde",1491 "sp-core",1429 "sp-core",1492 "sp-externalities",1430 "sp-externalities",1431 "sp-keystore",1493 "sp-runtime",1432 "sp-runtime",1494 "sp-state-machine",1433 "sp-state-machine",1495 "structopt",1434 "structopt",1496]1435]149714361498[[package]]1437[[package]]1499name = "frame-executive"1438name = "frame-executive"1500version = "2.0.0"1439version = "2.0.1"1501source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"1440source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"1502dependencies = [1441dependencies = [1503 "frame-support",1442 "frame-support",1504 "frame-system",1443 "frame-system",151314521514[[package]]1453[[package]]1515name = "frame-metadata"1454name = "frame-metadata"1516version = "12.0.0"1455version = "12.0.1"1517source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"1456source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"1518dependencies = [1457dependencies = [1519 "parity-scale-codec",1458 "parity-scale-codec",1520 "serde",1459 "serde",152414631525[[package]]1464[[package]]1526name = "frame-support"1465name = "frame-support"1527version = "2.0.0"1466version = "2.0.1"1528source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"1467source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"1529dependencies = [1468dependencies = [1530 "bitmask",1469 "bitflags",1531 "frame-metadata",1470 "frame-metadata",1532 "frame-support-procedural",1471 "frame-support-procedural",1533 "impl-trait-for-tuples",1472 "impl-trait-for-tuples 0.2.0",1534 "log",1473 "log",1535 "once_cell 1.5.2",1474 "once_cell",1536 "parity-scale-codec",1475 "parity-scale-codec",1537 "paste",1476 "paste",1538 "serde",1477 "serde",1539 "smallvec 1.5.1",1478 "smallvec 1.6.1",1540 "sp-arithmetic",1479 "sp-arithmetic",1541 "sp-core",1480 "sp-core",1542 "sp-inherents",1481 "sp-inherents",154914881550[[package]]1489[[package]]1551name = "frame-support-procedural"1490name = "frame-support-procedural"1552version = "2.0.0"1491version = "2.0.1"1553source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"1492source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"1554dependencies = [1493dependencies = [1494 "Inflector",1555 "frame-support-procedural-tools",1495 "frame-support-procedural-tools",1556 "proc-macro2",1496 "proc-macro2",1557 "quote",1497 "quote",156015001561[[package]]1501[[package]]1562name = "frame-support-procedural-tools"1502name = "frame-support-procedural-tools"1563version = "2.0.0"1503version = "2.0.1"1564source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"1504source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"1565dependencies = [1505dependencies = [1566 "frame-support-procedural-tools-derive",1506 "frame-support-procedural-tools-derive",1567 "proc-macro-crate",1507 "proc-macro-crate",157215121573[[package]]1513[[package]]1574name = "frame-support-procedural-tools-derive"1514name = "frame-support-procedural-tools-derive"1575version = "2.0.0"1515version = "2.0.1"1576source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"1516source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"1577dependencies = [1517dependencies = [1578 "proc-macro2",1518 "proc-macro2",1579 "quote",1519 "quote",158215221583[[package]]1523[[package]]1584name = "frame-system"1524name = "frame-system"1585version = "2.0.0"1525version = "2.0.1"1586source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"1526source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"1587dependencies = [1527dependencies = [1588 "frame-support",1528 "frame-support",1589 "impl-trait-for-tuples",1529 "impl-trait-for-tuples 0.2.0",1590 "parity-scale-codec",1530 "parity-scale-codec",1591 "serde",1531 "serde",1592 "sp-core",1532 "sp-core",159815381599[[package]]1539[[package]]1600name = "frame-system-benchmarking"1540name = "frame-system-benchmarking"1601version = "2.0.0"1541version = "2.0.1"1602source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"1542source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"1603dependencies = [1543dependencies = [1604 "frame-benchmarking",1544 "frame-benchmarking",1605 "frame-support",1545 "frame-support",161215521613[[package]]1553[[package]]1614name = "frame-system-rpc-runtime-api"1554name = "frame-system-rpc-runtime-api"1615version = "2.0.0"1555version = "2.0.1"1616source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"1556source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"1617dependencies = [1557dependencies = [1618 "parity-scale-codec",1558 "parity-scale-codec",1619 "sp-api",1559 "sp-api",166116011662[[package]]1602[[package]]1663name = "futures"1603name = "futures"1664version = "0.3.8"1604version = "0.3.12"1665source = "registry+https://github.com/rust-lang/crates.io-index"1605source = "registry+https://github.com/rust-lang/crates.io-index"1666checksum = "9b3b0c040a1fe6529d30b3c5944b280c7f0dcb2930d2c3062bca967b602583d0"1606checksum = "da9052a1a50244d8d5aa9bf55cbc2fb6f357c86cc52e46c62ed390a7180cf150"1667dependencies = [1607dependencies = [1668 "futures-channel",1608 "futures-channel",1669 "futures-core",1609 "futures-core",167616161677[[package]]1617[[package]]1678name = "futures-channel"1618name = "futures-channel"1679version = "0.3.8"1619version = "0.3.12"1680source = "registry+https://github.com/rust-lang/crates.io-index"1620source = "registry+https://github.com/rust-lang/crates.io-index"1681checksum = "4b7109687aa4e177ef6fe84553af6280ef2778bdb7783ba44c9dc3399110fe64"1621checksum = "f2d31b7ec7efab6eefc7c57233bb10b847986139d88cc2f5a02a1ae6871a1846"1682dependencies = [1622dependencies = [1683 "futures-core",1623 "futures-core",1684 "futures-sink",1624 "futures-sink",1685]1625]16861687[[package]]1688name = "futures-channel-preview"1689version = "0.3.0-alpha.19"1690source = "registry+https://github.com/rust-lang/crates.io-index"1691checksum = "d5e5f4df964fa9c1c2f8bddeb5c3611631cacd93baf810fc8bb2fb4b495c263a"1692dependencies = [1693 "futures-core-preview",1694]169516261696[[package]]1627[[package]]1697name = "futures-core"1628name = "futures-core"1698version = "0.3.8"1629version = "0.3.12"1699source = "registry+https://github.com/rust-lang/crates.io-index"1630source = "registry+https://github.com/rust-lang/crates.io-index"1700checksum = "847ce131b72ffb13b6109a221da9ad97a64cbe48feb1028356b836b47b8f1748"1631checksum = "79e5145dde8da7d1b3892dad07a9c98fc04bc39892b1ecc9692cf53e2b780a65"17011702[[package]]1703name = "futures-core-preview"1704version = "0.3.0-alpha.19"1705source = "registry+https://github.com/rust-lang/crates.io-index"1706checksum = "b35b6263fb1ef523c3056565fa67b1d16f0a8604ff12b11b08c25f28a734c60a"170716321708[[package]]1633[[package]]1709name = "futures-cpupool"1634name = "futures-cpupool"1722checksum = "fdcef58a173af8148b182684c9f2d5250875adbcaff7b5794073894f9d8634a9"1647checksum = "fdcef58a173af8148b182684c9f2d5250875adbcaff7b5794073894f9d8634a9"1723dependencies = [1648dependencies = [1724 "futures 0.1.30",1649 "futures 0.1.30",1725 "futures 0.3.8",1650 "futures 0.3.12",1726 "lazy_static",1651 "lazy_static",1727 "log",1652 "log",1728 "parking_lot 0.9.0",1653 "parking_lot 0.9.0",173316581734[[package]]1659[[package]]1735name = "futures-executor"1660name = "futures-executor"1736version = "0.3.8"1661version = "0.3.12"1737source = "registry+https://github.com/rust-lang/crates.io-index"1662source = "registry+https://github.com/rust-lang/crates.io-index"1738checksum = "4caa2b2b68b880003057c1dd49f1ed937e38f22fcf6c212188a121f08cf40a65"1663checksum = "e9e59fdc009a4b3096bf94f740a0f2424c082521f20a9b08c5c07c48d90fd9b9"1739dependencies = [1664dependencies = [1740 "futures-core",1665 "futures-core",1741 "futures-task",1666 "futures-task",174516701746[[package]]1671[[package]]1747name = "futures-io"1672name = "futures-io"1748version = "0.3.8"1673version = "0.3.12"1749source = "registry+https://github.com/rust-lang/crates.io-index"1674source = "registry+https://github.com/rust-lang/crates.io-index"1750checksum = "611834ce18aaa1bd13c4b374f5d653e1027cf99b6b502584ff8c9a64413b30bb"1675checksum = "28be053525281ad8259d47e4de5de657b25e7bac113458555bb4b70bc6870500"175116761752[[package]]1677[[package]]1753name = "futures-lite"1678name = "futures-lite"1754version = "1.11.2"1679version = "1.11.3"1755source = "registry+https://github.com/rust-lang/crates.io-index"1680source = "registry+https://github.com/rust-lang/crates.io-index"1756checksum = "5e6c079abfac3ab269e2927ec048dabc89d009ebfdda6b8ee86624f30c689658"1681checksum = "b4481d0cd0de1d204a4fa55e7d45f07b1d958abcb06714b3446438e2eff695fb"1757dependencies = [1682dependencies = [1758 "fastrand",1683 "fastrand",1759 "futures-core",1684 "futures-core",1760 "futures-io",1685 "futures-io",1761 "memchr",1686 "memchr",1762 "parking",1687 "parking",1763 "pin-project-lite 0.1.11",1688 "pin-project-lite 0.2.4",1764 "waker-fn",1689 "waker-fn",1765]1690]176616911767[[package]]1692[[package]]1768name = "futures-macro"1693name = "futures-macro"1769version = "0.3.8"1694version = "0.3.12"1770source = "registry+https://github.com/rust-lang/crates.io-index"1695source = "registry+https://github.com/rust-lang/crates.io-index"1771checksum = "77408a692f1f97bcc61dc001d752e00643408fbc922e4d634c655df50d595556"1696checksum = "c287d25add322d9f9abdcdc5927ca398917996600182178774032e9f8258fedd"1772dependencies = [1697dependencies = [1773 "proc-macro-hack",1698 "proc-macro-hack",1774 "proc-macro2",1699 "proc-macro2",1775 "quote",1700 "quote",1776 "syn",1701 "syn",1777]1702]17031704[[package]]1705name = "futures-rustls"1706version = "0.21.1"1707source = "registry+https://github.com/rust-lang/crates.io-index"1708checksum = "3a1387e07917c711fb4ee4f48ea0adb04a3c9739e53ef85bf43ae1edc2937a8b"1709dependencies = [1710 "futures-io",1711 "rustls 0.19.0",1712 "webpki",1713]177817141779[[package]]1715[[package]]1780name = "futures-sink"1716name = "futures-sink"1781version = "0.3.8"1717version = "0.3.12"1782source = "registry+https://github.com/rust-lang/crates.io-index"1718source = "registry+https://github.com/rust-lang/crates.io-index"1783checksum = "f878195a49cee50e006b02b93cf7e0a95a38ac7b776b4c4d9cc1207cd20fcb3d"1719checksum = "caf5c69029bda2e743fddd0582d1083951d65cc9539aebf8812f36c3491342d6"178417201785[[package]]1721[[package]]1786name = "futures-task"1722name = "futures-task"1787version = "0.3.8"1723version = "0.3.12"1788source = "registry+https://github.com/rust-lang/crates.io-index"1724source = "registry+https://github.com/rust-lang/crates.io-index"1789checksum = "7c554eb5bf48b2426c4771ab68c6b14468b6e76cc90996f528c3338d761a4d0d"1725checksum = "13de07eb8ea81ae445aca7b69f5f7bf15d7bf4912d8ca37d6645c77ae8a58d86"1790dependencies = [1726dependencies = [1791 "once_cell 1.5.2",1727 "once_cell",1792]1728]179317291794[[package]]1730[[package]]180517411806[[package]]1742[[package]]1807name = "futures-util"1743name = "futures-util"1808version = "0.3.8"1744version = "0.3.12"1809source = "registry+https://github.com/rust-lang/crates.io-index"1745source = "registry+https://github.com/rust-lang/crates.io-index"1810checksum = "d304cff4a7b99cfb7986f7d43fbe93d175e72e704a8860787cc95e9ffd85cbd2"1746checksum = "632a8cd0f2a4b3fdea1657f08bde063848c3bd00f9bbf6e256b8be78802e624b"1811dependencies = [1747dependencies = [1812 "futures 0.1.30",1748 "futures 0.1.30",1813 "futures-channel",1749 "futures-channel",1817 "futures-sink",1753 "futures-sink",1818 "futures-task",1754 "futures-task",1819 "memchr",1755 "memchr",1820 "pin-project 1.0.2",1756 "pin-project-lite 0.2.4",1821 "pin-utils",1757 "pin-utils",1822 "proc-macro-hack",1758 "proc-macro-hack",1823 "proc-macro-nested",1759 "proc-macro-nested",1824 "slab",1760 "slab",1825]1761]18261827[[package]]1828name = "futures-util-preview"1829version = "0.3.0-alpha.19"1830source = "registry+https://github.com/rust-lang/crates.io-index"1831checksum = "5ce968633c17e5f97936bd2797b6e38fb56cf16a7422319f7ec2e30d3c470e8d"1832dependencies = [1833 "futures-channel-preview",1834 "futures-core-preview",1835 "pin-utils",1836 "slab",1837]18381839[[package]]1840name = "futures_codec"1841version = "0.4.1"1842source = "registry+https://github.com/rust-lang/crates.io-index"1843checksum = "ce54d63f8b0c75023ed920d46fd71d0cbbb830b0ee012726b5b4f506fb6dea5b"1844dependencies = [1845 "bytes 0.5.6",1846 "futures 0.3.8",1847 "memchr",1848 "pin-project 0.4.27",1849]185017621851[[package]]1763[[package]]1852name = "gcc"1764name = "gcc"1853version = "0.3.55"1765version = "0.3.55"1854source = "registry+https://github.com/rust-lang/crates.io-index"1766source = "registry+https://github.com/rust-lang/crates.io-index"1855checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2"1767checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2"18561857[[package]]1858name = "generator"1859version = "0.6.23"1860source = "registry+https://github.com/rust-lang/crates.io-index"1861checksum = "8cdc09201b2e8ca1b19290cf7e65de2246b8e91fb6874279722189c4de7b94dc"1862dependencies = [1863 "cc",1864 "libc",1865 "log",1866 "rustc_version",1867 "winapi 0.3.9",1868]186917681870[[package]]1769[[package]]1871name = "generic-array"1770name = "generic-array"1876 "typenum",1775 "typenum",1877]1776]17771778[[package]]1779name = "generic-array"1780version = "0.13.2"1781source = "registry+https://github.com/rust-lang/crates.io-index"1782checksum = "0ed1e761351b56f54eb9dcd0cfaca9fd0daecf93918e1cfc01c8a3d26ee7adcd"1783dependencies = [1784 "typenum",1785]187817861879[[package]]1787[[package]]1880name = "generic-array"1788name = "generic-array"1886 "version_check",1794 "version_check",1887]1795]18881889[[package]]1890name = "get_if_addrs"1891version = "0.5.3"1892source = "registry+https://github.com/rust-lang/crates.io-index"1893checksum = "abddb55a898d32925f3148bd281174a68eeb68bbfd9a5938a57b18f506ee4ef7"1894dependencies = [1895 "c_linked_list",1896 "get_if_addrs-sys",1897 "libc",1898 "winapi 0.2.8",1899]19001901[[package]]1902name = "get_if_addrs-sys"1903version = "0.1.1"1904source = "registry+https://github.com/rust-lang/crates.io-index"1905checksum = "0d04f9fb746cf36b191c00f3ede8bde9c8e64f9f4b05ae2694a9ccf5e3f5ab48"1906dependencies = [1907 "gcc",1908 "libc",1909]191017961911[[package]]1797[[package]]1912name = "getrandom"1798name = "getrandom"1913version = "0.1.15"1799version = "0.1.16"1914source = "registry+https://github.com/rust-lang/crates.io-index"1800source = "registry+https://github.com/rust-lang/crates.io-index"1915checksum = "fc587bc0ec293155d5bfa6b9891ec18a1e330c234f896ea47fbada4cadbe47e6"1801checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"1916dependencies = [1802dependencies = [1917 "cfg-if 0.1.10",1803 "cfg-if 1.0.0",1918 "libc",1804 "libc",1919 "wasi 0.9.0+wasi-snapshot-preview1",1805 "wasi 0.9.0+wasi-snapshot-preview1",1920]1806]192118071922[[package]]1808[[package]]1923name = "getrandom"1809name = "getrandom"1924version = "0.2.0"1810version = "0.2.2"1925source = "registry+https://github.com/rust-lang/crates.io-index"1811source = "registry+https://github.com/rust-lang/crates.io-index"1926checksum = "ee8025cf36f917e6a52cce185b7c7177689b838b7ec138364e50cc2277a56cf4"1812checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8"1927dependencies = [1813dependencies = [1928 "cfg-if 0.1.10",1814 "cfg-if 1.0.0",1929 "libc",1815 "libc",1930 "wasi 0.9.0+wasi-snapshot-preview1",1816 "wasi 0.10.0+wasi-snapshot-preview1",1931]1817]193218181933[[package]]1819[[package]]1934name = "ghash"1820name = "ghash"1935version = "0.3.0"1821version = "0.3.1"1936source = "registry+https://github.com/rust-lang/crates.io-index"1822source = "registry+https://github.com/rust-lang/crates.io-index"1937checksum = "d6e27f0689a6e15944bdce7e45425efb87eaa8ab0c6e87f11d0987a9133e2531"1823checksum = "97304e4cd182c3846f7575ced3890c53012ce534ad9114046b0a9e00bb30a375"1938dependencies = [1824dependencies = [1825 "opaque-debug 0.3.0",1939 "polyval",1826 "polyval",1940]1827]194118281994source = "registry+https://github.com/rust-lang/crates.io-index"1881source = "registry+https://github.com/rust-lang/crates.io-index"1995checksum = "a5b34c246847f938a410a03c5458c7fee2274436675e76d8b903c08efc29c462"1882checksum = "a5b34c246847f938a410a03c5458c7fee2274436675e76d8b903c08efc29c462"1996dependencies = [1883dependencies = [1997 "byteorder 1.3.4",1884 "byteorder",1998 "bytes 0.4.12",1885 "bytes 0.4.12",1999 "fnv",1886 "fnv",2000 "futures 0.1.30",1887 "futures 0.1.30",2017 "futures-core",1904 "futures-core",2018 "futures-sink",1905 "futures-sink",2019 "futures-util",1906 "futures-util",2020 "http 0.2.2",1907 "http 0.2.3",2021 "indexmap",1908 "indexmap",2022 "slab",1909 "slab",2023 "tokio 0.2.24",1910 "tokio 0.2.24",2026 "tracing-futures",1913 "tracing-futures",2027]1914]19151916[[package]]1917name = "handlebars"1918version = "3.5.2"1919source = "registry+https://github.com/rust-lang/crates.io-index"1920checksum = "964d0e99a61fe9b1b347389b77ebf8b7e1587b70293676aaca7d27e59b9073b2"1921dependencies = [1922 "log",1923 "pest",1924 "pest_derive",1925 "quick-error 2.0.0",1926 "serde",1927 "serde_json",1928]202819292029[[package]]1930[[package]]2030name = "hash-db"1931name = "hash-db"2041 "crunchy",1942 "crunchy",2042]1943]20432044[[package]]2045name = "hashbrown"2046version = "0.1.8"2047source = "registry+https://github.com/rust-lang/crates.io-index"2048checksum = "3bae29b6653b3412c2e71e9d486db9f9df5d701941d86683005efb9f2d28e3da"2049dependencies = [2050 "byteorder 1.3.4",2051 "scopeguard 0.3.3",2052]20532054[[package]]2055name = "hashbrown"2056version = "0.6.3"2057source = "registry+https://github.com/rust-lang/crates.io-index"2058checksum = "8e6073d0ca812575946eb5f35ff68dbe519907b25c42530389ff946dc84c6ead"2059dependencies = [2060 "ahash 0.2.19",2061 "autocfg 0.1.7",2062]20632064[[package]]2065name = "hashbrown"2066version = "0.8.2"2067source = "registry+https://github.com/rust-lang/crates.io-index"2068checksum = "e91b62f79061a0bc2e046024cb7ba44b08419ed238ecbd9adbd787434b9e8c25"2069dependencies = [2070 "ahash 0.3.8",2071 "autocfg 1.0.1",2072]207319442074[[package]]1945[[package]]2075name = "hashbrown"1946name = "hashbrown"2076version = "0.9.1"1947version = "0.9.1"2077source = "registry+https://github.com/rust-lang/crates.io-index"1948source = "registry+https://github.com/rust-lang/crates.io-index"2078checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04"1949checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04"2079dependencies = [1950dependencies = [2080 "ahash 0.4.7",1951 "ahash",2081]1952]208219532083[[package]]1954[[package]]2084name = "heck"1955name = "heck"2085version = "0.3.1"1956version = "0.3.2"2086source = "registry+https://github.com/rust-lang/crates.io-index"1957source = "registry+https://github.com/rust-lang/crates.io-index"2087checksum = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205"1958checksum = "87cbf45460356b7deeb5e3415b5563308c0a9b057c85e12b06ad551f98d0a6ac"2088dependencies = [1959dependencies = [2089 "unicode-segmentation",1960 "unicode-segmentation",2090]1961]209119622092[[package]]1963[[package]]2093name = "hermit-abi"1964name = "hermit-abi"2094version = "0.1.17"1965version = "0.1.18"2095source = "registry+https://github.com/rust-lang/crates.io-index"1966source = "registry+https://github.com/rust-lang/crates.io-index"2096checksum = "5aca5565f760fb5b220e499d72710ed156fdb74e631659e99377d9ebfbd13ae8"1967checksum = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c"2097dependencies = [1968dependencies = [2098 "libc",1969 "libc",2099]1970]2126 "digest 0.8.1",1997 "digest 0.8.1",2127]1998]19992000[[package]]2001name = "hmac"2002version = "0.8.1"2003source = "registry+https://github.com/rust-lang/crates.io-index"2004checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840"2005dependencies = [2006 "crypto-mac 0.8.0",2007 "digest 0.9.0",2008]212820092129[[package]]2010[[package]]2130name = "hmac-drbg"2011name = "hmac-drbg"2134dependencies = [2015dependencies = [2135 "digest 0.8.1",2016 "digest 0.8.1",2136 "generic-array 0.12.3",2017 "generic-array 0.12.3",2137 "hmac",2018 "hmac 0.7.1",2138]2019]213920202140[[package]]2021[[package]]215020312151[[package]]2032[[package]]2152name = "http"2033name = "http"2153version = "0.2.2"2034version = "0.2.3"2154source = "registry+https://github.com/rust-lang/crates.io-index"2035source = "registry+https://github.com/rust-lang/crates.io-index"2155checksum = "84129d298a6d57d246960ff8eb831ca4af3f96d29e2e28848dae275408658e26"2036checksum = "7245cd7449cc792608c3c8a9eaf69bd4eabbabf802713748fd739c98b82f0747"2156dependencies = [2037dependencies = [2157 "bytes 0.5.6",2038 "bytes 1.0.1",2158 "fnv",2039 "fnv",2159 "itoa",2040 "itoa",2160]2041]2178checksum = "13d5ff830006f7646652e057693569bfe0d51760c0085a071769d142a205111b"2059checksum = "13d5ff830006f7646652e057693569bfe0d51760c0085a071769d142a205111b"2179dependencies = [2060dependencies = [2180 "bytes 0.5.6",2061 "bytes 0.5.6",2181 "http 0.2.2",2062 "http 0.2.3",2182]2063]218320642184[[package]]2065[[package]]2199source = "registry+https://github.com/rust-lang/crates.io-index"2080source = "registry+https://github.com/rust-lang/crates.io-index"2200checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f"2081checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f"2201dependencies = [2082dependencies = [2202 "quick-error",2083 "quick-error 1.2.3",2203]2084]220420852205[[package]]2086[[package]]2223 "time",2104 "time",2224 "tokio 0.1.22",2105 "tokio 0.1.22",2225 "tokio-buf",2106 "tokio-buf",2226 "tokio-executor 0.1.10",2107 "tokio-executor",2227 "tokio-io",2108 "tokio-io",2228 "tokio-reactor",2109 "tokio-reactor",2229 "tokio-tcp",2110 "tokio-tcp",2243 "futures-core",2124 "futures-core",2244 "futures-util",2125 "futures-util",2245 "h2 0.2.7",2126 "h2 0.2.7",2246 "http 0.2.2",2127 "http 0.2.3",2247 "http-body 0.3.1",2128 "http-body 0.3.1",2248 "httparse",2129 "httparse",2249 "httpdate",2130 "httpdate",2250 "itoa",2131 "itoa",2251 "pin-project 1.0.2",2132 "pin-project 1.0.4",2252 "socket2",2133 "socket2",2253 "tokio 0.2.24",2134 "tokio 0.2.24",2254 "tower-service",2135 "tower-service",2267 "futures-util",2148 "futures-util",2268 "hyper 0.13.9",2149 "hyper 0.13.9",2269 "log",2150 "log",2270 "rustls",2151 "rustls 0.18.1",2271 "rustls-native-certs",2152 "rustls-native-certs",2272 "tokio 0.2.24",2153 "tokio 0.2.24",2273 "tokio-rustls",2154 "tokio-rustls",2296 "unicode-normalization",2177 "unicode-normalization",2297]2178]21792180[[package]]2181name = "if-addrs"2182version = "0.6.5"2183source = "registry+https://github.com/rust-lang/crates.io-index"2184checksum = "28538916eb3f3976311f5dfbe67b5362d0add1293d0a9cad17debf86f8e3aa48"2185dependencies = [2186 "if-addrs-sys",2187 "libc",2188 "winapi 0.3.9",2189]21902191[[package]]2192name = "if-addrs-sys"2193version = "0.3.2"2194source = "registry+https://github.com/rust-lang/crates.io-index"2195checksum = "de74b9dd780476e837e5eb5ab7c88b49ed304126e412030a0adba99c8efe79ea"2196dependencies = [2197 "cc",2198 "libc",2199]22002201[[package]]2202name = "if-watch"2203version = "0.1.8"2204source = "registry+https://github.com/rust-lang/crates.io-index"2205checksum = "97b8538953a3f0d0d3868f0a706eb4273535e10d72acb5c82c1c23ae48835c85"2206dependencies = [2207 "async-io",2208 "futures 0.3.12",2209 "futures-lite",2210 "if-addrs",2211 "ipnet",2212 "libc",2213 "log",2214 "winapi 0.3.9",2215]229822162299[[package]]2217[[package]]2300name = "impl-codec"2218name = "impl-codec"2325 "syn",2243 "syn",2326]2244]22452246[[package]]2247name = "impl-trait-for-tuples"2248version = "0.2.0"2249source = "registry+https://github.com/rust-lang/crates.io-index"2250checksum = "6f65a8ecf74feeacdab8d38cb129e550ca871cccaa7d1921d8636ecd75534903"2251dependencies = [2252 "proc-macro2",2253 "quote",2254 "syn",2255]232722562328[[package]]2257[[package]]2329name = "indexmap"2258name = "indexmap"2330version = "1.6.1"2259version = "1.6.1"2331source = "registry+https://github.com/rust-lang/crates.io-index"2260source = "registry+https://github.com/rust-lang/crates.io-index"2332checksum = "4fb1fa934250de4de8aef298d81c729a7d33d8c239daa3a7575e6b92bfc7313b"2261checksum = "4fb1fa934250de4de8aef298d81c729a7d33d8c239daa3a7575e6b92bfc7313b"2333dependencies = [2262dependencies = [2334 "autocfg 1.0.1",2263 "autocfg",2335 "hashbrown 0.9.1",2264 "hashbrown",2336 "serde",2265 "serde",2337]2266]233822672360source = "registry+https://github.com/rust-lang/crates.io-index"2289source = "registry+https://github.com/rust-lang/crates.io-index"2361checksum = "64fa110ec7b8f493f416eed552740d10e7030ad5f63b2308f82c9608ec2df275"2290checksum = "64fa110ec7b8f493f416eed552740d10e7030ad5f63b2308f82c9608ec2df275"2362dependencies = [2291dependencies = [2363 "futures 0.3.8",2292 "futures 0.3.12",2364 "futures-timer 2.0.2",2293 "futures-timer 2.0.2",2365]2294]236622952385source = "registry+https://github.com/rust-lang/crates.io-index"2314source = "registry+https://github.com/rust-lang/crates.io-index"2386checksum = "47be2f14c678be2fdcab04ab1171db51b2762ce6f0a8ee87c8dd4a04ed216135"2315checksum = "47be2f14c678be2fdcab04ab1171db51b2762ce6f0a8ee87c8dd4a04ed216135"23872388[[package]]2389name = "itertools"2390version = "0.8.2"2391source = "registry+https://github.com/rust-lang/crates.io-index"2392checksum = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484"2393dependencies = [2394 "either",2395]239623162397[[package]]2317[[package]]2398name = "itertools"2318name = "itertools"240523252406[[package]]2326[[package]]2407name = "itoa"2327name = "itoa"2408version = "0.4.6"2328version = "0.4.7"2409source = "registry+https://github.com/rust-lang/crates.io-index"2329source = "registry+https://github.com/rust-lang/crates.io-index"2410checksum = "dc6f3ad7b9d11a0c00842ff8de1b60ee58661048eb8049ed33c73594f359d7e6"2330checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736"241123312412[[package]]2332[[package]]2413name = "jobserver"2333name = "jobserver"242023402421[[package]]2341[[package]]2422name = "js-sys"2342name = "js-sys"2423version = "0.3.46"2343version = "0.3.47"2424source = "registry+https://github.com/rust-lang/crates.io-index"2344source = "registry+https://github.com/rust-lang/crates.io-index"2425checksum = "cf3d7383929f7c9c7c2d0fa596f325832df98c3704f2c60553080f7127a58175"2345checksum = "5cfb73131c35423a367daf8cbd24100af0d077668c8c2943f0e7dd775fef0f65"2426dependencies = [2346dependencies = [2427 "wasm-bindgen",2347 "wasm-bindgen",2428]2348]257624962577[[package]]2497[[package]]2578name = "kvdb"2498name = "kvdb"2579version = "0.7.0"2499version = "0.8.0"2580source = "registry+https://github.com/rust-lang/crates.io-index"2500source = "registry+https://github.com/rust-lang/crates.io-index"2581checksum = "0315ef2f688e33844400b31f11c263f2b3dc21d8b9355c6891c5f185fae43f9a"2501checksum = "92312348daade49976a6dc59263ad39ed54f840aacb5664874f7c9aa16e5f848"2582dependencies = [2502dependencies = [2583 "parity-util-mem",2503 "parity-util-mem",2584 "smallvec 1.5.1",2504 "smallvec 1.6.1",2585]2505]258625062587[[package]]2507[[package]]2588name = "kvdb-memorydb"2508name = "kvdb-memorydb"2589version = "0.7.0"2509version = "0.8.0"2590source = "registry+https://github.com/rust-lang/crates.io-index"2510source = "registry+https://github.com/rust-lang/crates.io-index"2591checksum = "73de822b260a3bdfb889dbbb65bb2d473eee2253973d6fa4a5d149a2a4a7c66e"2511checksum = "986052a8d16c692eaebe775391f9a3ac26714f3907132658500b601dec94c8c2"2592dependencies = [2512dependencies = [2593 "kvdb",2513 "kvdb",2594 "parity-util-mem",2514 "parity-util-mem",2595 "parking_lot 0.10.2",2515 "parking_lot 0.11.1",2596]2516]259725172598[[package]]2518[[package]]2599name = "kvdb-rocksdb"2519name = "kvdb-rocksdb"2600version = "0.9.1"2520version = "0.10.0"2601source = "registry+https://github.com/rust-lang/crates.io-index"2521source = "registry+https://github.com/rust-lang/crates.io-index"2602checksum = "44947dd392f09475af614d740fe0320b66d01cb5b977f664bbbb5e45a70ea4c1"2522checksum = "8d92c36be64baba5ea549116ff0d7ffd445456a7be8aaee21ec05882b980cd11"2603dependencies = [2523dependencies = [2604 "fs-swap",2524 "fs-swap",2605 "kvdb",2525 "kvdb",2606 "log",2526 "log",2607 "num_cpus",2527 "num_cpus",2608 "owning_ref",2528 "owning_ref",2609 "parity-util-mem",2529 "parity-util-mem",2610 "parking_lot 0.10.2",2530 "parking_lot 0.11.1",2611 "regex",2531 "regex",2612 "rocksdb",2532 "rocksdb",2613 "smallvec 1.5.1",2533 "smallvec 1.6.1",2614]2534]261525352616[[package]]2536[[package]]263325532634[[package]]2554[[package]]2635name = "libc"2555name = "libc"2636version = "0.2.81"2556version = "0.2.82"2637source = "registry+https://github.com/rust-lang/crates.io-index"2557source = "registry+https://github.com/rust-lang/crates.io-index"2638checksum = "1482821306169ec4d07f6aca392a4681f66c75c9918aa49641a2595db64053cb"2558checksum = "89203f3fba0a3795506acaad8ebce3c80c0af93f994d5a1d7a0b1eeb23271929"263925592640[[package]]2560[[package]]2641name = "libloading"2561name = "libloading"265525752656[[package]]2576[[package]]2657name = "libp2p"2577name = "libp2p"2658version = "0.28.1"2578version = "0.34.0"2659source = "registry+https://github.com/rust-lang/crates.io-index"2579source = "registry+https://github.com/rust-lang/crates.io-index"2660checksum = "571f5a4604c1a40d75651da141dfde29ad15329f537a779528803297d2220274"2580checksum = "d5133112ce42be9482f6a87be92a605dd6bbc9e93c297aee77d172ff06908f3a"2661dependencies = [2581dependencies = [2662 "atomic",2582 "atomic",2663 "bytes 0.5.6",2583 "bytes 1.0.1",2664 "futures 0.3.8",2584 "futures 0.3.12",2665 "lazy_static",2585 "lazy_static",2666 "libp2p-core",2586 "libp2p-core",2667 "libp2p-core-derive",2587 "libp2p-core-derive",2684 "libp2p-wasm-ext",2604 "libp2p-wasm-ext",2685 "libp2p-websocket",2605 "libp2p-websocket",2686 "libp2p-yamux",2606 "libp2p-yamux",2687 "multihash",2688 "parity-multiaddr",2607 "parity-multiaddr",2689 "parking_lot 0.10.2",2608 "parking_lot 0.11.1",2690 "pin-project 0.4.27",2609 "pin-project 1.0.4",2691 "smallvec 1.5.1",2610 "smallvec 1.6.1",2692 "wasm-timer",2611 "wasm-timer",2693]2612]269426132695[[package]]2614[[package]]2696name = "libp2p-core"2615name = "libp2p-core"2697version = "0.22.1"2616version = "0.27.0"2698source = "registry+https://github.com/rust-lang/crates.io-index"2617source = "registry+https://github.com/rust-lang/crates.io-index"2699checksum = "52f13ba8c7df0768af2eb391696d562c7de88cc3a35122531aaa6a7d77754d25"2618checksum = "dad04d3cef6c1df366a6ab58c9cf8b06497699e335d83ac2174783946ff847d6"2700dependencies = [2619dependencies = [2701 "asn1_der",2620 "asn1_der",2702 "bs58 0.3.1",2621 "bs58",2703 "ed25519-dalek",2622 "ed25519-dalek",2704 "either",2623 "either",2705 "fnv",2624 "fnv",2706 "futures 0.3.8",2625 "futures 0.3.12",2707 "futures-timer 3.0.2",2626 "futures-timer 3.0.2",2708 "lazy_static",2627 "lazy_static",2709 "libsecp256k1",2628 "libsecp256k1",2710 "log",2629 "log",2711 "multihash",2630 "multihash",2712 "multistream-select",2631 "multistream-select",2713 "parity-multiaddr",2632 "parity-multiaddr",2714 "parking_lot 0.10.2",2633 "parking_lot 0.11.1",2715 "pin-project 0.4.27",2634 "pin-project 1.0.4",2716 "prost",2635 "prost",2717 "prost-build",2636 "prost-build",2718 "rand 0.7.3",2637 "rand 0.7.3",2719 "ring",2638 "ring",2720 "rw-stream-sink",2639 "rw-stream-sink",2721 "sha2 0.8.2",2640 "sha2 0.9.2",2722 "smallvec 1.5.1",2641 "smallvec 1.6.1",2723 "thiserror",2642 "thiserror",2724 "unsigned-varint 0.4.0",2643 "unsigned-varint 0.6.0",2725 "void",2644 "void",2726 "zeroize",2645 "zeroize",2727]2646]272826472729[[package]]2648[[package]]2730name = "libp2p-core-derive"2649name = "libp2p-core-derive"2731version = "0.20.2"2650version = "0.21.0"2732source = "registry+https://github.com/rust-lang/crates.io-index"2651source = "registry+https://github.com/rust-lang/crates.io-index"2733checksum = "f753d9324cd3ec14bf04b8a8cd0d269c87f294153d6bf2a84497a63a5ad22213"2652checksum = "f4bc40943156e42138d22ed3c57ff0e1a147237742715937622a99b10fbe0156"2734dependencies = [2653dependencies = [2735 "quote",2654 "quote",2736 "syn",2655 "syn",2737]2656]273826572739[[package]]2658[[package]]2740name = "libp2p-deflate"2659name = "libp2p-deflate"2741version = "0.22.0"2660version = "0.27.1"2742source = "registry+https://github.com/rust-lang/crates.io-index"2661source = "registry+https://github.com/rust-lang/crates.io-index"2743checksum = "74029ae187f35f4b8ddf26b9779a68b340045d708528a103917cdca49a296db5"2662checksum = "6d42eed63305f0420736fa487f9acef720c4528bd7852a6a760f5ccde4813345"2744dependencies = [2663dependencies = [2745 "flate2",2664 "flate2",2746 "futures 0.3.8",2665 "futures 0.3.12",2747 "libp2p-core",2666 "libp2p-core",2748]2667]274926682750[[package]]2669[[package]]2751name = "libp2p-dns"2670name = "libp2p-dns"2752version = "0.22.0"2671version = "0.27.0"2753source = "registry+https://github.com/rust-lang/crates.io-index"2672source = "registry+https://github.com/rust-lang/crates.io-index"2754checksum = "7cf319822e08dd65c8e060d2354e9f952895bbc433f5706c75ed010c152aee5e"2673checksum = "5153b6db68fd4baa3b304e377db744dd8fea8ff4e4504509ee636abcde88d3e3"2755dependencies = [2674dependencies = [2756 "futures 0.3.8",2675 "futures 0.3.12",2757 "libp2p-core",2676 "libp2p-core",2758 "log",2677 "log",2759]2678]276026792761[[package]]2680[[package]]2762name = "libp2p-floodsub"2681name = "libp2p-floodsub"2763version = "0.22.0"2682version = "0.27.0"2764source = "registry+https://github.com/rust-lang/crates.io-index"2683source = "registry+https://github.com/rust-lang/crates.io-index"2765checksum = "d8a9acb43a3e4a4e413e0c4abe0fa49308df7c6335c88534757b647199cb8a51"2684checksum = "b3c63dfa06581b24b1d12bf9815b43689a784424be217d6545c800c7c75a207f"2766dependencies = [2685dependencies = [2767 "cuckoofilter",2686 "cuckoofilter",2768 "fnv",2687 "fnv",2769 "futures 0.3.8",2688 "futures 0.3.12",2770 "libp2p-core",2689 "libp2p-core",2771 "libp2p-swarm",2690 "libp2p-swarm",2691 "log",2772 "prost",2692 "prost",2773 "prost-build",2693 "prost-build",2774 "rand 0.7.3",2694 "rand 0.7.3",2775 "smallvec 1.5.1",2695 "smallvec 1.6.1",2776]2696]277726972778[[package]]2698[[package]]2779name = "libp2p-gossipsub"2699name = "libp2p-gossipsub"2780version = "0.22.0"2700version = "0.27.0"2781source = "registry+https://github.com/rust-lang/crates.io-index"2701source = "registry+https://github.com/rust-lang/crates.io-index"2782checksum = "ab20fcb60edebe3173bbb708c6ac3444afdf1e3152dc2866b10c4f5497f17467"2702checksum = "12451ba9493e87c91baf2a6dffce9ddf1fbc807a0861532d7cf477954f8ebbee"2783dependencies = [2703dependencies = [2704 "asynchronous-codec",2784 "base64 0.11.0",2705 "base64 0.13.0",2785 "byteorder 1.3.4",2706 "byteorder",2786 "bytes 0.5.6",2707 "bytes 1.0.1",2787 "fnv",2708 "fnv",2788 "futures 0.3.8",2709 "futures 0.3.12",2789 "futures_codec",2790 "hex_fmt",2710 "hex_fmt",2791 "libp2p-core",2711 "libp2p-core",2792 "libp2p-swarm",2712 "libp2p-swarm",2793 "log",2713 "log",2794 "lru_time_cache",2795 "prost",2714 "prost",2796 "prost-build",2715 "prost-build",2797 "rand 0.7.3",2716 "rand 0.7.3",2717 "regex",2798 "sha2 0.8.2",2718 "sha2 0.9.2",2799 "smallvec 1.5.1",2719 "smallvec 1.6.1",2800 "unsigned-varint 0.4.0",2720 "unsigned-varint 0.6.0",2801 "wasm-timer",2721 "wasm-timer",2802]2722]280327232804[[package]]2724[[package]]2805name = "libp2p-identify"2725name = "libp2p-identify"2806version = "0.22.0"2726version = "0.27.0"2807source = "registry+https://github.com/rust-lang/crates.io-index"2727source = "registry+https://github.com/rust-lang/crates.io-index"2808checksum = "56396ee63aa9164eacf40c2c5d2bda8c4133c2f57e1b0425d51d3a4e362583b1"2728checksum = "b40fb36a059b7a8cce1514bd8b546fa612e006c9937caa7f5950cb20021fe91e"2809dependencies = [2729dependencies = [2810 "futures 0.3.8",2730 "futures 0.3.12",2811 "libp2p-core",2731 "libp2p-core",2812 "libp2p-swarm",2732 "libp2p-swarm",2813 "log",2733 "log",2814 "prost",2734 "prost",2815 "prost-build",2735 "prost-build",2816 "smallvec 1.5.1",2736 "smallvec 1.6.1",2817 "wasm-timer",2737 "wasm-timer",2818]2738]281927392820[[package]]2740[[package]]2821name = "libp2p-kad"2741name = "libp2p-kad"2822version = "0.23.0"2742version = "0.28.0"2823source = "registry+https://github.com/rust-lang/crates.io-index"2743source = "registry+https://github.com/rust-lang/crates.io-index"2824checksum = "cc7fa9047f8b8f544278a35c2d9d45d3b2c1785f2d86d4e1629d6edf97be3955"2744checksum = "456f5de8e283d7800ca848b9b9a4e2a578b790bd8ae582b885e831353cf0e5df"2825dependencies = [2745dependencies = [2826 "arrayvec 0.5.2",2746 "arrayvec 0.5.2",2747 "asynchronous-codec",2827 "bytes 0.5.6",2748 "bytes 1.0.1",2828 "either",2749 "either",2829 "fnv",2750 "fnv",2830 "futures 0.3.8",2751 "futures 0.3.12",2831 "futures_codec",2832 "libp2p-core",2752 "libp2p-core",2833 "libp2p-swarm",2753 "libp2p-swarm",2834 "log",2754 "log",2835 "multihash",2836 "prost",2755 "prost",2837 "prost-build",2756 "prost-build",2838 "rand 0.7.3",2757 "rand 0.7.3",2839 "sha2 0.8.2",2758 "sha2 0.9.2",2840 "smallvec 1.5.1",2759 "smallvec 1.6.1",2841 "uint",2760 "uint",2842 "unsigned-varint 0.4.0",2761 "unsigned-varint 0.6.0",2843 "void",2762 "void",2844 "wasm-timer",2763 "wasm-timer",2845]2764]284627652847[[package]]2766[[package]]2848name = "libp2p-mdns"2767name = "libp2p-mdns"2849version = "0.22.0"2768version = "0.28.0"2850source = "registry+https://github.com/rust-lang/crates.io-index"2769source = "registry+https://github.com/rust-lang/crates.io-index"2851checksum = "3173b5a6b2f690c29ae07798d85b9441a131ac76ddae9015ef22905b623d0c69"2770checksum = "b974db63233fc0e199f4ede7794294aae285c96f4b6010f853eac4099ef08590"2852dependencies = [2771dependencies = [2853 "async-std",2772 "async-io",2854 "data-encoding",2773 "data-encoding",2855 "dns-parser",2774 "dns-parser",2856 "either",2775 "futures 0.3.12",2857 "futures 0.3.8",2776 "if-watch",2858 "lazy_static",2777 "lazy_static",2859 "libp2p-core",2778 "libp2p-core",2860 "libp2p-swarm",2779 "libp2p-swarm",2861 "log",2780 "log",2862 "net2",2863 "rand 0.7.3",2781 "rand 0.7.3",2864 "smallvec 1.5.1",2782 "smallvec 1.6.1",2783 "socket2",2865 "void",2784 "void",2866 "wasm-timer",2867]2785]286827862869[[package]]2787[[package]]2870name = "libp2p-mplex"2788name = "libp2p-mplex"2871version = "0.22.0"2789version = "0.27.0"2872source = "registry+https://github.com/rust-lang/crates.io-index"2790source = "registry+https://github.com/rust-lang/crates.io-index"2873checksum = "8a73a799cc8410b36e40b8f4c4b6babbcb9efd3727111bf517876e4acfa612d3"2791checksum = "2705dc94b01ab9e3779b42a09bbf3712e637ed213e875c30face247291a85af0"2874dependencies = [2792dependencies = [2875 "bytes 0.5.6",2793 "asynchronous-codec",2876 "fnv",2877 "futures 0.3.8",2794 "bytes 1.0.1",2878 "futures_codec",2795 "futures 0.3.12",2879 "libp2p-core",2796 "libp2p-core",2880 "log",2797 "log",2798 "nohash-hasher",2881 "parking_lot 0.10.2",2799 "parking_lot 0.11.1",2800 "rand 0.7.3",2801 "smallvec 1.6.1",2882 "unsigned-varint 0.4.0",2802 "unsigned-varint 0.6.0",2883]2803]288428042885[[package]]2805[[package]]2886name = "libp2p-noise"2806name = "libp2p-noise"2887version = "0.24.0"2807version = "0.29.0"2888source = "registry+https://github.com/rust-lang/crates.io-index"2808source = "registry+https://github.com/rust-lang/crates.io-index"2889checksum = "6ef6c490042f549fb1025f2892dfe6083d97a77558f450c1feebe748ca9eb15a"2809checksum = "4aca322b52a0c5136142a7c3971446fb1e9964923a526c9cc6ef3b7c94e57778"2890dependencies = [2810dependencies = [2891 "bytes 0.5.6",2811 "bytes 1.0.1",2892 "curve25519-dalek 2.1.0",2812 "curve25519-dalek 3.0.2",2893 "futures 0.3.8",2813 "futures 0.3.12",2894 "lazy_static",2814 "lazy_static",2895 "libp2p-core",2815 "libp2p-core",2896 "log",2816 "log",2897 "prost",2817 "prost",2898 "prost-build",2818 "prost-build",2899 "rand 0.7.3",2819 "rand 0.7.3",2900 "sha2 0.8.2",2820 "sha2 0.9.2",2901 "snow",2821 "snow",2902 "static_assertions",2822 "static_assertions",2903 "x25519-dalek 0.6.0",2823 "x25519-dalek",2904 "zeroize",2824 "zeroize",2905]2825]290628262907[[package]]2827[[package]]2908name = "libp2p-ping"2828name = "libp2p-ping"2909version = "0.22.0"2829version = "0.27.0"2910source = "registry+https://github.com/rust-lang/crates.io-index"2830source = "registry+https://github.com/rust-lang/crates.io-index"2911checksum = "ad063c21dfcea4518ac9e8bd4119d33a5b26c41e674f602f41f05617a368a5c8"2831checksum = "6f3813276d0708c8db0f500d8beda1bda9ad955723b9cb272c41f4727256f73c"2912dependencies = [2832dependencies = [2913 "futures 0.3.8",2833 "futures 0.3.12",2914 "libp2p-core",2834 "libp2p-core",2915 "libp2p-swarm",2835 "libp2p-swarm",2916 "log",2836 "log",292128412922[[package]]2842[[package]]2923name = "libp2p-plaintext"2843name = "libp2p-plaintext"2924version = "0.22.0"2844version = "0.27.0"2925source = "registry+https://github.com/rust-lang/crates.io-index"2845source = "registry+https://github.com/rust-lang/crates.io-index"2926checksum = "903a12e99c72dbebefea258de887982adeacc7025baa1ceb10b7fa9928f54791"2846checksum = "48e8c1ec305c9949351925cdc7196b9570f4330477f5e47fbf5bb340b57e26ed"2927dependencies = [2847dependencies = [2928 "bytes 0.5.6",2848 "asynchronous-codec",2929 "futures 0.3.8",2849 "bytes 1.0.1",2930 "futures_codec",2850 "futures 0.3.12",2931 "libp2p-core",2851 "libp2p-core",2932 "log",2852 "log",2933 "prost",2853 "prost",2934 "prost-build",2854 "prost-build",2935 "rw-stream-sink",2936 "unsigned-varint 0.4.0",2855 "unsigned-varint 0.6.0",2937 "void",2856 "void",2938]2857]293928582940[[package]]2859[[package]]2941name = "libp2p-pnet"2860name = "libp2p-pnet"2942version = "0.19.2"2861version = "0.20.0"2943source = "registry+https://github.com/rust-lang/crates.io-index"2862source = "registry+https://github.com/rust-lang/crates.io-index"2944checksum = "96b3c2d5d26a9500e959a0e19743897239a6c4be78dadf99b70414301a70c006"2863checksum = "6ce3374f3b28162db9d3442c9347c4f14cb01e8290052615c7d341d40eae0599"2945dependencies = [2864dependencies = [2946 "futures 0.3.8",2865 "futures 0.3.12",2947 "log",2866 "log",2948 "pin-project 0.4.27",2867 "pin-project 1.0.4",2949 "rand 0.7.3",2868 "rand 0.7.3",2950 "salsa20",2869 "salsa20",2951 "sha3",2870 "sha3",2952]2871]295328722954[[package]]2873[[package]]2955name = "libp2p-request-response"2874name = "libp2p-request-response"2956version = "0.3.0"2875version = "0.9.0"2957source = "registry+https://github.com/rust-lang/crates.io-index"2876source = "registry+https://github.com/rust-lang/crates.io-index"2958checksum = "9c0c9e8a4cd69d97e9646c54313d007512f411aba8c5226cfcda16df6a6e84a3"2877checksum = "d37637a4b33b5390322ccc068a33897d0aa541daf4fec99f6a7efbf37295346e"2959dependencies = [2878dependencies = [2960 "async-trait",2879 "async-trait",2961 "bytes 0.5.6",2880 "bytes 1.0.1",2962 "futures 0.3.8",2881 "futures 0.3.12",2963 "libp2p-core",2882 "libp2p-core",2964 "libp2p-swarm",2883 "libp2p-swarm",2965 "log",2884 "log",2966 "lru 0.6.2",2885 "lru",2967 "minicbor",2886 "minicbor",2968 "rand 0.7.3",2887 "rand 0.7.3",2969 "smallvec 1.5.1",2888 "smallvec 1.6.1",2970 "unsigned-varint 0.5.1",2889 "unsigned-varint 0.6.0",2971 "wasm-timer",2890 "wasm-timer",2972]2891]297328922974[[package]]2893[[package]]2975name = "libp2p-swarm"2894name = "libp2p-swarm"2976version = "0.22.0"2895version = "0.27.1"2977source = "registry+https://github.com/rust-lang/crates.io-index"2896source = "registry+https://github.com/rust-lang/crates.io-index"2978checksum = "7193e444210132237b81b755ec7fe53f1c4bd2f53cf719729b94c0c72eb6eaa1"2897checksum = "d4f89ebb4d8953bda12623e9871959fe728dea3bf6eae0421dc9c42dc821e488"2979dependencies = [2898dependencies = [2980 "either",2899 "either",2981 "futures 0.3.8",2900 "futures 0.3.12",2982 "libp2p-core",2901 "libp2p-core",2983 "log",2902 "log",2984 "rand 0.7.3",2903 "rand 0.7.3",2985 "smallvec 1.5.1",2904 "smallvec 1.6.1",2986 "void",2905 "void",2987 "wasm-timer",2906 "wasm-timer",2988]2907]298929082990[[package]]2909[[package]]2991name = "libp2p-tcp"2910name = "libp2p-tcp"2992version = "0.22.0"2911version = "0.27.0"2993source = "registry+https://github.com/rust-lang/crates.io-index"2912source = "registry+https://github.com/rust-lang/crates.io-index"2994checksum = "44f42ec130d7a37a7e47bf4398026b7ad9185c08ed26972e2720f8b94112796f"2913checksum = "3dbd3d7076a478ac5a6aca55e74bdc250ac539b95de09b9d09915e0b8d01a6b2"2995dependencies = [2914dependencies = [2996 "async-std",2915 "async-io",2997 "futures 0.3.8",2916 "futures 0.3.12",2998 "futures-timer 3.0.2",2917 "futures-timer 3.0.2",2999 "get_if_addrs",2918 "if-watch",3000 "ipnet",2919 "ipnet",2920 "libc",3001 "libp2p-core",2921 "libp2p-core",3002 "log",2922 "log",3003 "socket2",2923 "socket2",3004]2924]300529253006[[package]]2926[[package]]3007name = "libp2p-uds"2927name = "libp2p-uds"3008version = "0.22.0"2928version = "0.27.0"3009source = "registry+https://github.com/rust-lang/crates.io-index"2929source = "registry+https://github.com/rust-lang/crates.io-index"3010checksum = "dea7acb0a034f70d7db94c300eba3f65c0f6298820105624088a9609c9974d77"2930checksum = "80ac51ce419f60be966e02103c17f67ff5dc4422ba83ba54d251d6c62a4ed487"3011dependencies = [2931dependencies = [3012 "async-std",2932 "async-std",3013 "futures 0.3.8",2933 "futures 0.3.12",3014 "libp2p-core",2934 "libp2p-core",3015 "log",2935 "log",3016]2936]301729373018[[package]]2938[[package]]3019name = "libp2p-wasm-ext"2939name = "libp2p-wasm-ext"3020version = "0.22.0"2940version = "0.27.0"3021source = "registry+https://github.com/rust-lang/crates.io-index"2941source = "registry+https://github.com/rust-lang/crates.io-index"3022checksum = "34c1faac6f92c21fbe155417957863ea822fba9e9fd5eb24c0912336a100e63f"2942checksum = "6149c46cb76935c80bc8be6ec6e3ebd5f5e1679765a255fb34331d54610f15dd"3023dependencies = [2943dependencies = [3024 "futures 0.3.8",2944 "futures 0.3.12",3025 "js-sys",2945 "js-sys",3026 "libp2p-core",2946 "libp2p-core",3027 "parity-send-wrapper",2947 "parity-send-wrapper",303129513032[[package]]2952[[package]]3033name = "libp2p-websocket"2953name = "libp2p-websocket"3034version = "0.23.0"2954version = "0.28.0"3035source = "registry+https://github.com/rust-lang/crates.io-index"2955source = "registry+https://github.com/rust-lang/crates.io-index"3036checksum = "d650534ebd99f48f6fa292ed5db10d30df2444943afde4407ceeddab8e513fca"2956checksum = "d3b1c6a3431045da8b925ed83384e4c5163e14b990572307fca9c507435d4d22"3037dependencies = [2957dependencies = [3038 "async-tls",3039 "either",2958 "either",3040 "futures 0.3.8",2959 "futures 0.3.12",2960 "futures-rustls",3041 "libp2p-core",2961 "libp2p-core",3042 "log",2962 "log",3043 "quicksink",2963 "quicksink",3044 "rustls",3045 "rw-stream-sink",2964 "rw-stream-sink",3046 "soketto",2965 "soketto",3047 "url 2.2.0",2966 "url 2.2.0",3048 "webpki",3049 "webpki-roots 0.18.0",2967 "webpki-roots",3050]2968]305129693052[[package]]2970[[package]]3053name = "libp2p-yamux"2971name = "libp2p-yamux"3054version = "0.25.0"2972version = "0.30.0"3055source = "registry+https://github.com/rust-lang/crates.io-index"2973source = "registry+https://github.com/rust-lang/crates.io-index"3056checksum = "781d9b9f043dcdabc40640807125368596b849fd4d96cdca2dcf052fdf6f33fd"2974checksum = "490b8b27fc40fe35212df1b6a3d14bffaa4117cbff956fdc2892168a371102ad"3057dependencies = [2975dependencies = [3058 "futures 0.3.8",2976 "futures 0.3.12",3059 "libp2p-core",2977 "libp2p-core",3060 "parking_lot 0.11.1",2978 "parking_lot 0.11.1",3061 "thiserror",2979 "thiserror",310330213104[[package]]3022[[package]]3105name = "linked-hash-map"3023name = "linked-hash-map"3106version = "0.5.3"3024version = "0.5.4"3107source = "registry+https://github.com/rust-lang/crates.io-index"3025source = "registry+https://github.com/rust-lang/crates.io-index"3108checksum = "8dd5a6d5999d9907cda8ed67bbd137d3af8085216c2ac62de5be860bd41f304a"3026checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3"310930273110[[package]]3028[[package]]3111name = "linked_hash_set"3029name = "linked_hash_set"311830363119[[package]]3037[[package]]3120name = "linregress"3038name = "linregress"3121version = "0.1.7"3039version = "0.4.0"3122source = "registry+https://github.com/rust-lang/crates.io-index"3040source = "registry+https://github.com/rust-lang/crates.io-index"3123checksum = "9290cf6f928576eeb9c096c6fad9d8d452a0a1a70a2bbffa6e36064eedc0aac9"3041checksum = "0d0ad4b5cc8385a881c561fac3501353d63d2a2b7a357b5064d71815c9a92724"3124dependencies = [3042dependencies = [3125 "failure",3126 "nalgebra",3043 "nalgebra",3127 "statrs",3044 "statrs",3128]3045]31293130[[package]]3131name = "lock_api"3132version = "0.1.5"3133source = "registry+https://github.com/rust-lang/crates.io-index"3134checksum = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c"3135dependencies = [3136 "scopeguard 0.3.3",3137]313830463139[[package]]3047[[package]]3140name = "lock_api"3048name = "lock_api"3141version = "0.3.4"3049version = "0.3.4"3142source = "registry+https://github.com/rust-lang/crates.io-index"3050source = "registry+https://github.com/rust-lang/crates.io-index"3143checksum = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75"3051checksum = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75"3144dependencies = [3052dependencies = [3145 "scopeguard 1.1.0",3053 "scopeguard",3146]3054]314730553148[[package]]3056[[package]]3151source = "registry+https://github.com/rust-lang/crates.io-index"3059source = "registry+https://github.com/rust-lang/crates.io-index"3152checksum = "dd96ffd135b2fd7b973ac026d28085defbe8983df057ced3eb4f2130b0831312"3060checksum = "dd96ffd135b2fd7b973ac026d28085defbe8983df057ced3eb4f2130b0831312"3153dependencies = [3061dependencies = [3154 "scopeguard 1.1.0",3062 "scopeguard",3155]3063]315630643157[[package]]3065[[package]]3158name = "log"3066name = "log"3159version = "0.4.11"3067version = "0.4.14"3160source = "registry+https://github.com/rust-lang/crates.io-index"3068source = "registry+https://github.com/rust-lang/crates.io-index"3161checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b"3069checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"3162dependencies = [3070dependencies = [3163 "cfg-if 0.1.10",3071 "cfg-if 1.0.0",3072 "value-bag",3164]3073]31653166[[package]]3167name = "loom"3168version = "0.3.6"3169source = "registry+https://github.com/rust-lang/crates.io-index"3170checksum = "a0e8460f2f2121162705187214720353c517b97bdfb3494c0b1e33d83ebe4bed"3171dependencies = [3172 "cfg-if 0.1.10",3173 "generator",3174 "scoped-tls",3175 "serde",3176 "serde_json",3177]317830743179[[package]]3075[[package]]3180name = "lru"3076name = "lru"3181version = "0.4.3"3077version = "0.6.3"3182source = "registry+https://github.com/rust-lang/crates.io-index"3078source = "registry+https://github.com/rust-lang/crates.io-index"3183checksum = "0609345ddee5badacf857d4f547e0e5a2e987db77085c24cd887f73573a04237"3079checksum = "3aae342b73d57ad0b8b364bd12584819f2c1fe9114285dfcf8b0722607671635"3184dependencies = [3080dependencies = [3185 "hashbrown 0.6.3",3081 "hashbrown",3186]3082]31873188[[package]]3189name = "lru"3190version = "0.6.2"3191source = "registry+https://github.com/rust-lang/crates.io-index"3192checksum = "3abe07af102235a56ac9a6dd904aab1e05483e2e8afdfffec3598be55b1b7606"3193dependencies = [3194 "hashbrown 0.9.1",3195]31963197[[package]]3198name = "lru_time_cache"3199version = "0.10.0"3200source = "registry+https://github.com/rust-lang/crates.io-index"3201checksum = "adb241df5c4caeb888755363fc95f8a896618dc0d435e9e775f7930cb099beab"320230833203[[package]]3084[[package]]3204name = "mach"3085name = "mach"3209 "libc",3090 "libc",3210]3091]30923093[[package]]3094name = "maplit"3095version = "1.0.2"3096source = "registry+https://github.com/rust-lang/crates.io-index"3097checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"321130983212[[package]]3099[[package]]3213name = "matchers"3100name = "matchers"3261source = "registry+https://github.com/rust-lang/crates.io-index"3148source = "registry+https://github.com/rust-lang/crates.io-index"3262checksum = "043175f069eda7b85febe4a74abbaeff828d9f8b448515d3151a14a3542811aa"3149checksum = "043175f069eda7b85febe4a74abbaeff828d9f8b448515d3151a14a3542811aa"3263dependencies = [3150dependencies = [3264 "autocfg 1.0.1",3151 "autocfg",3265]3152]326631533267[[package]]3154[[package]]3270source = "registry+https://github.com/rust-lang/crates.io-index"3157source = "registry+https://github.com/rust-lang/crates.io-index"3271checksum = "157b4208e3059a8f9e78d559edc658e13df41410cb3ae03979c83130067fdd87"3158checksum = "157b4208e3059a8f9e78d559edc658e13df41410cb3ae03979c83130067fdd87"3272dependencies = [3159dependencies = [3273 "autocfg 1.0.1",3160 "autocfg",3274]3161]327531623276[[package]]3163[[package]]3277name = "memory-db"3164name = "memory-db"3278version = "0.24.1"3165version = "0.25.0"3279source = "registry+https://github.com/rust-lang/crates.io-index"3166source = "registry+https://github.com/rust-lang/crates.io-index"3280checksum = "36f36ddb0b2cdc25d38babba472108798e3477f02be5165f038c5e393e50c57a"3167checksum = "6cbd2a22f201c03cc1706a727842490abfea17b7b53260358239828208daba3c"3281dependencies = [3168dependencies = [3282 "hash-db",3169 "hash-db",3283 "hashbrown 0.8.2",3170 "hashbrown",3284 "parity-util-mem",3171 "parity-util-mem",3285]3172]32863173329231793293[[package]]3180[[package]]3294name = "merlin"3181name = "merlin"3295version = "2.0.0"3182version = "2.0.1"3296source = "registry+https://github.com/rust-lang/crates.io-index"3183source = "registry+https://github.com/rust-lang/crates.io-index"3297checksum = "c6feca46f4fa3443a01769d768727f10c10a20fdb65e52dc16a81f0c8269bb78"3184checksum = "4e261cf0f8b3c42ded9f7d2bb59dea03aa52bc8a1cbc7482f9fc3fd1229d3b42"3298dependencies = [3185dependencies = [3299 "byteorder 1.3.4",3186 "byteorder",3300 "keccak",3187 "keccak",3301 "rand_core 0.5.1",3188 "rand_core 0.5.1",3302 "zeroize",3189 "zeroize",3303]3190]330431913305[[package]]3192[[package]]3306name = "minicbor"3193name = "minicbor"3307version = "0.5.1"3194version = "0.7.1"3308source = "registry+https://github.com/rust-lang/crates.io-index"3195source = "registry+https://github.com/rust-lang/crates.io-index"3309checksum = "2fc03ad6f8f548db7194a5ff5a6f96342ecae4e3ef67d2bf18bacc0e245cd041"3196checksum = "3265a9f5210bb726f81ef9c456ae0aff5321cd95748c0e71889b0e19d8f0332b"3310dependencies = [3197dependencies = [3311 "minicbor-derive",3198 "minicbor-derive",3312]3199]331332003314[[package]]3201[[package]]3315name = "minicbor-derive"3202name = "minicbor-derive"3316version = "0.4.1"3203version = "0.6.1"3317source = "registry+https://github.com/rust-lang/crates.io-index"3204source = "registry+https://github.com/rust-lang/crates.io-index"3318checksum = "c214bf3d90099b52f3e4b328ae0fe34837fd0fab683ad1e10fceb4629106df48"3205checksum = "130b9455e28a3f308f6579671816a6f2621e2e0cbf55dc2f886345bef699481e"3319dependencies = [3206dependencies = [3320 "proc-macro2",3207 "proc-macro2",3321 "quote",3208 "quote",3329checksum = "0f2d26ec3309788e423cfbf68ad1800f061638098d76a83681af979dc4eda19d"3216checksum = "0f2d26ec3309788e423cfbf68ad1800f061638098d76a83681af979dc4eda19d"3330dependencies = [3217dependencies = [3331 "adler",3218 "adler",3332 "autocfg 1.0.1",3219 "autocfg",3333]3220]333432213335[[package]]3222[[package]]341633033417[[package]]3304[[package]]3418name = "multihash"3305name = "multihash"3419version = "0.11.4"3306version = "0.13.2"3420source = "registry+https://github.com/rust-lang/crates.io-index"3307source = "registry+https://github.com/rust-lang/crates.io-index"3421checksum = "567122ab6492f49b59def14ecc36e13e64dca4188196dd0cd41f9f3f979f3df6"3308checksum = "4dac63698b887d2d929306ea48b63760431ff8a24fac40ddb22f9c7f49fb7cab"3422dependencies = [3309dependencies = [3423 "blake2b_simd",3424 "blake2s_simd",3425 "digest 0.9.0",3310 "digest 0.9.0",3426 "sha-1 0.9.2",3311 "generic-array 0.14.4",3312 "multihash-derive",3427 "sha2 0.9.2",3313 "sha2 0.9.2",3428 "sha3",3429 "unsigned-varint 0.5.1",3314 "unsigned-varint 0.5.1",3430]3315]33163317[[package]]3318name = "multihash-derive"3319version = "0.7.1"3320source = "registry+https://github.com/rust-lang/crates.io-index"3321checksum = "85ee3c48cb9d9b275ad967a0e96715badc13c6029adb92f34fa17b9ff28fd81f"3322dependencies = [3323 "proc-macro-crate",3324 "proc-macro-error",3325 "proc-macro2",3326 "quote",3327 "syn",3328 "synstructure",3329]343133303432[[package]]3331[[package]]3433name = "multimap"3332name = "multimap"343733363438[[package]]3337[[package]]3439name = "multistream-select"3338name = "multistream-select"3440version = "0.8.5"3339version = "0.10.0"3441source = "registry+https://github.com/rust-lang/crates.io-index"3340source = "registry+https://github.com/rust-lang/crates.io-index"3442checksum = "93faf2e41f9ee62fb01680ed48f3cc26652352327aa2e59869070358f6b7dd75"3341checksum = "10ddc0eb0117736f19d556355464fc87efc8ad98b29e3fd84f02531eb6e90840"3443dependencies = [3342dependencies = [3444 "bytes 0.5.6",3343 "bytes 1.0.1",3445 "futures 0.3.8",3344 "futures 0.3.12",3446 "log",3345 "log",3447 "pin-project 1.0.2",3346 "pin-project 1.0.4",3448 "smallvec 1.5.1",3347 "smallvec 1.6.1",3449 "unsigned-varint 0.5.1",3348 "unsigned-varint 0.6.0",3450]3349]345133503452[[package]]3351[[package]]3453name = "nalgebra"3352name = "nalgebra"3454version = "0.18.1"3353version = "0.21.1"3455source = "registry+https://github.com/rust-lang/crates.io-index"3354source = "registry+https://github.com/rust-lang/crates.io-index"3456checksum = "aaa9fddbc34c8c35dd2108515587b8ce0cab396f17977b8c738568e4edb521a2"3355checksum = "d6b6147c3d50b4f3cdabfe2ecc94a0191fd3d6ad58aefd9664cf396285883486"3457dependencies = [3356dependencies = [3458 "alga",3459 "approx",3357 "approx",3460 "generic-array 0.12.3",3358 "generic-array 0.13.2",3461 "matrixmultiply",3359 "matrixmultiply",3462 "num-complex",3360 "num-complex",3463 "num-rational",3361 "num-rational",3464 "num-traits",3362 "num-traits",3465 "rand 0.6.5",3363 "rand 0.7.3",3364 "rand_distr",3365 "simba",3466 "typenum",3366 "typenum",3467]3367]34683368349833983499[[package]]3399[[package]]3500name = "nft"3400name = "nft"3501version = "2.0.0"3401version = "3.0.0"3502dependencies = [3402dependencies = [3503 "flexi_logger",3403 "flexi_logger",3504 "frame-benchmarking",3404 "frame-benchmarking",3505 "frame-benchmarking-cli",3405 "frame-benchmarking-cli",3506 "futures 0.3.8",3406 "futures 0.3.12",3507 "jsonrpc-core",3407 "jsonrpc-core",3508 "log",3408 "log",3509 "nft-runtime",3409 "nft-runtime",3517 "sc-consensus-aura",3417 "sc-consensus-aura",3518 "sc-executor",3418 "sc-executor",3519 "sc-finality-grandpa",3419 "sc-finality-grandpa",3420 "sc-keystore",3520 "sc-network",3421 "sc-network",3521 "sc-rpc",3422 "sc-rpc",3522 "sc-rpc-api",3423 "sc-rpc-api",3523 "sc-service",3424 "sc-service",3425 "sc-telemetry",3524 "sc-transaction-pool",3426 "sc-transaction-pool",3525 "serde",3427 "serde",3526 "serde_json",3428 "serde_json",354134433542[[package]]3444[[package]]3543name = "nft-runtime"3445name = "nft-runtime"3544version = "2.0.0"3446version = "3.0.0"3545dependencies = [3447dependencies = [3546 "frame-benchmarking",3448 "frame-benchmarking",3547 "frame-executive",3449 "frame-executive",3566 "pallet-vesting",3468 "pallet-vesting",3567 "parity-scale-codec",3469 "parity-scale-codec",3568 "serde",3470 "serde",3471 "smallvec 1.6.1",3569 "sp-api",3472 "sp-api",3473 "sp-arithmetic",3570 "sp-block-builder",3474 "sp-block-builder",3571 "sp-consensus-aura",3475 "sp-consensus-aura",3572 "sp-core",3476 "sp-core",3580 "substrate-wasm-builder-runner",3484 "substrate-wasm-builder-runner",3581]3485]35823583[[package]]3584name = "nix"3585version = "0.17.0"3586source = "registry+https://github.com/rust-lang/crates.io-index"3587checksum = "50e4785f2c3b7589a0d0c1dd60285e1188adac4006e8abd6dd578e1567027363"3588dependencies = [3589 "bitflags",3590 "cc",3591 "cfg-if 0.1.10",3592 "libc",3593 "void",3594]359534863596[[package]]3487[[package]]3597name = "nodrop"3488name = "nodrop"3621source = "registry+https://github.com/rust-lang/crates.io-index"3512source = "registry+https://github.com/rust-lang/crates.io-index"3622checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304"3513checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304"3623dependencies = [3514dependencies = [3624 "autocfg 1.0.1",3515 "autocfg",3625 "num-integer",3516 "num-integer",3626 "num-traits",3517 "num-traits",3627]3518]3632source = "registry+https://github.com/rust-lang/crates.io-index"3523source = "registry+https://github.com/rust-lang/crates.io-index"3633checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95"3524checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95"3634dependencies = [3525dependencies = [3635 "autocfg 1.0.1",3526 "autocfg",3636 "num-traits",3527 "num-traits",3637]3528]363835293642source = "registry+https://github.com/rust-lang/crates.io-index"3533source = "registry+https://github.com/rust-lang/crates.io-index"3643checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"3534checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"3644dependencies = [3535dependencies = [3645 "autocfg 1.0.1",3536 "autocfg",3646 "num-traits",3537 "num-traits",3647]3538]364835393652source = "registry+https://github.com/rust-lang/crates.io-index"3543source = "registry+https://github.com/rust-lang/crates.io-index"3653checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef"3544checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef"3654dependencies = [3545dependencies = [3655 "autocfg 1.0.1",3546 "autocfg",3656 "num-bigint",3547 "num-bigint",3657 "num-integer",3548 "num-integer",3658 "num-traits",3549 "num-traits",3664source = "registry+https://github.com/rust-lang/crates.io-index"3555source = "registry+https://github.com/rust-lang/crates.io-index"3665checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"3556checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"3666dependencies = [3557dependencies = [3667 "autocfg 1.0.1",3558 "autocfg",3668 "libm",3559 "libm",3669]3560]36703561369735883698[[package]]3589[[package]]3699name = "object"3590name = "object"3700version = "0.22.0"3591version = "0.23.0"3701source = "registry+https://github.com/rust-lang/crates.io-index"3592source = "registry+https://github.com/rust-lang/crates.io-index"3702checksum = "8d3b63360ec3cb337817c2dbd47ab4a0f170d285d8e5a2064600f3def1402397"3593checksum = "a9a7ab5d64814df0fe4a4b5ead45ed6c5f181ee3ff04ba344313a6c80446c5d4"37033704[[package]]3705name = "once_cell"3706version = "0.1.8"3707source = "registry+https://github.com/rust-lang/crates.io-index"3708checksum = "532c29a261168a45ce28948f9537ddd7a5dd272cc513b3017b1e82a88f962c37"3709dependencies = [3710 "parking_lot 0.7.1",3711]371235943713[[package]]3595[[package]]3714name = "once_cell"3596name = "once_cell"374836303749[[package]]3631[[package]]3750name = "pallet-aura"3632name = "pallet-aura"3751version = "2.0.0"3633version = "2.0.1"3752source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"3634source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"3753dependencies = [3635dependencies = [3754 "frame-support",3636 "frame-support",3755 "frame-system",3637 "frame-system",376736493768[[package]]3650[[package]]3769name = "pallet-authorship"3651name = "pallet-authorship"3770version = "2.0.0"3652version = "2.0.1"3771source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"3653source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"3772dependencies = [3654dependencies = [3773 "frame-support",3655 "frame-support",3774 "frame-system",3656 "frame-system",3775 "impl-trait-for-tuples",3657 "impl-trait-for-tuples 0.2.0",3776 "parity-scale-codec",3658 "parity-scale-codec",3777 "sp-authorship",3659 "sp-authorship",3778 "sp-inherents",3660 "sp-inherents",378236643783[[package]]3665[[package]]3784name = "pallet-balances"3666name = "pallet-balances"3785version = "2.0.0"3667version = "2.0.1"3786source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"3668source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"3787dependencies = [3669dependencies = [3788 "frame-benchmarking",3670 "frame-benchmarking",3789 "frame-support",3671 "frame-support",379636783797[[package]]3679[[package]]3798name = "pallet-contracts"3680name = "pallet-contracts"3799version = "2.0.0"3681version = "2.0.1"3800source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"3682source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"3801dependencies = [3683dependencies = [3802 "bitflags",3803 "frame-support",3684 "frame-support",3804 "frame-system",3685 "frame-system",3805 "pallet-contracts-primitives",3686 "pallet-contracts-primitives",3687 "pallet-contracts-proc-macro",3806 "parity-scale-codec",3688 "parity-scale-codec",3807 "parity-wasm",3689 "parity-wasm",3808 "pwasm-utils",3690 "pwasm-utils 0.16.0",3809 "serde",3691 "serde",3810 "sp-core",3692 "sp-core",3811 "sp-io",3693 "sp-io",381736993818[[package]]3700[[package]]3819name = "pallet-contracts-primitives"3701name = "pallet-contracts-primitives"3820version = "2.0.0"3702version = "2.0.1"3821source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"3703source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"3822dependencies = [3704dependencies = [3705 "bitflags",3823 "parity-scale-codec",3706 "parity-scale-codec",3824 "sp-runtime",3707 "sp-runtime",3825 "sp-std",3708 "sp-std",3826]3709]37103711[[package]]3712name = "pallet-contracts-proc-macro"3713version = "0.1.0"3714source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"3715dependencies = [3716 "proc-macro2",3717 "quote",3718 "syn",3719]382737203828[[package]]3721[[package]]3829name = "pallet-contracts-rpc"3722name = "pallet-contracts-rpc"3830version = "0.8.0"3723version = "0.8.1"3831source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"3724source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"3832dependencies = [3725dependencies = [3833 "jsonrpc-core",3726 "jsonrpc-core",3834 "jsonrpc-core-client",3727 "jsonrpc-core-client",384637393847[[package]]3740[[package]]3848name = "pallet-contracts-rpc-runtime-api"3741name = "pallet-contracts-rpc-runtime-api"3849version = "0.8.0"3742version = "0.8.1"3850source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"3743source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"3851dependencies = [3744dependencies = [3852 "pallet-contracts-primitives",3745 "pallet-contracts-primitives",3853 "parity-scale-codec",3746 "parity-scale-codec",3856 "sp-std",3749 "sp-std",3857]3750]38583859[[package]]3860name = "pallet-finality-tracker"3861version = "2.0.0"3862source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"3863dependencies = [3864 "frame-support",3865 "frame-system",3866 "impl-trait-for-tuples",3867 "parity-scale-codec",3868 "serde",3869 "sp-finality-tracker",3870 "sp-inherents",3871 "sp-runtime",3872 "sp-std",3873]387437513875[[package]]3752[[package]]3876name = "pallet-grandpa"3753name = "pallet-grandpa"3877version = "2.0.0"3754version = "2.0.1"3878source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"3755source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"3879dependencies = [3756dependencies = [3880 "frame-benchmarking",3757 "frame-benchmarking",3881 "frame-support",3758 "frame-support",3882 "frame-system",3759 "frame-system",3883 "pallet-authorship",3760 "pallet-authorship",3884 "pallet-finality-tracker",3885 "pallet-session",3761 "pallet-session",3886 "parity-scale-codec",3762 "parity-scale-codec",3887 "serde",3763 "serde",389637723897[[package]]3773[[package]]3898name = "pallet-nft"3774name = "pallet-nft"3899version = "2.0.0"3775version = "3.0.0"3900dependencies = [3776dependencies = [3901 "frame-benchmarking",3777 "frame-benchmarking",3902 "frame-support",3778 "frame-support",391737933918[[package]]3794[[package]]3919name = "pallet-randomness-collective-flip"3795name = "pallet-randomness-collective-flip"3920version = "2.0.0"3796version = "2.0.1"3921source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"3797source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"3922dependencies = [3798dependencies = [3923 "frame-support",3799 "frame-support",3924 "frame-system",3800 "frame-system",393038063931[[package]]3807[[package]]3932name = "pallet-session"3808name = "pallet-session"3933version = "2.0.0"3809version = "2.0.1"3934source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"3810source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"3935dependencies = [3811dependencies = [3936 "frame-support",3812 "frame-support",3937 "frame-system",3813 "frame-system",3938 "impl-trait-for-tuples",3814 "impl-trait-for-tuples 0.1.3",3939 "pallet-timestamp",3815 "pallet-timestamp",3940 "parity-scale-codec",3816 "parity-scale-codec",3941 "serde",3817 "serde",395038263951[[package]]3827[[package]]3952name = "pallet-sudo"3828name = "pallet-sudo"3953version = "2.0.0"3829version = "2.0.1"3954source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"3830source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"3955dependencies = [3831dependencies = [3956 "frame-support",3832 "frame-support",3957 "frame-system",3833 "frame-system",396438403965[[package]]3841[[package]]3966name = "pallet-timestamp"3842name = "pallet-timestamp"3967version = "2.0.0"3843version = "2.0.1"3968source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"3844source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"3969dependencies = [3845dependencies = [3970 "frame-benchmarking",3846 "frame-benchmarking",3971 "frame-support",3847 "frame-support",3972 "frame-system",3848 "frame-system",3973 "impl-trait-for-tuples",3849 "impl-trait-for-tuples 0.2.0",3974 "parity-scale-codec",3850 "parity-scale-codec",3975 "serde",3851 "serde",3976 "sp-inherents",3852 "sp-inherents",398238583983[[package]]3859[[package]]3984name = "pallet-transaction-payment"3860name = "pallet-transaction-payment"3985version = "2.0.0"3861version = "2.0.1"3986source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"3862source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"3987dependencies = [3863dependencies = [3988 "frame-support",3864 "frame-support",3989 "frame-system",3865 "frame-system",3990 "pallet-transaction-payment-rpc-runtime-api",3991 "parity-scale-codec",3866 "parity-scale-codec",3992 "serde",3867 "serde",3993 "smallvec 1.5.1",3868 "smallvec 1.6.1",3994 "sp-core",3869 "sp-core",3995 "sp-io",3870 "sp-io",3996 "sp-runtime",3871 "sp-runtime",399938744000[[package]]3875[[package]]4001name = "pallet-transaction-payment-rpc"3876name = "pallet-transaction-payment-rpc"4002version = "2.0.0"3877version = "2.0.1"4003source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"3878source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"4004dependencies = [3879dependencies = [4005 "jsonrpc-core",3880 "jsonrpc-core",4006 "jsonrpc-core-client",3881 "jsonrpc-core-client",4007 "jsonrpc-derive",3882 "jsonrpc-derive",4008 "pallet-transaction-payment-rpc-runtime-api",3883 "pallet-transaction-payment-rpc-runtime-api",4009 "parity-scale-codec",3884 "parity-scale-codec",4010 "serde",4011 "sp-api",3885 "sp-api",4012 "sp-blockchain",3886 "sp-blockchain",4013 "sp-core",3887 "sp-core",401738914018[[package]]3892[[package]]4019name = "pallet-transaction-payment-rpc-runtime-api"3893name = "pallet-transaction-payment-rpc-runtime-api"4020version = "2.0.0"3894version = "2.0.1"4021source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"3895source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"4022dependencies = [3896dependencies = [4023 "frame-support",3897 "pallet-transaction-payment",4024 "parity-scale-codec",3898 "parity-scale-codec",4025 "serde",4026 "sp-api",3899 "sp-api",4027 "sp-runtime",3900 "sp-runtime",4028 "sp-std",4029]3901]403039024031[[package]]3903[[package]]4032name = "pallet-treasury"3904name = "pallet-treasury"4033version = "2.0.0"3905version = "2.0.1"4034source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"3906source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"4035dependencies = [3907dependencies = [4036 "frame-support",3908 "frame-support",4037 "frame-system",3909 "frame-system",3910 "impl-trait-for-tuples 0.2.0",4038 "pallet-balances",3911 "pallet-balances",4039 "parity-scale-codec",3912 "parity-scale-codec",4040 "serde",3913 "serde",404439174045[[package]]3918[[package]]4046name = "pallet-vesting"3919name = "pallet-vesting"4047version = "2.0.0"3920version = "2.0.1"4048source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"3921source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"4049dependencies = [3922dependencies = [4050 "enumflags2",3923 "enumflags2",4051 "frame-support",3924 "frame-support",407239454073[[package]]3946[[package]]4074name = "parity-multiaddr"3947name = "parity-multiaddr"4075version = "0.9.6"3948version = "0.11.0"4076source = "registry+https://github.com/rust-lang/crates.io-index"3949source = "registry+https://github.com/rust-lang/crates.io-index"4077checksum = "43244a26dc1ddd3097216bb12eaa6cf8a07b060c72718d9ebd60fd297d6401df"3950checksum = "8bfda2e46fc5e14122649e2645645a81ee5844e0fb2e727ef560cc71a8b2d801"4078dependencies = [3951dependencies = [4079 "arrayref",3952 "arrayref",4080 "bs58 0.4.0",3953 "bs58",4081 "byteorder 1.3.4",3954 "byteorder",4082 "data-encoding",3955 "data-encoding",4083 "multihash",3956 "multihash",4084 "percent-encoding 2.1.0",3957 "percent-encoding 2.1.0",4085 "serde",3958 "serde",4086 "static_assertions",3959 "static_assertions",4087 "unsigned-varint 0.5.1",3960 "unsigned-varint 0.6.0",4088 "url 2.2.0",3961 "url 2.2.0",4089]3962]409039634091[[package]]3964[[package]]4092name = "parity-scale-codec"3965name = "parity-scale-codec"4093version = "1.3.5"3966version = "1.3.6"4094source = "registry+https://github.com/rust-lang/crates.io-index"3967source = "registry+https://github.com/rust-lang/crates.io-index"4095checksum = "7c740e5fbcb6847058b40ac7e5574766c6388f585e184d769910fe0d3a2ca861"3968checksum = "79602888a81ace83e3d1d4b2873286c1f5f906c84db667594e8db8da3506c383"4096dependencies = [3969dependencies = [4097 "arrayvec 0.5.2",3970 "arrayvec 0.5.2",4098 "bitvec",3971 "bitvec",414040134141[[package]]4014[[package]]4142name = "parity-util-mem"4015name = "parity-util-mem"4143version = "0.7.0"4016version = "0.8.0"4144source = "registry+https://github.com/rust-lang/crates.io-index"4017source = "registry+https://github.com/rust-lang/crates.io-index"4145checksum = "297ff91fa36aec49ce183484b102f6b75b46776822bd81525bfc4cc9b0dd0f5c"4018checksum = "8f17f15cb05897127bf36a240085a1f0bbef7bce3024849eccf7f93f6171bc27"4146dependencies = [4019dependencies = [4147 "cfg-if 0.1.10",4020 "cfg-if 1.0.0",4148 "hashbrown 0.8.2",4021 "hashbrown",4149 "impl-trait-for-tuples",4022 "impl-trait-for-tuples 0.2.0",4150 "parity-util-mem-derive",4023 "parity-util-mem-derive",4151 "parking_lot 0.10.2",4024 "parking_lot 0.11.1",4152 "primitive-types",4025 "primitive-types",4153 "smallvec 1.5.1",4026 "smallvec 1.6.1",4154 "winapi 0.3.9",4027 "winapi 0.3.9",4155]4028]415640294177source = "registry+https://github.com/rust-lang/crates.io-index"4050source = "registry+https://github.com/rust-lang/crates.io-index"4178checksum = "9e02a625dd75084c2a7024f07c575b61b782f729d18702dabb3cdbf31911dc61"4051checksum = "9e02a625dd75084c2a7024f07c575b61b782f729d18702dabb3cdbf31911dc61"4179dependencies = [4052dependencies = [4180 "byteorder 1.3.4",4053 "byteorder",4181 "bytes 0.4.12",4054 "bytes 0.4.12",4182 "httparse",4055 "httparse",4183 "log",4056 "log",4195source = "registry+https://github.com/rust-lang/crates.io-index"4068source = "registry+https://github.com/rust-lang/crates.io-index"4196checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72"4069checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72"41974198[[package]]4199name = "parking_lot"4200version = "0.7.1"4201source = "registry+https://github.com/rust-lang/crates.io-index"4202checksum = "ab41b4aed082705d1056416ae4468b6ea99d52599ecf3169b00088d43113e337"4203dependencies = [4204 "lock_api 0.1.5",4205 "parking_lot_core 0.4.0",4206]420740704208[[package]]4071[[package]]4209name = "parking_lot"4072name = "parking_lot"4234dependencies = [4097dependencies = [4235 "instant",4098 "instant",4236 "lock_api 0.4.2",4099 "lock_api 0.4.2",4237 "parking_lot_core 0.8.1",4100 "parking_lot_core 0.8.2",4238]4101]42394240[[package]]4241name = "parking_lot_core"4242version = "0.4.0"4243source = "registry+https://github.com/rust-lang/crates.io-index"4244checksum = "94c8c7923936b28d546dfd14d4472eaf34c99b14e1c973a32b3e6d4eb04298c9"4245dependencies = [4246 "libc",4247 "rand 0.6.5",4248 "rustc_version",4249 "smallvec 0.6.13",4250 "winapi 0.3.9",4251]425241024253[[package]]4103[[package]]4254name = "parking_lot_core"4104name = "parking_lot_core"4259 "cfg-if 0.1.10",4109 "cfg-if 0.1.10",4260 "cloudabi",4110 "cloudabi",4261 "libc",4111 "libc",4262 "redox_syscall",4112 "redox_syscall 0.1.57",4263 "rustc_version",4113 "rustc_version",4264 "smallvec 0.6.13",4114 "smallvec 0.6.14",4265 "winapi 0.3.9",4115 "winapi 0.3.9",4266]4116]426741174274 "cfg-if 0.1.10",4124 "cfg-if 0.1.10",4275 "cloudabi",4125 "cloudabi",4276 "libc",4126 "libc",4277 "redox_syscall",4127 "redox_syscall 0.1.57",4278 "smallvec 1.5.1",4128 "smallvec 1.6.1",4279 "winapi 0.3.9",4129 "winapi 0.3.9",4280]4130]428141314282[[package]]4132[[package]]4283name = "parking_lot_core"4133name = "parking_lot_core"4284version = "0.8.1"4134version = "0.8.2"4285source = "registry+https://github.com/rust-lang/crates.io-index"4135source = "registry+https://github.com/rust-lang/crates.io-index"4286checksum = "d7c6d9b8427445284a09c55be860a15855ab580a417ccad9da88f5a06787ced0"4136checksum = "9ccb628cad4f84851442432c60ad8e1f607e29752d0bf072cbd0baf28aa34272"4287dependencies = [4137dependencies = [4288 "cfg-if 1.0.0",4138 "cfg-if 1.0.0",4289 "instant",4139 "instant",4290 "libc",4140 "libc",4291 "redox_syscall",4141 "redox_syscall 0.1.57",4292 "smallvec 1.5.1",4142 "smallvec 1.6.1",4293 "winapi 0.3.9",4143 "winapi 0.3.9",4294]4144]429541454318source = "registry+https://github.com/rust-lang/crates.io-index"4168source = "registry+https://github.com/rust-lang/crates.io-index"4319checksum = "006c038a43a45995a9670da19e67600114740e8511d4333bf97a56e66a7542d9"4169checksum = "006c038a43a45995a9670da19e67600114740e8511d4333bf97a56e66a7542d9"4320dependencies = [4170dependencies = [4321 "byteorder 1.3.4",4171 "byteorder",4322 "crypto-mac 0.7.0",4172 "crypto-mac 0.7.0",4323 "rayon",4324]4173]41744175[[package]]4176name = "pbkdf2"4177version = "0.4.0"4178source = "registry+https://github.com/rust-lang/crates.io-index"4179checksum = "216eaa586a190f0a738f2f918511eecfa90f13295abec0e457cdebcceda80cbd"4180dependencies = [4181 "crypto-mac 0.8.0",4182]41834184[[package]]4185name = "pdqselect"4186version = "0.1.0"4187source = "registry+https://github.com/rust-lang/crates.io-index"4188checksum = "4ec91767ecc0a0bbe558ce8c9da33c068066c57ecc8bb8477ef8c1ad3ef77c27"432541894326[[package]]4190[[package]]4327name = "peeking_take_while"4191name = "peeking_take_while"4341source = "registry+https://github.com/rust-lang/crates.io-index"4205source = "registry+https://github.com/rust-lang/crates.io-index"4342checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"4206checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"42074208[[package]]4209name = "pest"4210version = "2.1.3"4211source = "registry+https://github.com/rust-lang/crates.io-index"4212checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53"4213dependencies = [4214 "ucd-trie",4215]42164217[[package]]4218name = "pest_derive"4219version = "2.1.0"4220source = "registry+https://github.com/rust-lang/crates.io-index"4221checksum = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0"4222dependencies = [4223 "pest",4224 "pest_generator",4225]42264227[[package]]4228name = "pest_generator"4229version = "2.1.3"4230source = "registry+https://github.com/rust-lang/crates.io-index"4231checksum = "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55"4232dependencies = [4233 "pest",4234 "pest_meta",4235 "proc-macro2",4236 "quote",4237 "syn",4238]42394240[[package]]4241name = "pest_meta"4242version = "2.1.3"4243source = "registry+https://github.com/rust-lang/crates.io-index"4244checksum = "54be6e404f5317079812fc8f9f5279de376d8856929e21c184ecf6bbd692a11d"4245dependencies = [4246 "maplit",4247 "pest",4248 "sha-1 0.8.2",4249]434342504344[[package]]4251[[package]]4345name = "petgraph"4252name = "petgraph"436242694363[[package]]4270[[package]]4364name = "pin-project"4271name = "pin-project"4365version = "1.0.2"4272version = "1.0.4"4366source = "registry+https://github.com/rust-lang/crates.io-index"4273source = "registry+https://github.com/rust-lang/crates.io-index"4367checksum = "9ccc2237c2c489783abd8c4c80e5450fc0e98644555b1364da68cc29aa151ca7"4274checksum = "95b70b68509f17aa2857863b6fa00bf21fc93674c7a8893de2f469f6aa7ca2f2"4368dependencies = [4275dependencies = [4369 "pin-project-internal 1.0.2",4276 "pin-project-internal 1.0.4",4370]4277]437142784372[[package]]4279[[package]]438242894383[[package]]4290[[package]]4384name = "pin-project-internal"4291name = "pin-project-internal"4385version = "1.0.2"4292version = "1.0.4"4386source = "registry+https://github.com/rust-lang/crates.io-index"4293source = "registry+https://github.com/rust-lang/crates.io-index"4387checksum = "f8e8d2bf0b23038a4424865103a4df472855692821aab4e4f5c3312d461d9e5f"4294checksum = "caa25a6393f22ce819b0f50e0be89287292fda8d425be38ee0ca14c4931d9e71"4388dependencies = [4295dependencies = [4389 "proc-macro2",4296 "proc-macro2",4390 "quote",4297 "quote",439943064400[[package]]4307[[package]]4401name = "pin-project-lite"4308name = "pin-project-lite"4402version = "0.2.0"4309version = "0.2.4"4403source = "registry+https://github.com/rust-lang/crates.io-index"4310source = "registry+https://github.com/rust-lang/crates.io-index"4404checksum = "6b063f57ec186e6140e2b8b6921e5f1bd89c7356dda5b33acc5401203ca6131c"4311checksum = "439697af366c49a6d0a010c56a0d97685bc140ce0d377b13a2ea2aa42d64a827"440543124406[[package]]4313[[package]]4407name = "pin-utils"4314name = "pin-utils"444643534447[[package]]4354[[package]]4448name = "polyval"4355name = "polyval"4449version = "0.4.3"4356version = "0.4.5"4450source = "registry+https://github.com/rust-lang/crates.io-index"4357source = "registry+https://github.com/rust-lang/crates.io-index"4451checksum = "b4fd92d8e0c06d08525d2e2643cc2b5c80c69ae8eb12c18272d501cd7079ccc0"4358checksum = "eebcc4aa140b9abd2bc40d9c3f7ccec842679cd79045ac3a7ac698c1a064b7cd"4452dependencies = [4359dependencies = [4453 "cpuid-bool 0.2.0",4360 "cpuid-bool 0.2.0",4361 "opaque-debug 0.3.0",4454 "universal-hash",4362 "universal-hash",4455]4363]44564364446243704463[[package]]4371[[package]]4464name = "primitive-types"4372name = "primitive-types"4465version = "0.7.3"4373version = "0.8.0"4466source = "registry+https://github.com/rust-lang/crates.io-index"4374source = "registry+https://github.com/rust-lang/crates.io-index"4467checksum = "7dd39dcacf71411ba488570da7bbc89b717225e46478b30ba99b92db6b149809"4375checksum = "b3824ae2c5e27160113b9e029a10ec9e3f0237bad8029f69c7724393c9fdefd8"4468dependencies = [4376dependencies = [4469 "fixed-hash",4377 "fixed-hash",4470 "impl-codec",4378 "impl-codec",451344214514[[package]]4422[[package]]4515name = "proc-macro-nested"4423name = "proc-macro-nested"4516version = "0.1.6"4424version = "0.1.7"4517source = "registry+https://github.com/rust-lang/crates.io-index"4425source = "registry+https://github.com/rust-lang/crates.io-index"4518checksum = "eba180dafb9038b050a4c280019bbedf9f2467b61e5d892dcad585bb57aadc5a"4426checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086"451944274520[[package]]4428[[package]]4521name = "proc-macro2"4429name = "proc-macro2"454244504543[[package]]4451[[package]]4544name = "prost"4452name = "prost"4545version = "0.6.1"4453version = "0.7.0"4546source = "registry+https://github.com/rust-lang/crates.io-index"4454source = "registry+https://github.com/rust-lang/crates.io-index"4547checksum = "ce49aefe0a6144a45de32927c77bd2859a5f7677b55f220ae5b744e87389c212"4455checksum = "9e6984d2f1a23009bd270b8bb56d0926810a3d483f59c987d77969e9d8e840b2"4548dependencies = [4456dependencies = [4549 "bytes 0.5.6",4457 "bytes 1.0.1",4550 "prost-derive",4458 "prost-derive",4551]4459]455244604553[[package]]4461[[package]]4554name = "prost-build"4462name = "prost-build"4555version = "0.6.1"4463version = "0.7.0"4556source = "registry+https://github.com/rust-lang/crates.io-index"4464source = "registry+https://github.com/rust-lang/crates.io-index"4557checksum = "02b10678c913ecbd69350e8535c3aef91a8676c0773fc1d7b95cdd196d7f2f26"4465checksum = "32d3ebd75ac2679c2af3a92246639f9fcc8a442ee420719cc4fe195b98dd5fa3"4558dependencies = [4466dependencies = [4559 "bytes 0.5.6",4467 "bytes 1.0.1",4560 "heck",4468 "heck",4561 "itertools 0.8.2",4469 "itertools",4562 "log",4470 "log",4563 "multimap",4471 "multimap",4564 "petgraph",4472 "petgraph",4565 "prost",4473 "prost",4566 "prost-types",4474 "prost-types",4567 "tempfile",4475 "tempfile",4568 "which",4476 "which 4.0.2",4569]4477]457044784571[[package]]4479[[package]]4572name = "prost-derive"4480name = "prost-derive"4573version = "0.6.1"4481version = "0.7.0"4574source = "registry+https://github.com/rust-lang/crates.io-index"4482source = "registry+https://github.com/rust-lang/crates.io-index"4575checksum = "537aa19b95acde10a12fec4301466386f757403de4cd4e5b4fa78fb5ecb18f72"4483checksum = "169a15f3008ecb5160cba7d37bcd690a7601b6d30cfb87a117d45e59d52af5d4"4576dependencies = [4484dependencies = [4577 "anyhow",4485 "anyhow",4578 "itertools 0.8.2",4486 "itertools",4579 "proc-macro2",4487 "proc-macro2",4580 "quote",4488 "quote",4581 "syn",4489 "syn",4582]4490]458344914584[[package]]4492[[package]]4585name = "prost-types"4493name = "prost-types"4586version = "0.6.1"4494version = "0.7.0"4587source = "registry+https://github.com/rust-lang/crates.io-index"4495source = "registry+https://github.com/rust-lang/crates.io-index"4588checksum = "1834f67c0697c001304b75be76f67add9c89742eda3a085ad8ee0bb38c3417aa"4496checksum = "b518d7cdd93dab1d1122cf07fa9a60771836c668dde9d9e2a139f957f0d9f1bb"4589dependencies = [4497dependencies = [4590 "bytes 0.5.6",4498 "bytes 1.0.1",4591 "prost",4499 "prost",4592]4500]459345014597source = "registry+https://github.com/rust-lang/crates.io-index"4505source = "registry+https://github.com/rust-lang/crates.io-index"4598checksum = "0f53bc2558e8376358ebdc28301546471d67336584f6438ed4b7c7457a055fd7"4506checksum = "0f53bc2558e8376358ebdc28301546471d67336584f6438ed4b7c7457a055fd7"4599dependencies = [4507dependencies = [4600 "byteorder 1.3.4",4508 "byteorder",4601 "log",4509 "log",4602 "parity-wasm",4510 "parity-wasm",4603]4511]45124513[[package]]4514name = "pwasm-utils"4515version = "0.16.0"4516source = "registry+https://github.com/rust-lang/crates.io-index"4517checksum = "1c8ac87af529432d3a4f0e2b3bbf08af49f28f09cc73ed7e551161bdaef5f78d"4518dependencies = [4519 "byteorder",4520 "log",4521 "parity-wasm",4522]460445234605[[package]]4524[[package]]4606name = "quick-error"4525name = "quick-error"4607version = "1.2.3"4526version = "1.2.3"4608source = "registry+https://github.com/rust-lang/crates.io-index"4527source = "registry+https://github.com/rust-lang/crates.io-index"4609checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"4528checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"45294530[[package]]4531name = "quick-error"4532version = "2.0.0"4533source = "registry+https://github.com/rust-lang/crates.io-index"4534checksum = "3ac73b1112776fc109b2e61909bc46c7e1bf0d7f690ffb1676553acce16d5cda"461045354611[[package]]4536[[package]]4612name = "quicksink"4537name = "quicksink"462145464622[[package]]4547[[package]]4623name = "quote"4548name = "quote"4624version = "1.0.7"4549version = "1.0.8"4625source = "registry+https://github.com/rust-lang/crates.io-index"4550source = "registry+https://github.com/rust-lang/crates.io-index"4626checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37"4551checksum = "991431c3519a3f36861882da93630ce66b52918dcf1b8e2fd66b397fc96f28df"4627dependencies = [4552dependencies = [4628 "proc-macro2",4553 "proc-macro2",4629]4554]4657 "winapi 0.3.9",4582 "winapi 0.3.9",4658]4583]46594660[[package]]4661name = "rand"4662version = "0.5.6"4663source = "registry+https://github.com/rust-lang/crates.io-index"4664checksum = "c618c47cd3ebd209790115ab837de41425723956ad3ce2e6a7f09890947cacb9"4665dependencies = [4666 "cloudabi",4667 "fuchsia-cprng",4668 "libc",4669 "rand_core 0.3.1",4670 "winapi 0.3.9",4671]46724673[[package]]4674name = "rand"4675version = "0.6.5"4676source = "registry+https://github.com/rust-lang/crates.io-index"4677checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca"4678dependencies = [4679 "autocfg 0.1.7",4680 "libc",4681 "rand_chacha 0.1.1",4682 "rand_core 0.4.2",4683 "rand_hc 0.1.0",4684 "rand_isaac",4685 "rand_jitter",4686 "rand_os",4687 "rand_pcg 0.1.2",4688 "rand_xorshift",4689 "winapi 0.3.9",4690]469145844692[[package]]4585[[package]]4693name = "rand"4586name = "rand"4694version = "0.7.3"4587version = "0.7.3"4695source = "registry+https://github.com/rust-lang/crates.io-index"4588source = "registry+https://github.com/rust-lang/crates.io-index"4696checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"4589checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"4697dependencies = [4590dependencies = [4698 "getrandom 0.1.15",4591 "getrandom 0.1.16",4699 "libc",4592 "libc",4700 "rand_chacha 0.2.2",4593 "rand_chacha 0.2.2",4701 "rand_core 0.5.1",4594 "rand_core 0.5.1",4702 "rand_hc 0.2.0",4595 "rand_hc 0.2.0",4703 "rand_pcg 0.2.1",4596 "rand_pcg",4704]4597]470545984706[[package]]4599[[package]]4707name = "rand_chacha"4600name = "rand"4708version = "0.1.1"4601version = "0.8.3"4709source = "registry+https://github.com/rust-lang/crates.io-index"4602source = "registry+https://github.com/rust-lang/crates.io-index"4710checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef"4603checksum = "0ef9e7e66b4468674bfcb0c81af8b7fa0bb154fa9f28eb840da5c447baeb8d7e"4711dependencies = [4604dependencies = [4605 "libc",4712 "autocfg 0.1.7",4606 "rand_chacha 0.3.0",4713 "rand_core 0.3.1",4607 "rand_core 0.6.1",4608 "rand_hc 0.3.0",4714]4609]471546104716[[package]]4611[[package]]4723 "rand_core 0.5.1",4618 "rand_core 0.5.1",4724]4619]46204621[[package]]4622name = "rand_chacha"4623version = "0.3.0"4624source = "registry+https://github.com/rust-lang/crates.io-index"4625checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d"4626dependencies = [4627 "ppv-lite86",4628 "rand_core 0.6.1",4629]472546304726[[package]]4631[[package]]4727name = "rand_core"4632name = "rand_core"4744source = "registry+https://github.com/rust-lang/crates.io-index"4649source = "registry+https://github.com/rust-lang/crates.io-index"4745checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"4650checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"4746dependencies = [4651dependencies = [4747 "getrandom 0.1.15",4652 "getrandom 0.1.16",4748]4653]46544655[[package]]4656name = "rand_core"4657version = "0.6.1"4658source = "registry+https://github.com/rust-lang/crates.io-index"4659checksum = "c026d7df8b298d90ccbbc5190bd04d85e159eaf5576caeacf8741da93ccbd2e5"4660dependencies = [4661 "getrandom 0.2.2",4662]474946634750[[package]]4664[[package]]4751name = "rand_hc"4665name = "rand_distr"4752version = "0.1.0"4666version = "0.2.2"4753source = "registry+https://github.com/rust-lang/crates.io-index"4667source = "registry+https://github.com/rust-lang/crates.io-index"4754checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4"4668checksum = "96977acbdd3a6576fb1d27391900035bf3863d4a16422973a409b488cf29ffb2"4755dependencies = [4669dependencies = [4756 "rand_core 0.3.1",4670 "rand 0.7.3",4757]4671]475846724759[[package]]4673[[package]]4765 "rand_core 0.5.1",4679 "rand_core 0.5.1",4766]4680]47674768[[package]]4769name = "rand_isaac"4770version = "0.1.1"4771source = "registry+https://github.com/rust-lang/crates.io-index"4772checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08"4773dependencies = [4774 "rand_core 0.3.1",4775]47764777[[package]]4778name = "rand_jitter"4779version = "0.1.4"4780source = "registry+https://github.com/rust-lang/crates.io-index"4781checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b"4782dependencies = [4783 "libc",4784 "rand_core 0.4.2",4785 "winapi 0.3.9",4786]478746814788[[package]]4682[[package]]4789name = "rand_os"4683name = "rand_hc"4790version = "0.1.3"4684version = "0.3.0"4791source = "registry+https://github.com/rust-lang/crates.io-index"4685source = "registry+https://github.com/rust-lang/crates.io-index"4792checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071"4686checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73"4793dependencies = [4687dependencies = [4794 "cloudabi",4795 "fuchsia-cprng",4796 "libc",4797 "rand_core 0.4.2",4688 "rand_core 0.6.1",4798 "rdrand",4799 "winapi 0.3.9",4800]4689]48014802[[package]]4803name = "rand_pcg"4804version = "0.1.2"4805source = "registry+https://github.com/rust-lang/crates.io-index"4806checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44"4807dependencies = [4808 "autocfg 0.1.7",4809 "rand_core 0.4.2",4810]481146904812[[package]]4691[[package]]4813name = "rand_pcg"4692name = "rand_pcg"4818 "rand_core 0.5.1",4697 "rand_core 0.5.1",4819]4698]48204821[[package]]4822name = "rand_xorshift"4823version = "0.1.1"4824source = "registry+https://github.com/rust-lang/crates.io-index"4825checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c"4826dependencies = [4827 "rand_core 0.3.1",4828]482946994830[[package]]4700[[package]]4831name = "raw-cpuid"4701name = "raw-cpuid"4832version = "7.0.3"4702version = "7.0.4"4833source = "registry+https://github.com/rust-lang/crates.io-index"4703source = "registry+https://github.com/rust-lang/crates.io-index"4834checksum = "b4a349ca83373cfa5d6dbb66fd76e58b2cca08da71a5f6400de0a0a6a9bceeaf"4704checksum = "beb71f708fe39b2c5e98076204c3cc094ee5a4c12c4cdb119a2b72dc34164f41"4835dependencies = [4705dependencies = [4836 "bitflags",4706 "bitflags",4837 "cc",4707 "cc",4850source = "registry+https://github.com/rust-lang/crates.io-index"4720source = "registry+https://github.com/rust-lang/crates.io-index"4851checksum = "8b0d8e0819fadc20c74ea8373106ead0600e3a67ef1fe8da56e39b9ae7275674"4721checksum = "8b0d8e0819fadc20c74ea8373106ead0600e3a67ef1fe8da56e39b9ae7275674"4852dependencies = [4722dependencies = [4853 "autocfg 1.0.1",4723 "autocfg",4854 "crossbeam-deque 0.8.0",4724 "crossbeam-deque 0.8.0",4855 "either",4725 "either",4856 "rayon-core",4726 "rayon-core",4884source = "registry+https://github.com/rust-lang/crates.io-index"4754source = "registry+https://github.com/rust-lang/crates.io-index"4885checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce"4755checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce"47564757[[package]]4758name = "redox_syscall"4759version = "0.2.4"4760source = "registry+https://github.com/rust-lang/crates.io-index"4761checksum = "05ec8ca9416c5ea37062b502703cd7fcb207736bc294f6e0cf367ac6fc234570"4762dependencies = [4763 "bitflags",4764]488647654887[[package]]4766[[package]]4888name = "redox_users"4767name = "redox_users"4889version = "0.3.5"4768version = "0.3.5"4890source = "registry+https://github.com/rust-lang/crates.io-index"4769source = "registry+https://github.com/rust-lang/crates.io-index"4891checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d"4770checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d"4892dependencies = [4771dependencies = [4893 "getrandom 0.1.15",4772 "getrandom 0.1.16",4894 "redox_syscall",4773 "redox_syscall 0.1.57",4895 "rust-argon2",4774 "rust-argon2",4896]4775]489747764898[[package]]4777[[package]]4899name = "ref-cast"4778name = "ref-cast"4900version = "1.0.3"4779version = "1.0.6"4901source = "registry+https://github.com/rust-lang/crates.io-index"4780source = "registry+https://github.com/rust-lang/crates.io-index"4902checksum = "e17626b2f4bcf35b84bf379072a66e28cfe5c3c6ae58b38e4914bb8891dabece"4781checksum = "300f2a835d808734ee295d45007adacb9ebb29dd3ae2424acfa17930cae541da"4903dependencies = [4782dependencies = [4904 "ref-cast-impl",4783 "ref-cast-impl",4905]4784]490647854907[[package]]4786[[package]]4908name = "ref-cast-impl"4787name = "ref-cast-impl"4909version = "1.0.3"4788version = "1.0.6"4910source = "registry+https://github.com/rust-lang/crates.io-index"4789source = "registry+https://github.com/rust-lang/crates.io-index"4911checksum = "0c523ccaed8ac4b0288948849a350b37d3035827413c458b6a40ddb614bb4f72"4790checksum = "4c38e3aecd2b21cb3959637b883bb3714bc7e43f0268b9a29d3743ee3e55cdd2"4912dependencies = [4791dependencies = [4913 "proc-macro2",4792 "proc-macro2",4914 "quote",4793 "quote",4923dependencies = [4802dependencies = [4924 "log",4803 "log",4925 "rustc-hash",4804 "rustc-hash",4926 "smallvec 1.5.1",4805 "smallvec 1.6.1",4927]4806]492848074929[[package]]4808[[package]]4930name = "regex"4809name = "regex"4931version = "1.4.2"4810version = "1.4.3"4932source = "registry+https://github.com/rust-lang/crates.io-index"4811source = "registry+https://github.com/rust-lang/crates.io-index"4933checksum = "38cf2c13ed4745de91a5eb834e11c00bcc3709e773173b2ce4c56c9fbde04b9c"4812checksum = "d9251239e129e16308e70d853559389de218ac275b515068abc96829d05b948a"4934dependencies = [4813dependencies = [4935 "aho-corasick",4814 "aho-corasick",4936 "memchr",4815 "memchr",4944source = "registry+https://github.com/rust-lang/crates.io-index"4823source = "registry+https://github.com/rust-lang/crates.io-index"4945checksum = "ae1ded71d66a4a97f5e961fd0cb25a5f366a42a41570d16a763a69c092c26ae4"4824checksum = "ae1ded71d66a4a97f5e961fd0cb25a5f366a42a41570d16a763a69c092c26ae4"4946dependencies = [4825dependencies = [4947 "byteorder 1.3.4",4826 "byteorder",4948 "regex-syntax",4827 "regex-syntax",4949]4828]495048294951[[package]]4830[[package]]4952name = "regex-syntax"4831name = "regex-syntax"4953version = "0.6.21"4832version = "0.6.22"4954source = "registry+https://github.com/rust-lang/crates.io-index"4833source = "registry+https://github.com/rust-lang/crates.io-index"4955checksum = "3b181ba2dcf07aaccad5448e8ead58db5b742cf85dfe035e2227f137a539a189"4834checksum = "b5eb417147ba9860a96cfe72a0b93bf88fee1744b5636ec99ab20c1aa9376581"495648354957[[package]]4836[[package]]4958name = "region"4837name = "region"497748564978[[package]]4857[[package]]4979name = "retain_mut"4858name = "retain_mut"4980version = "0.1.1"4859version = "0.1.2"4981source = "registry+https://github.com/rust-lang/crates.io-index"4860source = "registry+https://github.com/rust-lang/crates.io-index"4982checksum = "e005d658ad26eacc2b6c506dfde519f4e277e328d0eb3379ca61647d70a8f531"4861checksum = "53552c6c49e1e13f1a203ef0080ab3bbef0beb570a528993e83df057a9d9bba1"498348624984[[package]]4863[[package]]4985name = "ring"4864name = "ring"4989dependencies = [4868dependencies = [4990 "cc",4869 "cc",4991 "libc",4870 "libc",4992 "once_cell 1.5.2",4871 "once_cell",4993 "spin",4872 "spin",4994 "untrusted",4873 "untrusted",4995 "web-sys",4874 "web-sys",500848875009[[package]]4888[[package]]5010name = "rpassword"4889name = "rpassword"5011version = "4.0.5"4890version = "5.0.1"5012source = "registry+https://github.com/rust-lang/crates.io-index"4891source = "registry+https://github.com/rust-lang/crates.io-index"5013checksum = "99371657d3c8e4d816fb6221db98fa408242b0b53bac08f8676a41f8554fe99f"4892checksum = "ffc936cf8a7ea60c58f030fd36a612a48f440610214dc54bc36431f9ea0c3efb"5014dependencies = [4893dependencies = [5015 "libc",4894 "libc",5016 "winapi 0.3.9",4895 "winapi 0.3.9",5068 "webpki",4947 "webpki",5069]4948]49494950[[package]]4951name = "rustls"4952version = "0.19.0"4953source = "registry+https://github.com/rust-lang/crates.io-index"4954checksum = "064fd21ff87c6e87ed4506e68beb42459caa4a0e2eb144932e6776768556980b"4955dependencies = [4956 "base64 0.13.0",4957 "log",4958 "ring",4959 "sct",4960 "webpki",4961]507049625071[[package]]4963[[package]]5072name = "rustls-native-certs"4964name = "rustls-native-certs"5075checksum = "629d439a7672da82dd955498445e496ee2096fe2117b9f796558a43fdb9e59b8"4967checksum = "629d439a7672da82dd955498445e496ee2096fe2117b9f796558a43fdb9e59b8"5076dependencies = [4968dependencies = [5077 "openssl-probe",4969 "openssl-probe",5078 "rustls",4970 "rustls 0.18.1",5079 "schannel",4971 "schannel",5080 "security-framework",4972 "security-framework",5081]4973]5086source = "registry+https://github.com/rust-lang/crates.io-index"4978source = "registry+https://github.com/rust-lang/crates.io-index"5087checksum = "4da5fcb054c46f5a5dff833b129285a93d3f0179531735e6c866e8cc307d2020"4979checksum = "4da5fcb054c46f5a5dff833b129285a93d3f0179531735e6c866e8cc307d2020"5088dependencies = [4980dependencies = [5089 "futures 0.3.8",4981 "futures 0.3.12",5090 "pin-project 0.4.27",4982 "pin-project 0.4.27",5091 "static_assertions",4983 "static_assertions",5092]4984]510850005109[[package]]5001[[package]]5110name = "salsa20"5002name = "salsa20"5111version = "0.6.0"5003version = "0.7.2"5112source = "registry+https://github.com/rust-lang/crates.io-index"5004source = "registry+https://github.com/rust-lang/crates.io-index"5113checksum = "c7f47b10fa80f6969bbbd9c8e7cc998f082979d402a9e10579e2303a87955395"5005checksum = "399f290ffc409596022fce5ea5d4138184be4784f2b28c62c59f0d8389059a15"5114dependencies = [5006dependencies = [5115 "stream-cipher",5007 "cipher",5116]5008]511750095118[[package]]5010[[package]]5119name = "sc-basic-authorship"5011name = "sc-basic-authorship"5120version = "0.8.0"5012version = "0.8.1"5121source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"5013source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5122dependencies = [5014dependencies = [5123 "futures 0.3.8",5015 "futures 0.3.12",5124 "futures-timer 3.0.2",5016 "futures-timer 3.0.2",5125 "log",5017 "log",5126 "parity-scale-codec",5018 "parity-scale-codec",5136 "sp-runtime",5028 "sp-runtime",5137 "sp-transaction-pool",5029 "sp-transaction-pool",5138 "substrate-prometheus-endpoint",5030 "substrate-prometheus-endpoint",5139 "tokio-executor 0.2.0-alpha.6",5140]5031]514150325142[[package]]5033[[package]]5143name = "sc-block-builder"5034name = "sc-block-builder"5144version = "0.8.0"5035version = "0.8.1"5145source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"5036source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5146dependencies = [5037dependencies = [5147 "parity-scale-codec",5038 "parity-scale-codec",5148 "sc-client-api",5039 "sc-client-api",515850495159[[package]]5050[[package]]5160name = "sc-chain-spec"5051name = "sc-chain-spec"5161version = "2.0.0"5052version = "2.0.1"5162source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"5053source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5163dependencies = [5054dependencies = [5164 "impl-trait-for-tuples",5055 "impl-trait-for-tuples 0.2.0",5165 "parity-scale-codec",5056 "parity-scale-codec",5166 "sc-chain-spec-derive",5057 "sc-chain-spec-derive",5058 "sc-consensus-babe",5059 "sc-consensus-epochs",5060 "sc-finality-grandpa",5167 "sc-network",5061 "sc-network",5168 "sc-telemetry",5062 "sc-telemetry",5169 "serde",5063 "serde",5170 "serde_json",5064 "serde_json",5171 "sp-chain-spec",5065 "sp-chain-spec",5066 "sp-consensus-babe",5172 "sp-core",5067 "sp-core",5173 "sp-runtime",5068 "sp-runtime",5174]5069]517550705176[[package]]5071[[package]]5177name = "sc-chain-spec-derive"5072name = "sc-chain-spec-derive"5178version = "2.0.0"5073version = "2.0.1"5179source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"5074source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5180dependencies = [5075dependencies = [5181 "proc-macro-crate",5076 "proc-macro-crate",5182 "proc-macro2",5077 "proc-macro2",518650815187[[package]]5082[[package]]5188name = "sc-cli"5083name = "sc-cli"5189version = "0.8.0"5084version = "0.8.1"5190source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"5085source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5191dependencies = [5086dependencies = [5192 "ansi_term 0.12.1",5193 "atty",5194 "bip39",5195 "chrono",5087 "chrono",5196 "derive_more",5197 "fdlimit",5088 "fdlimit",5198 "flexi_logger",5199 "futures 0.3.8",5089 "futures 0.3.12",5200 "hex",5090 "hex",5201 "lazy_static",5202 "libp2p",5091 "libp2p",5203 "log",5092 "log",5204 "names",5093 "names",5205 "nix",5206 "parity-scale-codec",5094 "parity-scale-codec",5207 "parity-util-mem",5208 "rand 0.7.3",5095 "rand 0.7.3",5209 "regex",5096 "regex",5210 "rpassword",5097 "rpassword",5211 "sc-client-api",5098 "sc-client-api",5212 "sc-informant",5213 "sc-keystore",5099 "sc-keystore",5214 "sc-network",5100 "sc-network",5215 "sc-service",5101 "sc-service",5220 "sp-blockchain",5106 "sp-blockchain",5221 "sp-core",5107 "sp-core",5222 "sp-keyring",5108 "sp-keyring",5109 "sp-keystore",5223 "sp-panic-handler",5110 "sp-panic-handler",5224 "sp-runtime",5111 "sp-runtime",5225 "sp-state-machine",5226 "sp-utils",5112 "sp-utils",5227 "sp-version",5113 "sp-version",5228 "structopt",5114 "structopt",5229 "substrate-prometheus-endpoint",5115 "thiserror",5230 "time",5116 "tiny-bip39",5231 "tokio 0.2.24",5117 "tokio 0.2.24",5232 "tracing",5233 "tracing-log",5234 "tracing-subscriber",5235]5118]523651195237[[package]]5120[[package]]5238name = "sc-client-api"5121name = "sc-client-api"5239version = "2.0.0"5122version = "2.0.1"5240source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"5123source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5241dependencies = [5124dependencies = [5242 "derive_more",5125 "derive_more",5243 "fnv",5126 "fnv",5244 "futures 0.3.8",5127 "futures 0.3.12",5245 "hash-db",5128 "hash-db",5246 "hex-literal",5247 "kvdb",5129 "kvdb",5248 "lazy_static",5130 "lazy_static",5249 "log",5131 "log",5250 "parity-scale-codec",5132 "parity-scale-codec",5251 "parking_lot 0.10.2",5133 "parking_lot 0.11.1",5252 "sc-executor",5134 "sc-executor",5253 "sc-telemetry",5254 "sp-api",5135 "sp-api",5255 "sp-blockchain",5136 "sp-blockchain",5256 "sp-consensus",5137 "sp-consensus",5257 "sp-core",5138 "sp-core",5258 "sp-database",5139 "sp-database",5259 "sp-externalities",5140 "sp-externalities",5260 "sp-inherents",5141 "sp-inherents",5261 "sp-keyring",5142 "sp-keystore",5262 "sp-runtime",5143 "sp-runtime",5263 "sp-state-machine",5144 "sp-state-machine",5264 "sp-std",5145 "sp-std",527251535273[[package]]5154[[package]]5274name = "sc-client-db"5155name = "sc-client-db"5275version = "0.8.0"5156version = "0.8.1"5276source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"5157source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5277dependencies = [5158dependencies = [5278 "blake2-rfc",5159 "blake2-rfc",5279 "hash-db",5160 "hash-db",5285 "parity-db",5166 "parity-db",5286 "parity-scale-codec",5167 "parity-scale-codec",5287 "parity-util-mem",5168 "parity-util-mem",5288 "parking_lot 0.10.2",5169 "parking_lot 0.11.1",5289 "sc-client-api",5170 "sc-client-api",5290 "sc-executor",5171 "sc-executor",5291 "sc-state-db",5172 "sc-state-db",530251835303[[package]]5184[[package]]5304name = "sc-consensus"5185name = "sc-consensus"5305version = "0.8.0"5186version = "0.8.1"5306source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"5187source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5307dependencies = [5188dependencies = [5308 "sc-client-api",5189 "sc-client-api",5309 "sp-blockchain",5190 "sp-blockchain",531351945314[[package]]5195[[package]]5315name = "sc-consensus-aura"5196name = "sc-consensus-aura"5316version = "0.8.0"5197version = "0.8.1"5317source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"5198source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5318dependencies = [5199dependencies = [5319 "derive_more",5200 "derive_more",5320 "futures 0.3.8",5201 "futures 0.3.12",5321 "futures-timer 3.0.2",5202 "futures-timer 3.0.2",5322 "log",5203 "log",5323 "parity-scale-codec",5204 "parity-scale-codec",5324 "parking_lot 0.10.2",5205 "parking_lot 0.11.1",5325 "sc-block-builder",5206 "sc-block-builder",5326 "sc-client-api",5207 "sc-client-api",5327 "sc-consensus-slots",5208 "sc-consensus-slots",5328 "sc-keystore",5329 "sc-telemetry",5209 "sc-telemetry",5330 "sp-api",5210 "sp-api",5331 "sp-application-crypto",5211 "sp-application-crypto",5336 "sp-core",5216 "sp-core",5337 "sp-inherents",5217 "sp-inherents",5338 "sp-io",5218 "sp-io",5219 "sp-keystore",5339 "sp-runtime",5220 "sp-runtime",5340 "sp-timestamp",5221 "sp-timestamp",5341 "sp-version",5222 "sp-version",5342 "substrate-prometheus-endpoint",5223 "substrate-prometheus-endpoint",5343]5224]52255226[[package]]5227name = "sc-consensus-babe"5228version = "0.8.1"5229source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5230dependencies = [5231 "derive_more",5232 "fork-tree",5233 "futures 0.3.12",5234 "futures-timer 3.0.2",5235 "log",5236 "merlin",5237 "num-bigint",5238 "num-rational",5239 "num-traits",5240 "parity-scale-codec",5241 "parking_lot 0.11.1",5242 "pdqselect",5243 "rand 0.7.3",5244 "retain_mut",5245 "sc-client-api",5246 "sc-consensus-epochs",5247 "sc-consensus-slots",5248 "sc-consensus-uncles",5249 "sc-keystore",5250 "sc-telemetry",5251 "schnorrkel",5252 "serde",5253 "sp-api",5254 "sp-application-crypto",5255 "sp-block-builder",5256 "sp-blockchain",5257 "sp-consensus",5258 "sp-consensus-babe",5259 "sp-consensus-vrf",5260 "sp-core",5261 "sp-inherents",5262 "sp-io",5263 "sp-keystore",5264 "sp-runtime",5265 "sp-timestamp",5266 "sp-utils",5267 "sp-version",5268 "substrate-prometheus-endpoint",5269]52705271[[package]]5272name = "sc-consensus-epochs"5273version = "0.8.1"5274source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5275dependencies = [5276 "fork-tree",5277 "parity-scale-codec",5278 "parking_lot 0.11.1",5279 "sc-client-api",5280 "sp-blockchain",5281 "sp-runtime",5282]534452835345[[package]]5284[[package]]5346name = "sc-consensus-slots"5285name = "sc-consensus-slots"5347version = "0.8.0"5286version = "0.8.1"5348source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"5287source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5349dependencies = [5288dependencies = [5350 "futures 0.3.8",5289 "futures 0.3.12",5351 "futures-timer 3.0.2",5290 "futures-timer 3.0.2",5352 "log",5291 "log",5353 "parity-scale-codec",5292 "parity-scale-codec",5354 "parking_lot 0.10.2",5293 "parking_lot 0.11.1",5355 "sc-client-api",5294 "sc-client-api",5356 "sc-telemetry",5295 "sc-telemetry",5357 "sp-api",5296 "sp-api",5358 "sp-application-crypto",5297 "sp-application-crypto",5298 "sp-arithmetic",5359 "sp-blockchain",5299 "sp-blockchain",5360 "sp-consensus",5300 "sp-consensus",5361 "sp-consensus-slots",5301 "sp-consensus-slots",5362 "sp-core",5302 "sp-core",5363 "sp-inherents",5303 "sp-inherents",5364 "sp-runtime",5304 "sp-runtime",5365 "sp-state-machine",5305 "sp-state-machine",5306 "sp-trie",5307 "thiserror",5366]5308]53095310[[package]]5311name = "sc-consensus-uncles"5312version = "0.8.1"5313source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5314dependencies = [5315 "log",5316 "sc-client-api",5317 "sp-authorship",5318 "sp-consensus",5319 "sp-core",5320 "sp-inherents",5321 "sp-runtime",5322]536753235368[[package]]5324[[package]]5369name = "sc-executor"5325name = "sc-executor"5370version = "0.8.0"5326version = "0.8.1"5371source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"5327source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5372dependencies = [5328dependencies = [5373 "derive_more",5329 "derive_more",5374 "lazy_static",5330 "lazy_static",5375 "libsecp256k1",5331 "libsecp256k1",5376 "log",5332 "log",5377 "parity-scale-codec",5333 "parity-scale-codec",5378 "parity-wasm",5334 "parity-wasm",5379 "parking_lot 0.10.2",5335 "parking_lot 0.11.1",5380 "sc-executor-common",5336 "sc-executor-common",5381 "sc-executor-wasmi",5337 "sc-executor-wasmi",5382 "sc-executor-wasmtime",5338 "sc-executor-wasmtime",5387 "sp-panic-handler",5343 "sp-panic-handler",5388 "sp-runtime-interface",5344 "sp-runtime-interface",5389 "sp-serializer",5345 "sp-serializer",5346 "sp-tasks",5390 "sp-trie",5347 "sp-trie",5391 "sp-version",5348 "sp-version",5392 "sp-wasm-interface",5349 "sp-wasm-interface",539553525396[[package]]5353[[package]]5397name = "sc-executor-common"5354name = "sc-executor-common"5398version = "0.8.0"5355version = "0.8.1"5399source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"5356source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5400dependencies = [5357dependencies = [5401 "derive_more",5358 "derive_more",5402 "log",5403 "parity-scale-codec",5359 "parity-scale-codec",5404 "parity-wasm",5360 "parity-wasm",5405 "sp-allocator",5361 "sp-allocator",5406 "sp-core",5362 "sp-core",5407 "sp-runtime-interface",5408 "sp-serializer",5363 "sp-serializer",5409 "sp-wasm-interface",5364 "sp-wasm-interface",5365 "thiserror",5410 "wasmi",5366 "wasmi",5411]5367]541253685413[[package]]5369[[package]]5414name = "sc-executor-wasmi"5370name = "sc-executor-wasmi"5415version = "0.8.0"5371version = "0.8.1"5416source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"5372source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5417dependencies = [5373dependencies = [5418 "log",5374 "log",5419 "parity-scale-codec",5375 "parity-scale-codec",542753835428[[package]]5384[[package]]5429name = "sc-executor-wasmtime"5385name = "sc-executor-wasmtime"5430version = "0.8.0"5386version = "0.8.1"5431source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"5387source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5432dependencies = [5388dependencies = [5433 "log",5389 "log",5434 "parity-scale-codec",5390 "parity-scale-codec",5435 "parity-wasm",5391 "parity-wasm",5436 "pwasm-utils",5392 "pwasm-utils 0.14.0",5437 "sc-executor-common",5393 "sc-executor-common",5438 "scoped-tls",5394 "scoped-tls",5439 "sp-allocator",5395 "sp-allocator",544554015446[[package]]5402[[package]]5447name = "sc-finality-grandpa"5403name = "sc-finality-grandpa"5448version = "0.8.0"5404version = "0.8.1"5449source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"5405source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5450dependencies = [5406dependencies = [5451 "derive_more",5407 "derive_more",5452 "finality-grandpa",5408 "finality-grandpa",5453 "fork-tree",5409 "fork-tree",5454 "futures 0.3.8",5410 "futures 0.3.12",5455 "futures-timer 3.0.2",5411 "futures-timer 3.0.2",5412 "linked-hash-map",5456 "log",5413 "log",5457 "parity-scale-codec",5414 "parity-scale-codec",5458 "parking_lot 0.10.2",5415 "parking_lot 0.11.1",5459 "pin-project 0.4.27",5416 "pin-project 0.4.27",5460 "rand 0.7.3",5417 "rand 0.7.3",5461 "sc-block-builder",5418 "sc-block-builder",5473 "sp-consensus",5430 "sp-consensus",5474 "sp-core",5431 "sp-core",5475 "sp-finality-grandpa",5432 "sp-finality-grandpa",5476 "sp-finality-tracker",5477 "sp-inherents",5433 "sp-inherents",5434 "sp-keystore",5478 "sp-runtime",5435 "sp-runtime",5479 "sp-utils",5436 "sp-utils",5480 "substrate-prometheus-endpoint",5437 "substrate-prometheus-endpoint",5481]5438]548254395483[[package]]5440[[package]]5484name = "sc-informant"5441name = "sc-informant"5485version = "0.8.0"5442version = "0.8.1"5486source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"5443source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5487dependencies = [5444dependencies = [5488 "ansi_term 0.12.1",5445 "ansi_term 0.12.1",5489 "futures 0.3.8",5446 "futures 0.3.12",5490 "log",5447 "log",5491 "parity-util-mem",5448 "parity-util-mem",5492 "sc-client-api",5449 "sc-client-api",550054575501[[package]]5458[[package]]5502name = "sc-keystore"5459name = "sc-keystore"5503version = "2.0.0"5460version = "2.0.1"5504source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"5461source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5505dependencies = [5462dependencies = [5463 "async-trait",5506 "derive_more",5464 "derive_more",5465 "futures 0.3.12",5466 "futures-util",5507 "hex",5467 "hex",5508 "merlin",5468 "merlin",5509 "parking_lot 0.10.2",5469 "parking_lot 0.11.1",5510 "rand 0.7.3",5470 "rand 0.7.3",5511 "serde_json",5471 "serde_json",5512 "sp-application-crypto",5472 "sp-application-crypto",5513 "sp-core",5473 "sp-core",5474 "sp-keystore",5514 "subtle 2.4.0",5475 "subtle 2.4.0",5515]5476]551654775517[[package]]5478[[package]]5518name = "sc-light"5479name = "sc-light"5519version = "2.0.0"5480version = "2.0.1"5520source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"5481source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5521dependencies = [5482dependencies = [5522 "hash-db",5483 "hash-db",5523 "lazy_static",5484 "lazy_static",5524 "parity-scale-codec",5485 "parity-scale-codec",5525 "parking_lot 0.10.2",5486 "parking_lot 0.11.1",5526 "sc-client-api",5487 "sc-client-api",5527 "sc-executor",5488 "sc-executor",5528 "sp-api",5489 "sp-api",553554965536[[package]]5497[[package]]5537name = "sc-network"5498name = "sc-network"5538version = "0.8.0"5499version = "0.8.1"5539source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"5500source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5540dependencies = [5501dependencies = [5541 "async-std",5502 "async-std",5542 "async-trait",5503 "async-trait",5504 "asynchronous-codec",5543 "bitflags",5505 "bitflags",5544 "bs58 0.3.1",5506 "bs58",5545 "bytes 0.5.6",5507 "bytes 1.0.1",5546 "derive_more",5508 "derive_more",5547 "either",5509 "either",5548 "erased-serde",5510 "erased-serde",5549 "fnv",5511 "fnv",5550 "fork-tree",5512 "fork-tree",5551 "futures 0.3.8",5513 "futures 0.3.12",5552 "futures-timer 3.0.2",5514 "futures-timer 3.0.2",5553 "futures_codec",5554 "hex",5515 "hex",5555 "ip_network",5516 "ip_network",5556 "libp2p",5517 "libp2p",5557 "linked-hash-map",5518 "linked-hash-map",5558 "linked_hash_set",5519 "linked_hash_set",5559 "log",5520 "log",5560 "lru 0.4.3",5521 "lru",5561 "nohash-hasher",5522 "nohash-hasher",5562 "parity-scale-codec",5523 "parity-scale-codec",5563 "parking_lot 0.10.2",5524 "parking_lot 0.11.1",5564 "pin-project 0.4.27",5525 "pin-project 0.4.27",5565 "prost",5526 "prost",5566 "prost-build",5527 "prost-build",5570 "sc-peerset",5531 "sc-peerset",5571 "serde",5532 "serde",5572 "serde_json",5533 "serde_json",5573 "slog",5574 "slog_derive",5575 "smallvec 0.6.13",5534 "smallvec 1.6.1",5576 "sp-arithmetic",5535 "sp-arithmetic",5577 "sp-blockchain",5536 "sp-blockchain",5578 "sp-consensus",5537 "sp-consensus",5581 "sp-utils",5540 "sp-utils",5582 "substrate-prometheus-endpoint",5541 "substrate-prometheus-endpoint",5583 "thiserror",5542 "thiserror",5584 "unsigned-varint 0.4.0",5543 "unsigned-varint 0.6.0",5585 "void",5544 "void",5586 "wasm-timer",5545 "wasm-timer",5587 "zeroize",5546 "zeroize",5588]5547]558955485590[[package]]5549[[package]]5591name = "sc-network-gossip"5550name = "sc-network-gossip"5592version = "0.8.0"5551version = "0.8.1"5593source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"5552source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5594dependencies = [5553dependencies = [5595 "futures 0.3.8",5554 "futures 0.3.12",5596 "futures-timer 3.0.2",5555 "futures-timer 3.0.2",5597 "libp2p",5556 "libp2p",5598 "log",5557 "log",5599 "lru 0.4.3",5558 "lru",5600 "sc-network",5559 "sc-network",5601 "sp-runtime",5560 "sp-runtime",5561 "substrate-prometheus-endpoint",5602 "wasm-timer",5562 "wasm-timer",5603]5563]560455645605[[package]]5565[[package]]5606name = "sc-offchain"5566name = "sc-offchain"5607version = "2.0.0"5567version = "2.0.1"5608source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"5568source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5609dependencies = [5569dependencies = [5610 "bytes 0.5.6",5570 "bytes 0.5.6",5611 "fnv",5571 "fnv",5612 "futures 0.3.8",5572 "futures 0.3.12",5613 "futures-timer 3.0.2",5573 "futures-timer 3.0.2",5614 "hyper 0.13.9",5574 "hyper 0.13.9",5615 "hyper-rustls",5575 "hyper-rustls",5616 "log",5576 "log",5617 "num_cpus",5577 "num_cpus",5618 "parity-scale-codec",5578 "parity-scale-codec",5619 "parking_lot 0.10.2",5579 "parking_lot 0.11.1",5620 "rand 0.7.3",5580 "rand 0.7.3",5621 "sc-client-api",5581 "sc-client-api",5622 "sc-keystore",5582 "sc-keystore",563155915632[[package]]5592[[package]]5633name = "sc-peerset"5593name = "sc-peerset"5634version = "2.0.0"5594version = "2.0.1"5635source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"5595source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5636dependencies = [5596dependencies = [5637 "futures 0.3.8",5597 "futures 0.3.12",5638 "libp2p",5598 "libp2p",5639 "log",5599 "log",5640 "serde_json",5600 "serde_json",564456045645[[package]]5605[[package]]5646name = "sc-proposer-metrics"5606name = "sc-proposer-metrics"5647version = "0.8.0"5607version = "0.8.1"5648source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"5608source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5649dependencies = [5609dependencies = [5650 "log",5610 "log",5651 "substrate-prometheus-endpoint",5611 "substrate-prometheus-endpoint",5652]5612]565356135654[[package]]5614[[package]]5655name = "sc-rpc"5615name = "sc-rpc"5656version = "2.0.0"5616version = "2.0.1"5657source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"5617source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5658dependencies = [5618dependencies = [5659 "futures 0.3.8",5619 "futures 0.3.12",5660 "hash-db",5620 "hash-db",5661 "jsonrpc-core",5621 "jsonrpc-core",5662 "jsonrpc-pubsub",5622 "jsonrpc-pubsub",5663 "log",5623 "log",5664 "parity-scale-codec",5624 "parity-scale-codec",5665 "parking_lot 0.10.2",5625 "parking_lot 0.11.1",5666 "sc-block-builder",5626 "sc-block-builder",5667 "sc-client-api",5627 "sc-client-api",5668 "sc-executor",5628 "sc-executor",5669 "sc-keystore",5629 "sc-keystore",5670 "sc-rpc-api",5630 "sc-rpc-api",5631 "sc-tracing",5671 "serde_json",5632 "serde_json",5672 "sp-api",5633 "sp-api",5673 "sp-blockchain",5634 "sp-blockchain",5674 "sp-chain-spec",5635 "sp-chain-spec",5675 "sp-core",5636 "sp-core",5637 "sp-keystore",5676 "sp-offchain",5638 "sp-offchain",5677 "sp-rpc",5639 "sp-rpc",5678 "sp-runtime",5640 "sp-runtime",568556475686[[package]]5648[[package]]5687name = "sc-rpc-api"5649name = "sc-rpc-api"5688version = "0.8.0"5650version = "0.8.1"5689source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"5651source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5690dependencies = [5652dependencies = [5691 "derive_more",5653 "derive_more",5692 "futures 0.3.8",5654 "futures 0.3.12",5693 "jsonrpc-core",5655 "jsonrpc-core",5694 "jsonrpc-core-client",5656 "jsonrpc-core-client",5695 "jsonrpc-derive",5657 "jsonrpc-derive",5696 "jsonrpc-pubsub",5658 "jsonrpc-pubsub",5697 "log",5659 "log",5698 "parity-scale-codec",5660 "parity-scale-codec",5699 "parking_lot 0.10.2",5661 "parking_lot 0.11.1",5700 "serde",5662 "serde",5701 "serde_json",5663 "serde_json",5702 "sp-chain-spec",5664 "sp-chain-spec",570956715710[[package]]5672[[package]]5711name = "sc-rpc-server"5673name = "sc-rpc-server"5712version = "2.0.0"5674version = "2.0.1"5713source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"5675source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5714dependencies = [5676dependencies = [5715 "futures 0.1.30",5677 "futures 0.1.30",5716 "jsonrpc-core",5678 "jsonrpc-core",572756895728[[package]]5690[[package]]5729name = "sc-service"5691name = "sc-service"5730version = "0.8.0"5692version = "0.8.1"5731source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"5693source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5732dependencies = [5694dependencies = [5733 "derive_more",5734 "directories",5695 "directories 3.0.1",5735 "exit-future",5696 "exit-future",5736 "futures 0.1.30",5697 "futures 0.1.30",5737 "futures 0.3.8",5698 "futures 0.3.12",5738 "futures-timer 3.0.2",5699 "futures-timer 3.0.2",5739 "hash-db",5700 "hash-db",5740 "jsonrpc-core",5701 "jsonrpc-core",5743 "log",5704 "log",5744 "parity-scale-codec",5705 "parity-scale-codec",5745 "parity-util-mem",5706 "parity-util-mem",5746 "parking_lot 0.10.2",5707 "parking_lot 0.11.1",5747 "pin-project 0.4.27",5708 "pin-project 0.4.27",5748 "rand 0.7.3",5709 "rand 0.7.3",5749 "sc-block-builder",5710 "sc-block-builder",5763 "sc-transaction-pool",5724 "sc-transaction-pool",5764 "serde",5725 "serde",5765 "serde_json",5726 "serde_json",5766 "slog",5767 "sp-api",5727 "sp-api",5768 "sp-application-crypto",5728 "sp-application-crypto",5769 "sp-block-builder",5729 "sp-block-builder",5773 "sp-externalities",5733 "sp-externalities",5774 "sp-inherents",5734 "sp-inherents",5775 "sp-io",5735 "sp-io",5736 "sp-keystore",5776 "sp-runtime",5737 "sp-runtime",5777 "sp-session",5738 "sp-session",5778 "sp-state-machine",5739 "sp-state-machine",5783 "sp-version",5744 "sp-version",5784 "substrate-prometheus-endpoint",5745 "substrate-prometheus-endpoint",5785 "tempfile",5746 "tempfile",5747 "thiserror",5786 "tracing",5748 "tracing",5749 "tracing-futures",5787 "wasm-timer",5750 "wasm-timer",5788]5751]578957525790[[package]]5753[[package]]5791name = "sc-state-db"5754name = "sc-state-db"5792version = "0.8.0"5755version = "0.8.1"5793source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"5756source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5794dependencies = [5757dependencies = [5795 "log",5758 "log",5796 "parity-scale-codec",5759 "parity-scale-codec",5797 "parity-util-mem",5760 "parity-util-mem",5798 "parity-util-mem-derive",5761 "parity-util-mem-derive",5799 "parking_lot 0.10.2",5762 "parking_lot 0.11.1",5800 "sc-client-api",5763 "sc-client-api",5801 "sp-core",5764 "sp-core",5765 "thiserror",5802]5766]580357675804[[package]]5768[[package]]5805name = "sc-telemetry"5769name = "sc-telemetry"5806version = "2.0.0"5770version = "2.0.1"5807source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"5771source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5808dependencies = [5772dependencies = [5809 "futures 0.3.8",5773 "chrono",5810 "futures-timer 3.0.2",5774 "futures 0.3.12",5811 "libp2p",5775 "libp2p",5812 "log",5776 "log",5813 "parking_lot 0.10.2",5777 "parking_lot 0.11.1",5814 "pin-project 0.4.27",5778 "pin-project 0.4.27",5815 "rand 0.7.3",5779 "rand 0.7.3",5816 "serde",5780 "serde",5817 "slog",5818 "slog-json",5781 "serde_json",5819 "slog-scope",5782 "sp-utils",5820 "take_mut",5783 "take_mut",5784 "tracing",5785 "tracing-subscriber",5821 "void",5786 "void",5822 "wasm-timer",5787 "wasm-timer",5823]5788]582457895825[[package]]5790[[package]]5826name = "sc-tracing"5791name = "sc-tracing"5827version = "2.0.0"5792version = "2.0.1"5828source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"5793source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5829dependencies = [5794dependencies = [5795 "ansi_term 0.12.1",5796 "atty",5830 "erased-serde",5797 "erased-serde",5798 "lazy_static",5831 "log",5799 "log",5800 "once_cell",5832 "parking_lot 0.10.2",5801 "parking_lot 0.11.1",5802 "regex",5833 "rustc-hash",5803 "rustc-hash",5834 "sc-telemetry",5804 "sc-telemetry",5805 "sc-tracing-proc-macro",5835 "serde",5806 "serde",5836 "serde_json",5807 "serde_json",5837 "slog",5838 "sp-tracing",5808 "sp-tracing",5809 "thiserror",5839 "tracing",5810 "tracing",5840 "tracing-core",5811 "tracing-core",5812 "tracing-log",5841 "tracing-subscriber",5813 "tracing-subscriber",5814 "wasm-bindgen",5815 "web-sys",5842]5816]58175818[[package]]5819name = "sc-tracing-proc-macro"5820version = "2.0.0"5821source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5822dependencies = [5823 "proc-macro-crate",5824 "proc-macro2",5825 "quote",5826 "syn",5827]584358285844[[package]]5829[[package]]5845name = "sc-transaction-graph"5830name = "sc-transaction-graph"5846version = "2.0.0"5831version = "2.0.1"5847source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"5832source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5848dependencies = [5833dependencies = [5849 "derive_more",5834 "derive_more",5850 "futures 0.3.8",5835 "futures 0.3.12",5851 "linked-hash-map",5836 "linked-hash-map",5852 "log",5837 "log",5853 "parity-util-mem",5838 "parity-util-mem",5854 "parking_lot 0.10.2",5839 "parking_lot 0.11.1",5855 "retain_mut",5840 "retain_mut",5856 "serde",5841 "serde",5857 "sp-blockchain",5842 "sp-blockchain",5858 "sp-core",5843 "sp-core",5859 "sp-runtime",5844 "sp-runtime",5860 "sp-transaction-pool",5845 "sp-transaction-pool",5861 "sp-utils",5846 "sp-utils",5847 "thiserror",5862 "wasm-timer",5848 "wasm-timer",5863]5849]586458505865[[package]]5851[[package]]5866name = "sc-transaction-pool"5852name = "sc-transaction-pool"5867version = "2.0.0"5853version = "2.0.1"5868source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"5854source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"5869dependencies = [5855dependencies = [5870 "derive_more",5871 "futures 0.3.8",5856 "futures 0.3.12",5872 "futures-diagnose",5857 "futures-diagnose",5873 "intervalier",5858 "intervalier",5874 "log",5859 "log",5875 "parity-scale-codec",5860 "parity-scale-codec",5876 "parity-util-mem",5861 "parity-util-mem",5877 "parking_lot 0.10.2",5862 "parking_lot 0.11.1",5878 "sc-client-api",5863 "sc-client-api",5879 "sc-transaction-graph",5864 "sc-transaction-graph",5880 "sp-api",5865 "sp-api",5885 "sp-transaction-pool",5870 "sp-transaction-pool",5886 "sp-utils",5871 "sp-utils",5887 "substrate-prometheus-endpoint",5872 "substrate-prometheus-endpoint",5873 "thiserror",5888 "wasm-timer",5874 "wasm-timer",5889]5875]589058765906dependencies = [5892dependencies = [5907 "arrayref",5893 "arrayref",5908 "arrayvec 0.5.2",5894 "arrayvec 0.5.2",5909 "curve25519-dalek 2.1.0",5895 "curve25519-dalek 2.1.2",5910 "getrandom 0.1.15",5896 "getrandom 0.1.16",5911 "merlin",5897 "merlin",5912 "rand 0.7.3",5898 "rand 0.7.3",5913 "rand_core 0.5.1",5899 "rand_core 0.5.1",5900 "serde",5914 "sha2 0.8.2",5901 "sha2 0.8.2",5915 "subtle 2.4.0",5902 "subtle 2.4.0",5916 "zeroize",5903 "zeroize",5922source = "registry+https://github.com/rust-lang/crates.io-index"5909source = "registry+https://github.com/rust-lang/crates.io-index"5923checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2"5910checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2"59245925[[package]]5926name = "scopeguard"5927version = "0.3.3"5928source = "registry+https://github.com/rust-lang/crates.io-index"5929checksum = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27"593059115931[[package]]5912[[package]]5932name = "scopeguard"5913name = "scopeguard"594559265946[[package]]5927[[package]]5947name = "scroll_derive"5928name = "scroll_derive"5948version = "0.10.4"5929version = "0.10.5"5949source = "registry+https://github.com/rust-lang/crates.io-index"5930source = "registry+https://github.com/rust-lang/crates.io-index"5950checksum = "b12bd20b94c7cdfda8c7ba9b92ad0d9a56e3fa018c25fca83b51aa664c9b4c0d"5931checksum = "aaaae8f38bb311444cfb7f1979af0bc9240d95795f75f9ceddf6a59b79ceffa0"5951dependencies = [5932dependencies = [5952 "proc-macro2",5933 "proc-macro2",5953 "quote",5934 "quote",596659475967[[package]]5948[[package]]5968name = "secrecy"5949name = "secrecy"5969version = "0.6.0"5950version = "0.7.0"5970source = "registry+https://github.com/rust-lang/crates.io-index"5951source = "registry+https://github.com/rust-lang/crates.io-index"5971checksum = "9182278ed645df3477a9c27bfee0621c621aa16f6972635f7f795dae3d81070f"5952checksum = "0673d6a6449f5e7d12a1caf424fd9363e2af3a4953023ed455e3c4beef4597c0"5972dependencies = [5953dependencies = [5973 "zeroize",5954 "zeroize",5974]5955]601359946014[[package]]5995[[package]]6015name = "serde"5996name = "serde"6016version = "1.0.118"5997version = "1.0.123"6017source = "registry+https://github.com/rust-lang/crates.io-index"5998source = "registry+https://github.com/rust-lang/crates.io-index"6018checksum = "06c64263859d87aa2eb554587e2d23183398d617427327cf2b3d0ed8c69e4800"5999checksum = "92d5161132722baa40d802cc70b15262b98258453e85e5d1d365c757c73869ae"6019dependencies = [6000dependencies = [6020 "serde_derive",6001 "serde_derive",6021]6002]602260036023[[package]]6004[[package]]6024name = "serde_derive"6005name = "serde_derive"6025version = "1.0.118"6006version = "1.0.123"6026source = "registry+https://github.com/rust-lang/crates.io-index"6007source = "registry+https://github.com/rust-lang/crates.io-index"6027checksum = "c84d3526699cd55261af4b941e4e725444df67aa4f9e6a3564f18030d12672df"6008checksum = "9391c295d64fc0abb2c556bad848f33cb8296276b1ad2677d1ae1ace4f258f31"6028dependencies = [6009dependencies = [6029 "proc-macro2",6010 "proc-macro2",6030 "quote",6011 "quote",603360146034[[package]]6015[[package]]6035name = "serde_json"6016name = "serde_json"6036version = "1.0.60"6017version = "1.0.61"6037source = "registry+https://github.com/rust-lang/crates.io-index"6018source = "registry+https://github.com/rust-lang/crates.io-index"6038checksum = "1500e84d27fe482ed1dc791a56eddc2f230046a040fa908c08bda1d9fb615779"6019checksum = "4fceb2595057b6891a4ee808f70054bd2d12f0e97f1cbb78689b59f676df325a"6039dependencies = [6020dependencies = [6040 "itoa",6021 "itoa",6041 "ryu",6022 "ryu",610660876107[[package]]6088[[package]]6108name = "sharded-slab"6089name = "sharded-slab"6109version = "0.1.0"6090version = "0.1.1"6110source = "registry+https://github.com/rust-lang/crates.io-index"6091source = "registry+https://github.com/rust-lang/crates.io-index"6111checksum = "7b4921be914e16899a80adefb821f8ddb7974e3f1250223575a44ed994882127"6092checksum = "79c719719ee05df97490f80a45acfc99e5a30ce98a1e4fb67aee422745ae14e3"6112dependencies = [6093dependencies = [6113 "lazy_static",6094 "lazy_static",6114 "loom",6115]6095]611660966117[[package]]6097[[package]]612261026123[[package]]6103[[package]]6124name = "signal-hook"6104name = "signal-hook"6125version = "0.1.16"6105version = "0.1.17"6126source = "registry+https://github.com/rust-lang/crates.io-index"6106source = "registry+https://github.com/rust-lang/crates.io-index"6127checksum = "604508c1418b99dfe1925ca9224829bb2a8a9a04dda655cc01fcad46f4ab05ed"6107checksum = "7e31d442c16f047a671b5a71e2161d6e68814012b7f5379d269ebd915fac2729"6128dependencies = [6108dependencies = [6129 "libc",6109 "libc",6130 "signal-hook-registry",6110 "signal-hook-registry",6131]6111]613261126133[[package]]6113[[package]]6134name = "signal-hook-registry"6114name = "signal-hook-registry"6135version = "1.2.2"6115version = "1.3.0"6136source = "registry+https://github.com/rust-lang/crates.io-index"6116source = "registry+https://github.com/rust-lang/crates.io-index"6137checksum = "ce32ea0c6c56d5eacaeb814fbed9960547021d3edd010ded1425f180536b20ab"6117checksum = "16f1d0fef1604ba8f7a073c7e701f213e056707210e9020af4528e0101ce11a6"6138dependencies = [6118dependencies = [6139 "libc",6119 "libc",6140]6120]614161216142[[package]]6122[[package]]6143name = "signature"6123name = "signature"6144version = "1.2.2"6124version = "1.3.0"6145source = "registry+https://github.com/rust-lang/crates.io-index"6125source = "registry+https://github.com/rust-lang/crates.io-index"6146checksum = "29f060a7d147e33490ec10da418795238fd7545bba241504d6b31a409f2e6210"6126checksum = "0f0242b8e50dd9accdd56170e94ca1ebd223b098eb9c83539a6e367d0f36ae68"61276128[[package]]6129name = "simba"6130version = "0.1.5"6131source = "registry+https://github.com/rust-lang/crates.io-index"6132checksum = "fb931b1367faadea6b1ab1c306a860ec17aaa5fa39f367d0c744e69d971a1fb2"6133dependencies = [6134 "approx",6135 "num-complex",6136 "num-traits",6137 "paste",6138]614761396148[[package]]6140[[package]]6149name = "slab"6141name = "slab"6150version = "0.4.2"6142version = "0.4.2"6151source = "registry+https://github.com/rust-lang/crates.io-index"6143source = "registry+https://github.com/rust-lang/crates.io-index"6152checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"6144checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"61536154[[package]]6155name = "slog"6156version = "2.7.0"6157source = "registry+https://github.com/rust-lang/crates.io-index"6158checksum = "8347046d4ebd943127157b94d63abb990fcf729dc4e9978927fdf4ac3c998d06"6159dependencies = [6160 "erased-serde",6161]61626163[[package]]6164name = "slog-json"6165version = "2.3.0"6166source = "registry+https://github.com/rust-lang/crates.io-index"6167checksum = "ddc0d2aff1f8f325ef660d9a0eb6e6dcd20b30b3f581a5897f58bf42d061c37a"6168dependencies = [6169 "chrono",6170 "erased-serde",6171 "serde",6172 "serde_json",6173 "slog",6174]61756176[[package]]6177name = "slog-scope"6178version = "4.3.0"6179source = "registry+https://github.com/rust-lang/crates.io-index"6180checksum = "7c44c89dd8b0ae4537d1ae318353eaf7840b4869c536e31c41e963d1ea523ee6"6181dependencies = [6182 "arc-swap",6183 "lazy_static",6184 "slog",6185]61866187[[package]]6188name = "slog_derive"6189version = "0.2.0"6190source = "registry+https://github.com/rust-lang/crates.io-index"6191checksum = "a945ec7f7ce853e89ffa36be1e27dce9a43e82ff9093bf3461c30d5da74ed11b"6192dependencies = [6193 "proc-macro2",6194 "quote",6195 "syn",6196]619761456198[[package]]6146[[package]]6199name = "smallvec"6147name = "smallvec"6200version = "0.6.13"6148version = "0.6.14"6201source = "registry+https://github.com/rust-lang/crates.io-index"6149source = "registry+https://github.com/rust-lang/crates.io-index"6202checksum = "f7b0758c52e15a8b5e3691eae6cc559f08eee9406e548a4477ba4e67770a82b6"6150checksum = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0"6203dependencies = [6151dependencies = [6204 "maybe-uninit",6152 "maybe-uninit",6205]6153]620661546207[[package]]6155[[package]]6208name = "smallvec"6156name = "smallvec"6209version = "1.5.1"6157version = "1.6.1"6210source = "registry+https://github.com/rust-lang/crates.io-index"6158source = "registry+https://github.com/rust-lang/crates.io-index"6211checksum = "ae524f056d7d770e174287294f562e95044c68e88dec909a00d2094805db9d75"6159checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e"621261606213[[package]]6161[[package]]6214name = "snow"6162name = "snow"6225 "rustc_version",6173 "rustc_version",6226 "sha2 0.9.2",6174 "sha2 0.9.2",6227 "subtle 2.4.0",6175 "subtle 2.4.0",6228 "x25519-dalek 1.1.0",6176 "x25519-dalek",6229]6177]623061786231[[package]]6179[[package]]6232name = "socket2"6180name = "socket2"6233version = "0.3.18"6181version = "0.3.19"6234source = "registry+https://github.com/rust-lang/crates.io-index"6182source = "registry+https://github.com/rust-lang/crates.io-index"6235checksum = "97e0e9fd577458a4f61fb91fcb559ea2afecc54c934119421f9f5d3d5b1a1057"6183checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e"6236dependencies = [6184dependencies = [6237 "cfg-if 1.0.0",6185 "cfg-if 1.0.0",6238 "libc",6186 "libc",6248 "base64 0.12.3",6196 "base64 0.12.3",6249 "bytes 0.5.6",6197 "bytes 0.5.6",6250 "flate2",6198 "flate2",6251 "futures 0.3.8",6199 "futures 0.3.12",6252 "httparse",6200 "httparse",6253 "log",6201 "log",6254 "rand 0.7.3",6202 "rand 0.7.3",625762056258[[package]]6206[[package]]6259name = "sp-allocator"6207name = "sp-allocator"6260version = "2.0.0"6208version = "2.0.1"6261source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6209source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6262dependencies = [6210dependencies = [6263 "derive_more",6264 "log",6211 "log",6265 "sp-core",6212 "sp-core",6266 "sp-std",6213 "sp-std",6267 "sp-wasm-interface",6214 "sp-wasm-interface",6215 "thiserror",6268]6216]626962176270[[package]]6218[[package]]6271name = "sp-api"6219name = "sp-api"6272version = "2.0.0"6220version = "2.0.1"6273source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6221source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6274dependencies = [6222dependencies = [6275 "hash-db",6223 "hash-db",6276 "parity-scale-codec",6224 "parity-scale-codec",6280 "sp-state-machine",6228 "sp-state-machine",6281 "sp-std",6229 "sp-std",6282 "sp-version",6230 "sp-version",6231 "thiserror",6283]6232]628462336285[[package]]6234[[package]]6286name = "sp-api-proc-macro"6235name = "sp-api-proc-macro"6287version = "2.0.0"6236version = "2.0.1"6288source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6237source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6289dependencies = [6238dependencies = [6290 "blake2-rfc",6239 "blake2-rfc",6291 "proc-macro-crate",6240 "proc-macro-crate",629662456297[[package]]6246[[package]]6298name = "sp-application-crypto"6247name = "sp-application-crypto"6299version = "2.0.0"6248version = "2.0.1"6300source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6249source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6301dependencies = [6250dependencies = [6302 "parity-scale-codec",6251 "parity-scale-codec",6303 "serde",6252 "serde",630862576309[[package]]6258[[package]]6310name = "sp-arithmetic"6259name = "sp-arithmetic"6311version = "2.0.0"6260version = "2.0.1"6312source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6261source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6313dependencies = [6262dependencies = [6314 "integer-sqrt",6263 "integer-sqrt",6315 "num-traits",6264 "num-traits",632162706322[[package]]6271[[package]]6323name = "sp-authorship"6272name = "sp-authorship"6324version = "2.0.0"6273version = "2.0.1"6325source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6274source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6326dependencies = [6275dependencies = [6327 "parity-scale-codec",6276 "parity-scale-codec",6328 "sp-inherents",6277 "sp-inherents",633262816333[[package]]6282[[package]]6334name = "sp-block-builder"6283name = "sp-block-builder"6335version = "2.0.0"6284version = "2.0.1"6336source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6285source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6337dependencies = [6286dependencies = [6338 "parity-scale-codec",6287 "parity-scale-codec",6339 "sp-api",6288 "sp-api",634462936345[[package]]6294[[package]]6346name = "sp-blockchain"6295name = "sp-blockchain"6347version = "2.0.0"6296version = "2.0.1"6348source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6297source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6349dependencies = [6298dependencies = [6350 "derive_more",6299 "futures 0.3.12",6351 "log",6300 "log",6352 "lru 0.4.3",6301 "lru",6353 "parity-scale-codec",6302 "parity-scale-codec",6354 "parking_lot 0.10.2",6303 "parking_lot 0.11.1",6355 "sp-block-builder",6304 "sp-api",6356 "sp-consensus",6305 "sp-consensus",6357 "sp-database",6306 "sp-database",6358 "sp-runtime",6307 "sp-runtime",6359 "sp-state-machine",6308 "sp-state-machine",6309 "thiserror",6360]6310]636163116362[[package]]6312[[package]]6363name = "sp-chain-spec"6313name = "sp-chain-spec"6364version = "2.0.0"6314version = "2.0.1"6365source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6315source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6366dependencies = [6316dependencies = [6367 "serde",6317 "serde",6368 "serde_json",6318 "serde_json",6369]6319]637063206371[[package]]6321[[package]]6372name = "sp-consensus"6322name = "sp-consensus"6373version = "0.8.0"6323version = "0.8.1"6374source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6324source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6375dependencies = [6325dependencies = [6376 "derive_more",6377 "futures 0.3.8",6326 "futures 0.3.12",6378 "futures-timer 3.0.2",6327 "futures-timer 3.0.2",6379 "libp2p",6328 "libp2p",6380 "log",6329 "log",6381 "parity-scale-codec",6330 "parity-scale-codec",6382 "parking_lot 0.10.2",6331 "parking_lot 0.11.1",6383 "serde",6332 "serde",6384 "sp-api",6333 "sp-api",6385 "sp-core",6334 "sp-core",6391 "sp-utils",6340 "sp-utils",6392 "sp-version",6341 "sp-version",6393 "substrate-prometheus-endpoint",6342 "substrate-prometheus-endpoint",6343 "thiserror",6394 "wasm-timer",6344 "wasm-timer",6395]6345]639663466397[[package]]6347[[package]]6398name = "sp-consensus-aura"6348name = "sp-consensus-aura"6399version = "0.8.0"6349version = "0.8.1"6400source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6350source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6401dependencies = [6351dependencies = [6402 "parity-scale-codec",6352 "parity-scale-codec",6403 "sp-api",6353 "sp-api",6408 "sp-timestamp",6358 "sp-timestamp",6409]6359]63606361[[package]]6362name = "sp-consensus-babe"6363version = "0.8.1"6364source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6365dependencies = [6366 "merlin",6367 "parity-scale-codec",6368 "sp-api",6369 "sp-application-crypto",6370 "sp-consensus",6371 "sp-consensus-slots",6372 "sp-consensus-vrf",6373 "sp-core",6374 "sp-inherents",6375 "sp-keystore",6376 "sp-runtime",6377 "sp-std",6378 "sp-timestamp",6379]641063806411[[package]]6381[[package]]6412name = "sp-consensus-slots"6382name = "sp-consensus-slots"6413version = "0.8.0"6383version = "0.8.1"6414source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6384source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6415dependencies = [6385dependencies = [6416 "parity-scale-codec",6386 "parity-scale-codec",6417 "sp-runtime",6387 "sp-runtime",6418]6388]63896390[[package]]6391name = "sp-consensus-vrf"6392version = "0.8.1"6393source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6394dependencies = [6395 "parity-scale-codec",6396 "schnorrkel",6397 "sp-core",6398 "sp-runtime",6399 "sp-std",6400]641964016420[[package]]6402[[package]]6421name = "sp-core"6403name = "sp-core"6422version = "2.0.0"6404version = "2.0.1"6423source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6405source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6424dependencies = [6406dependencies = [6425 "base58",6407 "base58",6426 "blake2-rfc",6408 "blake2-rfc",6427 "byteorder 1.3.4",6409 "byteorder",6428 "derive_more",6429 "dyn-clonable",6410 "dyn-clonable",6430 "ed25519-dalek",6411 "ed25519-dalek",6431 "futures 0.3.8",6412 "futures 0.3.12",6432 "hash-db",6413 "hash-db",6433 "hash256-std-hasher",6414 "hash256-std-hasher",6434 "hex",6415 "hex",6440 "num-traits",6421 "num-traits",6441 "parity-scale-codec",6422 "parity-scale-codec",6442 "parity-util-mem",6423 "parity-util-mem",6443 "parking_lot 0.10.2",6424 "parking_lot 0.11.1",6444 "primitive-types",6425 "primitive-types",6445 "rand 0.7.3",6426 "rand 0.7.3",6446 "regex",6427 "regex",6447 "schnorrkel",6428 "schnorrkel",6448 "secrecy",6429 "secrecy",6449 "serde",6430 "serde",6450 "sha2 0.8.2",6431 "sha2 0.9.2",6451 "sp-debug-derive",6432 "sp-debug-derive",6452 "sp-externalities",6433 "sp-externalities",6453 "sp-runtime-interface",6434 "sp-runtime-interface",6454 "sp-std",6435 "sp-std",6455 "sp-storage",6436 "sp-storage",6456 "substrate-bip39",6437 "substrate-bip39",6438 "thiserror",6457 "tiny-bip39",6439 "tiny-bip39",6458 "tiny-keccak",6440 "tiny-keccak",6459 "twox-hash",6441 "twox-hash",646364456464[[package]]6446[[package]]6465name = "sp-database"6447name = "sp-database"6466version = "2.0.0"6448version = "2.0.1"6467source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6449source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6468dependencies = [6450dependencies = [6469 "kvdb",6451 "kvdb",6470 "parking_lot 0.10.2",6452 "parking_lot 0.11.1",6471]6453]647264546473[[package]]6455[[package]]6474name = "sp-debug-derive"6456name = "sp-debug-derive"6475version = "2.0.0"6457version = "2.0.1"6476source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6458source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6477dependencies = [6459dependencies = [6478 "proc-macro2",6460 "proc-macro2",6479 "quote",6461 "quote",648264646483[[package]]6465[[package]]6484name = "sp-externalities"6466name = "sp-externalities"6485version = "0.8.0"6467version = "0.8.1"6486source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6468source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6487dependencies = [6469dependencies = [6488 "environmental",6470 "environmental",6489 "parity-scale-codec",6471 "parity-scale-codec",649364756494[[package]]6476[[package]]6495name = "sp-finality-grandpa"6477name = "sp-finality-grandpa"6496version = "2.0.0"6478version = "2.0.1"6497source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6479source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6498dependencies = [6480dependencies = [6499 "finality-grandpa",6481 "finality-grandpa",6500 "log",6482 "log",6503 "sp-api",6485 "sp-api",6504 "sp-application-crypto",6486 "sp-application-crypto",6505 "sp-core",6487 "sp-core",6488 "sp-keystore",6506 "sp-runtime",6489 "sp-runtime",6507 "sp-std",6490 "sp-std",6508]6491]65096510[[package]]6511name = "sp-finality-tracker"6512version = "2.0.0"6513source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6514dependencies = [6515 "parity-scale-codec",6516 "sp-inherents",6517 "sp-std",6518]651964926520[[package]]6493[[package]]6521name = "sp-inherents"6494name = "sp-inherents"6522version = "2.0.0"6495version = "2.0.1"6523source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6496source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6524dependencies = [6497dependencies = [6525 "derive_more",6526 "parity-scale-codec",6498 "parity-scale-codec",6527 "parking_lot 0.10.2",6499 "parking_lot 0.11.1",6528 "sp-core",6500 "sp-core",6529 "sp-std",6501 "sp-std",6502 "thiserror",6530]6503]653165046532[[package]]6505[[package]]6533name = "sp-io"6506name = "sp-io"6534version = "2.0.0"6507version = "2.0.1"6535source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6508source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6536dependencies = [6509dependencies = [6537 "futures 0.3.8",6510 "futures 0.3.12",6538 "hash-db",6511 "hash-db",6539 "libsecp256k1",6512 "libsecp256k1",6540 "log",6513 "log",6541 "parity-scale-codec",6514 "parity-scale-codec",6542 "parking_lot 0.10.2",6515 "parking_lot 0.11.1",6543 "sp-core",6516 "sp-core",6544 "sp-externalities",6517 "sp-externalities",6518 "sp-keystore",6545 "sp-runtime-interface",6519 "sp-runtime-interface",6546 "sp-state-machine",6520 "sp-state-machine",6547 "sp-std",6521 "sp-std",655465286555[[package]]6529[[package]]6556name = "sp-keyring"6530name = "sp-keyring"6557version = "2.0.0"6531version = "2.0.1"6558source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6532source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6559dependencies = [6533dependencies = [6560 "lazy_static",6534 "lazy_static",6561 "sp-core",6535 "sp-core",6562 "sp-runtime",6536 "sp-runtime",6563 "strum",6537 "strum",6564]6538]65396540[[package]]6541name = "sp-keystore"6542version = "0.8.0"6543source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6544dependencies = [6545 "async-trait",6546 "derive_more",6547 "futures 0.3.12",6548 "merlin",6549 "parity-scale-codec",6550 "parking_lot 0.11.1",6551 "schnorrkel",6552 "serde",6553 "sp-core",6554 "sp-externalities",6555]656565566566[[package]]6557[[package]]6567name = "sp-offchain"6558name = "sp-offchain"6568version = "2.0.0"6559version = "2.0.1"6569source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6560source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6570dependencies = [6561dependencies = [6571 "sp-api",6562 "sp-api",6572 "sp-core",6563 "sp-core",657565666576[[package]]6567[[package]]6577name = "sp-panic-handler"6568name = "sp-panic-handler"6578version = "2.0.0"6569version = "2.0.1"6579source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6570source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6580dependencies = [6571dependencies = [6581 "backtrace",6572 "backtrace",6582 "log",6583]6573]658465746585[[package]]6575[[package]]6586name = "sp-rpc"6576name = "sp-rpc"6587version = "2.0.0"6577version = "2.0.1"6588source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6578source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6589dependencies = [6579dependencies = [6590 "serde",6580 "serde",6591 "sp-core",6581 "sp-core",6592]6582]659365836594[[package]]6584[[package]]6595name = "sp-runtime"6585name = "sp-runtime"6596version = "2.0.0"6586version = "2.0.1"6597source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6587source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6598dependencies = [6588dependencies = [6599 "either",6589 "either",6600 "hash256-std-hasher",6590 "hash256-std-hasher",6601 "impl-trait-for-tuples",6591 "impl-trait-for-tuples 0.2.0",6602 "log",6592 "log",6603 "parity-scale-codec",6593 "parity-scale-codec",6604 "parity-util-mem",6594 "parity-util-mem",6608 "sp-application-crypto",6598 "sp-application-crypto",6609 "sp-arithmetic",6599 "sp-arithmetic",6610 "sp-core",6600 "sp-core",6611 "sp-inherents",6612 "sp-io",6601 "sp-io",6613 "sp-std",6602 "sp-std",6614]6603]661566046616[[package]]6605[[package]]6617name = "sp-runtime-interface"6606name = "sp-runtime-interface"6618version = "2.0.0"6607version = "2.0.1"6619source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6608source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6620dependencies = [6609dependencies = [6610 "impl-trait-for-tuples 0.2.0",6621 "parity-scale-codec",6611 "parity-scale-codec",6622 "primitive-types",6612 "primitive-types",6623 "sp-externalities",6613 "sp-externalities",663166216632[[package]]6622[[package]]6633name = "sp-runtime-interface-proc-macro"6623name = "sp-runtime-interface-proc-macro"6634version = "2.0.0"6624version = "2.0.1"6635source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6625source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6636dependencies = [6626dependencies = [6637 "Inflector",6627 "Inflector",6638 "proc-macro-crate",6628 "proc-macro-crate",664366336644[[package]]6634[[package]]6645name = "sp-sandbox"6635name = "sp-sandbox"6646version = "0.8.0"6636version = "0.8.1"6647source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6637source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6648dependencies = [6638dependencies = [6649 "parity-scale-codec",6639 "parity-scale-codec",6650 "sp-core",6640 "sp-core",665666466657[[package]]6647[[package]]6658name = "sp-serializer"6648name = "sp-serializer"6659version = "2.0.0"6649version = "2.0.1"6660source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6650source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6661dependencies = [6651dependencies = [6662 "serde",6652 "serde",6663 "serde_json",6653 "serde_json",6664]6654]666566556666[[package]]6656[[package]]6667name = "sp-session"6657name = "sp-session"6668version = "2.0.0"6658version = "2.0.1"6669source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6659source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6670dependencies = [6660dependencies = [6671 "parity-scale-codec",6661 "parity-scale-codec",6672 "sp-api",6662 "sp-api",667866686679[[package]]6669[[package]]6680name = "sp-staking"6670name = "sp-staking"6681version = "2.0.0"6671version = "2.0.1"6682source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6672source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6683dependencies = [6673dependencies = [6684 "parity-scale-codec",6674 "parity-scale-codec",6685 "sp-runtime",6675 "sp-runtime",668866786689[[package]]6679[[package]]6690name = "sp-state-machine"6680name = "sp-state-machine"6691version = "0.8.0"6681version = "0.8.1"6692source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6682source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6693dependencies = [6683dependencies = [6694 "hash-db",6684 "hash-db",6695 "log",6685 "log",6696 "num-traits",6686 "num-traits",6697 "parity-scale-codec",6687 "parity-scale-codec",6698 "parking_lot 0.10.2",6688 "parking_lot 0.11.1",6699 "rand 0.7.3",6689 "rand 0.7.3",6700 "smallvec 1.5.1",6690 "smallvec 1.6.1",6701 "sp-core",6691 "sp-core",6702 "sp-externalities",6692 "sp-externalities",6703 "sp-panic-handler",6693 "sp-panic-handler",6704 "sp-std",6694 "sp-std",6705 "sp-trie",6695 "sp-trie",6696 "thiserror",6706 "trie-db",6697 "trie-db",6707 "trie-root",6698 "trie-root",6708]6699]670967006710[[package]]6701[[package]]6711name = "sp-std"6702name = "sp-std"6712version = "2.0.0"6703version = "2.0.1"6713source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6704source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"671467056715[[package]]6706[[package]]6716name = "sp-storage"6707name = "sp-storage"6717version = "2.0.0"6708version = "2.0.1"6718source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6709source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6719dependencies = [6710dependencies = [6720 "impl-serde",6711 "impl-serde",6721 "parity-scale-codec",6712 "parity-scale-codec",6725 "sp-std",6716 "sp-std",6726]6717]67186719[[package]]6720name = "sp-tasks"6721version = "2.0.0"6722source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6723dependencies = [6724 "log",6725 "sp-core",6726 "sp-externalities",6727 "sp-io",6728 "sp-runtime-interface",6729 "sp-std",6730]672767316728[[package]]6732[[package]]6729name = "sp-timestamp"6733name = "sp-timestamp"6730version = "2.0.0"6734version = "2.0.1"6731source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6735source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6732dependencies = [6736dependencies = [6733 "impl-trait-for-tuples",6737 "impl-trait-for-tuples 0.2.0",6734 "parity-scale-codec",6738 "parity-scale-codec",6735 "sp-api",6739 "sp-api",6736 "sp-inherents",6740 "sp-inherents",674167456742[[package]]6746[[package]]6743name = "sp-tracing"6747name = "sp-tracing"6744version = "2.0.0"6748version = "2.0.1"6745source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6749source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6746dependencies = [6750dependencies = [6747 "log",6751 "log",6748 "parity-scale-codec",6752 "parity-scale-codec",675467586755[[package]]6759[[package]]6756name = "sp-transaction-pool"6760name = "sp-transaction-pool"6757version = "2.0.0"6761version = "2.0.1"6758source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6762source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6759dependencies = [6763dependencies = [6760 "derive_more",6764 "derive_more",6761 "futures 0.3.8",6765 "futures 0.3.12",6762 "log",6766 "log",6763 "parity-scale-codec",6767 "parity-scale-codec",6764 "serde",6768 "serde",6765 "sp-api",6769 "sp-api",6766 "sp-blockchain",6770 "sp-blockchain",6767 "sp-runtime",6771 "sp-runtime",6772 "thiserror",6768]6773]676967746770[[package]]6775[[package]]6771name = "sp-trie"6776name = "sp-trie"6772version = "2.0.0"6777version = "2.0.1"6773source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6778source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6774dependencies = [6779dependencies = [6775 "hash-db",6780 "hash-db",6776 "memory-db",6781 "memory-db",678367886784[[package]]6789[[package]]6785name = "sp-utils"6790name = "sp-utils"6786version = "2.0.0"6791version = "2.0.1"6787source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6792source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6788dependencies = [6793dependencies = [6789 "futures 0.3.8",6794 "futures 0.3.12",6790 "futures-core",6795 "futures-core",6791 "futures-timer 3.0.2",6796 "futures-timer 3.0.2",6792 "lazy_static",6797 "lazy_static",679568006796[[package]]6801[[package]]6797name = "sp-version"6802name = "sp-version"6798version = "2.0.0"6803version = "2.0.1"6799source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6804source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6800dependencies = [6805dependencies = [6801 "impl-serde",6806 "impl-serde",6802 "parity-scale-codec",6807 "parity-scale-codec",680768126808[[package]]6813[[package]]6809name = "sp-wasm-interface"6814name = "sp-wasm-interface"6810version = "2.0.0"6815version = "2.0.1"6811source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6816source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6812dependencies = [6817dependencies = [6813 "impl-trait-for-tuples",6818 "impl-trait-for-tuples 0.2.0",6814 "parity-scale-codec",6819 "parity-scale-codec",6815 "sp-std",6820 "sp-std",6816 "wasmi",6821 "wasmi",683668416837[[package]]6842[[package]]6838name = "statrs"6843name = "statrs"6839version = "0.10.0"6844version = "0.12.0"6840source = "registry+https://github.com/rust-lang/crates.io-index"6845source = "registry+https://github.com/rust-lang/crates.io-index"6841checksum = "10102ac8d55e35db2b3fafc26f81ba8647da2e15879ab686a67e6d19af2685e8"6846checksum = "cce16f6de653e88beca7bd13780d08e09d4489dbca1f9210e041bc4852481382"6842dependencies = [6847dependencies = [6843 "rand 0.5.6",6848 "rand 0.7.3",6844]6849]684568506846[[package]]6851[[package]]6919source = "registry+https://github.com/rust-lang/crates.io-index"6924source = "registry+https://github.com/rust-lang/crates.io-index"6920checksum = "bed6646a0159b9935b5d045611560eeef842b78d7adc3ba36f5ca325a13a0236"6925checksum = "bed6646a0159b9935b5d045611560eeef842b78d7adc3ba36f5ca325a13a0236"6921dependencies = [6926dependencies = [6922 "hmac",6927 "hmac 0.7.1",6923 "pbkdf2",6928 "pbkdf2 0.3.0",6924 "schnorrkel",6929 "schnorrkel",6925 "sha2 0.8.2",6930 "sha2 0.8.2",6926 "zeroize",6931 "zeroize",6927]6932]692869336929[[package]]6934[[package]]6930name = "substrate-build-script-utils"6935name = "substrate-build-script-utils"6931version = "2.0.0"6936version = "2.0.1"6932source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6937source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6933dependencies = [6938dependencies = [6934 "platforms",6939 "platforms",6935]6940]693669416937[[package]]6942[[package]]6938name = "substrate-frame-rpc-system"6943name = "substrate-frame-rpc-system"6939version = "2.0.0"6944version = "2.0.1"6940source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6945source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6941dependencies = [6946dependencies = [6942 "frame-system-rpc-runtime-api",6947 "frame-system-rpc-runtime-api",6943 "futures 0.3.8",6948 "futures 0.3.12",6944 "jsonrpc-core",6949 "jsonrpc-core",6945 "jsonrpc-core-client",6950 "jsonrpc-core-client",6946 "jsonrpc-derive",6951 "jsonrpc-derive",695969646960[[package]]6965[[package]]6961name = "substrate-prometheus-endpoint"6966name = "substrate-prometheus-endpoint"6962version = "0.8.0"6967version = "0.8.1"6963source = "git+https://github.com/usetech-llc/substrate.git?branch=release_flexi#59646c902484d9c5e8933a80cbed551228b81274"6968source = "git+https://github.com/usetech-llc/substrate.git?branch=unique#0e070672cf7a7bec72fb3f26188915cfb43c440f"6964dependencies = [6969dependencies = [6965 "async-std",6970 "async-std",6966 "derive_more",6971 "derive_more",699169966992[[package]]6997[[package]]6993name = "syn"6998name = "syn"6994version = "1.0.54"6999version = "1.0.60"6995source = "registry+https://github.com/rust-lang/crates.io-index"7000source = "registry+https://github.com/rust-lang/crates.io-index"6996checksum = "9a2af957a63d6bd42255c359c93d9bfdb97076bd3b820897ce55ffbfbf107f44"7001checksum = "c700597eca8a5a762beb35753ef6b94df201c81cca676604f547495a0d7f0081"6997dependencies = [7002dependencies = [6998 "proc-macro2",7003 "proc-macro2",6999 "quote",7004 "quote",702670317027[[package]]7032[[package]]7028name = "tempfile"7033name = "tempfile"7029version = "3.1.0"7034version = "3.2.0"7030source = "registry+https://github.com/rust-lang/crates.io-index"7035source = "registry+https://github.com/rust-lang/crates.io-index"7031checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9"7036checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22"7032dependencies = [7037dependencies = [7033 "cfg-if 0.1.10",7038 "cfg-if 1.0.0",7034 "libc",7039 "libc",7035 "rand 0.7.3",7040 "rand 0.8.3",7036 "redox_syscall",7041 "redox_syscall 0.2.4",7037 "remove_dir_all",7042 "remove_dir_all",7038 "winapi 0.3.9",7043 "winapi 0.3.9",7039]7044]705870637059[[package]]7064[[package]]7060name = "thiserror"7065name = "thiserror"7061version = "1.0.22"7066version = "1.0.23"7062source = "registry+https://github.com/rust-lang/crates.io-index"7067source = "registry+https://github.com/rust-lang/crates.io-index"7063checksum = "0e9ae34b84616eedaaf1e9dd6026dbe00dcafa92aa0c8077cb69df1fcfe5e53e"7068checksum = "76cc616c6abf8c8928e2fdcc0dbfab37175edd8fb49a4641066ad1364fdab146"7064dependencies = [7069dependencies = [7065 "thiserror-impl",7070 "thiserror-impl",7066]7071]706770727068[[package]]7073[[package]]7069name = "thiserror-impl"7074name = "thiserror-impl"7070version = "1.0.22"7075version = "1.0.23"7071source = "registry+https://github.com/rust-lang/crates.io-index"7076source = "registry+https://github.com/rust-lang/crates.io-index"7072checksum = "9ba20f23e85b10754cd195504aebf6a27e2e6cbe28c17778a0c930724628dd56"7077checksum = "9be73a2caec27583d0046ef3796c3794f868a5bc813db689eed00c7631275cd1"7073dependencies = [7078dependencies = [7074 "proc-macro2",7079 "proc-macro2",7075 "quote",7080 "quote",707870837079[[package]]7084[[package]]7080name = "thread_local"7085name = "thread_local"7081version = "1.0.1"7086version = "1.1.2"7082source = "registry+https://github.com/rust-lang/crates.io-index"7087source = "registry+https://github.com/rust-lang/crates.io-index"7083checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14"7088checksum = "d8208a331e1cb318dd5bd76951d2b8fc48ca38a69f5f4e4af1b6a9f8c6236915"7084dependencies = [7089dependencies = [7085 "lazy_static",7090 "once_cell",7086]7091]708770927088[[package]]7093[[package]]710771127108[[package]]7113[[package]]7109name = "tiny-bip39"7114name = "tiny-bip39"7110version = "0.7.3"7115version = "0.8.0"7111source = "registry+https://github.com/rust-lang/crates.io-index"7116source = "registry+https://github.com/rust-lang/crates.io-index"7112checksum = "b0165e045cc2ae1660270ca65e1676dbaab60feb0f91b10f7d0665e9b47e31f2"7117checksum = "d9e44c4759bae7f1032e286a7ef990bd9ed23fe831b7eeba0beb97484c2e59b8"7113dependencies = [7118dependencies = [7114 "failure",7119 "anyhow",7115 "hmac",7120 "hmac 0.8.1",7116 "once_cell 1.5.2",7121 "once_cell",7117 "pbkdf2",7122 "pbkdf2 0.4.0",7118 "rand 0.7.3",7123 "rand 0.7.3",7119 "rustc-hash",7124 "rustc-hash",7120 "sha2 0.8.2",7125 "sha2 0.9.2",7126 "thiserror",7121 "unicode-normalization",7127 "unicode-normalization",7128 "zeroize",7122]7129]712371307124[[package]]7131[[package]]713271397133[[package]]7140[[package]]7134name = "tinyvec"7141name = "tinyvec"7135version = "1.1.0"7142version = "1.1.1"7136source = "registry+https://github.com/rust-lang/crates.io-index"7143source = "registry+https://github.com/rust-lang/crates.io-index"7137checksum = "ccf8dbc19eb42fba10e8feaaec282fb50e2c14b2726d6301dbfeed0f73306a6f"7144checksum = "317cca572a0e89c3ce0ca1f1bdc9369547fe318a683418e42ac8f59d14701023"7138dependencies = [7145dependencies = [7139 "tinyvec_macros",7146 "tinyvec_macros",7140]7147]7157 "num_cpus",7164 "num_cpus",7158 "tokio-codec",7165 "tokio-codec",7159 "tokio-current-thread",7166 "tokio-current-thread",7160 "tokio-executor 0.1.10",7167 "tokio-executor",7161 "tokio-fs",7168 "tokio-fs",7162 "tokio-io",7169 "tokio-io",7163 "tokio-reactor",7170 "tokio-reactor",7164 "tokio-sync 0.1.8",7171 "tokio-sync",7165 "tokio-tcp",7172 "tokio-tcp",7166 "tokio-threadpool",7173 "tokio-threadpool",7167 "tokio-timer",7174 "tokio-timer",7220checksum = "b1de0e32a83f131e002238d7ccde18211c0a5397f60cbfffcb112868c2e0e20e"7227checksum = "b1de0e32a83f131e002238d7ccde18211c0a5397f60cbfffcb112868c2e0e20e"7221dependencies = [7228dependencies = [7222 "futures 0.1.30",7229 "futures 0.1.30",7223 "tokio-executor 0.1.10",7230 "tokio-executor",7224]7231]722572327226[[package]]7233[[package]]7233 "futures 0.1.30",7240 "futures 0.1.30",7234]7241]72357236[[package]]7237name = "tokio-executor"7238version = "0.2.0-alpha.6"7239source = "registry+https://github.com/rust-lang/crates.io-index"7240checksum = "9ee9ceecf69145923834ea73f32ba40c790fd877b74a7817dd0b089f1eb9c7c8"7241dependencies = [7242 "futures-util-preview",7243 "lazy_static",7244 "tokio-sync 0.2.0-alpha.6",7245]724672427247[[package]]7243[[package]]7248name = "tokio-fs"7244name = "tokio-fs"7293 "num_cpus",7289 "num_cpus",7294 "parking_lot 0.9.0",7290 "parking_lot 0.9.0",7295 "slab",7291 "slab",7296 "tokio-executor 0.1.10",7292 "tokio-executor",7297 "tokio-io",7293 "tokio-io",7298 "tokio-sync 0.1.8",7294 "tokio-sync",7299]7295]730072967301[[package]]7297[[package]]7305checksum = "e12831b255bcfa39dc0436b01e19fea231a37db570686c06ee72c423479f889a"7301checksum = "e12831b255bcfa39dc0436b01e19fea231a37db570686c06ee72c423479f889a"7306dependencies = [7302dependencies = [7307 "futures-core",7303 "futures-core",7308 "rustls",7304 "rustls 0.18.1",7309 "tokio 0.2.24",7305 "tokio 0.2.24",7310 "webpki",7306 "webpki",7311]7307]7329 "futures 0.1.30",7325 "futures 0.1.30",7330]7326]73317332[[package]]7333name = "tokio-sync"7334version = "0.2.0-alpha.6"7335source = "registry+https://github.com/rust-lang/crates.io-index"7336checksum = "4f1aaeb685540f7407ea0e27f1c9757d258c7c6bf4e3eb19da6fc59b747239d2"7337dependencies = [7338 "fnv",7339 "futures-core-preview",7340 "futures-util-preview",7341]734273277343[[package]]7328[[package]]7344name = "tokio-tcp"7329name = "tokio-tcp"7368 "log",7353 "log",7369 "num_cpus",7354 "num_cpus",7370 "slab",7355 "slab",7371 "tokio-executor 0.1.10",7356 "tokio-executor",7372]7357]737373587374[[package]]7359[[package]]7380 "crossbeam-utils 0.7.2",7365 "crossbeam-utils 0.7.2",7381 "futures 0.1.30",7366 "futures 0.1.30",7382 "slab",7367 "slab",7383 "tokio-executor 0.1.10",7368 "tokio-executor",7384]7369]738573707386[[package]]7371[[package]]743274177433[[package]]7418[[package]]7434name = "toml"7419name = "toml"7435version = "0.5.7"7420version = "0.5.8"7436source = "registry+https://github.com/rust-lang/crates.io-index"7421source = "registry+https://github.com/rust-lang/crates.io-index"7437checksum = "75cf45bb0bef80604d001caaec0d09da99611b3c0fd39d3080468875cdb65645"7422checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa"7438dependencies = [7423dependencies = [7439 "serde",7424 "serde",7440]7425]744174267442[[package]]7427[[package]]7443name = "tower-service"7428name = "tower-service"7444version = "0.3.0"7429version = "0.3.1"7445source = "registry+https://github.com/rust-lang/crates.io-index"7430source = "registry+https://github.com/rust-lang/crates.io-index"7446checksum = "e987b6bf443f4b5b3b6f38704195592cca41c5bb7aedd3c3693c7081f8289860"7431checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6"744774327448[[package]]7433[[package]]7449name = "tracing"7434name = "tracing"7453dependencies = [7438dependencies = [7454 "cfg-if 1.0.0",7439 "cfg-if 1.0.0",7455 "log",7440 "log",7456 "pin-project-lite 0.2.0",7441 "pin-project-lite 0.2.4",7457 "tracing-attributes",7442 "tracing-attributes",7458 "tracing-core",7443 "tracing-core",7459]7444]7523 "serde",7508 "serde",7524 "serde_json",7509 "serde_json",7525 "sharded-slab",7510 "sharded-slab",7526 "smallvec 1.5.1",7511 "smallvec 1.6.1",7527 "thread_local",7512 "thread_local",7528 "tracing",7513 "tracing",7529 "tracing-core",7514 "tracing-core",753375187534[[package]]7519[[package]]7535name = "trie-db"7520name = "trie-db"7536version = "0.22.1"7521version = "0.22.2"7537source = "registry+https://github.com/rust-lang/crates.io-index"7522source = "registry+https://github.com/rust-lang/crates.io-index"7538checksum = "9e55f7ace33d6237e14137e386f4e1672e2a5c6bbc97fef9f438581a143971f0"7523checksum = "5cc176c377eb24d652c9c69c832c832019011b6106182bf84276c66b66d5c9a6"7539dependencies = [7524dependencies = [7540 "hash-db",7525 "hash-db",7541 "hashbrown 0.8.2",7526 "hashbrown",7542 "log",7527 "log",7543 "rustc-hex",7528 "rustc-hex",7544 "smallvec 1.5.1",7529 "smallvec 1.6.1",7545]7530]754675317547[[package]]7532[[package]]7576source = "registry+https://github.com/rust-lang/crates.io-index"7561source = "registry+https://github.com/rust-lang/crates.io-index"7577checksum = "373c8a200f9e67a0c95e62a4f52fbf80c23b4381c05a17845531982fa99e6b33"7562checksum = "373c8a200f9e67a0c95e62a4f52fbf80c23b4381c05a17845531982fa99e6b33"75637564[[package]]7565name = "ucd-trie"7566version = "0.1.3"7567source = "registry+https://github.com/rust-lang/crates.io-index"7568checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c"757875697579[[package]]7570[[package]]7580name = "uint"7571name = "uint"7581version = "0.8.5"7572version = "0.9.0"7582source = "registry+https://github.com/rust-lang/crates.io-index"7573source = "registry+https://github.com/rust-lang/crates.io-index"7583checksum = "9db035e67dfaf7edd9aebfe8676afcd63eed53c8a4044fed514c8cccf1835177"7574checksum = "e11fe9a9348741cf134085ad57c249508345fe16411b3d7fb4ff2da2f1d6382e"7584dependencies = [7575dependencies = [7585 "byteorder 1.3.4",7576 "byteorder",7586 "crunchy",7577 "crunchy",7587 "rustc-hex",7578 "hex",7588 "static_assertions",7579 "static_assertions",7589]7580]75907581764576367646[[package]]7637[[package]]7647name = "unsigned-varint"7638name = "unsigned-varint"7648version = "0.4.0"7639version = "0.5.1"7649source = "registry+https://github.com/rust-lang/crates.io-index"7640source = "registry+https://github.com/rust-lang/crates.io-index"7650checksum = "669d776983b692a906c881fcd0cfb34271a48e197e4d6cb8df32b05bfc3d3fa5"7641checksum = "f7fdeedbf205afadfe39ae559b75c3240f24e257d0ca27e85f85cb82aa19ac35"7651dependencies = [7652 "bytes 0.5.6",7653 "futures-io",7654 "futures-util",7655 "futures_codec",7656]765776427658[[package]]7643[[package]]7659name = "unsigned-varint"7644name = "unsigned-varint"7660version = "0.5.1"7645version = "0.6.0"7661source = "registry+https://github.com/rust-lang/crates.io-index"7646source = "registry+https://github.com/rust-lang/crates.io-index"7662checksum = "f7fdeedbf205afadfe39ae559b75c3240f24e257d0ca27e85f85cb82aa19ac35"7647checksum = "35581ff83d4101e58b582e607120c7f5ffb17e632a980b1f38334d76b36908b2"7663dependencies = [7648dependencies = [7649 "asynchronous-codec",7650 "bytes 1.0.1",7664 "futures-io",7651 "futures-io",7665 "futures-util",7652 "futures-util",7666]7653]7694 "percent-encoding 2.1.0",7681 "percent-encoding 2.1.0",7695]7682]76837684[[package]]7685name = "value-bag"7686version = "1.0.0-alpha.6"7687source = "registry+https://github.com/rust-lang/crates.io-index"7688checksum = "6b676010e055c99033117c2343b33a40a30b91fecd6c49055ac9cd2d6c305ab1"7689dependencies = [7690 "ctor",7691]769676927697[[package]]7693[[package]]7698name = "vcpkg"7694name = "vcpkg"776577617766[[package]]7762[[package]]7767name = "wasm-bindgen"7763name = "wasm-bindgen"7768version = "0.2.69"7764version = "0.2.70"7769source = "registry+https://github.com/rust-lang/crates.io-index"7765source = "registry+https://github.com/rust-lang/crates.io-index"7770checksum = "3cd364751395ca0f68cafb17666eee36b63077fb5ecd972bbcd74c90c4bf736e"7766checksum = "55c0f7123de74f0dab9b7d00fd614e7b19349cd1e2f5252bbe9b1754b59433be"7771dependencies = [7767dependencies = [7772 "cfg-if 1.0.0",7768 "cfg-if 1.0.0",7773 "wasm-bindgen-macro",7769 "wasm-bindgen-macro",7774]7770]777577717776[[package]]7772[[package]]7777name = "wasm-bindgen-backend"7773name = "wasm-bindgen-backend"7778version = "0.2.69"7774version = "0.2.70"7779source = "registry+https://github.com/rust-lang/crates.io-index"7775source = "registry+https://github.com/rust-lang/crates.io-index"7780checksum = "1114f89ab1f4106e5b55e688b828c0ab0ea593a1ea7c094b141b14cbaaec2d62"7776checksum = "7bc45447f0d4573f3d65720f636bbcc3dd6ce920ed704670118650bcd47764c7"7781dependencies = [7777dependencies = [7782 "bumpalo",7778 "bumpalo",7783 "lazy_static",7779 "lazy_static",779077867791[[package]]7787[[package]]7792name = "wasm-bindgen-futures"7788name = "wasm-bindgen-futures"7793version = "0.4.19"7789version = "0.4.20"7794source = "registry+https://github.com/rust-lang/crates.io-index"7790source = "registry+https://github.com/rust-lang/crates.io-index"7795checksum = "1fe9756085a84584ee9457a002b7cdfe0bfff169f45d2591d8be1345a6780e35"7791checksum = "3de431a2910c86679c34283a33f66f4e4abd7e0aec27b6669060148872aadf94"7796dependencies = [7792dependencies = [7797 "cfg-if 1.0.0",7793 "cfg-if 1.0.0",7798 "js-sys",7794 "js-sys",780277987803[[package]]7799[[package]]7804name = "wasm-bindgen-macro"7800name = "wasm-bindgen-macro"7805version = "0.2.69"7801version = "0.2.70"7806source = "registry+https://github.com/rust-lang/crates.io-index"7802source = "registry+https://github.com/rust-lang/crates.io-index"7807checksum = "7a6ac8995ead1f084a8dea1e65f194d0973800c7f571f6edd70adf06ecf77084"7803checksum = "3b8853882eef39593ad4174dd26fc9865a64e84026d223f63bb2c42affcbba2c"7808dependencies = [7804dependencies = [7809 "quote",7805 "quote",7810 "wasm-bindgen-macro-support",7806 "wasm-bindgen-macro-support",7811]7807]781278087813[[package]]7809[[package]]7814name = "wasm-bindgen-macro-support"7810name = "wasm-bindgen-macro-support"7815version = "0.2.69"7811version = "0.2.70"7816source = "registry+https://github.com/rust-lang/crates.io-index"7812source = "registry+https://github.com/rust-lang/crates.io-index"7817checksum = "b5a48c72f299d80557c7c62e37e7225369ecc0c963964059509fbafe917c7549"7813checksum = "4133b5e7f2a531fa413b3a1695e925038a05a71cf67e87dafa295cb645a01385"7818dependencies = [7814dependencies = [7819 "proc-macro2",7815 "proc-macro2",7820 "quote",7816 "quote",782578217826[[package]]7822[[package]]7827name = "wasm-bindgen-shared"7823name = "wasm-bindgen-shared"7828version = "0.2.69"7824version = "0.2.70"7829source = "registry+https://github.com/rust-lang/crates.io-index"7825source = "registry+https://github.com/rust-lang/crates.io-index"7830checksum = "7e7811dd7f9398f14cc76efd356f98f03aa30419dea46aa810d71e819fc97158"7826checksum = "dd4945e4943ae02d15c13962b38a5b1e81eadd4b71214eee75af64a4d6a4fd64"783178277832[[package]]7828[[package]]7833name = "wasm-timer"7829name = "wasm-timer"7834version = "0.2.5"7830version = "0.2.5"7835source = "registry+https://github.com/rust-lang/crates.io-index"7831source = "registry+https://github.com/rust-lang/crates.io-index"7836checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f"7832checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f"7837dependencies = [7833dependencies = [7838 "futures 0.3.8",7834 "futures 0.3.12",7839 "js-sys",7835 "js-sys",7840 "parking_lot 0.11.1",7836 "parking_lot 0.11.1",7841 "pin-utils",7837 "pin-utils",7893 "log",7889 "log",7894 "region",7890 "region",7895 "rustc-demangle",7891 "rustc-demangle",7896 "smallvec 1.5.1",7892 "smallvec 1.6.1",7897 "target-lexicon",7893 "target-lexicon",7898 "wasmparser 0.59.0",7894 "wasmparser 0.59.0",7899 "wasmtime-environ",7895 "wasmtime-environ",7934 "cranelift-entity",7930 "cranelift-entity",7935 "cranelift-frontend",7931 "cranelift-frontend",7936 "cranelift-wasm",7932 "cranelift-wasm",7937 "directories",7933 "directories 2.0.2",7938 "errno",7934 "errno",7939 "file-per-thread-logger",7935 "file-per-thread-logger",7940 "indexmap",7936 "indexmap",803680328037[[package]]8033[[package]]8038name = "wast"8034name = "wast"8039version = "30.0.0"8035version = "32.0.0"8040source = "registry+https://github.com/rust-lang/crates.io-index"8036source = "registry+https://github.com/rust-lang/crates.io-index"8041checksum = "9b79907b22f740634810e882d8d1d9d0f9563095a8ab94e786e370242bff5cd2"8037checksum = "c24a3ee360d01d60ed0a0f960ab76a6acce64348cdb0bf8699c2a866fad57c7c"8042dependencies = [8038dependencies = [8043 "leb128",8039 "leb128",8044]8040]804580418046[[package]]8042[[package]]8047name = "wat"8043name = "wat"8048version = "1.0.31"8044version = "1.0.33"8049source = "registry+https://github.com/rust-lang/crates.io-index"8045source = "registry+https://github.com/rust-lang/crates.io-index"8050checksum = "a8279a02835bf12e61ed2b3c3cbc6ecf9918762fd97e036917c11a09ec20ca44"8046checksum = "5e8f7f34773fa6318e8897283abf7941c1f250faae4e1a52f82df09c3bad7cce"8051dependencies = [8047dependencies = [8052 "wast",8048 "wast",8053]8049]805480508055[[package]]8051[[package]]8056name = "web-sys"8052name = "web-sys"8057version = "0.3.46"8053version = "0.3.47"8058source = "registry+https://github.com/rust-lang/crates.io-index"8054source = "registry+https://github.com/rust-lang/crates.io-index"8059checksum = "222b1ef9334f92a21d3fb53dc3fd80f30836959a90f9274a626d7e06315ba3c3"8055checksum = "c40dc691fc48003eba817c38da7113c15698142da971298003cac3ef175680b3"8060dependencies = [8056dependencies = [8061 "js-sys",8057 "js-sys",8062 "wasm-bindgen",8058 "wasm-bindgen",8072 "untrusted",8068 "untrusted",8073]8069]80748075[[package]]8076name = "webpki-roots"8077version = "0.18.0"8078source = "registry+https://github.com/rust-lang/crates.io-index"8079checksum = "91cd5736df7f12a964a5067a12c62fa38e1bd8080aff1f80bc29be7c80d19ab4"8080dependencies = [8081 "webpki",8082]808380708084[[package]]8071[[package]]8085name = "webpki-roots"8072name = "webpki-roots"8086version = "0.19.0"8073version = "0.21.0"8087source = "registry+https://github.com/rust-lang/crates.io-index"8074source = "registry+https://github.com/rust-lang/crates.io-index"8088checksum = "f8eff4b7516a57307f9349c64bf34caa34b940b66fed4b2fb3136cb7386e5739"8075checksum = "82015b7e0b8bad8185994674a13a93306bea76cf5a16c5a181382fd3a5ec2376"8089dependencies = [8076dependencies = [8090 "webpki",8077 "webpki",8091]8078]8108 "libc",8095 "libc",8109]8096]80978098[[package]]8099name = "which"8100version = "4.0.2"8101source = "registry+https://github.com/rust-lang/crates.io-index"8102checksum = "87c14ef7e1b8b8ecfc75d5eca37949410046e66f15d185c01d70824f1f8111ef"8103dependencies = [8104 "libc",8105 "thiserror",8106]811081078111[[package]]8108[[package]]8112name = "winapi"8109name = "winapi"8161 "winapi-build",8158 "winapi-build",8162]8159]81638164[[package]]8165name = "x25519-dalek"8166version = "0.6.0"8167source = "registry+https://github.com/rust-lang/crates.io-index"8168checksum = "637ff90c9540fa3073bb577e65033069e4bae7c79d49d74aa3ffdf5342a53217"8169dependencies = [8170 "curve25519-dalek 2.1.0",8171 "rand_core 0.5.1",8172 "zeroize",8173]817481608175[[package]]8161[[package]]8176name = "x25519-dalek"8162name = "x25519-dalek"8177version = "1.1.0"8163version = "1.1.0"8178source = "registry+https://github.com/rust-lang/crates.io-index"8164source = "registry+https://github.com/rust-lang/crates.io-index"8179checksum = "bc614d95359fd7afc321b66d2107ede58b246b844cf5d8a0adcca413e439f088"8165checksum = "bc614d95359fd7afc321b66d2107ede58b246b844cf5d8a0adcca413e439f088"8180dependencies = [8166dependencies = [8181 "curve25519-dalek 3.0.0",8167 "curve25519-dalek 3.0.2",8182 "rand_core 0.5.1",8168 "rand_core 0.5.1",8183 "zeroize",8169 "zeroize",8184]8170]8189source = "registry+https://github.com/rust-lang/crates.io-index"8175source = "registry+https://github.com/rust-lang/crates.io-index"8190checksum = "9aeb8c4043cac71c3c299dff107171c220d179492350ea198e109a414981b83c"8176checksum = "9aeb8c4043cac71c3c299dff107171c220d179492350ea198e109a414981b83c"8191dependencies = [8177dependencies = [8192 "futures 0.3.8",8178 "futures 0.3.12",8193 "log",8179 "log",8194 "nohash-hasher",8180 "nohash-hasher",8195 "parking_lot 0.11.1",8181 "parking_lot 0.11.1",8251dependencies = [8237dependencies = [8252 "cc",8238 "cc",8253 "glob",8239 "glob",8254 "itertools 0.9.0",8240 "itertools",8255 "libc",8241 "libc",8256]8242]82578243LICENSEdiffbeforeafterboth1USETECH PROFESSIONAL CONFIDENTIAL1USETECH PROFESSIONAL CONFIDENTIAL2__________________2__________________334 [2019] - [2020] UseTech Professional LTD. 4 [2019] - [2021] UseTech Professional LTD. 5 All Rights Reserved.5 All Rights Reserved.667NOTICE: All information contained herein is, and remains7NOTICE: All information contained herein is, and remainsREADME.mddiffbeforeafterboth5252532. Remove all installed toolchains with `rustup toolchain list` and `rustup toolchain uninstall <toolchain>`.532. Remove all installed toolchains with `rustup toolchain list` and `rustup toolchain uninstall <toolchain>`.5454553. Install Toolchain and make it default:553. Install stable toolchain 1.49.0 and make it default, install nightly 2021-01-27:565657```bash57```bash58rustup toolchain install 1.49.058rustup toolchain install nightly-2020-10-0159rustup toolchain install nightly-2020-10-0159rustup default nightly-2020-10-0160rustup default nightly-2021-01-2760```61```6162624. Add wasm target for default toolchain:634. Add wasm target for default toolchain:636464```bash65```bash65rustup target add wasm32-unknown-unknown66rustup target add wasm32-unknown-unknown --toolchain nightly-2021-01-2766```67```6768685. Build:695. Build:114115115Additional CLI usage options are available and may be shown by running `cargo run -- --help`.116Additional CLI usage options are available and may be shown by running `cargo run -- --help`.116117118## Run Integration Tests1191201. Install all needed dependecies121```122cd tests123yarn install124```1251262. Run tests127```128yarn test129```130131117## Benchmarks132## Benchmarks118133119First of all, add rust toolchain and make it default.134First of all, add rust toolchain and make it default.node/Cargo.tomldiffbeforeafterboth1[build-dependencies.substrate-build-script-utils]1[build-dependencies.substrate-build-script-utils]2git = 'https://github.com/usetech-llc/substrate.git'2git = 'https://github.com/usetech-llc/substrate.git'3branch = 'release_flexi'3branch = 'unique'4version = '2.0.0'4version = '2.0.1'556[[bin]]6[[bin]]7name = 'nft'7name = 'nft'15license = 'Unlicense'15license = 'Unlicense'16name = 'nft'16name = 'nft'17repository = 'https://github.com/substrate-developer-hub/nft/'17repository = 'https://github.com/substrate-developer-hub/nft/'18version = '2.0.0'18version = '3.0.0'191920[package.metadata.docs.rs]20[package.metadata.docs.rs]21targets = ['x86_64-unknown-linux-gnu']21targets = ['x86_64-unknown-linux-gnu']29jsonrpc-core = '15.0.0'29jsonrpc-core = '15.0.0'303031# Substrate dependencies31# Substrate dependencies32nft-runtime = { path = '../runtime', version = '2.0.0' }32nft-runtime = { path = '../runtime', version = '3.0.0' }33frame-benchmarking = {version = '2.0.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi'}33frame-benchmarking = {version = '2.0.1', git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique'}34frame-benchmarking-cli = {version = '2.0.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi'}34frame-benchmarking-cli = {version = '2.0.1', git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique'}35pallet-transaction-payment-rpc = {version = '2.0.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi'}35pallet-transaction-payment-rpc = {version = '2.0.1', git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique'}36sc-basic-authorship = {version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi'}36sc-basic-authorship = {version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique'}37sc-cli = { features = ['wasmtime'], version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi' }37sc-cli = { features = ['wasmtime'], version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique' }38sc-client-api = {version = '2.0.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi'}38sc-client-api = {version = '2.0.1', git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique'}39sc-consensus = {version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi'}39sc-consensus = {version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique'}40sc-consensus-aura = {version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi'}40sc-consensus-aura = {version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique'}41sc-executor = { features = ['wasmtime'], version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi' }41sc-executor = { features = ['wasmtime'], version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique' }42sc-finality-grandpa = {version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi'}42sc-finality-grandpa = {version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique'}43sc-rpc = {version = '2.0.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi'}43sc-rpc = {version = '2.0.1', git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique'}44sc-rpc-api = {version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi'}44sc-rpc-api = {version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique'}45sc-service = { features = ['wasmtime'], version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi' }45sc-service = { features = ['wasmtime'], version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique' }46sc-transaction-pool = {version = '2.0.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi'}46sc-transaction-pool = {version = '2.0.1', git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique'}47sp-api = {version = '2.0.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi'}47sp-api = {version = '2.0.1', git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique'}48sp-block-builder = {version = '2.0.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi'}48sp-block-builder = {version = '2.0.1', git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique'}49sp-blockchain = {version = '2.0.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi'}49sp-blockchain = {version = '2.0.1', git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique'}50sp-consensus = {version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi'}50sp-consensus = {version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique'}51sp-consensus-aura = {version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi'}51sp-consensus-aura = {version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique'}52sp-core = {version = '2.0.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi'}52sp-core = {version = '2.0.1', git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique'}53sp-finality-grandpa = {version = '2.0.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi'}53sp-finality-grandpa = {version = '2.0.1', git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique'}54sp-inherents = {version = '2.0.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi'}54sp-inherents = {version = '2.0.1', git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique'}55sp-runtime = {version = '2.0.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi'}55sp-runtime = {version = '2.0.1', git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique'}56sp-transaction-pool = {version = '2.0.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi'}56sp-transaction-pool = {version = '2.0.1', git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique'}57sc-network = {version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi'} 57sc-network = {version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique'} 58substrate-frame-rpc-system = {version = '2.0.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi'}58substrate-frame-rpc-system = {version = '2.0.1', git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique'}59pallet-contracts-rpc = {version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi'} 59pallet-contracts-rpc = {version = '0.8.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique'} 60sc-keystore = { version = "2.0.0", git = "https://github.com/usetech-llc/substrate.git", branch = 'unique'}61sc-telemetry = { version = "2.0.0", git = "https://github.com/usetech-llc/substrate.git", branch = 'unique'}606261serde = { version = "1.0.102", features = ["derive"] }63serde = { version = "1.0.102", features = ["derive"] }62serde_json = "1.0.41"64serde_json = "1.0.41"node/src/chain_spec.rsdiffbeforeafterboth210 nft_sponsor_transfer_timeout: 15,210 nft_sponsor_transfer_timeout: 15,211 fungible_sponsor_transfer_timeout: 15,211 fungible_sponsor_transfer_timeout: 15,212 refungible_sponsor_transfer_timeout: 15,212 refungible_sponsor_transfer_timeout: 15,213 offchain_schema_limit: 1024,214 variable_on_chain_schema_limit: 1024,215 const_on_chain_schema_limit: 1024,213 },216 },214 }),217 }),215 pallet_contracts: Some(ContractsConfig {218 pallet_contracts: Some(ContractsConfig {node/src/cli.rsdiffbeforeafterboth121213#[derive(Debug, StructOpt)]13#[derive(Debug, StructOpt)]14pub enum Subcommand {14pub enum Subcommand {15 /// Key management cli utilities16 Key(sc_cli::KeySubcommand),15 /// Build a chain specification.17 /// Build a chain specification.16 BuildSpec(sc_cli::BuildSpecCmd),18 BuildSpec(sc_cli::BuildSpecCmd),171933 /// Revert the chain to a previous state.35 /// Revert the chain to a previous state.34 Revert(sc_cli::RevertCmd),36 Revert(sc_cli::RevertCmd),353736 // The custom benchmark subcommmand benchmarking runtime pallets.38 /// The custom benchmark subcommmand benchmarking runtime pallets.37 #[structopt(name = "benchmark", about = "Benchmark runtime pallets.")]39 #[structopt(name = "benchmark", about = "Benchmark runtime pallets.")]38 Benchmark(frame_benchmarking_cli::BenchmarkCmd),40 Benchmark(frame_benchmarking_cli::BenchmarkCmd),39}41}node/src/command.rsdiffbeforeafterboth1// This file is part of Substrate.1// This file is part of Substrate.223// Copyright (C) 2017-2020 Parity Technologies (UK) Ltd.3// Copyright (C) 2017-2021 Parity Technologies (UK) Ltd.4// SPDX-License-Identifier: Apache-2.04// SPDX-License-Identifier: Apache-2.0556// Licensed under the Apache License, Version 2.0 (the "License");6// Licensed under the Apache License, Version 2.0 (the "License");66 let cli = Cli::from_args();66 let cli = Cli::from_args();676768 match &cli.subcommand {68 match &cli.subcommand {69 Some(Subcommand::Key(cmd)) => cmd.run(&cli),69 Some(Subcommand::BuildSpec(cmd)) => {70 Some(Subcommand::BuildSpec(cmd)) => {70 let runner = cli.create_runner(cmd)?;71 let runner = cli.create_runner(cmd)?;71 runner.sync_run(|config| cmd.run(config.chain_spec, config.network))72 runner.sync_run(|config| cmd.run(config.chain_spec, config.network))126 },127 },127 None => {128 None => {128 let runner = cli.create_runner(&cli.run)?;129 let runner = cli.create_runner(&cli.run)?;129 runner.run_node_until_exit(|config| match config.role {130 runner.run_node_until_exit(|config| async move {131 match config.role {130 Role::Light => service::new_light(config),132 Role::Light => service::new_light(config),131 _ => service::new_full(config),133 _ => service::new_full(config),132 })134 }.map_err(sc_cli::Error::Service)135 })133 }136 }134 }137 }135}138}node/src/service.rsdiffbeforeafterboth14use sc_executor::native_executor_instance;14use sc_executor::native_executor_instance;15pub use sc_executor::NativeExecutor;15pub use sc_executor::NativeExecutor;16use sp_consensus_aura::sr25519::{AuthorityPair as AuraPair};16use sp_consensus_aura::sr25519::{AuthorityPair as AuraPair};17use sc_finality_grandpa::{FinalityProofProvider as GrandpaFinalityProofProvider, SharedVoterState};17use sc_finality_grandpa::SharedVoterState;18use sc_keystore::LocalKeystore;19use sc_telemetry::TelemetrySpan;182019// Our native executor instance.21// Our native executor instance.20native_executor_instance!(22native_executor_instance!(39 sc_finality_grandpa::GrandpaBlockImport<FullBackend, Block, FullClient, FullSelectChain>,41 sc_finality_grandpa::GrandpaBlockImport<FullBackend, Block, FullClient, FullSelectChain>,40 AuraPair42 AuraPair41 >,43 >,42 sc_finality_grandpa::LinkHalf<Block, FullClient, FullSelectChain>44 sc_finality_grandpa::LinkHalf<Block, FullClient, FullSelectChain>,45 Option<TelemetrySpan>,43 )46 )44>, ServiceError> {47>, ServiceError> {48 if config.keystore_remote.is_some() {49 return Err(ServiceError::Other(50 format!("Remote Keystores are not supported.")))51 }45 let inherent_data_providers = sp_inherents::InherentDataProviders::new();52 let inherent_data_providers = sp_inherents::InherentDataProviders::new();465347 let (client, backend, keystore, task_manager) =54 let (client, backend, keystore_container, task_manager, telemetry_span) =48 sc_service::new_full_parts::<Block, RuntimeApi, Executor>(&config)?;55 sc_service::new_full_parts::<Block, RuntimeApi, Executor>(&config)?;49 let client = Arc::new(client);56 let client = Arc::new(client);505769 sc_consensus_aura::slot_duration(&*client)?,76 sc_consensus_aura::slot_duration(&*client)?,70 aura_block_import.clone(),77 aura_block_import.clone(),71 Some(Box::new(grandpa_block_import.clone())),78 Some(Box::new(grandpa_block_import.clone())),72 None,73 client.clone(),79 client.clone(),74 inherent_data_providers.clone(),80 inherent_data_providers.clone(),75 &task_manager.spawn_handle(),81 &task_manager.spawn_handle(),78 )?;84 )?;798580 Ok(sc_service::PartialComponents {86 Ok(sc_service::PartialComponents {81 client, backend, task_manager, import_queue, keystore, select_chain, transaction_pool,87 client,88 backend,89 task_manager,90 import_queue,91 keystore_container,92 select_chain,93 transaction_pool,82 inherent_data_providers,94 inherent_data_providers,83 other: (aura_block_import, grandpa_link),95 other: (aura_block_import, grandpa_link, telemetry_span),84 })96 })85}97}9899fn remote_keystore(_url: &String) -> Result<Arc<LocalKeystore>, &'static str> {100 // FIXME: here would the concrete keystore be built,101 // must return a concrete type (NOT `LocalKeystore`) that102 // implements `CryptoStore` and `SyncCryptoStore`103 Err("Remote Keystore not supported.")104}8610587/// Builds a new service for a full client.106/// Builds a new service for a full client.88pub fn new_full(config: Configuration) -> Result<TaskManager, ServiceError> {107pub fn new_full(mut config: Configuration) -> Result<TaskManager, ServiceError> {89 let sc_service::PartialComponents {108 let sc_service::PartialComponents {90 client, backend, mut task_manager, import_queue, keystore, select_chain, transaction_pool,109 client,110 backend,111 mut task_manager,112 import_queue,113 mut keystore_container,114 select_chain,115 transaction_pool,91 inherent_data_providers,116 inherent_data_providers,92 other: (block_import, grandpa_link),117 other: (block_import, grandpa_link, telemetry_span),93 } = new_partial(&config)?;118 } = new_partial(&config)?;9411995 let finality_proof_provider =120 if let Some(url) = &config.keystore_remote {121 match remote_keystore(url) {96 GrandpaFinalityProofProvider::new_for_service(backend.clone(), client.clone());122 Ok(k) => keystore_container.set_remote_keystore(k),123 Err(e) => {124 return Err(ServiceError::Other(125 format!("Error hooking up remote keystore for {}: {}", url, e)))126 }127 };128 }129130 config.network.extra_sets.push(sc_finality_grandpa::grandpa_peers_set_config());9713198 let (network, network_status_sinks, system_rpc_tx, network_starter) =132 let (network, network_status_sinks, system_rpc_tx, network_starter) =99 sc_service::build_network(sc_service::BuildNetworkParams {133 sc_service::build_network(sc_service::BuildNetworkParams {104 import_queue,138 import_queue,105 on_demand: None,139 on_demand: None,106 block_announce_validator_builder: None,140 block_announce_validator_builder: None,107 finality_proof_request_builder: None,108 finality_proof_provider: Some(finality_proof_provider.clone()),109 })?;141 })?;110142111 if config.offchain_worker.enabled {143 if config.offchain_worker.enabled {116148117 let role = config.role.clone();149 let role = config.role.clone();118 let force_authoring = config.force_authoring;150 let force_authoring = config.force_authoring;151 let backoff_authoring_blocks: Option<()> = None;119 let name = config.network.node_name.clone();152 let name = config.network.node_name.clone();120 let enable_grandpa = !config.disable_grandpa;153 let enable_grandpa = !config.disable_grandpa;121 let prometheus_registry = config.prometheus_registry().cloned();154 let prometheus_registry = config.prometheus_registry().cloned();122 let telemetry_connection_sinks = sc_service::TelemetryConnectionSinks::default();123155124 let rpc_extensions_builder = {156 let rpc_extensions_builder = {125 let client = client.clone();157 let client = client.clone();136 })168 })137 };169 };138170139 sc_service::spawn_tasks(sc_service::SpawnTasksParams {171 let (_rpc_handlers, telemetry_connection_notifier) = sc_service::spawn_tasks(172 sc_service::SpawnTasksParams {140 network: network.clone(),173 network: network.clone(),141 client: client.clone(),174 client: client.clone(),142 keystore: keystore.clone(),175 keystore: keystore_container.sync_keystore(),143 task_manager: &mut task_manager,176 task_manager: &mut task_manager,144 transaction_pool: transaction_pool.clone(),177 transaction_pool: transaction_pool.clone(),145 telemetry_connection_sinks: telemetry_connection_sinks.clone(),146 rpc_extensions_builder: rpc_extensions_builder,178 rpc_extensions_builder,147 on_demand: None,179 on_demand: None,148 remote_blockchain: None,180 remote_blockchain: None,149 backend, network_status_sinks, system_rpc_tx, config,181 backend,182 network_status_sinks,183 system_rpc_tx,184 config,185 telemetry_span,150 })?;186 },187 )?;151188152 if role.is_authority() {189 if role.is_authority() {153 let proposer = sc_basic_authorship::ProposerFactory::new(190 let proposer = sc_basic_authorship::ProposerFactory::new(191 task_manager.spawn_handle(),154 client.clone(),192 client.clone(),155 transaction_pool,193 transaction_pool,156 prometheus_registry.as_ref(),194 prometheus_registry.as_ref(),159 let can_author_with =197 let can_author_with =160 sp_consensus::CanAuthorWithNativeVersion::new(client.executor().clone());198 sp_consensus::CanAuthorWithNativeVersion::new(client.executor().clone());161199162 let aura = sc_consensus_aura::start_aura::<_, _, _, _, _, AuraPair, _, _, _>(200 let aura = sc_consensus_aura::start_aura::<_, _, _, _, _, AuraPair, _, _, _,_>(163 sc_consensus_aura::slot_duration(&*client)?,201 sc_consensus_aura::slot_duration(&*client)?,164 client.clone(),202 client.clone(),165 select_chain,203 select_chain,168 network.clone(),206 network.clone(),169 inherent_data_providers.clone(),207 inherent_data_providers.clone(),170 force_authoring,208 force_authoring,209 backoff_authoring_blocks,171 keystore.clone(),210 keystore_container.sync_keystore(),172 can_author_with,211 can_author_with,173 )?;212 )?;174213180 // if the node isn't actively participating in consensus then it doesn't219 // if the node isn't actively participating in consensus then it doesn't181 // need a keystore, regardless of which protocol we use below.220 // need a keystore, regardless of which protocol we use below.182 let keystore = if role.is_authority() {221 let keystore = if role.is_authority() {183 Some(keystore as sp_core::traits::BareCryptoStorePtr)222 Some(keystore_container.sync_keystore())184 } else {223 } else {185 None224 None186 };225 };206 config: grandpa_config,245 config: grandpa_config,207 link: grandpa_link,246 link: grandpa_link,208 network,247 network,209 inherent_data_providers,210 telemetry_on_connect: Some(telemetry_connection_sinks.on_connect_stream()),248 telemetry_on_connect: telemetry_connection_notifier.map(|x| x.on_connect_stream()),211 voting_rule: sc_finality_grandpa::VotingRulesBuilder::default().build(),249 voting_rule: sc_finality_grandpa::VotingRulesBuilder::default().build(),212 prometheus_registry,250 prometheus_registry,213 shared_voter_state: SharedVoterState::empty(),251 shared_voter_state: SharedVoterState::empty(),219 "grandpa-voter",257 "grandpa-voter",220 sc_finality_grandpa::run_grandpa_voter(grandpa_config)?258 sc_finality_grandpa::run_grandpa_voter(grandpa_config)?221 );259 );222 } else {260 }223 sc_finality_grandpa::setup_disabled_grandpa(224 client,225 &inherent_data_providers,226 network,227 )?;228 }229261230 network_starter.start_network();262 network_starter.start_network();231 Ok(task_manager)263 Ok(task_manager)232}264}233265234/// Builds a new service for a light client.266/// Builds a new service for a light client.235pub fn new_light(config: Configuration) -> Result<TaskManager, ServiceError> {267pub fn new_light(mut config: Configuration) -> Result<TaskManager, ServiceError> {236 let (client, backend, keystore, mut task_manager, on_demand) =268 let (client, backend, keystore_container, mut task_manager, on_demand, telemetry_span) =237 sc_service::new_light_parts::<Block, RuntimeApi, Executor>(&config)?;269 sc_service::new_light_parts::<Block, RuntimeApi, Executor>(&config)?;270271 config.network.extra_sets.push(sc_finality_grandpa::grandpa_peers_set_config());272273 let select_chain = sc_consensus::LongestChain::new(backend.clone());238274239 let transaction_pool = Arc::new(sc_transaction_pool::BasicPool::new_light(275 let transaction_pool = Arc::new(sc_transaction_pool::BasicPool::new_light(240 config.transaction_pool.clone(),276 config.transaction_pool.clone(),244 on_demand.clone(),280 on_demand.clone(),245 ));281 ));246282247 let grandpa_block_import = sc_finality_grandpa::light_block_import(283 let (grandpa_block_import, _) = sc_finality_grandpa::block_import(248 client.clone(), backend.clone(), &(client.clone() as Arc<_>),284 client.clone(),285 &(client.clone() as Arc<_>),249 Arc::new(on_demand.checker().clone()) as Arc<_>,286 select_chain.clone(),250 )?;287 )?;288251 let finality_proof_import = grandpa_block_import.clone();289 let aura_block_import = sc_consensus_aura::AuraBlockImport::<_, _, _, AuraPair>::new(252 let finality_proof_request_builder =290 grandpa_block_import.clone(),253 finality_proof_import.create_finality_proof_request_builder();291 client.clone(),292 );254293255 let import_queue = sc_consensus_aura::import_queue::<_, _, _, AuraPair, _, _>(294 let import_queue = sc_consensus_aura::import_queue::<_, _, _, AuraPair, _, _>(256 sc_consensus_aura::slot_duration(&*client)?,295 sc_consensus_aura::slot_duration(&*client)?,257 grandpa_block_import,296 aura_block_import,258 None,259 Some(Box::new(finality_proof_import)),297 Some(Box::new(grandpa_block_import)),260 client.clone(),298 client.clone(),261 InherentDataProviders::new(),299 InherentDataProviders::new(),262 &task_manager.spawn_handle(),300 &task_manager.spawn_handle(),263 config.prometheus_registry(),301 config.prometheus_registry(),264 sp_consensus::NeverCanAuthor,302 sp_consensus::NeverCanAuthor,265 )?;303 )?;266267 let finality_proof_provider =268 GrandpaFinalityProofProvider::new_for_service(backend.clone(), client.clone());269304270 let (network, network_status_sinks, system_rpc_tx, network_starter) =305 let (network, network_status_sinks, system_rpc_tx, network_starter) =271 sc_service::build_network(sc_service::BuildNetworkParams {306 sc_service::build_network(sc_service::BuildNetworkParams {276 import_queue,311 import_queue,277 on_demand: Some(on_demand.clone()),312 on_demand: Some(on_demand.clone()),278 block_announce_validator_builder: None,313 block_announce_validator_builder: None,279 finality_proof_request_builder: Some(finality_proof_request_builder),280 finality_proof_provider: Some(finality_proof_provider),281 })?;314 })?;282315283 if config.offchain_worker.enabled {316 if config.offchain_worker.enabled {292 task_manager: &mut task_manager,325 task_manager: &mut task_manager,293 on_demand: Some(on_demand),326 on_demand: Some(on_demand),294 rpc_extensions_builder: Box::new(|_, _| ()),327 rpc_extensions_builder: Box::new(|_, _| ()),328 config,329 client,295 telemetry_connection_sinks: sc_service::TelemetryConnectionSinks::default(),330 keystore: keystore_container.sync_keystore(),296 config,297 client,298 keystore,299 backend,331 backend,300 network,332 network,301 network_status_sinks,333 network_status_sinks,302 system_rpc_tx,334 system_rpc_tx,335 telemetry_span,303 })?;336 })?;304337305 network_starter.start_network();338 network_starter.start_network();pallets/nft/Cargo.tomldiffbeforeafterboth6license = 'Unlicense'6license = 'Unlicense'7name = 'pallet-nft'7name = 'pallet-nft'8repository = 'https://github.com/substrate-developer-hub/nft/'8repository = 'https://github.com/substrate-developer-hub/nft/'9version = '2.0.0'9version = '3.0.0'101011[package.metadata.docs.rs]11[package.metadata.docs.rs]12targets = ['x86_64-unknown-linux-gnu']12targets = ['x86_64-unknown-linux-gnu']16default-features = false16default-features = false17features = ['derive']17features = ['derive']18package = 'parity-scale-codec'18package = 'parity-scale-codec'19version = '1.3.4'19version = '1.3.6'202021[dependencies.frame-support]21[dependencies.frame-support]22default-features = false22default-features = false23git = 'https://github.com/usetech-llc/substrate.git'23git = 'https://github.com/usetech-llc/substrate.git'24branch = 'release_flexi'24branch = 'unique'25version = '2.0.0'25version = '2.0.1'262627[dependencies.frame-system]27[dependencies.frame-system]28default-features = false28default-features = false29git = 'https://github.com/usetech-llc/substrate.git'29git = 'https://github.com/usetech-llc/substrate.git'30branch = 'release_flexi'30branch = 'unique'31version = '2.0.0'31version = '2.0.1'323233[dev-dependencies.sp-core]33[dev-dependencies.sp-core]34default-features = false34default-features = false35git = 'https://github.com/usetech-llc/substrate.git'35git = 'https://github.com/usetech-llc/substrate.git'36branch = 'release_flexi'36branch = 'unique'37version = '2.0.0'37version = '2.0.1'383839[dev-dependencies.sp-io]39[dev-dependencies.sp-io]40default-features = false40default-features = false41git = 'https://github.com/usetech-llc/substrate.git'41git = 'https://github.com/usetech-llc/substrate.git'42branch = 'release_flexi'42branch = 'unique'43version = '2.0.0'43version = '2.0.1'444445[dependencies.sp-runtime]45[dependencies.sp-runtime]46default-features = false46default-features = false47git = 'https://github.com/usetech-llc/substrate.git'47git = 'https://github.com/usetech-llc/substrate.git'48branch = 'release_flexi'48branch = 'unique'49version = '2.0.0'49version = '2.0.1'50 50 51[dependencies]51[dependencies]52# third-party dependencies52# third-party dependencies56[dependencies.sp-std]56[dependencies.sp-std]57default-features = false57default-features = false58git = 'https://github.com/usetech-llc/substrate.git'58git = 'https://github.com/usetech-llc/substrate.git'59branch = 'release_flexi'59branch = 'unique'60version = '2.0.0'60version = '2.0.1'616162[dependencies.transaction-payment]62[dependencies.transaction-payment]63default-features = false63default-features = false64git = 'https://github.com/usetech-llc/substrate.git'64git = 'https://github.com/usetech-llc/substrate.git'65package = 'pallet-transaction-payment'65package = 'pallet-transaction-payment'66branch = 'release_flexi'66branch = 'unique'67version = '2.0.0'67version = '2.0.1'686869[dependencies.frame-benchmarking]69[dependencies.frame-benchmarking]70version = "2.0.0"70version = "2.0.1"71default-features = false71default-features = false72git = 'https://github.com/usetech-llc/substrate.git'72git = 'https://github.com/usetech-llc/substrate.git'73branch = 'release_flexi'73branch = 'unique'74optional = true74optional = true757576[dependencies.pallet-contracts]76[dependencies.pallet-contracts]77default-features = false77default-features = false78git = 'https://github.com/usetech-llc/substrate.git'78git = 'https://github.com/usetech-llc/substrate.git'79package = 'pallet-contracts'79package = 'pallet-contracts'80branch = 'release_flexi'80branch = 'unique'81version = '2.0.0'81version = '2.0.1'828283[dependencies.pallet-balances]83[dependencies.pallet-balances]84default-features = false84default-features = false85git = 'https://github.com/usetech-llc/substrate.git'85git = 'https://github.com/usetech-llc/substrate.git'86package = 'pallet-balances'86package = 'pallet-balances'87branch = 'release_flexi'87branch = 'unique'88version = '2.0.0'88version = '2.0.1'898990[dependencies.pallet-timestamp]90[dependencies.pallet-timestamp]91default-features = false91default-features = false92git = 'https://github.com/usetech-llc/substrate.git'92git = 'https://github.com/usetech-llc/substrate.git'93package = 'pallet-timestamp'93package = 'pallet-timestamp'94branch = 'release_flexi'94branch = 'unique'95version = '2.0.0'95version = '2.0.1'969697[dependencies.pallet-randomness-collective-flip]97[dependencies.pallet-randomness-collective-flip]98default-features = false98default-features = false99git = 'https://github.com/usetech-llc/substrate.git'99git = 'https://github.com/usetech-llc/substrate.git'100package = 'pallet-randomness-collective-flip'100package = 'pallet-randomness-collective-flip'101branch = 'release_flexi'101branch = 'unique'102version = '2.0.0'102version = '2.0.1'103103104[features]104[features]105default = ['std']105default = ['std']pallets/nft/src/lib.rsdiffbeforeafterboth20 ensure, fail, parameter_types,20 ensure, fail, parameter_types,21 traits::{21 traits::{22 Currency, ExistenceRequirement, Get, Imbalance, KeyOwnerProofSystem, OnUnbalanced,22 Currency, ExistenceRequirement, Get, Imbalance, KeyOwnerProofSystem, OnUnbalanced,23 Randomness, WithdrawReason,23 Randomness, IsSubType,24 },24 },25 weights::{25 weights::{26 constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_PER_SECOND},26 constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_PER_SECOND},27 DispatchInfo, GetDispatchInfo, IdentityFee, Pays, PostDispatchInfo, Weight,27 DispatchInfo, GetDispatchInfo, IdentityFee, Pays, PostDispatchInfo, Weight,28 WeightToFeePolynomial,28 WeightToFeePolynomial, DispatchClass,29 },29 },30 IsSubType, StorageValue,30 StorageValue,31};31};323233use frame_system::{self as system, ensure_signed, ensure_root};33use frame_system::{self as system, ensure_signed, ensure_root};41 },41 },42 FixedPointOperand, FixedU128,42 FixedPointOperand, FixedU128,43};43};44use pallet_contracts::ContractAddressFor;45use sp_runtime::traits::StaticLookup;44use sp_runtime::traits::StaticLookup;45use pallet_contracts::chain_extension::UncheckedFrom;46use transaction_payment::OnChargeTransaction;464747#[cfg(test)]48#[cfg(test)]48mod mock;49mod mock;74 ReFungible(DecimalPoints),75 ReFungible(DecimalPoints),75}76}767778impl Default for CollectionMode {79 fn default() -> Self {80 Self::Invalid81 }82}8377impl Into<u8> for CollectionMode {84impl Into<u8> for CollectionMode {78 fn into(self) -> u8 {85 fn into(self) -> u8 {79 match self {86 match self {97 }104 }98}105}99106100impl Default for CollectionMode {101 fn default() -> Self {102 Self::Invalid103 }104}105106#[derive(Encode, Decode, Eq, Debug, Clone, PartialEq)]107#[derive(Encode, Decode, Eq, Debug, Clone, PartialEq)]107#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]108#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]108pub enum SchemaVersion {109pub enum SchemaVersion {208 pub nft_sponsor_transfer_timeout: u32,209 pub nft_sponsor_transfer_timeout: u32,209 pub fungible_sponsor_transfer_timeout: u32,210 pub fungible_sponsor_transfer_timeout: u32,210 pub refungible_sponsor_transfer_timeout: u32,211 pub refungible_sponsor_transfer_timeout: u32,212213 // Schema limits214 pub offchain_schema_limit: u32,215 pub variable_on_chain_schema_limit: u32,216 pub const_on_chain_schema_limit: u32,211}217}212218213pub trait WeightInfo {219pub trait WeightInfo {303309304decl_error! {310decl_error! {305 /// Error for non-fungible-token module.311 /// Error for non-fungible-token module.306 pub enum Error for Module<T: Trait> {312 pub enum Error for Module<T: Config> {307 /// Total collections bound exceeded.313 /// Total collections bound exceeded.308 TotalCollectionsLimitExceeded,314 TotalCollectionsLimitExceeded,309 /// Decimal_points parameter must be lower than MAX_DECIMAL_POINTS constant, currently it is 30.315 /// Decimal_points parameter must be lower than MAX_DECIMAL_POINTS constant, currently it is 30.318 CollectionNotFound,324 CollectionNotFound,319 /// Item not exists.325 /// Item not exists.320 TokenNotFound,326 TokenNotFound,327 /// Admin not found328 AdminNotFound,321 /// Arithmetic calculation overflow.329 /// Arithmetic calculation overflow.322 NumOverflow, 330 NumOverflow, 323 /// Account already has admin role.331 /// Account already has admin role.367 /// Account token limit exceeded per collection375 /// Account token limit exceeded per collection368 AccountTokenLimitExceeded,376 AccountTokenLimitExceeded,369 /// Collection limit bounds per collection exceeded377 /// Collection limit bounds per collection exceeded370 CollectionLimitBoundsExceeded378 CollectionLimitBoundsExceeded,379 /// Schema data size limit bound exceeded380 SchemaDataLimitExceeded371 }381 }372}382}373383374pub trait Trait: system::Trait + Sized + transaction_payment::Trait + pallet_contracts::Trait {384pub trait Config: system::Config + Sized + transaction_payment::Config + pallet_contracts::Config {375 type Event: From<Event<Self>> + Into<<Self as system::Trait>::Event>;385 type Event: From<Event<Self>> + Into<<Self as system::Config>::Event>;376386377 /// Weight information for extrinsics in this pallet.387 /// Weight information for extrinsics in this pallet.378 type WeightInfo: WeightInfo;388 type WeightInfo: WeightInfo;384// #endregion394// #endregion385395386decl_storage! {396decl_storage! {387 trait Store for Module<T: Trait> as Nft {397 trait Store for Module<T: Config> as Nft {388398389 // Private members399 // Private members390 NextCollectionID: CollectionId;400 NextCollectionID: CollectionId;419 pub AddressTokens get(fn address_tokens): double_map hasher(identity) CollectionId, hasher(twox_64_concat) T::AccountId => Vec<TokenId>;429 pub AddressTokens get(fn address_tokens): double_map hasher(identity) CollectionId, hasher(twox_64_concat) T::AccountId => Vec<TokenId>;420430421 /// Tokens transfer baskets431 /// Tokens transfer baskets432 pub CreateItemBasket get(fn create_item_basket): map hasher(twox_64_concat) (CollectionId, T::AccountId) => T::BlockNumber;422 pub NftTransferBasket get(fn nft_transfer_basket): double_map hasher(identity) CollectionId, hasher(identity) TokenId => T::BlockNumber;433 pub NftTransferBasket get(fn nft_transfer_basket): double_map hasher(identity) CollectionId, hasher(identity) TokenId => T::BlockNumber;423 pub FungibleTransferBasket get(fn fungible_transfer_basket): double_map hasher(identity) CollectionId, hasher(twox_64_concat) T::AccountId => T::BlockNumber;434 pub FungibleTransferBasket get(fn fungible_transfer_basket): double_map hasher(identity) CollectionId, hasher(twox_64_concat) T::AccountId => T::BlockNumber;424 pub ReFungibleTransferBasket get(fn refungible_transfer_basket): double_map hasher(identity) CollectionId, hasher(identity) TokenId => T::BlockNumber;435 pub ReFungibleTransferBasket get(fn refungible_transfer_basket): double_map hasher(identity) CollectionId, hasher(identity) TokenId => T::BlockNumber;456decl_event!(467decl_event!(457 pub enum Event<T>468 pub enum Event<T>458 where469 where459 AccountId = <T as system::Trait>::AccountId,470 AccountId = <T as system::Config>::AccountId,460 {471 {461 /// New collection was created472 /// New collection was created462 /// 473 /// 490);501);491502492decl_module! {503decl_module! {493 pub struct Module<T: Trait> for enum Call where origin: T::Origin {504 pub struct Module<T: Config> for enum Call 494505 where 506 origin: T::Origin507 {495 fn deposit_event() = default;508 fn deposit_event() = default;496 type Error = Error<T>;509 type Error = Error<T>;497510523 /// 536 /// 524 /// * mode: [CollectionMode] collection type and type dependent data.537 /// * mode: [CollectionMode] collection type and type dependent data.525 // returns collection ID538 // returns collection ID526 #[weight = T::WeightInfo::create_collection()]539 #[weight = <T as Config>::WeightInfo::create_collection()]527 pub fn create_collection(origin,540 pub fn create_collection(origin,528 collection_name: Vec<u16>,541 collection_name: Vec<u16>,529 collection_description: Vec<u16>,542 collection_description: Vec<u16>,598 /// # Arguments611 /// # Arguments599 /// 612 /// 600 /// * collection_id: collection to destroy.613 /// * collection_id: collection to destroy.601 #[weight = T::WeightInfo::destroy_collection()]614 #[weight = <T as Config>::WeightInfo::destroy_collection()]602 pub fn destroy_collection(origin, collection_id: CollectionId) -> DispatchResult {615 pub fn destroy_collection(origin, collection_id: CollectionId) -> DispatchResult {603616604 let sender = ensure_signed(origin)?;617 let sender = ensure_signed(origin)?;645 /// * collection_id.658 /// * collection_id.646 /// 659 /// 647 /// * address.660 /// * address.648 #[weight = T::WeightInfo::add_to_white_list()]661 #[weight = <T as Config>::WeightInfo::add_to_white_list()]649 pub fn add_to_white_list(origin, collection_id: CollectionId, address: T::AccountId) -> DispatchResult{662 pub fn add_to_white_list(origin, collection_id: CollectionId, address: T::AccountId) -> DispatchResult{650663651 let sender = ensure_signed(origin)?;664 let sender = ensure_signed(origin)?;668 /// * collection_id.681 /// * collection_id.669 /// 682 /// 670 /// * address.683 /// * address.671 #[weight = T::WeightInfo::remove_from_white_list()]684 #[weight = <T as Config>::WeightInfo::remove_from_white_list()]672 pub fn remove_from_white_list(origin, collection_id: CollectionId, address: T::AccountId) -> DispatchResult{685 pub fn remove_from_white_list(origin, collection_id: CollectionId, address: T::AccountId) -> DispatchResult{673686674 let sender = ensure_signed(origin)?;687 let sender = ensure_signed(origin)?;690 /// * collection_id.703 /// * collection_id.691 /// 704 /// 692 /// * mode: [AccessMode]705 /// * mode: [AccessMode]693 #[weight = T::WeightInfo::set_public_access_mode()]706 #[weight = <T as Config>::WeightInfo::set_public_access_mode()]694 pub fn set_public_access_mode(origin, collection_id: CollectionId, mode: AccessMode) -> DispatchResult707 pub fn set_public_access_mode(origin, collection_id: CollectionId, mode: AccessMode) -> DispatchResult695 {708 {696 let sender = ensure_signed(origin)?;709 let sender = ensure_signed(origin)?;716 /// * collection_id.729 /// * collection_id.717 /// 730 /// 718 /// * mint_permission: Boolean parameter. If True, allows minting to Anyone with conditions above.731 /// * mint_permission: Boolean parameter. If True, allows minting to Anyone with conditions above.719 #[weight = T::WeightInfo::set_mint_permission()]732 #[weight = <T as Config>::WeightInfo::set_mint_permission()]720 pub fn set_mint_permission(origin, collection_id: CollectionId, mint_permission: bool) -> DispatchResult733 pub fn set_mint_permission(origin, collection_id: CollectionId, mint_permission: bool) -> DispatchResult721 {734 {722 let sender = ensure_signed(origin)?;735 let sender = ensure_signed(origin)?;740 /// * collection_id.753 /// * collection_id.741 /// 754 /// 742 /// * new_owner.755 /// * new_owner.743 #[weight = T::WeightInfo::change_collection_owner()]756 #[weight = <T as Config>::WeightInfo::change_collection_owner()]744 pub fn change_collection_owner(origin, collection_id: CollectionId, new_owner: T::AccountId) -> DispatchResult {757 pub fn change_collection_owner(origin, collection_id: CollectionId, new_owner: T::AccountId) -> DispatchResult {745758746 let sender = ensure_signed(origin)?;759 let sender = ensure_signed(origin)?;765 /// * collection_id: ID of the Collection to add admin for.778 /// * collection_id: ID of the Collection to add admin for.766 /// 779 /// 767 /// * new_admin_id: Address of new admin to add.780 /// * new_admin_id: Address of new admin to add.768 #[weight = T::WeightInfo::add_collection_admin()]781 #[weight = <T as Config>::WeightInfo::add_collection_admin()]769 pub fn add_collection_admin(origin, collection_id: CollectionId, new_admin_id: T::AccountId) -> DispatchResult {782 pub fn add_collection_admin(origin, collection_id: CollectionId, new_admin_id: T::AccountId) -> DispatchResult {770783771 let sender = ensure_signed(origin)?;784 let sender = ensure_signed(origin)?;799 /// * collection_id: ID of the Collection to remove admin for.812 /// * collection_id: ID of the Collection to remove admin for.800 /// 813 /// 801 /// * account_id: Address of admin to remove.814 /// * account_id: Address of admin to remove.802 #[weight = T::WeightInfo::remove_collection_admin()]815 #[weight = <T as Config>::WeightInfo::remove_collection_admin()]803 pub fn remove_collection_admin(origin, collection_id: CollectionId, account_id: T::AccountId) -> DispatchResult {816 pub fn remove_collection_admin(origin, collection_id: CollectionId, account_id: T::AccountId) -> DispatchResult {804817805 let sender = ensure_signed(origin)?;818 let sender = ensure_signed(origin)?;806 Self::check_owner_or_admin_permissions(collection_id, sender)?;819 Self::check_owner_or_admin_permissions(collection_id, sender)?;820 ensure!(<AdminList<T>>::contains_key(collection_id), Error::<T>::AdminNotFound);807821808 if <AdminList<T>>::contains_key(collection_id)822 let mut admin_arr = <AdminList<T>>::get(collection_id);809 {810 let mut admin_arr = <AdminList<T>>::get(collection_id);811 admin_arr.retain(|i| *i != account_id);823 admin_arr.retain(|i| *i != account_id);812 <AdminList<T>>::insert(collection_id, admin_arr);824 <AdminList<T>>::insert(collection_id, admin_arr);813 }814825815 Ok(())826 Ok(())816 }827 }824 /// * collection_id.835 /// * collection_id.825 /// 836 /// 826 /// * new_sponsor.837 /// * new_sponsor.827 #[weight = T::WeightInfo::set_collection_sponsor()]838 #[weight = <T as Config>::WeightInfo::set_collection_sponsor()]828 pub fn set_collection_sponsor(origin, collection_id: CollectionId, new_sponsor: T::AccountId) -> DispatchResult {839 pub fn set_collection_sponsor(origin, collection_id: CollectionId, new_sponsor: T::AccountId) -> DispatchResult {829840830 let sender = ensure_signed(origin)?;841 let sender = ensure_signed(origin)?;847 /// # Arguments858 /// # Arguments848 /// 859 /// 849 /// * collection_id.860 /// * collection_id.850 #[weight = T::WeightInfo::confirm_sponsorship()]861 #[weight = <T as Config>::WeightInfo::confirm_sponsorship()]851 pub fn confirm_sponsorship(origin, collection_id: CollectionId) -> DispatchResult {862 pub fn confirm_sponsorship(origin, collection_id: CollectionId) -> DispatchResult {852863853 let sender = ensure_signed(origin)?;864 let sender = ensure_signed(origin)?;871 /// # Arguments882 /// # Arguments872 /// 883 /// 873 /// * collection_id.884 /// * collection_id.874 #[weight = T::WeightInfo::remove_collection_sponsor()]885 #[weight = <T as Config>::WeightInfo::remove_collection_sponsor()]875 pub fn remove_collection_sponsor(origin, collection_id: CollectionId) -> DispatchResult {886 pub fn remove_collection_sponsor(origin, collection_id: CollectionId) -> DispatchResult {876887877 let sender = ensure_signed(origin)?;888 let sender = ensure_signed(origin)?;911 // .saturating_add(RocksDbWeight::get().reads(10 as Weight))922 // .saturating_add(RocksDbWeight::get().reads(10 as Weight))912 // .saturating_add(RocksDbWeight::get().writes(8 as Weight))]923 // .saturating_add(RocksDbWeight::get().writes(8 as Weight))]913924914 #[weight = T::WeightInfo::create_item(data.len())]925 #[weight = <T as Config>::WeightInfo::create_item(data.len())]915 pub fn create_item(origin, collection_id: CollectionId, owner: T::AccountId, data: CreateItemData) -> DispatchResult {926 pub fn create_item(origin, collection_id: CollectionId, owner: T::AccountId, data: CreateItemData) -> DispatchResult {916927917 let sender = ensure_signed(origin)?;928 let sender = ensure_signed(origin)?;945 /// * itemsData: Array items properties. Each property is an array of bytes itself, see [create_item].956 /// * itemsData: Array items properties. Each property is an array of bytes itself, see [create_item].946 /// 957 /// 947 /// * owner: Address, initial owner of the NFT.958 /// * owner: Address, initial owner of the NFT.948 #[weight = T::WeightInfo::create_item(items_data.into_iter()959 #[weight = <T as Config>::WeightInfo::create_item(items_data.into_iter()949 .map(|data| { data.len() })960 .map(|data| { data.len() })950 .sum())]961 .sum())]951 pub fn create_multiple_items(origin, collection_id: CollectionId, owner: T::AccountId, items_data: Vec<CreateItemData>) -> DispatchResult {962 pub fn create_multiple_items(origin, collection_id: CollectionId, owner: T::AccountId, items_data: Vec<CreateItemData>) -> DispatchResult {981 /// * collection_id: ID of the collection.992 /// * collection_id: ID of the collection.982 /// 993 /// 983 /// * item_id: ID of NFT to burn.994 /// * item_id: ID of NFT to burn.984 #[weight = T::WeightInfo::burn_item()]995 #[weight = <T as Config>::WeightInfo::burn_item()]985 pub fn burn_item(origin, collection_id: CollectionId, item_id: TokenId, value: u128) -> DispatchResult {996 pub fn burn_item(origin, collection_id: CollectionId, item_id: TokenId, value: u128) -> DispatchResult {986997987 let sender = ensure_signed(origin)?;998 let sender = ensure_signed(origin)?;1001 {1012 {1002 CollectionMode::NFT => Self::burn_nft_item(collection_id, item_id)?,1013 CollectionMode::NFT => Self::burn_nft_item(collection_id, item_id)?,1003 CollectionMode::Fungible(_) => Self::burn_fungible_item(&sender, collection_id, value)?,1014 CollectionMode::Fungible(_) => Self::burn_fungible_item(&sender, collection_id, value)?,1004 CollectionMode::ReFungible(_) => Self::burn_refungible_item(collection_id, item_id, sender.clone())?,1015 CollectionMode::ReFungible(_) => Self::burn_refungible_item(collection_id, item_id, &sender)?,1005 _ => ()1016 _ => ()1006 };1017 };100710181034 /// * Non-Fungible Mode: Ignored1045 /// * Non-Fungible Mode: Ignored1035 /// * Fungible Mode: Must specify transferred amount1046 /// * Fungible Mode: Must specify transferred amount1036 /// * Re-Fungible Mode: Must specify transferred portion (between 0 and 1)1047 /// * Re-Fungible Mode: Must specify transferred portion (between 0 and 1)1037 #[weight = T::WeightInfo::transfer()]1048 #[weight = <T as Config>::WeightInfo::transfer()]1038 pub fn transfer(origin, recipient: T::AccountId, collection_id: CollectionId, item_id: TokenId, value: u128) -> DispatchResult {1049 pub fn transfer(origin, recipient: T::AccountId, collection_id: CollectionId, item_id: TokenId, value: u128) -> DispatchResult {10391040 let sender = ensure_signed(origin)?;1050 let sender = ensure_signed(origin)?;1041 let target_collection = <Collection<T>>::get(collection_id);1051 Self::transfer_internal(sender, recipient, collection_id, item_id, value)10421043 // Limits check1044 Self::is_correct_transfer(collection_id, &target_collection, &recipient)?;10451046 // Transfer permissions check1047 ensure!(Self::is_item_owner(sender.clone(), collection_id, item_id) ||1048 Self::is_owner_or_admin_permissions(collection_id, sender.clone()),1049 Error::<T>::NoPermission);10501051 if target_collection.access == AccessMode::WhiteList {1052 Self::check_white_list(collection_id, &sender)?;1053 Self::check_white_list(collection_id, &recipient)?;1054 }10551056 match target_collection.mode1057 {1058 CollectionMode::NFT => Self::transfer_nft(collection_id, item_id, sender.clone(), recipient)?,1059 CollectionMode::Fungible(_) => Self::transfer_fungible(collection_id, value, &sender, &recipient)?,1060 CollectionMode::ReFungible(_) => Self::transfer_refungible(collection_id, item_id, value, sender.clone(), recipient)?,1061 _ => ()1062 };10631064 Ok(())1065 }1052 }106610531067 /// Set, change, or remove approved address to transfer the ownership of the NFT.1054 /// Set, change, or remove approved address to transfer the ownership of the NFT.1079 /// * collection_id.1066 /// * collection_id.1080 /// 1067 /// 1081 /// * item_id: ID of the item.1068 /// * item_id: ID of the item.1082 #[weight = T::WeightInfo::approve()]1069 #[weight = <T as Config>::WeightInfo::approve()]1083 pub fn approve(origin, spender: T::AccountId, collection_id: CollectionId, item_id: TokenId, amount: u128) -> DispatchResult {1070 pub fn approve(origin, spender: T::AccountId, collection_id: CollectionId, item_id: TokenId, amount: u128) -> DispatchResult {108410711085 let sender = ensure_signed(origin)?;1072 let sender = ensure_signed(origin)?;108610731074 Self::collection_exists(collection_id)?;1075 Self::token_exists(collection_id, item_id, &sender)?;10761087 // Transfer permissions check1077 // Transfer permissions check1088 let target_collection = <Collection<T>>::get(collection_id);1078 let target_collection = <Collection<T>>::get(collection_id);1089 ensure!(Self::is_item_owner(sender.clone(), collection_id, item_id) ||1079 ensure!(Self::is_item_owner(sender.clone(), collection_id, item_id) ||1124 /// * item_id: ID of the item.1114 /// * item_id: ID of the item.1125 /// 1115 /// 1126 /// * value: Amount to transfer.1116 /// * value: Amount to transfer.1127 #[weight = T::WeightInfo::transfer_from()]1117 #[weight = <T as Config>::WeightInfo::transfer_from()]1128 pub fn transfer_from(origin, from: T::AccountId, recipient: T::AccountId, collection_id: CollectionId, item_id: TokenId, value: u128 ) -> DispatchResult {1118 pub fn transfer_from(origin, from: T::AccountId, recipient: T::AccountId, collection_id: CollectionId, item_id: TokenId, value: u128 ) -> DispatchResult {112911191130 let sender = ensure_signed(origin)?;1120 let sender = ensure_signed(origin)?;1171 Ok(())1161 Ok(())1172 }1162 }117311631174 #[weight = 0]1164 // #[weight = 0]1175 pub fn safe_transfer_from(origin, collection_id: CollectionId, item_id: TokenId, new_owner: T::AccountId) -> DispatchResult {1165 // pub fn safe_transfer_from(origin, collection_id: CollectionId, item_id: TokenId, new_owner: T::AccountId) -> DispatchResult {117611661177 // let no_perm_mes = "You do not have permissions to modify this collection";1167 // // let no_perm_mes = "You do not have permissions to modify this collection";1178 // ensure!(<ApprovedList<T>>::contains_key((collection_id, item_id)), no_perm_mes);1168 // // ensure!(<ApprovedList<T>>::contains_key((collection_id, item_id)), no_perm_mes);1179 // let list_itm = <ApprovedList<T>>::get((collection_id, item_id));1169 // // let list_itm = <ApprovedList<T>>::get((collection_id, item_id));1180 // ensure!(list_itm.contains(&new_owner.clone()), no_perm_mes);1170 // // ensure!(list_itm.contains(&new_owner.clone()), no_perm_mes);118111711182 // // on_nft_received call1172 // // // on_nft_received call118311731184 // Self::transfer(origin, collection_id, item_id, new_owner)?;1174 // // Self::transfer(origin, collection_id, item_id, new_owner)?;118511751186 Ok(())1176 // Ok(())1187 }1177 // }118811781189 /// Set off-chain data schema.1179 /// Set off-chain data schema.1190 /// 1180 /// 1198 /// * collection_id.1188 /// * collection_id.1199 /// 1189 /// 1200 /// * schema: String representing the offchain data schema.1190 /// * schema: String representing the offchain data schema.1201 #[weight = T::WeightInfo::set_variable_meta_data()]1191 #[weight = <T as Config>::WeightInfo::set_variable_meta_data()]1202 pub fn set_variable_meta_data (1192 pub fn set_variable_meta_data (1203 origin,1193 origin,1204 collection_id: CollectionId,1194 collection_id: CollectionId,1208 let sender = ensure_signed(origin)?;1198 let sender = ensure_signed(origin)?;1209 1199 1210 Self::collection_exists(collection_id)?;1200 Self::collection_exists(collection_id)?;1211 1201 Self::token_exists(collection_id, item_id, &sender)?;12021212 ensure!(ChainLimit::get().custom_data_limit >= data.len() as u32, Error::<T>::TokenVariableDataLimitExceeded);1203 ensure!(ChainLimit::get().custom_data_limit >= data.len() as u32, Error::<T>::TokenVariableDataLimitExceeded);121312041217 Self::is_owner_or_admin_permissions(collection_id, sender.clone()),1208 Self::is_owner_or_admin_permissions(collection_id, sender.clone()),1218 Error::<T>::NoPermission);1209 Error::<T>::NoPermission);121912101220 Self::item_exists(collection_id, item_id, &target_collection.mode)?;12211222 match target_collection.mode1211 match target_collection.mode1223 {1212 {1224 CollectionMode::NFT => Self::set_nft_variable_data(collection_id, item_id, data)?,1213 CollectionMode::NFT => Self::set_nft_variable_data(collection_id, item_id, data)?,1244 /// * collection_id.1233 /// * collection_id.1245 /// 1234 /// 1246 /// * schema: SchemaVersion: enum1235 /// * schema: SchemaVersion: enum1247 #[weight = T::WeightInfo::set_schema_version()]1236 #[weight = <T as Config>::WeightInfo::set_schema_version()]1248 pub fn set_schema_version(1237 pub fn set_schema_version(1249 origin,1238 origin,1250 collection_id: CollectionId,1239 collection_id: CollectionId,1271 /// * collection_id.1260 /// * collection_id.1272 /// 1261 /// 1273 /// * schema: String representing the offchain data schema.1262 /// * schema: String representing the offchain data schema.1274 #[weight = T::WeightInfo::set_offchain_schema()]1263 #[weight = <T as Config>::WeightInfo::set_offchain_schema()]1275 pub fn set_offchain_schema(1264 pub fn set_offchain_schema(1276 origin,1265 origin,1277 collection_id: CollectionId,1266 collection_id: CollectionId,1280 let sender = ensure_signed(origin)?;1269 let sender = ensure_signed(origin)?;1281 Self::check_owner_or_admin_permissions(collection_id, sender.clone())?;1270 Self::check_owner_or_admin_permissions(collection_id, sender.clone())?;128212711272 // check schema limit1273 ensure!(schema.len() as u32 > ChainLimit::get().offchain_schema_limit, "");12741283 let mut target_collection = <Collection<T>>::get(collection_id);1275 let mut target_collection = <Collection<T>>::get(collection_id);1284 target_collection.offchain_schema = schema;1276 target_collection.offchain_schema = schema;1285 <Collection<T>>::insert(collection_id, target_collection);1277 <Collection<T>>::insert(collection_id, target_collection);1299 /// * collection_id.1291 /// * collection_id.1300 /// 1292 /// 1301 /// * schema: String representing the const on-chain data schema.1293 /// * schema: String representing the const on-chain data schema.1302 #[weight = T::WeightInfo::set_const_on_chain_schema()]1294 #[weight = <T as Config>::WeightInfo::set_const_on_chain_schema()]1303 pub fn set_const_on_chain_schema (1295 pub fn set_const_on_chain_schema (1304 origin,1296 origin,1305 collection_id: CollectionId,1297 collection_id: CollectionId,1308 let sender = ensure_signed(origin)?;1300 let sender = ensure_signed(origin)?;1309 Self::check_owner_or_admin_permissions(collection_id, sender.clone())?;1301 Self::check_owner_or_admin_permissions(collection_id, sender.clone())?;131013021303 // check schema limit1304 ensure!(schema.len() as u32 <= ChainLimit::get().const_on_chain_schema_limit, "");13051311 let mut target_collection = <Collection<T>>::get(collection_id);1306 let mut target_collection = <Collection<T>>::get(collection_id);1312 target_collection.const_on_chain_schema = schema;1307 target_collection.const_on_chain_schema = schema;1313 <Collection<T>>::insert(collection_id, target_collection);1308 <Collection<T>>::insert(collection_id, target_collection);1327 /// * collection_id.1322 /// * collection_id.1328 /// 1323 /// 1329 /// * schema: String representing the variable on-chain data schema.1324 /// * schema: String representing the variable on-chain data schema.1330 #[weight = T::WeightInfo::set_const_on_chain_schema()]1325 #[weight = <T as Config>::WeightInfo::set_const_on_chain_schema()]1331 pub fn set_variable_on_chain_schema (1326 pub fn set_variable_on_chain_schema (1332 origin,1327 origin,1333 collection_id: CollectionId,1328 collection_id: CollectionId,1336 let sender = ensure_signed(origin)?;1331 let sender = ensure_signed(origin)?;1337 Self::check_owner_or_admin_permissions(collection_id, sender.clone())?;1332 Self::check_owner_or_admin_permissions(collection_id, sender.clone())?;133813331334 // check schema limit1335 ensure!(schema.len() as u32 <= ChainLimit::get().variable_on_chain_schema_limit, "");13361339 let mut target_collection = <Collection<T>>::get(collection_id);1337 let mut target_collection = <Collection<T>>::get(collection_id);1340 target_collection.variable_on_chain_schema = schema;1338 target_collection.variable_on_chain_schema = schema;1341 <Collection<T>>::insert(collection_id, target_collection);1339 <Collection<T>>::insert(collection_id, target_collection);1344 }1342 }134513431346 // Sudo permissions function1344 // Sudo permissions function1347 #[weight = T::WeightInfo::set_chain_limits()]1345 #[weight = <T as Config>::WeightInfo::set_chain_limits()]1348 pub fn set_chain_limits(1346 pub fn set_chain_limits(1349 origin,1347 origin,1350 limits: ChainLimits1348 limits: ChainLimits1368 /// * contract address1366 /// * contract address1369 /// * enable flag1367 /// * enable flag1370 /// 1368 /// 1371 #[weight = T::WeightInfo::enable_contract_sponsoring()]1369 #[weight = <T as Config>::WeightInfo::enable_contract_sponsoring()]1372 pub fn enable_contract_sponsoring(1370 pub fn enable_contract_sponsoring(1373 origin,1371 origin,1374 contract_address: T::AccountId,1372 contract_address: T::AccountId,1403 /// -`contract_address`: Address of the contract to sponsor1401 /// -`contract_address`: Address of the contract to sponsor1404 /// -`rate_limit`: Number of blocks to wait until the next sponsored transaction is allowed1402 /// -`rate_limit`: Number of blocks to wait until the next sponsored transaction is allowed1405 /// 1403 /// 1406 #[weight = T::WeightInfo::set_contract_sponsoring_rate_limit()]1404 #[weight = <T as Config>::WeightInfo::set_contract_sponsoring_rate_limit()]1407 pub fn set_contract_sponsoring_rate_limit(1405 pub fn set_contract_sponsoring_rate_limit(1408 origin,1406 origin,1409 contract_address: T::AccountId,1407 contract_address: T::AccountId,1430 /// -`contract_address`: Address of the contract.1428 /// -`contract_address`: Address of the contract.1431 /// 1429 /// 1432 /// - `enable`: . 1430 /// - `enable`: . 1433 #[weight = T::WeightInfo::toggle_contract_white_list()]1431 #[weight = <T as Config>::WeightInfo::toggle_contract_white_list()]1434 pub fn toggle_contract_white_list(1432 pub fn toggle_contract_white_list(1435 origin,1433 origin,1436 contract_address: T::AccountId,1434 contract_address: T::AccountId,1457 /// -`contract_address`: Address of the contract.1455 /// -`contract_address`: Address of the contract.1458 ///1456 ///1459 /// -`account_address`: Address to add.1457 /// -`account_address`: Address to add.1460 #[weight = T::WeightInfo::add_to_contract_white_list()]1458 #[weight = <T as Config>::WeightInfo::add_to_contract_white_list()]1461 pub fn add_to_contract_white_list(1459 pub fn add_to_contract_white_list(1462 origin,1460 origin,1463 contract_address: T::AccountId,1461 contract_address: T::AccountId,1484 /// -`contract_address`: Address of the contract.1482 /// -`contract_address`: Address of the contract.1485 ///1483 ///1486 /// -`account_address`: Address to remove.1484 /// -`account_address`: Address to remove.1487 #[weight = T::WeightInfo::remove_from_contract_white_list()]1485 #[weight = <T as Config>::WeightInfo::remove_from_contract_white_list()]1488 pub fn remove_from_contract_white_list(1486 pub fn remove_from_contract_white_list(1489 origin,1487 origin,1490 contract_address: T::AccountId,1488 contract_address: T::AccountId,1500 Ok(())1498 Ok(())1501 }1499 }150215001503 #[weight = T::WeightInfo::set_collection_limits()]1501 #[weight = <T as Config>::WeightInfo::set_collection_limits()]1504 pub fn set_collection_limits(1502 pub fn set_collection_limits(1505 origin,1503 origin,1506 collection_id: u32,1504 collection_id: u32,1530 }1528 }1531}1529}153215301533impl<T: Trait> Module<T> {1531impl<T: Config> Module<T> {153415321533 pub fn transfer_internal(sender: T::AccountId, recipient: T::AccountId, collection_id: CollectionId, item_id: TokenId, value: u128) -> DispatchResult {15341535 let target_collection = <Collection<T>>::get(collection_id);15361537 // Limits check1538 Self::is_correct_transfer(collection_id, &target_collection, &recipient)?;15391540 // Transfer permissions check1541 ensure!(Self::is_item_owner(sender.clone(), collection_id, item_id) ||1542 Self::is_owner_or_admin_permissions(collection_id, sender.clone()),1543 Error::<T>::NoPermission);15441545 if target_collection.access == AccessMode::WhiteList {1546 Self::check_white_list(collection_id, &sender)?;1547 Self::check_white_list(collection_id, &recipient)?;1548 }15491550 match target_collection.mode1551 {1552 CollectionMode::NFT => Self::transfer_nft(collection_id, item_id, sender.clone(), recipient)?,1553 CollectionMode::Fungible(_) => Self::transfer_fungible(collection_id, value, &sender, &recipient)?,1554 CollectionMode::ReFungible(_) => Self::transfer_refungible(collection_id, item_id, value, sender.clone(), recipient)?,1555 _ => ()1556 };15571558 Ok(())1559 }156015611535 fn is_correct_transfer(collection_id: CollectionId, collection: &CollectionType<T::AccountId>, recipient: &T::AccountId) -> DispatchResult {1562 fn is_correct_transfer(collection_id: CollectionId, collection: &CollectionType<T::AccountId>, recipient: &T::AccountId) -> DispatchResult {153615631537 // check token limit and account token limit1564 // check token limit and account token limit1660 let value = item.owner.first().unwrap().fraction;1687 let value = item.owner.first().unwrap().fraction;1661 let owner = item.owner.first().unwrap().owner.clone();1688 let owner = item.owner.first().unwrap().owner.clone();166216891663 Self::add_token_index(collection_id, current_index, owner.clone())?;1690 Self::add_token_index(collection_id, current_index, &owner)?;166416911665 <ItemListIndex>::insert(collection_id, current_index);1692 <ItemListIndex>::insert(collection_id, current_index);1666 <ReFungibleItemList<T>>::insert(collection_id, current_index, itemcopy);1693 <ReFungibleItemList<T>>::insert(collection_id, current_index, itemcopy);166716941668 // Update balance1695 // Update balance1669 let new_balance = <Balance<T>>::get(collection_id, owner.clone())1696 let new_balance = <Balance<T>>::get(collection_id, &owner)1670 .checked_add(value)1697 .checked_add(value)1671 .ok_or(Error::<T>::NumOverflow)?;1698 .ok_or(Error::<T>::NumOverflow)?;1672 <Balance<T>>::insert(collection_id, owner.clone(), new_balance);1699 <Balance<T>>::insert(collection_id, owner.clone(), new_balance);1680 .ok_or(Error::<T>::NumOverflow)?;1707 .ok_or(Error::<T>::NumOverflow)?;168117081682 let item_owner = item.owner.clone();1709 let item_owner = item.owner.clone();1683 Self::add_token_index(collection_id, current_index, item.owner.clone())?;1710 Self::add_token_index(collection_id, current_index, &item.owner)?;168417111685 <ItemListIndex>::insert(collection_id, current_index);1712 <ItemListIndex>::insert(collection_id, current_index);1686 <NftItemList<T>>::insert(collection_id, current_index, item);1713 <NftItemList<T>>::insert(collection_id, current_index, item);1697 fn burn_refungible_item(1724 fn burn_refungible_item(1698 collection_id: CollectionId,1725 collection_id: CollectionId,1699 item_id: TokenId,1726 item_id: TokenId,1700 owner: T::AccountId,1727 owner: &T::AccountId,1701 ) -> DispatchResult {1728 ) -> DispatchResult {1702 ensure!(1729 ensure!(1703 <ReFungibleItemList<T>>::contains_key(collection_id, item_id),1730 <ReFungibleItemList<T>>::contains_key(collection_id, item_id),1704 Error::<T>::TokenNotFound1731 Error::<T>::TokenNotFound1705 );1732 );1706 let collection = <ReFungibleItemList<T>>::get(collection_id, item_id);1733 let mut token = <ReFungibleItemList<T>>::get(collection_id, item_id);1707 let item = collection1734 let rft_balance = token1708 .owner1735 .owner1709 .iter()1736 .iter()1710 .filter(|&i| i.owner == owner)1737 .filter(|&i| i.owner == *owner)1711 .next()1738 .next()1712 .unwrap();1739 .unwrap();1713 Self::remove_token_index(collection_id, item_id, owner.clone())?;1740 Self::remove_token_index(collection_id, item_id, owner)?;171417411715 // update balance1742 // update balance1716 let new_balance = <Balance<T>>::get(collection_id, item.owner.clone())1743 let new_balance = <Balance<T>>::get(collection_id, rft_balance.owner.clone())1717 .checked_sub(item.fraction)1744 .checked_sub(rft_balance.fraction)1718 .ok_or(Error::<T>::NumOverflow)?;1745 .ok_or(Error::<T>::NumOverflow)?;1719 <Balance<T>>::insert(collection_id, item.owner.clone(), new_balance);1746 <Balance<T>>::insert(collection_id, rft_balance.owner.clone(), new_balance);172017471721 <ReFungibleItemList<T>>::remove(collection_id, item_id);1748 // Re-create owners list with sender removed1749 let index = token1750 .owner1751 .iter()1752 .position(|i| i.owner == *owner)1753 .unwrap();1754 token.owner.remove(index);1755 let owner_count = token.owner.len();172217561757 // Burn the token completely if this was the last (only) owner1758 if owner_count == 0 {1759 <ReFungibleItemList<T>>::remove(collection_id, item_id);1760 }1761 else {1762 <ReFungibleItemList<T>>::insert(collection_id, item_id, token);1763 }17641723 Ok(())1765 Ok(())1724 }1766 }172517671729 Error::<T>::TokenNotFound1771 Error::<T>::TokenNotFound1730 );1772 );1731 let item = <NftItemList<T>>::get(collection_id, item_id);1773 let item = <NftItemList<T>>::get(collection_id, item_id);1732 Self::remove_token_index(collection_id, item_id, item.owner.clone())?;1774 Self::remove_token_index(collection_id, item_id, &item.owner)?;173317751734 // update balance1776 // update balance1735 let new_balance = <Balance<T>>::get(collection_id, item.owner.clone())1777 let new_balance = <Balance<T>>::get(collection_id, &item.owner)1736 .checked_sub(1)1778 .checked_sub(1)1737 .ok_or(Error::<T>::NumOverflow)?;1779 .ok_or(Error::<T>::NumOverflow)?;1738 <Balance<T>>::insert(collection_id, item.owner.clone(), new_balance);1780 <Balance<T>>::insert(collection_id, item.owner.clone(), new_balance);1841 Ok(())1883 Ok(())1842 }1884 }184318851886 /// Check if token exists. In case of Fungible, check if there is an entry for 1887 /// the owner in fungible balances double map1888 fn token_exists(1889 collection_id: CollectionId,1890 item_id: TokenId,1891 owner: &T::AccountId1892 ) -> DispatchResult {1893 let target_collection = <Collection<T>>::get(collection_id);1894 let exists = match target_collection.mode1895 {1896 CollectionMode::NFT => <NftItemList<T>>::contains_key(collection_id, item_id),1897 CollectionMode::Fungible(_) => <FungibleItemList<T>>::contains_key(collection_id, owner),1898 CollectionMode::ReFungible(_) => <ReFungibleItemList<T>>::contains_key(collection_id, item_id),1899 _ => false1900 };19011902 ensure!(exists == true, Error::<T>::TokenNotFound);1903 Ok(())1904 }19051844 fn transfer_fungible(1906 fn transfer_fungible(1845 collection_id: CollectionId,1907 collection_id: CollectionId,1846 value: u128,1908 value: u128,1847 owner: &T::AccountId,1909 owner: &T::AccountId,1848 recipient: &T::AccountId,1910 recipient: &T::AccountId,1849 ) -> DispatchResult {1911 ) -> DispatchResult {1850 ensure!(1912 Self::token_exists(collection_id, 0, owner)?;1851 <FungibleItemList<T>>::contains_key(collection_id, owner),1852 Error::<T>::TokenNotFound1853 );185419131855 let mut balance = <FungibleItemList<T>>::get(collection_id, owner);1914 let mut balance = <FungibleItemList<T>>::get(collection_id, owner);1856 ensure!(balance.value >= value, Error::<T>::TokenValueTooLow);1915 ensure!(balance.value >= value, Error::<T>::TokenValueTooLow);1880 owner: T::AccountId,1939 owner: T::AccountId,1881 new_owner: T::AccountId,1940 new_owner: T::AccountId,1882 ) -> DispatchResult {1941 ) -> DispatchResult {1883 ensure!(1942 Self::token_exists(collection_id, item_id, &owner)?;1884 <ReFungibleItemList<T>>::contains_key(collection_id, item_id),1885 Error::<T>::TokenNotFound1886 );188719431888 let full_item = <ReFungibleItemList<T>>::get(collection_id, item_id);1944 let full_item = <ReFungibleItemList<T>>::get(collection_id, item_id);1889 let item = full_item1945 let item = full_item1924 <ReFungibleItemList<T>>::insert(collection_id, item_id, new_full_item);1980 <ReFungibleItemList<T>>::insert(collection_id, item_id, new_full_item);192519811926 // update index collection1982 // update index collection1927 Self::move_token_index(collection_id, item_id, old_owner.clone(), new_owner.clone())?;1983 Self::move_token_index(collection_id, item_id, &old_owner, &new_owner)?;1928 } else {1984 } else {1929 let mut new_full_item = full_item.clone();1985 let mut new_full_item = full_item.clone();1930 new_full_item1986 new_full_item1949 owner: new_owner.clone(),2005 owner: new_owner.clone(),1950 fraction: value,2006 fraction: value,1951 });2007 });1952 Self::add_token_index(collection_id, item_id, new_owner.clone())?;2008 Self::add_token_index(collection_id, item_id, &new_owner)?;1953 }2009 }195420101955 <ReFungibleItemList<T>>::insert(collection_id, item_id, new_full_item);2011 <ReFungibleItemList<T>>::insert(collection_id, item_id, new_full_item);1964 sender: T::AccountId,2020 sender: T::AccountId,1965 new_owner: T::AccountId,2021 new_owner: T::AccountId,1966 ) -> DispatchResult {2022 ) -> DispatchResult {1967 ensure!(2023 Self::token_exists(collection_id, item_id, &sender)?;1968 <NftItemList<T>>::contains_key(collection_id, item_id),1969 Error::<T>::TokenNotFound1970 );197120241972 let mut item = <NftItemList<T>>::get(collection_id, item_id);2025 let mut item = <NftItemList<T>>::get(collection_id, item_id);197320261993 <NftItemList<T>>::insert(collection_id, item_id, item);2046 <NftItemList<T>>::insert(collection_id, item_id, item);199420471995 // update index collection2048 // update index collection1996 Self::move_token_index(collection_id, item_id, old_owner.clone(), new_owner.clone())?;2049 Self::move_token_index(collection_id, item_id, &old_owner, &new_owner)?;199720501998 Ok(())2051 Ok(())1999 }2052 }2000 2053 2001 fn item_exists(2002 collection_id: CollectionId,2003 item_id: TokenId,2004 mode: &CollectionMode2005 ) -> DispatchResult {2006 match mode {2007 CollectionMode::NFT => ensure!(<NftItemList<T>>::contains_key(collection_id, item_id), Error::<T>::TokenNotFound),2008 CollectionMode::ReFungible(_) => ensure!(<ReFungibleItemList<T>>::contains_key(collection_id, item_id), Error::<T>::TokenNotFound),2009 _ => ()2010 };2011 2012 Ok(())2013 }20142015 fn set_re_fungible_variable_data(2054 fn set_re_fungible_variable_data(2016 collection_id: CollectionId,2055 collection_id: CollectionId,2017 item_id: TokenId,2056 item_id: TokenId,2073 .unwrap();2112 .unwrap();207421132075 let item_owner = item.owner.clone();2114 let item_owner = item.owner.clone();2076 Self::add_token_index(collection_id, current_index, item.owner.clone()).unwrap();2115 Self::add_token_index(collection_id, current_index, &item.owner).unwrap();207721162078 <ItemListIndex>::insert(collection_id, current_index);2117 <ItemListIndex>::insert(collection_id, current_index);207921182080 // Update balance2119 // Update balance2081 let new_balance = <Balance<T>>::get(collection_id, item_owner.clone())2120 let new_balance = <Balance<T>>::get(collection_id, &item_owner)2082 .checked_add(1)2121 .checked_add(1)2083 .unwrap();2122 .unwrap();2084 <Balance<T>>::insert(collection_id, item_owner.clone(), new_balance);2123 <Balance<T>>::insert(collection_id, item_owner.clone(), new_balance);2089 .checked_add(1)2128 .checked_add(1)2090 .unwrap();2129 .unwrap();209121302092 Self::add_token_index(collection_id, current_index, (*owner).clone()).unwrap();2131 Self::add_token_index(collection_id, current_index, owner).unwrap();209321322094 <ItemListIndex>::insert(collection_id, current_index);2133 <ItemListIndex>::insert(collection_id, current_index);209521342108 let value = item.owner.first().unwrap().fraction;2147 let value = item.owner.first().unwrap().fraction;2109 let owner = item.owner.first().unwrap().owner.clone();2148 let owner = item.owner.first().unwrap().owner.clone();211021492111 Self::add_token_index(collection_id, current_index, owner.clone()).unwrap();2150 Self::add_token_index(collection_id, current_index, &owner).unwrap();211221512113 <ItemListIndex>::insert(collection_id, current_index);2152 <ItemListIndex>::insert(collection_id, current_index);211421532115 // Update balance2154 // Update balance2116 let new_balance = <Balance<T>>::get(collection_id, owner.clone())2155 let new_balance = <Balance<T>>::get(collection_id, &owner)2117 .checked_add(value)2156 .checked_add(value)2118 .unwrap();2157 .unwrap();2119 <Balance<T>>::insert(collection_id, owner.clone(), new_balance);2158 <Balance<T>>::insert(collection_id, owner.clone(), new_balance);2120 }2159 }212121602122 fn add_token_index(collection_id: CollectionId, item_index: TokenId, owner: T::AccountId) -> DispatchResult {2161 fn add_token_index(collection_id: CollectionId, item_index: TokenId, owner: &T::AccountId) -> DispatchResult {212321622124 // add to account limit2163 // add to account limit2125 if <AccountItemCount<T>>::contains_key(owner.clone()) {2164 if <AccountItemCount<T>>::contains_key(owner) {212621652127 // bound Owned tokens by a single address2166 // bound Owned tokens by a single address2128 let count = <AccountItemCount<T>>::get(owner.clone());2167 let count = <AccountItemCount<T>>::get(owner);2129 ensure!(count < ChainLimit::get().account_token_ownership_limit, Error::<T>::AddressOwnershipLimitExceeded);2168 ensure!(count < ChainLimit::get().account_token_ownership_limit, Error::<T>::AddressOwnershipLimitExceeded);213021692131 <AccountItemCount<T>>::insert(owner.clone(), count2170 <AccountItemCount<T>>::insert(owner.clone(), count2136 <AccountItemCount<T>>::insert(owner.clone(), 1);2175 <AccountItemCount<T>>::insert(owner.clone(), 1);2137 }2176 }213821772139 let list_exists = <AddressTokens<T>>::contains_key(collection_id, owner.clone());2178 let list_exists = <AddressTokens<T>>::contains_key(collection_id, owner);2140 if list_exists {2179 if list_exists {2141 let mut list = <AddressTokens<T>>::get(collection_id, owner.clone());2180 let mut list = <AddressTokens<T>>::get(collection_id, owner);2142 let item_contains = list.contains(&item_index.clone());2181 let item_contains = list.contains(&item_index.clone());214321822144 if !item_contains {2183 if !item_contains {2149 } else {2188 } else {2150 let mut itm = Vec::new();2189 let mut itm = Vec::new();2151 itm.push(item_index.clone());2190 itm.push(item_index.clone());2152 <AddressTokens<T>>::insert(collection_id, owner, itm);2191 <AddressTokens<T>>::insert(collection_id, owner.clone(), itm);2153 2154 }2192 }215521932156 Ok(())2194 Ok(())2159 fn remove_token_index(2197 fn remove_token_index(2160 collection_id: CollectionId,2198 collection_id: CollectionId,2161 item_index: TokenId,2199 item_index: TokenId,2162 owner: T::AccountId,2200 owner: &T::AccountId,2163 ) -> DispatchResult {2201 ) -> DispatchResult {216422022165 // update counter2203 // update counter2166 <AccountItemCount<T>>::insert(owner.clone(), 2204 <AccountItemCount<T>>::insert(owner.clone(), 2167 <AccountItemCount<T>>::get(owner.clone())2205 <AccountItemCount<T>>::get(owner)2168 .checked_sub(1)2206 .checked_sub(1)2169 .ok_or(Error::<T>::NumOverflow)?);2207 .ok_or(Error::<T>::NumOverflow)?);21702208217122092172 let list_exists = <AddressTokens<T>>::contains_key(collection_id, owner.clone());2210 let list_exists = <AddressTokens<T>>::contains_key(collection_id, owner);2173 if list_exists {2211 if list_exists {2174 let mut list = <AddressTokens<T>>::get(collection_id, owner.clone());2212 let mut list = <AddressTokens<T>>::get(collection_id, owner);2175 let item_contains = list.contains(&item_index.clone());2213 let item_contains = list.contains(&item_index.clone());217622142177 if item_contains {2215 if item_contains {2178 list.retain(|&item| item != item_index);2216 list.retain(|&item| item != item_index);2179 <AddressTokens<T>>::insert(collection_id, owner, list);2217 <AddressTokens<T>>::insert(collection_id, owner.clone(), list);2180 }2218 }2181 }2219 }218222202186 fn move_token_index(2224 fn move_token_index(2187 collection_id: CollectionId,2225 collection_id: CollectionId,2188 item_index: TokenId,2226 item_index: TokenId,2189 old_owner: T::AccountId,2227 old_owner: &T::AccountId,2190 new_owner: T::AccountId,2228 new_owner: &T::AccountId,2191 ) -> DispatchResult {2229 ) -> DispatchResult {2192 Self::remove_token_index(collection_id, item_index, old_owner)?;2230 Self::remove_token_index(collection_id, item_index, old_owner)?;2193 Self::add_token_index(collection_id, item_index, new_owner)?;2231 Self::add_token_index(collection_id, item_index, new_owner)?;2214/// Fee multiplier.2252/// Fee multiplier.2215pub type Multiplier = FixedU128;2253pub type Multiplier = FixedU128;221622542217type BalanceOf<T> = <<T as transaction_payment::Trait>::Currency as Currency<2255type BalanceOf<T> = <<T as transaction_payment::Config>::OnChargeTransaction as transaction_payment::OnChargeTransaction<T>>::Balance;2218 <T as system::Trait>::AccountId,2219>>::Balance;2220type NegativeImbalanceOf<T> = <<T as transaction_payment::Trait>::Currency as Currency<2221 <T as system::Trait>::AccountId,2222>>::NegativeImbalance;222322562224/// Require the transactor pay for themselves and maybe include a tip to gain additional priority2257/// Require the transactor pay for themselves and maybe include a tip to gain additional priority2225/// in the queue.2258/// in the queue.2226#[derive(Encode, Decode, Clone, Eq, PartialEq)]2259#[derive(Encode, Decode, Clone, Eq, PartialEq)]2227pub struct ChargeTransactionPayment<T: Trait + Send + Sync>(2260pub struct ChargeTransactionPayment<T: Config>(#[codec(compact)] BalanceOf<T>);2228 #[codec(compact)] BalanceOf<T>2229);223022612231impl<T: Trait + Send + Sync> sp_std::fmt::Debug2262impl<T: Config + Send + Sync> sp_std::fmt::Debug 2232 for ChargeTransactionPayment<T>2263 for ChargeTransactionPayment<T>2233{2264{2234 #[cfg(feature = "std")]2265 #[cfg(feature = "std")]2235 fn fmt(&self, f: &mut sp_std::fmt::Formatter) -> sp_std::fmt::Result {2266 fn fmt(&self, f: &mut sp_std::fmt::Formatter) -> sp_std::fmt::Result {2236 write!(f, "ChargeTransactionPayment<{:?}>", self.0)2267 write!(f, "ChargeTransactionPayment<{:?}>", self.0)2237 }2268 }2238 #[cfg(not(feature = "std"))]2269 #[cfg(not(feature = "std"))]2239 fn fmt(&self, _: &mut sp_std::fmt::Formatter) -> sp_std::fmt::Result {2270 fn fmt(&self, _: &mut sp_std::fmt::Formatter) -> sp_std::fmt::Result {2240 Ok(())2271 Ok(())2241 }2272 }2242}2273}224322742244impl<T: Trait + Send + Sync> ChargeTransactionPayment<T>2275impl<T: Config> ChargeTransactionPayment<T>2245where2276where2246 T::Call: Dispatchable<Info = DispatchInfo, PostInfo = PostDispatchInfo> + IsSubType<Call<T>> + IsSubType<pallet_contracts::Call<T>>,2277 T::Call: Dispatchable<Info=DispatchInfo, PostInfo=PostDispatchInfo> + IsSubType<Call<T>> + IsSubType<pallet_contracts::Call<T>>,2247 BalanceOf<T>: Send + Sync + FixedPointOperand,2278 BalanceOf<T>: Send + Sync + From<u64> + FixedPointOperand,2279 T::AccountId: AsRef<[u8]>,2280 T::AccountId: UncheckedFrom<T::Hash>,2248{2281{2249 /// utility constructor. Used only in client/factory code.2282 fn traditional_fee(2250 pub fn from(fee: BalanceOf<T>) -> Self {2251 Self(fee)2252 }22532254 pub fn traditional_fee(2255 len: usize,2283 len: usize,2256 info: &DispatchInfoOf<T::Call>,2284 info: &DispatchInfoOf<T::Call>,2257 tip: BalanceOf<T>,2285 tip: BalanceOf<T>,2263 }2291 }226422922265 fn get_priority(len: usize, info: &DispatchInfoOf<T::Call>, final_fee: BalanceOf<T>) -> TransactionPriority {2293 fn get_priority(len: usize, info: &DispatchInfoOf<T::Call>, final_fee: BalanceOf<T>) -> TransactionPriority {2266 let weight_saturation = T::MaximumBlockWeight::get() / info.weight.max(1);2294 let weight_saturation = T::BlockWeights::get().max_block / info.weight.max(1);2267 let len_saturation = T::MaximumBlockLength::get() as u64 / (len as u64).max(1);2295 let max_block_length = *T::BlockLength::get().max.get(DispatchClass::Normal);2296 let len_saturation = max_block_length as u64 / (len as u64).max(1);2268 let coefficient: BalanceOf<T> = weight_saturation.min(len_saturation).saturated_into::<BalanceOf<T>>();2297 let coefficient: BalanceOf<T> = weight_saturation2298 .min(len_saturation)2299 .saturated_into::<BalanceOf<T>>();2269 final_fee.saturating_mul(coefficient).saturated_into::<TransactionPriority>()2300 final_fee2301 .saturating_mul(coefficient)2302 .saturated_into::<TransactionPriority>()2270 }2303 }227123042272 fn withdraw_fee(2305 fn withdraw_fee(2273 &self,2306 &self,2274 who: &T::AccountId,2307 who: &T::AccountId,2275 call: &T::Call,2308 call: &T::Call,2276 info: &DispatchInfoOf<T::Call>,2309 info: &DispatchInfoOf<T::Call>,2277 len: usize,2310 len: usize,2278 ) -> Result<(BalanceOf<T>, Option<NegativeImbalanceOf<T>>), TransactionValidityError> {2311 ) -> Result<2312 (2313 BalanceOf<T>,2314 <<T as transaction_payment::Config>::OnChargeTransaction as transaction_payment::OnChargeTransaction<T>>::LiquidityInfo,2315 ),2316 TransactionValidityError,2317 > {2279 let tip = self.0;2318 let tip = self.0;228023192281 // Set fee based on call type. Creating collection costs 1 Unique.2320 // Set fee based on call type. Creating collection costs 1 Unique.228923282290 // Only mess with balances if fee is not zero.2329 // Only mess with balances if fee is not zero.2291 if fee.is_zero() {2330 if fee.is_zero() {2292 return Ok((fee, None));2331 return <<T as transaction_payment::Config>::OnChargeTransaction as transaction_payment::OnChargeTransaction<T>>::withdraw_fee(who, call, info, fee, tip)2332 .map(|i| (fee, i));2293 }2333 }229423342295 // Determine who is paying transaction fee based on ecnomic model2335 // Determine who is paying transaction fee based on ecnomic model2296 // Parse call to extract collection ID and access collection sponsor2336 // Parse call to extract collection ID and access collection sponsor2297 let mut sponsor: T::AccountId = match IsSubType::<Call<T>>::is_sub_type(call) {2337 let mut sponsor: T::AccountId = match IsSubType::<Call<T>>::is_sub_type(call) {2298 Some(Call::create_item(collection_id, _owner, _properties)) => {2338 Some(Call::create_item(collection_id, _owner, _properties)) => {229923392340 // sponsor timeout2341 let block_number = <system::Module<T>>::block_number() as T::BlockNumber;23422343 let limit = <Collection<T>>::get(collection_id).limits.sponsor_transfer_timeout;2344 let mut sponsored = true;2345 if <CreateItemBasket<T>>::contains_key((collection_id, &who)) {2346 let last_tx_block = <CreateItemBasket<T>>::get((collection_id, &who));2347 let limit_time = last_tx_block + limit.into();2348 if block_number <= limit_time {2349 sponsored = false;2350 }2351 }2352 if sponsored {2353 <CreateItemBasket<T>>::insert((collection_id, who.clone()), block_number);2354 }23552300 // check free create limit2356 // check free create limit2301 if (<Collection<T>>::get(collection_id).limits.sponsored_data_size >= (_properties.len() as u32)) &&2357 if (<Collection<T>>::get(collection_id).limits.sponsored_data_size >= (_properties.len() as u32)) &&2302 (<Collection<T>>::get(collection_id).sponsor_confirmed)2358 (<Collection<T>>::get(collection_id).sponsor_confirmed) &&2359 (sponsored)2303 {2360 {2304 <Collection<T>>::get(collection_id).sponsor2361 <Collection<T>>::get(collection_id).sponsor2305 } else {2362 } else {2407 sponsor = match IsSubType::<pallet_contracts::Call<T>>::is_sub_type(call) {2464 sponsor = match IsSubType::<pallet_contracts::Call<T>>::is_sub_type(call) {240824652409 // On instantiation: set the contract owner2466 // On instantiation: set the contract owner2410 Some(pallet_contracts::Call::instantiate(_endowment, _gas_limit, code_hash, data)) => {2467 Some(pallet_contracts::Call::instantiate(_endowment, _gas_limit, code_hash, _data, salt)) => {241124682412 let new_contract_address = <T as pallet_contracts::Trait>::DetermineContractAddress::contract_address_for(2469 let new_contract_address = <pallet_contracts::Module<T>>::contract_address(2413 code_hash,2414 &data,2415 &who,2470 &who,2471 code_hash,2472 salt,2416 );2473 );2417 <ContractOwner<T>>::insert(new_contract_address.clone(), who.clone());2474 <ContractOwner<T>>::insert(new_contract_address.clone(), who.clone());241824752470 who_pays_fee = who.clone();2527 who_pays_fee = who.clone();2471 }2528 }247225292473 match <T as transaction_payment::Trait>::Currency::withdraw(2530 <<T as transaction_payment::Config>::OnChargeTransaction as transaction_payment::OnChargeTransaction<T>>::withdraw_fee(&who_pays_fee, call, info, fee, tip)2474 &who_pays_fee,2475 fee,2476 if tip.is_zero() {2477 WithdrawReason::TransactionPayment.into()2531 .map(|i| (fee, i))2478 } else {2479 WithdrawReason::TransactionPayment | WithdrawReason::Tip2480 },2481 ExistenceRequirement::KeepAlive,2482 ) {2483 Ok(imbalance) => Ok((fee, Some(imbalance))),2484 Err(_) => Err(InvalidTransaction::Payment.into()),2485 }2486 }2532 }2487}2533}24882534248925352490impl<T: Trait + Send + Sync> SignedExtension2536impl<T: Config + Send + Sync> SignedExtension2491 for ChargeTransactionPayment<T>2537 for ChargeTransactionPayment<T>2492where2538where2493 BalanceOf<T>: Send + Sync + From<u64> + FixedPointOperand,2539 BalanceOf<T>: Send + Sync + From<u64> + FixedPointOperand,2494 T::Call: Dispatchable<Info = DispatchInfo, PostInfo = PostDispatchInfo> + IsSubType<Call<T>> + IsSubType<pallet_contracts::Call<T>>,2540 T::Call: Dispatchable<Info = DispatchInfo, PostInfo = PostDispatchInfo> + IsSubType<Call<T>> + IsSubType<pallet_contracts::Call<T>>,2541 T::AccountId: AsRef<[u8]>,2542 T::AccountId: UncheckedFrom<T::Hash>,2495{2543{2496 const IDENTIFIER: &'static str = "ChargeTransactionPayment";2544 const IDENTIFIER: &'static str = "ChargeTransactionPayment";2497 type AccountId = T::AccountId;2545 type AccountId = T::AccountId;2498 type Call = T::Call;2546 type Call = T::Call;2499 type AdditionalSigned = ();2547 type AdditionalSigned = ();2500 type Pre = (2548 type Pre = (2549 // tip2501 BalanceOf<T>,2550 BalanceOf<T>,2551 // who pays fee2502 Self::AccountId,2552 Self::AccountId,2503 Option<NegativeImbalanceOf<T>>,2553 // imbalance resulting from withdrawing the fee2504 BalanceOf<T>,2554 <<T as transaction_payment::Config>::OnChargeTransaction as transaction_payment::OnChargeTransaction<T>>::LiquidityInfo,2505 );2555 );2506 fn additional_signed(&self) -> sp_std::result::Result<(), TransactionValidityError> {2556 fn additional_signed(&self) -> sp_std::result::Result<(), TransactionValidityError> {2507 Ok(())2557 Ok(())2528 info: &DispatchInfoOf<Self::Call>,2578 info: &DispatchInfoOf<Self::Call>,2529 len: usize,2579 len: usize,2530 ) -> Result<Self::Pre, TransactionValidityError> {2580 ) -> Result<Self::Pre, TransactionValidityError> {2531 let (fee, imbalance) = self.withdraw_fee(who, call, info, len)?;2581 let (_fee, imbalance) = self.withdraw_fee(who, call, info, len)?;2532 Ok((self.0, who.clone(), imbalance, fee))2582 Ok((self.0, who.clone(), imbalance))2533 }2583 }253425842535 fn post_dispatch(2585 fn post_dispatch(2539 len: usize,2589 len: usize,2540 _result: &DispatchResult,2590 _result: &DispatchResult,2541 ) -> Result<(), TransactionValidityError> {2591 ) -> Result<(), TransactionValidityError> {2542 let (tip, who, imbalance, fee) = pre;2592 let (tip, who, imbalance) = pre;2543 if let Some(payed) = imbalance {2593 let actual_fee = transaction_payment::Module::<T>::compute_actual_fee(2544 let actual_fee = <transaction_payment::Module<T>>::compute_actual_fee(2545 len as u32, info, post_info, tip,2594 len as u32,2595 info,2596 post_info,2597 tip,2546 );2598 );2547 let refund = fee.saturating_sub(actual_fee);2548 let actual_payment =2549 match <T as transaction_payment::Trait>::Currency::deposit_into_existing(2599 <T as transaction_payment::Config>::OnChargeTransaction::correct_and_deposit_fee(&who, info, post_info, actual_fee, tip, imbalance)?;2550 &who, refund,2551 ) {2552 Ok(refund_imbalance) => {2553 // The refund cannot be larger than the up front payed max weight.2554 // `PostDispatchInfo::calc_unspent` guards against such a case.2555 match payed.offset(refund_imbalance) {2556 Ok(actual_payment) => actual_payment,2557 Err(_) => return Err(InvalidTransaction::Payment.into()),2558 }2559 }2560 // We do not recreate the account using the refund. The up front payment2561 // is gone in that case.2562 Err(_) => payed,2563 };2564 let imbalances = actual_payment.split(tip);2565 <T as transaction_payment::Trait>::OnTransactionPayment::on_unbalanceds(2566 Some(imbalances.0).into_iter().chain(Some(imbalances.1)),2567 );2568 }2569 Ok(())2600 Ok(())2570 }2601 }2571}2602}25722603pallets/nft/src/tests.rsdiffbeforeafterboth20 nft_sponsor_transfer_timeout: 15,20 nft_sponsor_transfer_timeout: 15,21 fungible_sponsor_transfer_timeout: 15,21 fungible_sponsor_transfer_timeout: 15,22 refungible_sponsor_transfer_timeout: 15, 22 refungible_sponsor_transfer_timeout: 15,23 const_on_chain_schema_limit: 1024,24 offchain_schema_limit: 1024,25 variable_on_chain_schema_limit: 1024,23 }));26 }));24}27}25281255 });1258 });1256}1259}125712601258// If Public Access mode is set to WhiteList, oken transfers can’t be Approved by a non-whitelisted address (see Approve method).1261// If Public Access mode is set to WhiteList, token transfers can’t be Approved by a non-whitelisted address (see Approve method).1259#[test]1262#[test]1260fn white_list_test_6() {1263fn white_list_test_6() {1261 new_test_ext().execute_with(|| {1264 new_test_ext().execute_with(|| {126512681266 let origin1 = Origin::signed(1);1269 let origin1 = Origin::signed(1);12701271 let data = default_nft_data();1272 create_test_item(collection_id, &data.into());12731267 assert_ok!(TemplateModule::set_public_access_mode(1274 assert_ok!(TemplateModule::set_public_access_mode(1268 origin1.clone(),1275 origin1.clone(),1639 nft_sponsor_transfer_timeout: 15,1646 nft_sponsor_transfer_timeout: 15,1640 fungible_sponsor_transfer_timeout: 15,1647 fungible_sponsor_transfer_timeout: 15,1641 refungible_sponsor_transfer_timeout: 15, 1648 refungible_sponsor_transfer_timeout: 15,1649 const_on_chain_schema_limit: 1024,1650 offchain_schema_limit: 1024,1651 variable_on_chain_schema_limit: 1024,1642 }));1652 }));1643 1653 1644 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1654 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1668 nft_sponsor_transfer_timeout: 15,1678 nft_sponsor_transfer_timeout: 15,1669 fungible_sponsor_transfer_timeout: 15,1679 fungible_sponsor_transfer_timeout: 15,1670 refungible_sponsor_transfer_timeout: 15, 1680 refungible_sponsor_transfer_timeout: 15,1681 const_on_chain_schema_limit: 1024,1682 offchain_schema_limit: 1024,1683 variable_on_chain_schema_limit: 1024,1671 }));1684 }));1672 1685 1673 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1686 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1691 nft_sponsor_transfer_timeout: 15,1704 nft_sponsor_transfer_timeout: 15,1692 fungible_sponsor_transfer_timeout: 15,1705 fungible_sponsor_transfer_timeout: 15,1693 refungible_sponsor_transfer_timeout: 15, 1706 refungible_sponsor_transfer_timeout: 15,1707 const_on_chain_schema_limit: 1024,1708 offchain_schema_limit: 1024,1709 variable_on_chain_schema_limit: 1024,1694 }));1710 }));1695 1711 1696 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1712 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1714 nft_sponsor_transfer_timeout: 15,1730 nft_sponsor_transfer_timeout: 15,1715 fungible_sponsor_transfer_timeout: 15,1731 fungible_sponsor_transfer_timeout: 15,1716 refungible_sponsor_transfer_timeout: 15, 1732 refungible_sponsor_transfer_timeout: 15,1733 const_on_chain_schema_limit: 1024,1734 offchain_schema_limit: 1024,1735 variable_on_chain_schema_limit: 1024,1717 }));1736 }));1718 1737 1719 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1738 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1745 nft_sponsor_transfer_timeout: 15,1764 nft_sponsor_transfer_timeout: 15,1746 fungible_sponsor_transfer_timeout: 15,1765 fungible_sponsor_transfer_timeout: 15,1747 refungible_sponsor_transfer_timeout: 15, 1766 refungible_sponsor_transfer_timeout: 15,1767 const_on_chain_schema_limit: 1024,1768 offchain_schema_limit: 1024,1769 variable_on_chain_schema_limit: 1024,1748 }));1770 }));174917711750 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1772 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1776 nft_sponsor_transfer_timeout: 15,1798 nft_sponsor_transfer_timeout: 15,1777 fungible_sponsor_transfer_timeout: 15,1799 fungible_sponsor_transfer_timeout: 15,1778 refungible_sponsor_transfer_timeout: 15, 1800 refungible_sponsor_transfer_timeout: 15,1801 const_on_chain_schema_limit: 1024,1802 offchain_schema_limit: 1024,1803 variable_on_chain_schema_limit: 1024,1779 }));1804 }));178018051781 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1806 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1807 nft_sponsor_transfer_timeout: 15,1832 nft_sponsor_transfer_timeout: 15,1808 fungible_sponsor_transfer_timeout: 15,1833 fungible_sponsor_transfer_timeout: 15,1809 refungible_sponsor_transfer_timeout: 15, 1834 refungible_sponsor_transfer_timeout: 15,1835 const_on_chain_schema_limit: 1024,1836 offchain_schema_limit: 1024,1837 variable_on_chain_schema_limit: 1024,1810 }));1838 }));181118391812 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1840 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1924 nft_sponsor_transfer_timeout: 15,1952 nft_sponsor_transfer_timeout: 15,1925 fungible_sponsor_transfer_timeout: 15,1953 fungible_sponsor_transfer_timeout: 15,1926 refungible_sponsor_transfer_timeout: 15, 1954 refungible_sponsor_transfer_timeout: 15,1955 const_on_chain_schema_limit: 1024,1956 offchain_schema_limit: 1024,1957 variable_on_chain_schema_limit: 1024,1927 }));1958 }));192819591929 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1960 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1949 nft_sponsor_transfer_timeout: 15,1980 nft_sponsor_transfer_timeout: 15,1950 fungible_sponsor_transfer_timeout: 15,1981 fungible_sponsor_transfer_timeout: 15,1951 refungible_sponsor_transfer_timeout: 15, 1982 refungible_sponsor_transfer_timeout: 15,1983 const_on_chain_schema_limit: 1024,1984 offchain_schema_limit: 1024,1985 variable_on_chain_schema_limit: 1024,1952 }));1986 }));1953198719541988pallets/nft/src/types.rsdiffbeforeafterbothno changes
runtime/Cargo.tomldiffbeforeafterboth5license = 'Unlicense'5license = 'Unlicense'6name = 'nft-runtime'6name = 'nft-runtime'7repository = 'https://github.com/usetech-llc/nft_parachain/'7repository = 'https://github.com/usetech-llc/nft_parachain/'8version = '2.0.0'8version = '3.0.0'9910[package.metadata.docs.rs]10[package.metadata.docs.rs]11targets = ['x86_64-unknown-linux-gnu']11targets = ['x86_64-unknown-linux-gnu']25serde = { features = ['derive'], optional = true, version = '1.0.101' }25serde = { features = ['derive'], optional = true, version = '1.0.101' }262627# local dependencies27# local dependencies28pallet-nft = { path = '../pallets/nft', default-features = false, version = '2.0.0' }28pallet-nft = { path = '../pallets/nft', default-features = false, version = '3.0.0' }292930# Substrate dependencies30# Substrate dependencies31frame-benchmarking = { default-features = false, optional = true, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi' }31frame-benchmarking = { default-features = false, optional = true, version = '2.0.1' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique' }32frame-executive = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi' }32frame-executive = { default-features = false, version = '2.0.1' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique' }33frame-support = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi' }33frame-support = { default-features = false, version = '2.0.1' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique' }34frame-system = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi' }34frame-system = { default-features = false, version = '2.0.1' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique' }35frame-system-benchmarking = { default-features = false, optional = true, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi' }35frame-system-benchmarking = { default-features = false, optional = true, version = '2.0.1' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique' }36frame-system-rpc-runtime-api = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi' }36frame-system-rpc-runtime-api = { default-features = false, version = '2.0.1' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique' }37pallet-aura = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi' }37pallet-aura = { default-features = false, version = '2.0.1' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique' }38pallet-balances = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi' }38pallet-balances = { default-features = false, version = '2.0.1' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique' }39pallet-contracts = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi' }39pallet-contracts = { default-features = false, version = '2.0.1' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique' }40pallet-contracts-primitives = { default-features = false, version = '2.0.0', git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi' }40pallet-contracts-primitives = { default-features = false, version = '2.0.1', git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique' }41pallet-contracts-rpc-runtime-api = { default-features = false, version = '0.8.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi' }41pallet-contracts-rpc-runtime-api = { default-features = false, version = '0.8.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique' }42pallet-grandpa = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi' }42pallet-grandpa = { default-features = false, version = '2.0.1' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique' }43pallet-randomness-collective-flip = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi' }43pallet-randomness-collective-flip = { default-features = false, version = '2.0.1' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique' }44pallet-sudo = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi' }44pallet-sudo = { default-features = false, version = '2.0.1' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique' }45pallet-timestamp = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi' }45pallet-timestamp = { default-features = false, version = '2.0.1' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique' }46pallet-transaction-payment = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi' }46pallet-transaction-payment = { default-features = false, version = '2.0.1' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique' }47pallet-transaction-payment-rpc-runtime-api = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi' }47pallet-transaction-payment-rpc-runtime-api = { default-features = false, version = '2.0.1' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique' }48pallet-treasury = { version = "2.0.0", default-features = false, git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi' }48pallet-treasury = { version = "2.0.1", default-features = false, git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique' }49pallet-vesting = { version = "2.0.0", default-features = false, git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi' }49pallet-vesting = { version = "2.0.1", default-features = false, git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique' }50sp-api = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi' }50sp-api = { default-features = false, version = '2.0.1' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique' }51sp-arithmetic = { default-features = false, version = '2.0.1' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique' }51sp-block-builder = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi' }52sp-block-builder = { default-features = false, version = '2.0.1' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique' }52sp-consensus-aura = { default-features = false, version = '0.8.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi' }53sp-consensus-aura = { default-features = false, version = '0.8.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique' }53sp-core = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi' }54sp-core = { default-features = false, version = '2.0.1' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique' }54sp-inherents = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi' }55sp-inherents = { default-features = false, version = '2.0.1' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique' }55sp-offchain = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi' }56sp-offchain = { default-features = false, version = '2.0.1' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique' }56sp-runtime = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi' }57sp-runtime = { default-features = false, version = '2.0.1' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique' }57sp-session = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi' }58sp-session = { default-features = false, version = '2.0.1' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique' }58sp-std = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi' }59sp-std = { default-features = false, version = '2.0.1' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique' }59sp-transaction-pool = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi' }60sp-transaction-pool = { default-features = false, version = '2.0.1' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique' }60sp-version = { default-features = false, version = '2.0.0' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'release_flexi' }61sp-version = { default-features = false, version = '2.0.1' , git = 'https://github.com/usetech-llc/substrate.git', branch = 'unique' }62smallvec = "1.4.1"616362[features]64[features]63default = ['std']65default = ['std']runtime/src/chain_extension.rsdiffbeforeafterbothno changes
runtime/src/lib.rsdiffbeforeafterboth13#[cfg(feature = "std")]13#[cfg(feature = "std")]14include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs"));14include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs"));151516use pallet_contracts_rpc_runtime_api::ContractExecResult;17use pallet_grandpa::fg_primitives;16use pallet_grandpa::fg_primitives;18use pallet_grandpa::{AuthorityId as GrandpaId, AuthorityList as GrandpaAuthorityList};17use pallet_grandpa::{AuthorityId as GrandpaId, AuthorityList as GrandpaAuthorityList};19use sp_api::impl_runtime_apis;18use sp_api::impl_runtime_apis;20use sp_consensus_aura::sr25519::AuthorityId as AuraId;19use sp_consensus_aura::sr25519::AuthorityId as AuraId;21use sp_core::{ crypto::KeyTypeId, crypto::Public, OpaqueMetadata };20use sp_core::{ crypto::KeyTypeId, crypto::Public, OpaqueMetadata };22use sp_runtime::{21use sp_runtime::{22 Permill, Perbill, Percent,23 ModuleId,23 create_runtime_str, generic, impl_opaque_keys,24 create_runtime_str, generic, impl_opaque_keys,24 traits::{25 traits::{25 Convert, ConvertInto, BlakeTwo256, Block as BlockT, IdentifyAccount, 26 Convert, ConvertInto, BlakeTwo256, Block as BlockT, IdentifyAccount, 26 IdentityLookup, NumberFor, Saturating, Verify,27 IdentityLookup, NumberFor, Verify,27 },28 },28 transaction_validity::{TransactionSource, TransactionValidity},29 transaction_validity::{TransactionSource, TransactionValidity},29 ApplyExtrinsicResult, MultiSignature,30 ApplyExtrinsicResult, MultiSignature,30};31};31use sp_std::prelude::*;32#[cfg(feature = "std")]32#[cfg(feature = "std")]33use sp_version::NativeVersion;33use sp_version::NativeVersion;34use sp_version::RuntimeVersion;34use sp_version::RuntimeVersion;3535pub use pallet_transaction_payment::{Multiplier, TargetedFeeAdjustment, CurrencyAdapter, FeeDetails, RuntimeDispatchInfo};36// A few exports that help ease life for downstream crates.36// A few exports that help ease life for downstream crates.37pub use pallet_balances::Call as BalancesCall;37pub use pallet_balances::Call as BalancesCall;38pub use pallet_contracts::Schedule as ContractsSchedule;38pub use pallet_contracts::{Schedule as ContractsSchedule, WeightInfo};39pub use frame_support::{39pub use frame_support::{40 construct_runtime,40 construct_runtime,41 dispatch::DispatchResult,41 dispatch::DispatchResult,42 parameter_types,42 parameter_types,43 StorageValue,43 traits::{44 traits::{44 Currency, ExistenceRequirement, Get, KeyOwnerProofSystem, OnUnbalanced, Randomness,45 Currency, ExistenceRequirement, Get, KeyOwnerProofSystem, OnUnbalanced, Randomness,45 WithdrawReason, LockIdentifier,46 LockIdentifier,46 },47 },47 weights::{48 weights::{48 constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_PER_SECOND},49 constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_PER_SECOND},49 DispatchInfo, GetDispatchInfo, IdentityFee, Pays, PostDispatchInfo, Weight,50 DispatchInfo, GetDispatchInfo, Pays, PostDispatchInfo, Weight,50 WeightToFeePolynomial,51 WeightToFeePolynomial, WeightToFeeCoefficient, WeightToFeeCoefficients51 },52 },52 StorageValue,53};53};54#[cfg(any(feature = "std", test))]54// #[cfg(any(feature = "std", test))]55pub use sp_runtime::BuildStorage;56use sp_runtime:: { Perbill, Permill, Percent, ModuleId };57use frame_system::{self as system, EnsureRoot };55use frame_system::{56 self as system,57 EnsureRoot, 58 limits::{BlockWeights, BlockLength},59};58use sp_std::{marker::PhantomData};60use sp_std::{prelude::*, marker::PhantomData};61use sp_arithmetic::{traits::{BaseArithmetic, Unsigned}};62use smallvec::smallvec;596360pub use pallet_timestamp::Call as TimestampCall;64pub use pallet_timestamp::Call as TimestampCall;6566mod chain_extension;67use crate::chain_extension::NFTExtension;616862/// Struct that handles the conversion of Balance -> `u64`. This is used for69/// Struct that handles the conversion of Balance -> `u64`. This is used for63/// staking's election calculation.70/// staking's election calculation.143 spec_name: create_runtime_str!("nft"),150 spec_name: create_runtime_str!("nft"),144 impl_name: create_runtime_str!("nft"),151 impl_name: create_runtime_str!("nft"),145 authoring_version: 1,152 authoring_version: 1,146 spec_version: 2,153 spec_version: 3,147 impl_version: 1,154 impl_version: 1,148 apis: RUNTIME_API_VERSIONS,155 apis: RUNTIME_API_VERSIONS,149 transaction_version: 1,156 transaction_version: 1,168}175}169176170/// Provides a membership set with only the configured aura users177/// Provides a membership set with only the configured aura users171pub struct ValiudatorsOnly<Runtime: pallet_aura::Trait>(PhantomData<Runtime>);178pub struct ValiudatorsOnly<Runtime: pallet_aura::Config>(PhantomData<Runtime>);172impl frame_support::traits::Contains<AccountId> for ValiudatorsOnly<Runtime> {179impl frame_support::traits::Contains<AccountId> for ValiudatorsOnly<Runtime> {173 fn contains(t: &AccountId) -> bool {180 fn contains(t: &AccountId) -> bool {174 let arr: [u8; 32] = *t.as_ref();181 let arr: [u8; 32] = *t.as_ref();204 }211 }205}212}213214type NegativeImbalance = <Balances as Currency<AccountId>>::NegativeImbalance;215216pub struct DealWithFees;217impl OnUnbalanced<NegativeImbalance> for DealWithFees {218 fn on_unbalanceds<B>(mut fees_then_tips: impl Iterator<Item=NegativeImbalance>) {219 if let Some(fees) = fees_then_tips.next() {220 // for fees, 100% to treasury221 let mut split = fees.ration(100, 0);222 if let Some(tips) = fees_then_tips.next() {223 // for tips, if any, 100% to treasury224 tips.ration_merge_into(100, 0, &mut split);225 }226 Treasury::on_unbalanced(split.0);227 // Author::on_unbalanced(split.1);228 }229 }230}231232/// We assume that ~10% of the block weight is consumed by `on_initalize` handlers.233/// This is used to limit the maximal weight of a single extrinsic.234const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(10);235/// We allow `Normal` extrinsics to fill up the block up to 75%, the rest can be used236/// by Operational extrinsics.237const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75);238/// We allow for 2 seconds of compute with a 6 second average block time.239const MAXIMUM_BLOCK_WEIGHT: Weight = 2 * WEIGHT_PER_SECOND;206240207parameter_types! {241parameter_types! {208 pub const BlockHashCount: BlockNumber = 2400;242 pub const BlockHashCount: BlockNumber = 2400;209 /// We allow for 2 seconds of compute with a 6 second average block time.210 pub const MaximumBlockWeight: Weight = 2 * WEIGHT_PER_SECOND;243 pub RuntimeBlockLength: BlockLength =244 BlockLength::max_with_normal_ratio(5 * 1024 * 1024, NORMAL_DISPATCH_RATIO);211 pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75);245 pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75);212 /// Assume 10% of weight for average on_initialize calls.213 pub MaximumExtrinsicWeight: Weight = AvailableBlockRatio::get()246 pub const MaximumBlockLength: u32 = 5 * 1024 * 1024;247 pub RuntimeBlockWeights: BlockWeights = BlockWeights::builder()248 .base_block(BlockExecutionWeight::get())214 .saturating_sub(Perbill::from_percent(10)) * MaximumBlockWeight::get();249 .for_class(DispatchClass::all(), |weights| {250 weights.base_extrinsic = ExtrinsicBaseWeight::get();251 })252 .for_class(DispatchClass::Normal, |weights| {215 pub const MaximumBlockLength: u32 = 5 * 1024 * 1024;253 weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT);254 })255 .for_class(DispatchClass::Operational, |weights| {256 weights.max_total = Some(MAXIMUM_BLOCK_WEIGHT);257 // Operational transactions have some extra reserved space, so that they258 // are included even if block reached `MAXIMUM_BLOCK_WEIGHT`.259 weights.reserved = Some(260 MAXIMUM_BLOCK_WEIGHT - NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT261 );262 })263 .avg_block_initialization(AVERAGE_ON_INITIALIZE_RATIO)264 .build_or_panic();216 pub const Version: RuntimeVersion = VERSION;265 pub const Version: RuntimeVersion = VERSION;266 pub const SS58Prefix: u8 = 42;217}267}218268219impl system::Trait for Runtime {269impl system::Config for Runtime {220 /// The basic call filter to use in dispatchable.270 /// The basic call filter to use in dispatchable.221 type BaseCallFilter = ();271 type BaseCallFilter = ();222 /// The identifier used to distinguish between accounts.272 /// The identifier used to distinguish between accounts.241 type Origin = Origin;291 type Origin = Origin;242 /// Maximum number of block number to block hash mappings to keep (oldest pruned first).292 /// Maximum number of block number to block hash mappings to keep (oldest pruned first).243 type BlockHashCount = BlockHashCount;293 type BlockHashCount = BlockHashCount;244 /// Maximum weight of each block.245 type MaximumBlockWeight = MaximumBlockWeight;246 /// The weight of database operations that the runtime can invoke.294 /// The weight of database operations that the runtime can invoke.247 type DbWeight = RocksDbWeight;295 type DbWeight = RocksDbWeight;248 /// The weight of the overhead invoked on the block import process, independent of the296 /// The weight of the overhead invoked on the block import process, independent of the249 /// extrinsics included in that block.297 /// extrinsics included in that block.250 type BlockExecutionWeight = BlockExecutionWeight;298 type BlockWeights = RuntimeBlockWeights;251 /// The base weight of any extrinsic processed by the runtime, independent of the252 /// logic of that extrinsic. (Signature verification, nonce increment, fee, etc...)253 type ExtrinsicBaseWeight = ExtrinsicBaseWeight;254 /// The maximum weight that a single extrinsic of `Normal` dispatch class can have,255 /// idependent of the logic of that extrinsics. (Roughly max block weight - average on256 /// initialize cost).257 type MaximumExtrinsicWeight = MaximumExtrinsicWeight;258 /// Maximum size of all encoded transactions (in bytes) that are allowed in one block.259 type MaximumBlockLength = MaximumBlockLength;260 /// Portion of the block weight that is available to all normal transactions.261 type AvailableBlockRatio = AvailableBlockRatio;262 /// Version of the runtime.299 /// Version of the runtime.263 type Version = Version;300 type Version = Version;264 /// This type is being generated by `construct_runtime!`.301 /// This type is being generated by `construct_runtime!`.270 /// The data to be stored in an account.307 /// The data to be stored in an account.271 type AccountData = pallet_balances::AccountData<Balance>;308 type AccountData = pallet_balances::AccountData<Balance>;272 /// Weight information for the extrinsics of this pallet.309 /// Weight information for the extrinsics of this pallet.273 type SystemWeightInfo = ();310 type SystemWeightInfo = system::weights::SubstrateWeight<Runtime>;311 312 type BlockLength = RuntimeBlockLength;313 type SS58Prefix = SS58Prefix;274}314}275315276impl pallet_aura::Trait for Runtime {316impl pallet_aura::Config for Runtime {277 type AuthorityId = AuraId;317 type AuthorityId = AuraId;278}318}279319280impl pallet_grandpa::Trait for Runtime {320impl pallet_grandpa::Config for Runtime {281 type Event = Event;321 type Event = Event;282 type Call = Call;322 type Call = Call;283323300 pub const MinimumPeriod: u64 = SLOT_DURATION / 2;340 pub const MinimumPeriod: u64 = SLOT_DURATION / 2;301}341}302342303impl pallet_timestamp::Trait for Runtime {343impl pallet_timestamp::Config for Runtime {304 /// A timestamp: milliseconds since the unix epoch.344 /// A timestamp: milliseconds since the unix epoch.305 type Moment = u64;345 type Moment = u64;306 type OnTimestampSet = Aura;346 type OnTimestampSet = Aura;314 pub const MaxLocks: u32 = 50;354 pub const MaxLocks: u32 = 50;315}355}316356317impl pallet_balances::Trait for Runtime {357impl pallet_balances::Config for Runtime {318 type MaxLocks = MaxLocks;358 type MaxLocks = MaxLocks;319 /// The type for recording an account's balance.359 /// The type for recording an account's balance.320 type Balance = Balance;360 type Balance = Balance;326 type WeightInfo = ();366 type WeightInfo = ();327}367}328368329pub const MILLICENTS: Balance = 1_000_000_000;369pub const MICROUNIQUE: Balance = 1_000_000_000;330pub const CENTS: Balance = 1_000 * MILLICENTS;370pub const MILLIUNIQUE: Balance = 1_000 * MICROUNIQUE;371pub const CENTIUNIQUE: Balance = 10 * MILLIUNIQUE;331pub const DOLLARS: Balance = 100 * CENTS;372pub const UNIQUE: Balance = 100 * CENTIUNIQUE;373374pub const fn deposit(items: u32, bytes: u32) -> Balance {375 items as Balance * 15 * CENTIUNIQUE + (bytes as Balance) * 6 * CENTIUNIQUE376}332377333parameter_types! {378parameter_types! {334 pub const TombstoneDeposit: Balance = 0;379 pub const TombstoneDeposit: Balance = deposit(380 0,381 sp_std::mem::size_of::<pallet_contracts::ContractInfo<Runtime>>() as u32382 );335 pub const RentByteFee: Balance = 4 * MILLICENTS;383 pub const DepositPerContract: Balance = TombstoneDeposit::get();336 pub const RentDepositOffset: Balance = 1000 * MILLICENTS;384 pub const DepositPerStorageByte: Balance = deposit(0, 1);385 pub const DepositPerStorageItem: Balance = deposit(1, 0);386 pub RentFraction: Perbill = Perbill::from_rational_approximation(1u32, 30 * DAYS);337 pub const SurchargeReward: Balance = 150 * MILLICENTS;387 pub const SurchargeReward: Balance = 150 * MILLIUNIQUE;388 pub const SignedClaimHandicap: u32 = 2;389 pub const MaxDepth: u32 = 32;390 pub const MaxValueSize: u32 = 16 * 1024;391 // The lazy deletion runs inside on_initialize.392 pub DeletionWeightLimit: Weight = AVERAGE_ON_INITIALIZE_RATIO *393 RuntimeBlockWeights::get().max_block;394 // The weight needed for decoding the queue should be less or equal than a fifth395 // of the overall weight dedicated to the lazy deletion.396 pub DeletionQueueDepth: u32 = ((DeletionWeightLimit::get() / (397 <Runtime as pallet_contracts::Config>::WeightInfo::on_initialize_per_queue_item(1) -398 <Runtime as pallet_contracts::Config>::WeightInfo::on_initialize_per_queue_item(0)399 )) / 5) as u32;338}400}401339402340impl pallet_contracts::Trait for Runtime {403impl pallet_contracts::Config for Runtime {341 type Time = Timestamp;404 type Time = Timestamp;342 type Randomness = RandomnessCollectiveFlip;405 type Randomness = RandomnessCollectiveFlip;343 type Currency = Balances;406 type Currency = Balances;344 type Event = Event;407 type Event = Event;345 type DetermineContractAddress = pallet_contracts::SimpleAddressDeterminer<Runtime>;346 type TrieIdGenerator = pallet_contracts::TrieIdFromParentCounter<Runtime>;347 type RentPayment = ();408 type RentPayment = ();348 type SignedClaimHandicap = pallet_contracts::DefaultSignedClaimHandicap;409 type SignedClaimHandicap = SignedClaimHandicap;349 type TombstoneDeposit = TombstoneDeposit;410 type TombstoneDeposit = TombstoneDeposit;350 type StorageSizeOffset = pallet_contracts::DefaultStorageSizeOffset;411 type DepositPerContract = DepositPerContract;351 type RentByteFee = RentByteFee;412 type DepositPerStorageByte = DepositPerStorageByte;352 type RentDepositOffset = RentDepositOffset;413 type DepositPerStorageItem = DepositPerStorageItem;414 type RentFraction = RentFraction;353 type SurchargeReward = SurchargeReward;415 type SurchargeReward = SurchargeReward;354 type MaxDepth = pallet_contracts::DefaultMaxDepth;416 type MaxDepth = MaxDepth;355 type MaxValueSize = pallet_contracts::DefaultMaxValueSize;417 type MaxValueSize = MaxValueSize;356 type WeightPrice = pallet_transaction_payment::Module<Self>;418 type WeightPrice = pallet_transaction_payment::Module<Self>;419 type WeightInfo = pallet_contracts::weights::SubstrateWeight<Self>;420 type ChainExtension = NFTExtension;421 type DeletionQueueDepth = DeletionQueueDepth;422 type DeletionWeightLimit = DeletionWeightLimit;357}423}358424359parameter_types! {425parameter_types! {360 pub const TransactionByteFee: Balance = 10 * MILLICENTS;426 pub const TransactionByteFee: Balance = 501 * MICROUNIQUE; // Targeting 0.1 Unique per NFT transfer 361}427}428429/// Linear implementor of `WeightToFeePolynomial` 430pub struct LinearFee<T>(sp_std::marker::PhantomData<T>);431432impl<T> WeightToFeePolynomial for LinearFee<T> where433 T: BaseArithmetic + From<u32> + Copy + Unsigned434{435 type Balance = T;436437 fn polynomial() -> WeightToFeeCoefficients<Self::Balance> {438 smallvec!(WeightToFeeCoefficient {439 coeff_integer: 146_700u32.into(), // Targeting 0.1 Unique per NFT transfer440 coeff_frac: Perbill::zero(),441 negative: false,442 degree: 1,443 })444 }445}362446363impl pallet_transaction_payment::Trait for Runtime {447impl pallet_transaction_payment::Config for Runtime {364 type Currency = pallet_balances::Module<Runtime>;448 type OnChargeTransaction = CurrencyAdapter<Balances, DealWithFees>;365 type OnTransactionPayment = Treasury;366 type TransactionByteFee = TransactionByteFee;449 type TransactionByteFee = TransactionByteFee;367 type WeightToFee = IdentityFee<Balance>;450 type WeightToFee = LinearFee<Balance>;368 type FeeMultiplierUpdate = ();451 type FeeMultiplierUpdate = ();369}452}370453371parameter_types! {454parameter_types! {372 pub const ProposalBond: Permill = Permill::from_percent(5);455 pub const ProposalBond: Permill = Permill::from_percent(5);373 pub const ProposalBondMinimum: Balance = 1 * DOLLARS;456 pub const ProposalBondMinimum: Balance = 1 * UNIQUE;374 pub const SpendPeriod: BlockNumber = 5 * MINUTES;457 pub const SpendPeriod: BlockNumber = 5 * MINUTES;375 pub const Burn: Permill = Permill::from_percent(0);458 pub const Burn: Permill = Permill::from_percent(0);376 pub const TipCountdown: BlockNumber = 1 * DAYS;459 pub const TipCountdown: BlockNumber = 1 * DAYS;377 pub const TipFindersFee: Percent = Percent::from_percent(20);460 pub const TipFindersFee: Percent = Percent::from_percent(20);378 pub const TipReportDepositBase: Balance = 1 * DOLLARS;461 pub const TipReportDepositBase: Balance = 1 * UNIQUE;379 pub const DataDepositPerByte: Balance = 1 * CENTS;462 pub const DataDepositPerByte: Balance = 1 * CENTIUNIQUE;380 pub const BountyDepositBase: Balance = 1 * DOLLARS;463 pub const BountyDepositBase: Balance = 1 * UNIQUE;381 pub const BountyDepositPayoutDelay: BlockNumber = 1 * DAYS;464 pub const BountyDepositPayoutDelay: BlockNumber = 1 * DAYS;382 pub const TreasuryModuleId: ModuleId = ModuleId(*b"py/trsry");465 pub const TreasuryModuleId: ModuleId = ModuleId(*b"py/trsry");383 pub const BountyUpdatePeriod: BlockNumber = 14 * DAYS;466 pub const BountyUpdatePeriod: BlockNumber = 14 * DAYS;384 pub const MaximumReasonLength: u32 = 16384;467 pub const MaximumReasonLength: u32 = 16384;385 pub const BountyCuratorDeposit: Permill = Permill::from_percent(50);468 pub const BountyCuratorDeposit: Permill = Permill::from_percent(50);386 pub const BountyValueMinimum: Balance = 5 * DOLLARS;469 pub const BountyValueMinimum: Balance = 5 * UNIQUE;387}470}388471389impl pallet_treasury::Trait for Runtime {472impl pallet_treasury::Config for Runtime {390 type ModuleId = TreasuryModuleId;473 type ModuleId = TreasuryModuleId;391 type Currency = Balances;474 type Currency = Balances;392 type ApproveOrigin = EnsureRoot<AccountId>;475 type ApproveOrigin = EnsureRoot<AccountId>;393 type RejectOrigin = EnsureRoot<AccountId>;476 type RejectOrigin = EnsureRoot<AccountId>;394 type Tippers = ValiudatorsOnly<Self>;395 type TipCountdown = TipCountdown;396 type TipFindersFee = TipFindersFee;397 type TipReportDepositBase = TipReportDepositBase;398 type DataDepositPerByte = DataDepositPerByte;399 type Event = Event;477 type Event = Event;400 type OnSlash = ();478 type OnSlash = ();401 type ProposalBond = ProposalBond;479 type ProposalBond = ProposalBond;402 type ProposalBondMinimum = ProposalBondMinimum;480 type ProposalBondMinimum = ProposalBondMinimum;403 type SpendPeriod = SpendPeriod;481 type SpendPeriod = SpendPeriod;404 type Burn = Burn;482 type Burn = Burn;405 type BountyDepositBase = BountyDepositBase;483 type BurnDestination = ();406 type BountyDepositPayoutDelay = BountyDepositPayoutDelay;407 type BountyUpdatePeriod = BountyUpdatePeriod;408 type BountyCuratorDeposit = BountyCuratorDeposit;409 type BountyValueMinimum = BountyValueMinimum;410 type MaximumReasonLength = MaximumReasonLength;411 type BurnDestination = ();484 type SpendFunds = ();412 type WeightInfo = ();485 type WeightInfo = pallet_treasury::weights::SubstrateWeight<Runtime>;413}486}414487415impl pallet_sudo::Trait for Runtime {488impl pallet_sudo::Config for Runtime {416 type Event = Event;489 type Event = Event;417 type Call = Call;490 type Call = Call;418}491}419492420parameter_types! {493parameter_types! {421 pub const MinVestedTransfer: Balance = 100 * DOLLARS;494 pub const MinVestedTransfer: Balance = 10 * UNIQUE;422}495}423496424impl pallet_vesting::Trait for Runtime {497impl pallet_vesting::Config for Runtime {425 type Event = Event;498 type Event = Event;426 type Currency = Balances;499 type Currency = Balances;427 type BlockNumberToBalance = ConvertInto;500 type BlockNumberToBalance = ConvertInto;430}503}431504432/// Used for the module nft in `./nft.rs`505/// Used for the module nft in `./nft.rs`433impl pallet_nft::Trait for Runtime {506impl pallet_nft::Config for Runtime {434 type Event = Event;507 type Event = Event;435 type WeightInfo = nft_weights::WeightInfo;508 type WeightInfo = nft_weights::WeightInfo;436}509}443 {516 {444 System: system::{Module, Call, Config, Storage, Event<T>},517 System: system::{Module, Call, Config, Storage, Event<T>},445 RandomnessCollectiveFlip: pallet_randomness_collective_flip::{Module, Call, Storage},518 RandomnessCollectiveFlip: pallet_randomness_collective_flip::{Module, Call, Storage},446 Contracts: pallet_contracts::{Module, Call, Config, Storage, Event<T>},519 Contracts: pallet_contracts::{Module, Call, Config<T>, Storage, Event<T>},447 Timestamp: pallet_timestamp::{Module, Call, Storage, Inherent},520 Timestamp: pallet_timestamp::{Module, Call, Storage, Inherent},448 Aura: pallet_aura::{Module, Config<T>, Inherent},521 Aura: pallet_aura::{Module, Config<T>, Inherent},449 Grandpa: pallet_grandpa::{Module, Call, Storage, Config, Event},522 Grandpa: pallet_grandpa::{Module, Call, Storage, Config, Event},495 value: Balance,568 value: Balance,496 gas_limit: u64,569 gas_limit: u64,497 input_data: Vec<u8>,570 input_data: Vec<u8>,498 ) -> ContractExecResult {571 ) -> pallet_contracts_primitives::ContractExecResult {499 let (exec_result, gas_consumed) =500 Contracts::bare_call(origin, dest.into(), value, gas_limit, input_data);572 Contracts::bare_call(origin, dest, value, gas_limit, input_data)501 match exec_result {502 Ok(v) => ContractExecResult::Success {503 flags: v.flags.bits(),504 data: v.data,505 gas_consumed: gas_consumed,506 },507 Err(_) => ContractExecResult::Error,508 }509 }573 }510574511 fn get_storage(575 fn get_storage(640 fn query_info(704 fn query_info(uxt: <Block as BlockT>::Extrinsic, len: u32) -> RuntimeDispatchInfo<Balance> {641 uxt: <Block as BlockT>::Extrinsic,642 len: u32,643 ) -> pallet_transaction_payment_rpc_runtime_api::RuntimeDispatchInfo<Balance> {644 TransactionPayment::query_info(uxt, len)705 TransactionPayment::query_info(uxt, len)645 }706 }707 fn query_fee_details(uxt: <Block as BlockT>::Extrinsic, len: u32) -> FeeDetails<Balance> {708 TransactionPayment::query_fee_details(uxt, len)709 }646 }710 }647711648 #[cfg(feature = "runtime-benchmarks")]712 #[cfg(feature = "runtime-benchmarks")]runtime_types.jsondiffbeforeafterboth102 "CollectionId": "u32",102 "CollectionId": "u32",103 "TokenId": "u32",103 "TokenId": "u32",104 "ChainLimits": {104 "ChainLimits": {105 "collection_numbers_limit": "u32",105 "CollectionNumbersLimit": "u32",106 "account_token_ownership_limit": "u32",106 "AccountTokenOwnershipLimit": "u32",107 "collections_admins_limit": "u64",107 "CollectionAdminsLimit": "u64",108 "custom_data_limit": "u32",108 "CustomDataLimit": "u32",109 "nft_sponsor_timeout": "u32",109 "NftSponsorTimeout": "u32",110 "fungible_sponsor_timeout": "u32",110 "FungibleSponsorTimeout": "u32",111 "refungible_sponsor_timeout": "u32"111 "RefungibleSponsorTimeout": "u32",112 "OffchainSchemaLimit": "u32",113 "VariableOnChainSchemaLimit": "u32",114 "ConstOnChainSchemaLimit": "u32"112 },115 },113 "CollectionLimits": {116 "CollectionLimits": {114 "AccountTokenOwnershipLimit": "u32",117 "AccountTokenOwnershipLimit": "u32",115 "SponsoredMintSize": "u32",118 "SponsoredMintSize": "u32",116 "TokenLimit": "u32",119 "TokenLimit": "u32",117 "SponsorTimeout": "u32"120 "SponsorTimeout": "u32"118 }121 },122 "AccountInfo": "AccountInfoWithProviders",123 "AccountInfoWithProviders": {124 "nonce": "Index",125 "consumers": "RefCount",126 "providers": "RefCount",127 "data": "AccountData"128 }129119 }130 }120 131 smart_contracs/transfer/.gitignorediffbeforeafterbothno changes
smart_contracs/transfer/Cargo.tomldiffbeforeafterbothno changes
smart_contracs/transfer/lib.rsdiffbeforeafterbothno changes
smart_contract/ink-types-node-runtime/.gitignorediffbeforeafterbothno changes
smart_contract/ink-types-node-runtime/Cargo.tomldiffbeforeafterbothno changes
smart_contract/ink-types-node-runtime/LICENSEdiffbeforeafterbothno changes
smart_contract/ink-types-node-runtime/README.mddiffbeforeafterbothno changes
smart_contract/ink-types-node-runtime/calls/.gitignorediffbeforeafterbothno changes
smart_contract/ink-types-node-runtime/calls/.ink/abi_gen/Cargo.tomldiffbeforeafterbothno changes
smart_contract/ink-types-node-runtime/calls/.ink/abi_gen/main.rsdiffbeforeafterbothno changes
smart_contract/ink-types-node-runtime/calls/Cargo.tomldiffbeforeafterbothno changes
smart_contract/ink-types-node-runtime/calls/lib.rsdiffbeforeafterbothno changes
smart_contract/ink-types-node-runtime/src/calls.rsdiffbeforeafterbothno changes
smart_contract/ink-types-node-runtime/src/lib.rsdiffbeforeafterbothno changes
tests/.vscode/settings.jsondiffbeforeafterbothno changes
tests/package-lock.jsondiffbeforeafterbothno changes
tests/package.jsondiffbeforeafterboth4 "description": "Substrate Nft tests",4 "description": "Substrate Nft tests",5 "main": "",5 "main": "",6 "devDependencies": {6 "devDependencies": {7 "@polkadot/dev": "^0.52.11",7 "@polkadot/dev": "^0.61.24",8 "@polkadot/ts": "^0.3.41",8 "@polkadot/ts": "^0.3.59",9 "@polkadot/typegen": "^3.6.4",10 "@polkadot/util-crypto": "^5.4.4",9 "@types/chai": "^4.2.12",11 "@types/chai": "^4.2.12",10 "@types/chai-as-promised": "^7.1.3",12 "@types/chai-as-promised": "^7.1.3",11 "@types/mocha": "^8.0.3",13 "@types/mocha": "^8.0.3",18 "scripts": {20 "scripts": {19 "test": "mocha --timeout 9999999 -r ts-node/register ./**/*.test.ts",21 "test": "mocha --timeout 9999999 -r ts-node/register ./**/*.test.ts",20 "load": "mocha --timeout 9999999 -r ts-node/register ./**/*.load.ts",22 "load": "mocha --timeout 9999999 -r ts-node/register ./**/*.load.ts",23 "testAddCollectionAdmin": "mocha --timeout 9999999 -r ts-node/register ./**/addCollectionAdmin.test.ts",21 "testSetSchemaVersion": "mocha --timeout 9999999 -r ts-node/register ./**/setSchemaVersion.test.ts",24 "testSetSchemaVersion": "mocha --timeout 9999999 -r ts-node/register ./**/setSchemaVersion.test.ts",25 "testSetVariableMetaData": "mocha --timeout 9999999 -r ts-node/register ./**/setVariableMetaData.test.ts",22 "testSetCollectionLimits": "mocha --timeout 9999999 -r ts-node/register ./**/setCollectionLimits.test.ts",26 "testSetCollectionLimits": "mocha --timeout 9999999 -r ts-node/register ./**/setCollectionLimits.test.ts",23 "testRemoveCollectionAdmin": "mocha --timeout 9999999 -r ts-node/register ./**/removeCollectionAdmin.test.ts",27 "testRemoveCollectionAdmin": "mocha --timeout 9999999 -r ts-node/register ./**/removeCollectionAdmin.test.ts",24 "testConnection": "mocha --timeout 9999999 -r ts-node/register ./**/connection.test.ts",28 "testConnection": "mocha --timeout 9999999 -r ts-node/register ./**/connection.test.ts",25 "testCollection": "mocha --timeout 9999999 -r ts-node/register ./**/createCollection.test.ts",29 "testCollection": "mocha --timeout 9999999 -r ts-node/register ./**/createCollection.test.ts",26 "testCreateMultipleItems": "mocha --timeout 9999999 -r ts-node/register ./**/createMultipleItems.test.ts",30 "testCreateMultipleItems": "mocha --timeout 9999999 -r ts-node/register ./**/createMultipleItems.test.ts",27 "testApprove": "mocha --timeout 9999999 -r ts-node/register ./**/approve.test.ts",31 "testApprove": "mocha --timeout 9999999 -r ts-node/register ./**/approve.test.ts",28 "testTransferFrom": "mocha --timeout 9999999 -r ts-node/register ./**/transferFrom.test.ts",32 "testTransferFrom": "mocha --timeout 9999999 -r ts-node/register ./**/transferFrom.test.ts",29 "testCreateCollection": "mocha --timeout 9999999 -r ts-node/register ./**/createCollection.test.ts"33 "testCreateCollection": "mocha --timeout 9999999 -r ts-node/register ./**/createCollection.test.ts",34 "testToggleContractWhiteList": "mocha --timeout 9999999 -r ts-node/register ./**/toggleContractWhiteList.test.ts",35 "testAddToContractWhiteList": "mocha --timeout 9999999 -r ts-node/register ./**/addToContractWhiteList.test.ts",36 "testTransfer": "mocha --timeout 9999999 -r ts-node/register ./**/transfer.test.ts",37 "testBurnItem": "mocha --timeout 9999999 -r ts-node/register ./**/burnItem.test.ts",38 "testCreditFeesToTreasury": "mocha --timeout 9999999 -r ts-node/register ./**/creditFeesToTreasury.test.ts"30 },39 },31 "author": "",40 "author": "",32 "license": "Apache 2.0",41 "license": "SEE LICENSE IN ../LICENSE",33 "homepage": "",42 "homepage": "",34 "dependencies": {43 "dependencies": {35 "@polkadot/api": "^2.3.1",44 "@polkadot/api": "^3.6.4",36 "@polkadot/api-contract": "^2.3.1",45 "@polkadot/api-contract": "^3.6.4",37 "@polkadot/types": "^2.3.1",38 "@polkadot/util": "^3.4.1",46 "@polkadot/util": "^3.6.4",39 "bignumber.js": "^9.0.0",47 "bignumber.js": "^9.0.0",40 "chai-as-promised": "^7.1.1"48 "chai-as-promised": "^7.1.1"41 },49 },tests/src/addCollectionAdmin.test.tsdiffbeforeafterbothno changes
tests/src/addToContractWhiteList.test.tsdiffbeforeafterbothno changes
tests/src/addToWhiteList.test.tsdiffbeforeafterbothno changes
tests/src/burnItem.test.tsdiffbeforeafterboth36 const events = await submitTransactionAsync(alice, tx);36 const events = await submitTransactionAsync(alice, tx);37 const result = getGenericResult(events);37 const result = getGenericResult(events);38 39 // Get the item 38 // Get the item40 const item: any = (await api.query.nft.nftItemList(collectionId, tokenId)).toJSON();39 const item: any = (await api.query.nft.nftItemList(collectionId, tokenId)).toJSON();41 42 // What to expect40 // What to expect41 // tslint:disable-next-line:no-unused-expression43 expect(result.success).to.be.true;42 expect(result.success).to.be.true;43 // tslint:disable-next-line:no-unused-expression44 expect(item).to.be.not.null;44 expect(item).to.be.not.null;45 expect(item.Owner).to.be.equal(nullPublicKey);45 expect(item.Owner).to.be.equal(nullPublicKey);46 });46 });tests/src/confirmSponsorship.test.tsdiffbeforeafterboth170 });170 });171 });171 });172172173 it('NFT: Sponsoring is rate limited', async () => {173 it('NFT: Sponsoring of transfers is rate limited', async () => {174 const collectionId = await createCollectionExpectSuccess();174 const collectionId = await createCollectionExpectSuccess();175 await setCollectionSponsorExpectSuccess(collectionId, bob.address);175 await setCollectionSponsorExpectSuccess(collectionId, bob.address);176 await confirmSponsorshipExpectSuccess(collectionId, '//Bob');176 await confirmSponsorshipExpectSuccess(collectionId, '//Bob');285 });285 });286 });286 });287288 it('NFT: Sponsoring of createItem is rate limited', async () => {289 const collectionId = await createCollectionExpectSuccess();290 await setCollectionSponsorExpectSuccess(collectionId, bob.address);291 await confirmSponsorshipExpectSuccess(collectionId, '//Bob');292293 // Enable collection white list 294 await enableWhiteListExpectSuccess(alice, collectionId);295296 // Enable public minting297 await enablePublicMintingExpectSuccess(alice, collectionId);298299 await usingApi(async (api) => {300 // Find unused address301 const zeroBalance = await findUnusedAddress(api);302303 // Add zeroBalance address to white list304 await addToWhiteListExpectSuccess(alice, collectionId, zeroBalance.address);305306 // Mint token using unused address as signer - gets sponsored307 await createItemExpectSuccess(zeroBalance, collectionId, 'NFT', zeroBalance.address);308309 // Second mint should fail310 const AsponsorBalance = new BigNumber((await api.query.system.account(bob.address)).data.free.toString());311 312 const consoleError = console.error;313 const consoleLog = console.log;314 console.error = () => {};315 console.log = () => {};316 const badTransaction = async function () { 317 await createItemExpectSuccess(zeroBalance, collectionId, 'NFT', zeroBalance.address);318 };319 await expect(badTransaction()).to.be.rejectedWith("Inability to pay some fees");320 console.error = consoleError;321 console.log = consoleLog;322 const BsponsorBalance = new BigNumber((await api.query.system.account(bob.address)).data.free.toString());323324 // Try again after Zero gets some balance - now it should succeed325 const balancetx = api.tx.balances.transfer(zeroBalance.address, 1e15);326 await submitTransactionAsync(alice, balancetx);327 await createItemExpectSuccess(zeroBalance, collectionId, 'NFT', zeroBalance.address);328329 expect(BsponsorBalance.isEqualTo(AsponsorBalance)).to.be.true;330 });331 });287332288});333});289334tests/src/contracts.test.tsdiffbeforeafterboth2import chaiAsPromised from 'chai-as-promised';2import chaiAsPromised from 'chai-as-promised';3import usingApi, { submitTransactionAsync, submitTransactionExpectFailAsync } from "./substrate/substrate-api";3import usingApi, { submitTransactionAsync, submitTransactionExpectFailAsync } from "./substrate/substrate-api";4import fs from "fs";4import fs from "fs";5import { Abi, BlueprintPromise as Blueprint, CodePromise, ContractPromise as Contract } from "@polkadot/api-contract";5import { Abi, ContractPromise as Contract } from "@polkadot/api-contract";6import { IKeyringPair } from "@polkadot/types/types";6import privateKey from "./substrate/privateKey";7import { ApiPromise, Keyring } from "@polkadot/api";7import {8 deployFlipper,9 getFlipValue,10 deployTransferContract,11} from "./util/contracthelpers";128import { ApiTypes, SubmittableExtrinsic } from "@polkadot/api/types";13import {9import privateKey from "./substrate/privateKey";14 createCollectionExpectSuccess,15 createItemExpectSuccess,16 getGenericResult17} from "./util/helpers";18101911chai.use(chaiAsPromised);20chai.use(chaiAsPromised);12const expect = chai.expect;21const expect = chai.expect;13import { BigNumber } from 'bignumber.js';14import { findUnusedAddress } from './util/helpers';152216const value = 0;23const value = 0;17const gasLimit = 3000n * 1000000n;24const gasLimit = 3000n * 1000000n;18const endowment = `1000000000000000`;19const marketContractAddress = '5CYN9j3YvRkqxewoxeSvRbhAym4465C57uMmX5j4yz99L5H6';25const marketContractAddress = '5CYN9j3YvRkqxewoxeSvRbhAym4465C57uMmX5j4yz99L5H6';2021function deployBlueprint(alice: IKeyringPair, code: CodePromise): Promise<Blueprint> {22 return new Promise<Blueprint>(async (resolve, reject) => {23 const unsub = await code24 .createBlueprint()25 .signAndSend(alice, (result) => {26 if (result.status.isInBlock || result.status.isFinalized) {27 // here we have an additional field in the result, containing the blueprint28 resolve(result.blueprint);29 unsub();30 }31 })32 });33}3435function deployContract(alice: IKeyringPair, blueprint: Blueprint) : Promise<any> {36 return new Promise<any>(async (resolve, reject) => {37 const endowment = 1000000000000000n;38 const initValue = true;3940 const unsub = await blueprint.tx41 .new(endowment, gasLimit, initValue)42 .signAndSend(alice, (result) => {43 if (result.status.isInBlock || result.status.isFinalized) {44 unsub();45 resolve(result);46 }47 }); 48 });49}5051async function prepareDeployer(api: ApiPromise) {52 // Find unused address53 const deployer = await findUnusedAddress(api);5455 // Transfer balance to it56 const keyring = new Keyring({ type: 'sr25519' });57 const alice = keyring.addFromUri(`//Alice`);58 let amount = new BigNumber(endowment);59 amount = amount.plus(1e15);60 const tx = api.tx.balances.transfer(deployer.address, amount.toFixed());61 await submitTransactionAsync(alice, tx);6263 return deployer;64}6566export async function deployFlipper(api: ApiPromise): Promise<[Contract, IKeyringPair]> {67 const metadata = JSON.parse(fs.readFileSync('./src/flipper/metadata.json').toString('utf-8'));68 const abi = new Abi(metadata);6970 const deployer = await prepareDeployer(api);7172 const wasm = fs.readFileSync('./src/flipper/flipper.wasm');7374 const code = new CodePromise(api, abi, wasm);7576 const blueprint = await deployBlueprint(deployer, code);77 const contract = (await deployContract(deployer, blueprint))['contract'] as Contract;7879 const initialGetResponse = await getFlipValue(contract, deployer);80 expect(initialGetResponse).to.be.true;8182 return [contract, deployer];83}8485async function getFlipValue(contract: Contract, deployer: IKeyringPair) {86 const result = await contract.query.get(deployer.address, value, gasLimit);8788 if(!result.result.isSuccess) {89 throw `Failed to get flipper value`;90 }91 return (result.result.asSuccess.data[0] == 0x00) ? false : true;92}932694describe('Contracts', () => {27describe('Contracts', () => {95 it(`Can deploy smart contract Flipper, instantiate it and call it's get and flip messages.`, async () => {28 it(`Can deploy smart contract Flipper, instantiate it and call it's get and flip messages.`, async () => {98 const initialGetResponse = await getFlipValue(contract, deployer);31 const initialGetResponse = await getFlipValue(contract, deployer);9932100 const bob = privateKey("//Bob");33 const bob = privateKey("//Bob");101 const flip = contract.exec('flip', value, gasLimit);34 const flip = contract.tx.flip(value, gasLimit);102 await submitTransactionAsync(bob, flip);35 await submitTransactionAsync(bob, flip);10336104 const afterFlipGetResponse = await getFlipValue(contract, deployer);37 const afterFlipGetResponse = await getFlipValue(contract, deployer);105 expect(afterFlipGetResponse).not.to.be.eq(initialGetResponse, 'Flipping should change value.');38 expect(afterFlipGetResponse).not.to.be.eq(initialGetResponse, 'Flipping should change value.');106 });39 });107 });40 });108109 it(`Whitelisted account can call contract.`, async () => {110 await usingApi(async api => {111 const bob = privateKey("//Bob");112113 const [contract, deployer] = await deployFlipper(api);114115 let expectedFlipValue = await getFlipValue(contract, deployer);116117 const flip = contract.exec('flip', value, gasLimit);118 await submitTransactionAsync(bob, flip);119 expectedFlipValue = !expectedFlipValue;120 const afterFlip = await getFlipValue(contract,deployer);121 expect(afterFlip).to.be.eq(expectedFlipValue, `Anyone can call new contract.`);122123 const deployerCanFlip = async () => {124 expectedFlipValue = !expectedFlipValue;125 const deployerFlip = contract.exec('flip', value, gasLimit);126 await submitTransactionAsync(deployer, deployerFlip);127 const aliceFlip1Response = await getFlipValue(contract, deployer);128 expect(aliceFlip1Response).to.be.eq(expectedFlipValue, `Deployer always can flip.`);129 };130 await deployerCanFlip();131132 const enableWhiteListTx = api.tx.nft.toggleContractWhiteList(contract.address, true);133 const enableResult = await submitTransactionAsync(deployer, enableWhiteListTx);134 const flipWithEnabledWhiteList = contract.exec('flip', value, gasLimit);135 await expect(submitTransactionExpectFailAsync(bob, flipWithEnabledWhiteList)).to.be.rejected;136 const flipValueAfterEnableWhiteList = await getFlipValue(contract, deployer);137 expect(flipValueAfterEnableWhiteList).to.be.eq(expectedFlipValue, `Enabling whitelist doesn't make it possible to call contract for everyone.`);138139 await deployerCanFlip();140141 const addBobToWhiteListTx = api.tx.nft.addToContractWhiteList(contract.address, bob.address);142 const addBobResult = await submitTransactionAsync(deployer, addBobToWhiteListTx);143 const flipWithWhitelistedBob = contract.exec('flip', value, gasLimit);144 await submitTransactionAsync(bob, flipWithWhitelistedBob);145 expectedFlipValue = !expectedFlipValue;146 const flipAfterWhiteListed = await getFlipValue(contract,deployer);147 expect(flipAfterWhiteListed).to.be.eq(expectedFlipValue, `Bob was whitelisted, now he can flip.`);148149 await deployerCanFlip();150151 const removeBobFromWhiteListTx = api.tx.nft.removeFromContractWhiteList(contract.address, bob.address);152 const removeBobResult = await submitTransactionAsync(deployer, removeBobFromWhiteListTx);153 const bobRemoved = contract.exec('flip', value, gasLimit);154 await expect(submitTransactionExpectFailAsync(bob, bobRemoved)).to.be.rejected;155 const afterBobRemoved = await getFlipValue(contract, deployer);156 expect(afterBobRemoved).to.be.eq(expectedFlipValue, `Bob can't call contract, now when he is removeed from white list.`);157158 await deployerCanFlip();159160 const disableWhiteListTx = api.tx.nft.toggleContractWhiteList(contract.address, false);161 const disableWhiteListResult = await submitTransactionAsync(deployer, disableWhiteListTx);162 const whiteListDisabledFlip = contract.exec('flip', value, gasLimit);163 await submitTransactionAsync(bob, whiteListDisabledFlip);164 expectedFlipValue = !expectedFlipValue;165 const afterWhiteListDisabled = await getFlipValue(contract,deployer);166 expect(afterWhiteListDisabled).to.be.eq(expectedFlipValue, `Anyone can call contract with disabled whitelist.`);167168 });169 });17041171 it('Can initialize contract instance', async () => {42 it('Can initialize contract instance', async () => {172 await usingApi(async (api) => {43 await usingApi(async (api) => {178 });49 });179 });50 });18051181 it.skip('Can transfer balance using smart contract.', async () => {52 it('Can transfer NFT using smart contract.', async () => {182 await usingApi(async api => {53 await usingApi(async api => {183 // const [alicesBalanceBefore, bobsBalanceBefore] = await getBalance(api, [alicesPublicKey, bobsPublicKey]);54 const alice = privateKey("//Alice");184 // const wasm = fs.readFileSync('./src/balance-transfer-contract/calls.wasm');55 const bob = privateKey("//Bob");185 // const contract = compactAddLength(u8aToU8a(wasm));5618657 // Prep work187 // const metadata = JSON.parse(fs.readFileSync('./src/balance-transfer-contract/metadata.json').toString('utf-8'));58 const collectionId = await createCollectionExpectSuccess();188 // const abi = new Abi(api.registry as any, metadata);59 const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT');18960 const [contract, deployer] = await deployTransferContract(api);190 // const alicesPrivateKey = privateKey('//Alice');61 const tokenBefore: any = await api.query.nft.nftItemList(collectionId, tokenId);19162 192 // const contractHash = await deployContract(api, contract, alicesPrivateKey);63 // Transfer19364 const transferTx = contract.tx.transfer(value, gasLimit, bob.address, collectionId, tokenId, 1);194 // // const args = abi.constructors[0]();65 const events = await submitTransactionAsync(alice, transferTx);195 // const instanceAccountId = await instantiateContract(api, contractHash, /*args,*/ alicesPrivateKey);66 const result = getGenericResult(events);196 // const contractInstance = new ContractPromise(api, abi, instanceAccountId);67 const tokenAfter: any = await api.query.nft.nftItemList(collectionId, tokenId);197 // const bob = new GenericAccountId(api.registry, bobsPublicKey);6819869 // tslint:disable-next-line:no-unused-expression199 // const transfer = contractInstance.exec('balance_transfer', 0, 1000000000000n, [bob, new u128(api.registry, 1000000)]);70 expect(result.success).to.be.true;200 // await submitTransactionAsync(alicesPrivateKey, transfer);71 expect(tokenBefore.Owner.toString()).to.be.equal(alice.address);20172 expect(tokenAfter.Owner.toString()).to.be.equal(bob.address);202 // const [alicesBalanceAfter, bobsBalanceAfter] = await getBalance(api, [alicesPublicKey, bobsPublicKey]);203204 // expect(alicesBalanceAfter < alicesBalanceBefore).to.be.true;205 // expect(bobsBalanceAfter > bobsBalanceBefore).to.be.true;206 });73 });207 });74 });208});75});tests/src/creditFeesToTreasury.test.tsdiffbeforeafterboth9import { alicesPublicKey, bobsPublicKey } from "./accounts";9import { alicesPublicKey, bobsPublicKey } from "./accounts";10import privateKey from "./substrate/privateKey";10import privateKey from "./substrate/privateKey";11import { BigNumber } from 'bignumber.js';11import { BigNumber } from 'bignumber.js';12import { IKeyringPair } from '@polkadot/types/types';12import { createCollectionExpectSuccess, getGenericResult } from './util/helpers';13import { 14 createCollectionExpectSuccess, 15 createItemExpectSuccess,16 getGenericResult,17 transferExpectSuccess18} from './util/helpers';131914chai.use(chaiAsPromised);20chai.use(chaiAsPromised);15const expect = chai.expect;21const expect = chai.expect;162217const Treasury = "5EYCAe5ijiYfyeZ2JJCGq56LmPyNRAKzpG4QkoQkkQNB5e6Z";23const Treasury = "5EYCAe5ijiYfyeZ2JJCGq56LmPyNRAKzpG4QkoQkkQNB5e6Z";18const saneMinimumFee = 0.0001;24const saneMinimumFee = 0.05;19const saneMaximumFee = 0.01;25const saneMaximumFee = 0.5;2627let alice: IKeyringPair;28let bob: IKeyringPair;202921describe('integration test: Fees must be credited to Treasury:', () => {30describe('integration test: Fees must be credited to Treasury:', () => {31 before(async () => {32 await usingApi(async (api) => {33 alice = privateKey('//Alice');34 bob = privateKey('//Bob');35 });36 });3722 it('Total issuance does not change', async () => {38 it('Total issuance does not change', async () => {23 await usingApi(async (api) => {39 await usingApi(async (api) => {102 const fee = aliceBalanceBefore.minus(aliceBalanceAfter);118 const fee = aliceBalanceBefore.minus(aliceBalanceAfter);103 const treasuryIncrease = treasuryBalanceAfter.minus(treasuryBalanceBefore);119 const treasuryIncrease = treasuryBalanceAfter.minus(treasuryBalanceBefore);104120105 expect(fee.dividedBy(1e15).toNumber()).to.be.lessThan(0.01);121 expect(fee.dividedBy(1e15).toNumber()).to.be.lessThan(saneMaximumFee);106 expect(fee.dividedBy(1e15).toNumber()).to.be.greaterThan(0.0001);122 expect(fee.dividedBy(1e15).toNumber()).to.be.greaterThan(saneMinimumFee);107 });123 });108 });124 });125126 it('NFT Transfer fee is close to 0.1 Unique', async () => {127 await usingApi(async (api) => {128 const collectionId = await createCollectionExpectSuccess();129 const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT');130131 const aliceBalanceBefore = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());132 await transferExpectSuccess(collectionId, tokenId, alice, bob, 1, 'NFT');133 const aliceBalanceAfter = new BigNumber((await api.query.system.account(alicesPublicKey)).data.free.toString());134 const fee = aliceBalanceBefore.minus(aliceBalanceAfter);135136 // console.log(fee.toString());137 const expectedTransferFee = 0.1;138 const tolerance = 0.00001;139 expect(fee.dividedBy(1e15).minus(expectedTransferFee).abs().toNumber()).to.be.lessThan(tolerance);140 });141 });109142110});143});111144tests/src/flipper/flipper.wasmdiffbeforeafterbothbinary blob — no preview
tests/src/flipper/metadata.jsondiffbeforeafterboth1{1{2 "metadataVersion": "0.1.0",2 "metadataVersion": "0.1.0",3 "source": {3 "source": {4 "hash": "0x36431d9da78a6bb099474e49c9e35a9c3a04272b58815634082626109826cac6",4 "hash": "0x5b02ceadaacee8408d3c6496394847092c099bcb897221dbe8d22c16d372fa17",5 "language": "ink! 3.0.0-rc1",5 "language": "ink! 3.0.0-rc2",6 "compiler": "rustc 1.49.0-nightly"6 "compiler": "rustc 1.51.0-nightly"7 },7 },8 "contract": {8 "contract": {9 "name": "flipper",9 "name": "flipper",10 "version": "3.0.0-rc1",10 "version": "0.1.0",11 "authors": [11 "authors": [12 "Parity Technologies <admin@parity.io>"12 "[your_name] <[your_email]>"13 ]13 ]14 },14 },15 "spec": {15 "spec": {27 }27 }28 ],28 ],29 "docs": [29 "docs": [30 " Creates a new flipper smart contract initialized with the given value."30 " Constructor that initializes the `bool` value to the given `init_value`."31 ],31 ],32 "name": [32 "name": [33 "new"33 "new"37 {37 {38 "args": [],38 "args": [],39 "docs": [39 "docs": [40 " Creates a new flipper smart contract initialized to `false`."40 " Constructor that initializes the `bool` value to `false`.",41 "",42 " Constructors can delegate to other constructors."41 ],43 ],42 "name": [44 "name": [43 "default"45 "default"51 {53 {52 "args": [],54 "args": [],53 "docs": [55 "docs": [54 " Flips the current value of the Flipper's bool."56 " A message that can be called on instantiated contracts.",57 " This one flips the value of the stored `bool` from `true`",58 " to `false` and vice versa."55 ],59 ],56 "mutates": true,60 "mutates": true,57 "name": [61 "name": [64 {68 {65 "args": [],69 "args": [],66 "docs": [70 "docs": [67 " Returns the current value of the Flipper's bool."71 " Simply returns the current value of our `bool`."68 ],72 ],69 "mutates": false,73 "mutates": false,70 "name": [74 "name": [tests/src/setConstOnChainSchema.test.tsdiffbeforeafterbothno changes
tests/src/setPublicAccessMode.test.tsdiffbeforeafterbothno changes
tests/src/setSchemaVersion.test.tsdiffbeforeafterboth989899 it('execute setSchemaVersion with not correct schema version', async () => {99 it('execute setSchemaVersion with not correct schema version', async () => {100 await usingApi(async (api: ApiPromise) => {100 await usingApi(async (api: ApiPromise) => {101 const consoleError = console.error;102 console.error = (message: string) => {};101 try {103 try {102 tx = api.tx.nft.setSchemaVersion(collectionIdForTesting, 'Test');104 tx = api.tx.nft.setSchemaVersion(collectionIdForTesting, 'Test');103 await submitTransactionAsync(alice, tx);105 await submitTransactionAsync(alice, tx);104 } catch (e) {106 } catch (e) {105 // tslint:disable-next-line:no-unused-expression107 // tslint:disable-next-line:no-unused-expression106 expect(e).to.be.exist;108 expect(e).to.be.exist;107 }109 } finally {110 console.error = consoleError;111 }108 });112 });109 });113 });110114tests/src/setVariableMetaData.test.tsdiffbeforeafterbothno changes
tests/src/setVariableOnChainSchema.test.tsdiffbeforeafterbothno changes
tests/src/substrate/get-balance.tsdiffbeforeafterboth3// file 'LICENSE', which is part of this source code package.3// file 'LICENSE', which is part of this source code package.4//4//556import { ApiPromise } from "@polkadot/api";6import { ApiPromise } from '@polkadot/api';7import promisifySubstrate from "./promisify-substrate";7import {AccountInfo} from '@polkadot/types/interfaces/system';8import {AccountInfo} from "@polkadot/types/interfaces/system";8import promisifySubstrate from './promisify-substrate';9910export default async function getBalance(api: ApiPromise, accounts: string[]): Promise<bigint[]> {10export default async function getBalance(api: ApiPromise, accounts: string[]): Promise<Array<bigint>> {11 const balance = promisifySubstrate(api, (accounts: string[]) => api.query.system.account.multi(accounts));11 const balance = promisifySubstrate(api, (acc: string[]) => api.query.system.account.multi(acc));12 const responce = await balance(accounts) as unknown as AccountInfo[];12 const responce = await balance(accounts) as unknown as AccountInfo[];13 return responce.map(r => r.data.free.toBigInt().valueOf());13 return responce.map((r) => r.data.free.toBigInt().valueOf());14}14}1515tests/src/substrate/promisify-substrate.tsdiffbeforeafterboth3// file 'LICENSE', which is part of this source code package.3// file 'LICENSE', which is part of this source code package.4//4//556import ApiPromise from "@polkadot/api/promise/Api";6import { ApiPromise } from "@polkadot/api";778type PromiseType<T> = T extends PromiseLike<infer TInner> ? TInner : T;8type PromiseType<T> = T extends PromiseLike<infer TInner> ? TInner : T;99tests/src/substrate/substrate-api.tsdiffbeforeafterboth4//4//556import { WsProvider, ApiPromise } from "@polkadot/api";6import { WsProvider, ApiPromise } from "@polkadot/api";7import type { AccountId, Address, ApplyExtrinsicResult, DispatchError, DispatchInfo, EventRecord, Extrinsic, ExtrinsicStatus, Hash, RuntimeDispatchInfo } from '@polkadot/types/interfaces';7import { EventRecord } from '@polkadot/types/interfaces/system/types';8import { ExtrinsicStatus } from '@polkadot/types/interfaces/author/types';8import { IKeyringPair } from "@polkadot/types/types";9import { IKeyringPair } from "@polkadot/types/types";91010import config from "../config";11import config from "../config";21 settings = settings || defaultApiOptions();22 settings = settings || defaultApiOptions();22 let api: ApiPromise = new ApiPromise(settings);23 let api: ApiPromise = new ApiPromise(settings);2425 // TODO: Remove, this is temporary: Filter unneeded API output 26 // (Jaco promised it will be removed in the next version)27 const consoleLog = console.log;28 console.log = (message: string) => {29 if (message.includes("API/INIT: Capabilities detected") || message.includes("2021-")) {}30 else if (message.includes("StorageChangeSet:: WebSocket is not connected") || message.includes("2021-")) {}31 else consoleLog(message);32 };33 const consoleErr = console.error;34 console.error = (message: string) => {35 if (message.includes("StorageChangeSet:: WebSocket is not connected") || message.includes("2021-")) {}36 else consoleErr(message);37 };233824 try {39 try {25 await promisifySubstrate(api, async () => {40 await promisifySubstrate(api, async () => {30 })();45 })();31 } finally {46 } finally {32 await api.disconnect();47 await api.disconnect();48 console.log = consoleLog;49 console.error = consoleErr;33 }50 }34}51}3552607761export function submitTransactionAsync(sender: IKeyringPair, transaction: SubmittableExtrinsic<ApiTypes>): Promise<EventRecord[]> {78export function79submitTransactionAsync(sender: IKeyringPair, transaction: SubmittableExtrinsic<ApiTypes>): Promise<EventRecord[]> {62 return new Promise(async function(resolve, reject) {80 return new Promise(async (resolve, reject) => {63 try {81 try {64 await transaction.signAndSend(sender, ({ events = [], status }) => {82 await transaction.signAndSend(sender, ({ events = [], status }) => {65 const transactionStatus = getTransactionStatus(events, status);83 const transactionStatus = getTransactionStatus(events, status);668467 if (transactionStatus == TransactionStatus.Success) {85 if (transactionStatus === TransactionStatus.Success) {68 resolve(events);86 resolve(events);69 } else if (transactionStatus == TransactionStatus.Fail) {87 } else if (transactionStatus === TransactionStatus.Fail) {70 console.log(`Something went wrong with transaction. Status: ${status}`);88 console.log(`Something went wrong with transaction. Status: ${status}`);71 reject(events);89 reject(events);72 }90 }73 });91 });74 } catch (e) {92 } catch (e) {75 console.log("Error: ", e);93 console.log('Error: ', e);76 reject(e);94 reject(e);77 }95 }78 });96 });103 await transaction.signAndSend(sender, ({ events = [], status }) => {121 await transaction.signAndSend(sender, ({ events = [], status }) => {104 const transactionStatus = getTransactionStatus(events, status);122 const transactionStatus = getTransactionStatus(events, status);123124 // console.log('transactionStatus', transactionStatus, 'events', events);125105 if (transactionStatus === TransactionStatus.Success) {126 if (transactionStatus === TransactionStatus.Success) {106 resolve(events);127 resolve(events);tests/src/toggleContractWhiteList.test.tsdiffbeforeafterbothno changes
tests/src/transfer.test.tsdiffbeforeafterboth3// file 'LICENSE', which is part of this source code package.3// file 'LICENSE', which is part of this source code package.4//4//556import { expect, assert } from "chai";6import { ApiPromise } from '@polkadot/api';7import { default as usingApi, submitTransactionAsync } from "./substrate/substrate-api";7import { IKeyringPair } from '@polkadot/types/types';8import { expect } from 'chai';8import { alicesPublicKey, bobsPublicKey, ferdiesPublicKey } from "./accounts";9import { alicesPublicKey, bobsPublicKey } from './accounts';9import privateKey from "./substrate/privateKey";10import getBalance from './substrate/get-balance';10import getBalance from "./substrate/get-balance";11import privateKey from './substrate/privateKey';11import { BigNumber } from 'bignumber.js';12import { default as usingApi, submitTransactionAsync } from './substrate/substrate-api';12import { findUnusedAddress } from './util/helpers'13import {14 burnItemExpectSuccess, createCollectionExpectSuccess, createItemExpectSuccess,15 destroyCollectionExpectSuccess,16 findUnusedAddress,17 getCreateCollectionResult,18 getCreateItemResult,19 transferExpectFail,20 transferExpectSuccess,21} from './util/helpers';2223let Alice: IKeyringPair;24let Bob: IKeyringPair;25let Charlie: IKeyringPair;132614describe('Transfer', () => {27describe('Integration Test Transfer(recipient, collection_id, item_id, value)', () => {15 it('Balance transfers', async () => {28 it('Balance transfers and check balance', async () => {16 await usingApi(async api => {29 await usingApi(async (api: ApiPromise) => {17 const [alicesBalanceBefore, bobsBalanceBefore] = await getBalance(api, [alicesPublicKey, bobsPublicKey]);30 const [alicesBalanceBefore, bobsBalanceBefore] = await getBalance(api, [alicesPublicKey, bobsPublicKey]);183119 const alicePrivateKey = privateKey('//Alice');32 const alicePrivateKey = privateKey('//Alice');20 3321 const transfer = api.tx.balances.transfer(bobsPublicKey, 1n);34 const transfer = api.tx.balances.transfer(bobsPublicKey, 1n);22 const result = await submitTransactionAsync(alicePrivateKey, transfer);35 const events = await submitTransactionAsync(alicePrivateKey, transfer);36 const result = getCreateItemResult(events);37 // tslint:disable-next-line:no-unused-expression38 expect(result.success).to.be.true;233924 const [alicesBalanceAfter, bobsBalanceAfter] = await getBalance(api, [alicesPublicKey, bobsPublicKey]);40 const [alicesBalanceAfter, bobsBalanceAfter] = await getBalance(api, [alicesPublicKey, bobsPublicKey]);254142 // tslint:disable-next-line:no-unused-expression26 expect(alicesBalanceAfter < alicesBalanceBefore).to.be.true;43 expect(alicesBalanceAfter < alicesBalanceBefore).to.be.true;44 // tslint:disable-next-line:no-unused-expression27 expect(bobsBalanceAfter > bobsBalanceBefore).to.be.true;45 expect(bobsBalanceAfter > bobsBalanceBefore).to.be.true;28 });46 });29 });47 });304831 it('Inability to pay fees error message is correct', async () => {49 it('Inability to pay fees error message is correct', async () => {32 await usingApi(async api => {50 await usingApi(async (api) => {33 // Find unused address51 // Find unused address34 const pk = await findUnusedAddress(api);52 const pk = await findUnusedAddress(api);355336 const error = console.error;37 const log = console.log;38 console.log = function () {};39 console.error = function () {};40 41 const badTransfer = api.tx.balances.transfer(bobsPublicKey, 1n);54 const badTransfer = api.tx.balances.transfer(bobsPublicKey, 1n);55 // const events = await submitTransactionAsync(pk, badTransfer);42 const badTransaction = async function () { 56 const badTransaction = async () => {43 const result = await submitTransactionAsync(pk, badTransfer);57 const events = await submitTransactionAsync(pk, badTransfer);58 const result = getCreateCollectionResult(events);59 // tslint:disable-next-line:no-unused-expression60 expect(result.success).to.be.false;44 };61 };45 await expect(badTransaction()).to.be.rejectedWith("Inability to pay some fees");62 expect(badTransaction()).to.be.rejectedWith('Inability to pay some fees , e.g. account balance too low');4647 console.log = log;48 console.error = error;49 });63 });50 });64 });6566 it('Create collection, balance transfers and check balance', async () => {67 await usingApi(async (api) => {68 const Alice = privateKey('//Alice');69 const Bob = privateKey('//Bob');70 // nft71 const nftCollectionId = await createCollectionExpectSuccess();72 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');73 await transferExpectSuccess(nftCollectionId, newNftTokenId, Alice, Bob, 1, 'NFT');74 // fungible75 const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});76 const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');77 await transferExpectSuccess(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 1, 'Fungible');78 // reFungible79 const reFungibleCollectionId = await80 createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});81 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');82 await transferExpectSuccess(reFungibleCollectionId,83 newReFungibleTokenId, Alice, Bob, 1, 'ReFungible');84 });85 });51});86});8788describe('Negative Integration Test Transfer(recipient, collection_id, item_id, value)', () => {89 before(async () => {90 await usingApi(async (api: ApiPromise) => {91 Alice = privateKey('//Alice');92 Bob = privateKey('//Bob');93 Charlie = privateKey('//Charlie');94 });95 });96 it('Transfer with not existed collection_id', async () => {97 await usingApi(async (api) => {98 // nft99 const nftCollectionCount = await api.query.nft.createdCollectionCount() as unknown as number;100 await transferExpectFail(nftCollectionCount + 1, 1, Alice, Bob, 1);101 // fungible102 const fungibleCollectionCount = await api.query.nft.createdCollectionCount() as unknown as number;103 await transferExpectFail(fungibleCollectionCount + 1, 1, Alice, Bob, 1);104 // reFungible105 const reFungibleCollectionCount = await api.query.nft.createdCollectionCount() as unknown as number;106 await transferExpectFail(reFungibleCollectionCount + 1, 1, Alice, Bob, 1);107 });108 });109 it('Transfer with deleted collection_id', async () => {110 // nft111 const nftCollectionId = await createCollectionExpectSuccess();112 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');113 await destroyCollectionExpectSuccess(nftCollectionId);114 await transferExpectFail(nftCollectionId, newNftTokenId, Alice, Bob, 1, 'NFT');115 // fungible116 const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});117 const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');118 await destroyCollectionExpectSuccess(fungibleCollectionId);119 await transferExpectFail(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 1, 'Fungible');120 // reFungible121 const reFungibleCollectionId = await122 createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});123 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');124 await destroyCollectionExpectSuccess(reFungibleCollectionId);125 await transferExpectFail(reFungibleCollectionId,126 newReFungibleTokenId, Alice, Bob, 1, 'ReFungible');127 });128 it('Transfer with not existed item_id', async () => {129 // nft130 const nftCollectionId = await createCollectionExpectSuccess();131 await transferExpectFail(nftCollectionId, 2, Alice, Bob, 1, 'NFT');132 // fungible133 const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});134 await transferExpectFail(fungibleCollectionId, 2, Alice, Bob, 1, 'Fungible');135 // reFungible136 const reFungibleCollectionId = await137 createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});138 await transferExpectFail(reFungibleCollectionId,139 2, Alice, Bob, 1, 'ReFungible');140 });141 it('Transfer with deleted item_id', async () => {142 // nft143 const nftCollectionId = await createCollectionExpectSuccess();144 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');145 await burnItemExpectSuccess(Alice, nftCollectionId, newNftTokenId, 1);146 await transferExpectFail(nftCollectionId, newNftTokenId, Alice, Bob, 1, 'NFT');147 // fungible148 const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});149 const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');150 await burnItemExpectSuccess(Alice, fungibleCollectionId, newFungibleTokenId, 10);151 await transferExpectFail(fungibleCollectionId, newFungibleTokenId, Alice, Bob, 1, 'Fungible');152 // reFungible153 const reFungibleCollectionId = await154 createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});155 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');156 await burnItemExpectSuccess(Alice, reFungibleCollectionId, newReFungibleTokenId, 1);157 await transferExpectFail(reFungibleCollectionId,158 newReFungibleTokenId, Alice, Bob, 1, 'ReFungible');159 });160 it('Transfer with recipient that is not owner', async () => {161 // nft162 const nftCollectionId = await createCollectionExpectSuccess();163 const newNftTokenId = await createItemExpectSuccess(Alice, nftCollectionId, 'NFT');164 await transferExpectFail(nftCollectionId, newNftTokenId, Charlie, Bob, 1, 'NFT');165 // fungible166 const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});167 const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible');168 await transferExpectFail(fungibleCollectionId, newFungibleTokenId, Charlie, Bob, 1, 'Fungible');169 // reFungible170 const reFungibleCollectionId = await171 createCollectionExpectSuccess({mode: {type: 'ReFungible', decimalPoints: 0}});172 const newReFungibleTokenId = await createItemExpectSuccess(Alice, reFungibleCollectionId, 'ReFungible');173 await transferExpectFail(reFungibleCollectionId,174 newReFungibleTokenId, Charlie, Bob, 1, 'ReFungible');175 });176});52177tests/src/transfer_contract/metadata.jsondiffbeforeafterbothno changes
tests/src/transfer_contract/nft_transfer.wasmdiffbeforeafterbothbinary blob — no preview
tests/src/util/contracthelpers.tsdiffbeforeafterbothno changes
tests/src/util/helpers.tsdiffbeforeafterboth253 return unused;253 return unused;254}254}255256export async function findNotExistingCollection(api: ApiPromise): Promise<number> {257 const totalNumber = parseInt((await api.query.nft.createdCollectionCount()).toString(), 10) as unknown as number;258 const newCollection: number = totalNumber + 1;259 return newCollection;260}255261256function getDestroyResult(events: EventRecord[]): boolean {262function getDestroyResult(events: EventRecord[]): boolean {257 let success: boolean = false;263 let success: boolean = false;378 });384 });379}385}386387export async function setVariableMetaDataExpectSuccess(sender: IKeyringPair, collectionId: number, itemId: number, data: number[]) {388 await usingApi(async (api) => {389 const tx = api.tx.nft.setVariableMetaData(collectionId, itemId, '0x' + Buffer.from(data).toString('hex'));390 const events = await submitTransactionAsync(sender, tx);391 const result = getGenericResult(events);392393 expect(result.success).to.be.true;394 });395}396397export async function setVariableMetaDataExpectFailure(sender: IKeyringPair, collectionId: number, itemId: number, data: number[]) {398 await usingApi(async (api) => {399 const tx = api.tx.nft.setVariableMetaData(collectionId, itemId, '0x' + Buffer.from(data).toString('hex'));400 await expect(submitTransactionExpectFailAsync(sender, tx)).to.be.rejected;401 });402}380403381export interface CreateFungibleData extends Struct {404export interface CreateFungibleData extends Struct {382 readonly value: u128;405 readonly value: u128;391 ReFungible: CreateReFungibleData;414 ReFungible: CreateReFungibleData;392}415}416417export async function burnItemExpectSuccess(owner: IKeyringPair, collectionId: number, tokenId: number, value = 0) {418 await usingApi(async (api) => {419 const tx = api.tx.nft.burnItem(collectionId, tokenId, value);420 const events = await submitTransactionAsync(owner, tx);421 const result = getGenericResult(events);422 // Get the item423 const item: any = (await api.query.nft.nftItemList(collectionId, tokenId)).toJSON();424 // What to expect425 // tslint:disable-next-line:no-unused-expression426 expect(result.success).to.be.true;427 // tslint:disable-next-line:no-unused-expression428 expect(item).to.be.not.null;429 expect(item.Owner).to.be.equal(nullPublicKey);430 });431}393432394export async function433export async function395approveExpectSuccess(collectionId: number,434approveExpectSuccess(collectionId: number,461 });500 });462}501}502503export async function504transferExpectSuccess(collectionId: number,505 tokenId: number,506 sender: IKeyringPair,507 recipient: IKeyringPair,508 value: number = 1,509 type: string = 'NFT') {510 await usingApi(async (api: ApiPromise) => {511 let balanceBefore = new BN(0);512 if (type === 'Fungible') {513 balanceBefore = await api.query.nft.balance(collectionId, recipient.address) as unknown as BN;514 }515 const transferTx = await api.tx.nft.transfer(recipient.address, collectionId, tokenId, value);516 const events = await submitTransactionAsync(sender, transferTx);517 const result = getCreateItemResult(events);518 // tslint:disable-next-line:no-unused-expression519 expect(result.success).to.be.true;520 if (type === 'NFT') {521 const nftItemData = await api.query.nft.nftItemList(collectionId, tokenId) as unknown as ITokenDataType;522 expect(nftItemData.Owner.toString()).to.be.equal(recipient.address);523 }524 if (type === 'Fungible') {525 const balanceAfter = await api.query.nft.balance(collectionId, recipient.address) as unknown as BN;526 expect(balanceAfter.sub(balanceBefore).toNumber()).to.be.equal(value);527 }528 if (type === 'ReFungible') {529 const nftItemData =530 await api.query.nft.reFungibleItemList(collectionId, tokenId) as unknown as IReFungibleTokenDataType;531 expect(nftItemData.Owner[0].Owner.toString()).to.be.equal(recipient.address);532 expect(nftItemData.Owner[0].Fraction.toNumber()).to.be.equal(value);533 }534 });535}536537export async function538transferExpectFail(collectionId: number,539 tokenId: number,540 sender: IKeyringPair,541 recipient: IKeyringPair,542 value: number = 1,543 type: string = 'NFT') {544 await usingApi(async (api: ApiPromise) => {545 const transferTx = await api.tx.nft.transfer(recipient.address, collectionId, tokenId, value);546 const events = await expect(submitTransactionExpectFailAsync(sender, transferTx)).to.be.rejected;547 if (events && Array.isArray(events)) {548 const result = getCreateCollectionResult(events);549 // tslint:disable-next-line:no-unused-expression550 expect(result.success).to.be.false;551 }552 });553}463554464export async function555export async function465approveExpectFail(collectionId: number,556approveExpectFail(collectionId: number,525 const collection: any = (await api.query.nft.collection(collectionId)).toJSON();617 const collection: any = (await api.query.nft.collection(collectionId)).toJSON();526618527 // What to expect619 // What to expect620 // tslint:disable-next-line:no-unused-expression528 expect(result.success).to.be.true;621 expect(result.success).to.be.true;529 expect(collection.Access).to.be.equal('WhiteList');622 expect(collection.Access).to.be.equal('WhiteList');530 });623 });550export async function addToWhiteListExpectSuccess(sender: IKeyringPair, collectionId: number, address: string) {643export async function addToWhiteListExpectSuccess(sender: IKeyringPair, collectionId: number, address: string) {551 await usingApi(async (api) => {644 await usingApi(async (api) => {645646 const whiteListedBefore = (await api.query.nft.whiteList(collectionId, address)).toJSON();552647553 // Run the transaction648 // Run the transaction554 const tx = api.tx.nft.addToWhiteList(collectionId, address);649 const tx = api.tx.nft.addToWhiteList(collectionId, address);555 const events = await submitTransactionAsync(sender, tx);650 const events = await submitTransactionAsync(sender, tx);556 const result = getGenericResult(events);651 const result = getGenericResult(events);557652558 // Get the collection559 const collection: any = (await api.query.nft.collection(collectionId)).toJSON();653 const whiteListedAfter = (await api.query.nft.whiteList(collectionId, address)).toJSON();560654561 // What to expect655 // What to expect656 // tslint:disable-next-line:no-unused-expression562 expect(result.success).to.be.true;657 expect(result.success).to.be.true;658 // tslint:disable-next-line: no-unused-expression659 expect(whiteListedBefore).to.be.false;660 // tslint:disable-next-line: no-unused-expression563 expect(collection.MintMode).to.be.equal(true);661 expect(whiteListedAfter).to.be.true;564 });662 });565}663}566664tests/yarn.lockdiffbeforeafterbothno changes