git.delta.rocks / unique-network / refs/commits / 8057bddf39cb

difftreelog

Merge remote-tracking branch 'origin/develop' into feature/CORE-37

str-mv2021-08-31parents: #fee4139 #c1ca9e8.patch.diff
in: master

144 files changed

modified.devcontainer/Dockerfilediffbeforeafterboth
13 [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \13 [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \
14 nvm install v16.2.0 && \14 nvm install v16.2.0 && \
15 npm install -g yarn && \15 npm install -g yarn && \
16 rustup toolchain install nightly-2021-05-30 && \16 rustup toolchain install nightly-2021-05-20 && \
17 rustup default nightly-2021-05-30 && \17 rustup default nightly-2021-05-20 && \
18 rustup target add wasm32-unknown-unknown && \18 rustup target add wasm32-unknown-unknown && \
19 rustup component add rustfmt clippy && \19 rustup component add rustfmt clippy && \
20 cargo install cargo-expand cargo-edit cargo-contract20 cargo install cargo-expand cargo-edit cargo-contract
modified.devcontainer/devcontainer.jsondiffbeforeafterboth
1{1{
2 "name": "Rust",2 "name": "Rust",
3 "build": {3 "dockerComposeFile": "./docker-compose.yml",
4 "dockerfile": "Dockerfile"4 "service": "nft_private",
5 },
6 "runArgs": [ "--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined" ],5 "workspaceFolder": "/workspaces/nft_private",
7 "settings": { 6 "settings": {
8 "terminal.integrated.shell.linux": "/bin/bash",7 "terminal.integrated.shell.linux": "/bin/bash",
9 "lldb.executable": "/usr/bin/lldb",8 "lldb.executable": "/usr/bin/lldb",
13 },12 },
14 "extensions": [13 "extensions": [
15 "matklad.rust-analyzer",14 "matklad.rust-analyzer",
16 "dbaeumer.vscode-eslint"15 "dbaeumer.vscode-eslint",
16 "tamasfe.even-better-toml"
17 ],17 ],
18 "remoteUser": "vscode"18 "remoteUser": "vscode"
19}19}
added.devcontainer/docker-compose.ymldiffbeforeafterboth

no changes

modified.github/workflows/node_build_test.ymldiffbeforeafterboth
31 username: ${{ secrets.SERVER_USERNAME }}31 username: ${{ secrets.SERVER_USERNAME }}
32 key: ${{ secrets.KEY }}32 key: ${{ secrets.KEY }}
33 port: ${{ secrets.SERVER_PORT }}33 port: ${{ secrets.SERVER_PORT }}
34 command_timeout: 240m34 command_timeout: 300m
35 script: |35 script: |
36 eval $(ssh-agent -s)36 eval $(ssh-agent -s)
37 ssh-add /home/polkadot/.ssh/git_hub37 ssh-add /home/devops/.ssh/git_hub
38 git clone git@github.com:usetech-llc/nft_private.git38 git clone git@github.com:UniqueNetwork/nft_private.git
39 cd nft_private39 cd nft_private
40 git checkout develop40 git checkout develop
41 # git pull --all41 # git pull --all
42 chmod +x ci_node.sh42 chmod +x ci_node.sh
43 ./ci_node.sh43 ./ci_node.sh
44 rm -rf /home/polkadot/nft_private44 rm -rf /home/polkadot/nft_private
4545
added.maintain/frame-weight-template.hbsdiffbeforeafterboth

no changes

added.maintain/scripts/compile_stub.shdiffbeforeafterboth

no changes

added.maintain/scripts/generate_api.shdiffbeforeafterboth

no changes

modifiedCargo.lockdiffbeforeafterboth
18source = "registry+https://github.com/rust-lang/crates.io-index"18source = "registry+https://github.com/rust-lang/crates.io-index"
19checksum = "e7a2e47a1fbe209ee101dd6d61285226744c6c8d3c21c8dc878ba6cb9f467f3a"19checksum = "e7a2e47a1fbe209ee101dd6d61285226744c6c8d3c21c8dc878ba6cb9f467f3a"
20dependencies = [20dependencies = [
21 "gimli",21 "gimli 0.24.0",
22]22]
2323
24[[package]]24[[package]]
25name = "addr2line"
26version = "0.16.0"
27source = "registry+https://github.com/rust-lang/crates.io-index"
28checksum = "3e61f2b7f93d2c7d2b08263acaa4a363b3e276806c68af6134c44f523bf1aacd"
29dependencies = [
30 "gimli 0.25.0",
31]
32
33[[package]]
25name = "adler"34name = "adler"
26version = "1.0.2"35version = "1.0.2"
27source = "registry+https://github.com/rust-lang/crates.io-index"36source = "registry+https://github.com/rust-lang/crates.io-index"
57 "aes",66 "aes",
58 "block-cipher",67 "block-cipher",
59 "ghash",68 "ghash",
60 "subtle 2.4.0",69 "subtle 2.4.1",
61]70]
6271
63[[package]]72[[package]]
88checksum = "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e"97checksum = "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e"
8998
90[[package]]99[[package]]
100name = "ahash"
101version = "0.7.4"
102source = "registry+https://github.com/rust-lang/crates.io-index"
103checksum = "43bb833f0bf979d8475d38fbf09ed3b8a55e1885fe93ad3f93239fc6a4f17b98"
104dependencies = [
105 "getrandom 0.2.3",
106 "once_cell",
107 "version_check",
108]
109
110[[package]]
91name = "aho-corasick"111name = "aho-corasick"
92version = "0.7.18"112version = "0.7.18"
93source = "registry+https://github.com/rust-lang/crates.io-index"113source = "registry+https://github.com/rust-lang/crates.io-index"
122142
123[[package]]143[[package]]
124name = "anyhow"144name = "anyhow"
125version = "1.0.41"145version = "1.0.42"
126source = "registry+https://github.com/rust-lang/crates.io-index"146source = "registry+https://github.com/rust-lang/crates.io-index"
127checksum = "15af2628f6890fe2609a3b91bef4c83450512802e59489f9c1cb1fa5df064a61"147checksum = "595d3cfa7a60d4555cb5067b99f07142a08ea778de5cf993f7b75c7d8fabc486"
128148
129[[package]]149[[package]]
130name = "approx"150name = "approx"
131version = "0.4.0"
132source = "registry+https://github.com/rust-lang/crates.io-index"
133checksum = "3f2a05fd1bd10b2527e20a2cd32d8873d115b8b39fe219ee25f42a8aca6ba278"
134dependencies = [
135 "num-traits",
136]
137
138[[package]]
139name = "approx"
140version = "0.5.0"151version = "0.5.0"
141source = "registry+https://github.com/rust-lang/crates.io-index"152source = "registry+https://github.com/rust-lang/crates.io-index"
142checksum = "072df7202e63b127ab55acfe16ce97013d5b97bf160489336d3f1840fd78e99e"153checksum = "072df7202e63b127ab55acfe16ce97013d5b97bf160489336d3f1840fd78e99e"
236247
237[[package]]248[[package]]
238name = "async-io"249name = "async-io"
239version = "1.4.1"250version = "1.6.0"
240source = "registry+https://github.com/rust-lang/crates.io-index"251source = "registry+https://github.com/rust-lang/crates.io-index"
241checksum = "4bbfd5cf2794b1e908ea8457e6c45f8f8f1f6ec5f74617bf4662623f47503c3b"252checksum = "a811e6a479f2439f0c04038796b5cfb3d2ad56c230e0f2d3f7b04d68cfee607b"
242dependencies = [253dependencies = [
243 "concurrent-queue",254 "concurrent-queue",
244 "fastrand",
245 "futures-lite",255 "futures-lite",
246 "libc",256 "libc",
247 "log",257 "log",
312 "memchr",322 "memchr",
313 "num_cpus",323 "num_cpus",
314 "once_cell",324 "once_cell",
315 "pin-project-lite 0.2.6",325 "pin-project-lite 0.2.7",
316 "pin-utils",326 "pin-utils",
317 "slab",327 "slab",
318 "wasm-bindgen-futures",328 "wasm-bindgen-futures",
359 "futures-sink",369 "futures-sink",
360 "futures-util",370 "futures-util",
361 "memchr",371 "memchr",
362 "pin-project-lite 0.2.6",372 "pin-project-lite 0.2.7",
363]373]
364374
365[[package]]375[[package]]
372 "futures-sink",382 "futures-sink",
373 "futures-util",383 "futures-util",
374 "memchr",384 "memchr",
375 "pin-project-lite 0.2.6",385 "pin-project-lite 0.2.7",
376]386]
377387
378[[package]]388[[package]]
409419
410[[package]]420[[package]]
411name = "backtrace"421name = "backtrace"
412version = "0.3.60"422version = "0.3.61"
413source = "registry+https://github.com/rust-lang/crates.io-index"423source = "registry+https://github.com/rust-lang/crates.io-index"
414checksum = "b7815ea54e4d821e791162e078acbebfd6d8c8939cd559c9335dceb1c8ca7282"424checksum = "e7a905d892734eea339e896738c14b9afce22b5318f64b951e70bf3844419b01"
415dependencies = [425dependencies = [
416 "addr2line",426 "addr2line 0.16.0",
417 "cc",427 "cc",
418 "cfg-if 1.0.0",428 "cfg-if 1.0.0",
419 "libc",429 "libc",
420 "miniz_oxide",430 "miniz_oxide",
421 "object 0.25.3",431 "object 0.26.0",
422 "rustc-demangle",432 "rustc-demangle",
423]433]
424434
448458
449[[package]]459[[package]]
450name = "beef"460name = "beef"
451version = "0.5.0"461version = "0.5.1"
452source = "registry+https://github.com/rust-lang/crates.io-index"462source = "registry+https://github.com/rust-lang/crates.io-index"
453checksum = "6736e2428df2ca2848d846c43e88745121a6654696e349ce0054a420815a7409"463checksum = "bed554bd50246729a1ec158d08aa3235d1b69d94ad120ebe187e28894787e736"
454dependencies = [464dependencies = [
455 "serde",465 "serde",
456]466]
457467
458[[package]]468[[package]]
459name = "beefy-gadget"469name = "beefy-gadget"
460version = "0.1.0"470version = "0.1.0"
461source = "git+https://github.com/paritytech/grandpa-bridge-gadget?branch=polkadot-v0.9.7#299dd5fd3fabd99c3c919f1312001283ddc5b365"471source = "git+https://github.com/paritytech/grandpa-bridge-gadget?branch=polkadot-v0.9.8#55ae3329847e0bbde51c9d45991d99f444777555"
462dependencies = [472dependencies = [
463 "beefy-primitives",473 "beefy-primitives",
464 "futures 0.3.15",474 "futures 0.3.16",
465 "hex",475 "hex",
466 "log",476 "log",
467 "parity-scale-codec 2.1.3",477 "parity-scale-codec",
468 "parking_lot 0.11.1",478 "parking_lot 0.11.1",
469 "sc-client-api",479 "sc-client-api",
470 "sc-keystore",480 "sc-keystore",
486[[package]]496[[package]]
487name = "beefy-gadget-rpc"497name = "beefy-gadget-rpc"
488version = "0.1.0"498version = "0.1.0"
489source = "git+https://github.com/paritytech/grandpa-bridge-gadget?branch=polkadot-v0.9.7#299dd5fd3fabd99c3c919f1312001283ddc5b365"499source = "git+https://github.com/paritytech/grandpa-bridge-gadget?branch=polkadot-v0.9.8#55ae3329847e0bbde51c9d45991d99f444777555"
490dependencies = [500dependencies = [
491 "beefy-gadget",501 "beefy-gadget",
492 "beefy-primitives",502 "beefy-primitives",
493 "futures 0.3.15",503 "futures 0.3.16",
494 "jsonrpc-core 15.1.0",504 "jsonrpc-core 15.1.0",
495 "jsonrpc-core-client 15.1.0",505 "jsonrpc-core-client 15.1.0",
496 "jsonrpc-derive 15.1.0",506 "jsonrpc-derive 15.1.0",
497 "jsonrpc-pubsub 15.1.0",507 "jsonrpc-pubsub 15.1.0",
498 "log",508 "log",
499 "parity-scale-codec 2.1.3",509 "parity-scale-codec",
500 "sc-rpc",510 "sc-rpc",
501 "serde",511 "serde",
502 "serde_json",512 "serde_json",
507[[package]]517[[package]]
508name = "beefy-primitives"518name = "beefy-primitives"
509version = "0.1.0"519version = "0.1.0"
510source = "git+https://github.com/paritytech/grandpa-bridge-gadget?branch=polkadot-v0.9.7#299dd5fd3fabd99c3c919f1312001283ddc5b365"520source = "git+https://github.com/paritytech/grandpa-bridge-gadget?branch=polkadot-v0.9.8#55ae3329847e0bbde51c9d45991d99f444777555"
511dependencies = [521dependencies = [
512 "parity-scale-codec 2.1.3",522 "parity-scale-codec",
513 "sp-api",523 "sp-api",
514 "sp-application-crypto",524 "sp-application-crypto",
515 "sp-core",525 "sp-core",
528538
529[[package]]539[[package]]
530name = "bindgen"540name = "bindgen"
531version = "0.57.0"541version = "0.59.1"
532source = "registry+https://github.com/rust-lang/crates.io-index"542source = "registry+https://github.com/rust-lang/crates.io-index"
533checksum = "fd4865004a46a0aafb2a0a5eb19d3c9fc46ee5f063a6cfc605c69ac9ecf5263d"543checksum = "453c49e5950bb0eb63bb3df640e31618846c89d5b7faa54040d76e98e0134375"
534dependencies = [544dependencies = [
535 "bitflags",545 "bitflags",
536 "cexpr",546 "cexpr",
553563
554[[package]]564[[package]]
555name = "bitvec"565name = "bitvec"
556version = "0.17.4"566version = "0.19.5"
557source = "registry+https://github.com/rust-lang/crates.io-index"567source = "registry+https://github.com/rust-lang/crates.io-index"
558checksum = "41262f11d771fd4a61aa3ce019fca363b4b6c282fca9da2a31186d3965a47a5c"568checksum = "8942c8d352ae1838c9dda0b0ca2ab657696ef2232a20147cf1b30ae1a9cb4321"
559dependencies = [569dependencies = [
560 "either",570 "funty",
561 "radium 0.3.0",571 "radium 0.5.3",
572 "tap",
573 "wyz",
562]574]
563575
564[[package]]576[[package]]
692]704]
693705
694[[package]]706[[package]]
707name = "bp-header-chain"
708version = "0.1.0"
709source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
710dependencies = [
711 "finality-grandpa",
712 "frame-support",
713 "parity-scale-codec",
714 "serde",
715 "sp-core",
716 "sp-finality-grandpa",
717 "sp-runtime",
718 "sp-std",
719]
720
721[[package]]
722name = "bp-messages"
723version = "0.1.0"
724source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
725dependencies = [
726 "bitvec 0.20.4",
727 "bp-runtime",
728 "frame-support",
729 "frame-system",
730 "impl-trait-for-tuples",
731 "parity-scale-codec",
732 "serde",
733 "sp-std",
734]
735
736[[package]]
737name = "bp-polkadot-core"
738version = "0.1.0"
739source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
740dependencies = [
741 "bp-messages",
742 "bp-runtime",
743 "frame-support",
744 "frame-system",
745 "parity-scale-codec",
746 "sp-api",
747 "sp-core",
748 "sp-runtime",
749 "sp-std",
750 "sp-version",
751]
752
753[[package]]
754name = "bp-rococo"
755version = "0.1.0"
756source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
757dependencies = [
758 "bp-messages",
759 "bp-polkadot-core",
760 "bp-runtime",
761 "frame-support",
762 "parity-scale-codec",
763 "smallvec 1.6.1",
764 "sp-api",
765 "sp-runtime",
766 "sp-std",
767 "sp-version",
768]
769
770[[package]]
771name = "bp-runtime"
772version = "0.1.0"
773source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
774dependencies = [
775 "frame-support",
776 "hash-db",
777 "num-traits",
778 "parity-scale-codec",
779 "sp-core",
780 "sp-io",
781 "sp-runtime",
782 "sp-state-machine",
783 "sp-std",
784 "sp-trie",
785]
786
787[[package]]
788name = "bp-test-utils"
789version = "0.1.0"
790source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
791dependencies = [
792 "bp-header-chain",
793 "ed25519-dalek",
794 "finality-grandpa",
795 "parity-scale-codec",
796 "sp-application-crypto",
797 "sp-finality-grandpa",
798 "sp-runtime",
799 "sp-std",
800]
801
802[[package]]
803name = "bp-wococo"
804version = "0.1.0"
805source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
806dependencies = [
807 "bp-messages",
808 "bp-polkadot-core",
809 "bp-rococo",
810 "bp-runtime",
811 "parity-scale-codec",
812 "sp-api",
813 "sp-runtime",
814 "sp-std",
815]
816
817[[package]]
695name = "bs58"818name = "bs58"
696version = "0.4.0"819version = "0.4.0"
697source = "registry+https://github.com/rust-lang/crates.io-index"820source = "registry+https://github.com/rust-lang/crates.io-index"
723846
724[[package]]847[[package]]
725name = "byte-slice-cast"848name = "byte-slice-cast"
726version = "0.3.5"
727source = "registry+https://github.com/rust-lang/crates.io-index"
728checksum = "b0a5e3906bcbf133e33c1d4d95afc664ad37fbdb9f6568d8043e7ea8c27d93d3"
729
730[[package]]
731name = "byte-slice-cast"
732version = "1.0.0"849version = "1.0.0"
733source = "registry+https://github.com/rust-lang/crates.io-index"850source = "registry+https://github.com/rust-lang/crates.io-index"
734checksum = "65c1bf4a04a88c54f589125563643d773f3254b5c38571395e2b591c693bbc81"851checksum = "65c1bf4a04a88c54f589125563643d773f3254b5c38571395e2b591c693bbc81"
775checksum = "631ae5198c9be5e753e5cc215e1bd73c2b466a3565173db433f52bb9d3e66dba"892checksum = "631ae5198c9be5e753e5cc215e1bd73c2b466a3565173db433f52bb9d3e66dba"
776893
777[[package]]894[[package]]
895name = "camino"
896version = "1.0.4"
897source = "registry+https://github.com/rust-lang/crates.io-index"
898checksum = "d4648c6d00a709aa069a236adcaae4f605a6241c72bf5bee79331a4b625921a9"
899dependencies = [
900 "serde",
901]
902
903[[package]]
778name = "cargo-platform"904name = "cargo-platform"
779version = "0.1.1"905version = "0.1.1"
780source = "registry+https://github.com/rust-lang/crates.io-index"906source = "registry+https://github.com/rust-lang/crates.io-index"
797]923]
798924
799[[package]]925[[package]]
926name = "cargo_metadata"
927version = "0.13.1"
928source = "registry+https://github.com/rust-lang/crates.io-index"
929checksum = "081e3f0755c1f380c2d010481b6fa2e02973586d5f2b24eebb7a2a1d98b143d8"
930dependencies = [
931 "camino",
932 "cargo-platform",
933 "semver 0.11.0",
934 "semver-parser 0.10.2",
935 "serde",
936 "serde_json",
937]
938
939[[package]]
800name = "cc"940name = "cc"
801version = "1.0.68"941version = "1.0.69"
802source = "registry+https://github.com/rust-lang/crates.io-index"942source = "registry+https://github.com/rust-lang/crates.io-index"
803checksum = "4a72c244c1ff497a746a7e1fb3d14bd08420ecda70c8f25c7112f2781652d787"943checksum = "e70cc2f62c6ce1868963827bd677764c62d07c3d9a3e1fb1177ee1a9ab199eb2"
804dependencies = [944dependencies = [
805 "jobserver",945 "jobserver",
806]946]
807947
808[[package]]948[[package]]
809name = "cexpr"949name = "cexpr"
810version = "0.4.0"950version = "0.5.0"
811source = "registry+https://github.com/rust-lang/crates.io-index"951source = "registry+https://github.com/rust-lang/crates.io-index"
812checksum = "f4aedb84272dbe89af497cf81375129abda4fc0a9e7c5d317498c15cc30c0d27"952checksum = "db507a7679252d2276ed0dd8113c6875ec56d3089f9225b2b42c30cc1f8e5c89"
813dependencies = [953dependencies = [
814 "nom",954 "nom",
815]955]
9871127
988[[package]]1128[[package]]
989name = "cpp_demangle"1129name = "cpp_demangle"
990version = "0.3.2"1130version = "0.3.3"
991source = "registry+https://github.com/rust-lang/crates.io-index"1131source = "registry+https://github.com/rust-lang/crates.io-index"
992checksum = "44919ecaf6f99e8e737bc239408931c9a01e9a6c74814fee8242dd2506b65390"1132checksum = "8ea47428dc9d2237f3c6bc134472edfd63ebba0af932e783506dcfd66f10d18a"
993dependencies = [1133dependencies = [
994 "cfg-if 1.0.0",1134 "cfg-if 1.0.0",
995 "glob",
996]1135]
9971136
998[[package]]1137[[package]]
999name = "cpufeatures"1138name = "cpufeatures"
1000version = "0.1.4"1139version = "0.1.5"
1001source = "registry+https://github.com/rust-lang/crates.io-index"1140source = "registry+https://github.com/rust-lang/crates.io-index"
1002checksum = "ed00c67cb5d0a7d64a44f6ad2668db7e7530311dd53ea79bcd4fb022c64911c8"1141checksum = "66c99696f6c9dd7f35d486b9d04d7e6e202aa3e8c40d553f2fdf5e7e0c6a71ef"
1003dependencies = [1142dependencies = [
1004 "libc",1143 "libc",
1005]1144]
1029 "cranelift-codegen-meta",1168 "cranelift-codegen-meta",
1030 "cranelift-codegen-shared",1169 "cranelift-codegen-shared",
1031 "cranelift-entity",1170 "cranelift-entity",
1032 "gimli",1171 "gimli 0.24.0",
1033 "log",1172 "log",
1034 "regalloc",1173 "regalloc",
1035 "serde",1174 "serde",
1228checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab"1367checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab"
1229dependencies = [1368dependencies = [
1230 "generic-array 0.14.4",1369 "generic-array 0.14.4",
1231 "subtle 2.4.0",1370 "subtle 2.4.1",
1232]1371]
12331372
1234[[package]]1373[[package]]
1264[[package]]1403[[package]]
1265name = "cumulus-client-cli"1404name = "cumulus-client-cli"
1266version = "0.1.0"1405version = "0.1.0"
1267source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.7#c5c3abf7eb9d4fdfb588d6560efaa8dca66a8dbc"1406source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.8#ed6ba5dfb2c112c29505e856e8971da3420ce6d0"
1268dependencies = [1407dependencies = [
1269 "sc-cli",1408 "sc-cli",
1270 "sc-service",1409 "sc-service",
1274[[package]]1413[[package]]
1275name = "cumulus-client-collator"1414name = "cumulus-client-collator"
1276version = "0.1.0"1415version = "0.1.0"
1277source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.7#c5c3abf7eb9d4fdfb588d6560efaa8dca66a8dbc"1416source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.8#ed6ba5dfb2c112c29505e856e8971da3420ce6d0"
1278dependencies = [1417dependencies = [
1279 "cumulus-client-consensus-common",1418 "cumulus-client-consensus-common",
1280 "cumulus-client-network",1419 "cumulus-client-network",
1281 "cumulus-primitives-core",1420 "cumulus-primitives-core",
1282 "futures 0.3.15",1421 "futures 0.3.16",
1283 "parity-scale-codec 2.1.3",1422 "parity-scale-codec",
1284 "parking_lot 0.10.2",1423 "parking_lot 0.10.2",
1285 "polkadot-node-primitives",1424 "polkadot-node-primitives",
1286 "polkadot-node-subsystem",1425 "polkadot-node-subsystem",
1298[[package]]1437[[package]]
1299name = "cumulus-client-consensus-aura"1438name = "cumulus-client-consensus-aura"
1300version = "0.1.0"1439version = "0.1.0"
1301source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.7#c5c3abf7eb9d4fdfb588d6560efaa8dca66a8dbc"1440source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.8#ed6ba5dfb2c112c29505e856e8971da3420ce6d0"
1302dependencies = [1441dependencies = [
1303 "async-trait",1442 "async-trait",
1304 "cumulus-client-consensus-common",1443 "cumulus-client-consensus-common",
1305 "cumulus-primitives-core",1444 "cumulus-primitives-core",
1306 "futures 0.3.15",1445 "futures 0.3.16",
1307 "parity-scale-codec 2.1.3",1446 "parity-scale-codec",
1308 "parking_lot 0.10.2",1447 "parking_lot 0.10.2",
1309 "polkadot-client",1448 "polkadot-client",
1310 "sc-client-api",1449 "sc-client-api",
1328[[package]]1467[[package]]
1329name = "cumulus-client-consensus-common"1468name = "cumulus-client-consensus-common"
1330version = "0.1.0"1469version = "0.1.0"
1331source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.7#c5c3abf7eb9d4fdfb588d6560efaa8dca66a8dbc"1470source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.8#ed6ba5dfb2c112c29505e856e8971da3420ce6d0"
1332dependencies = [1471dependencies = [
1333 "async-trait",1472 "async-trait",
1334 "dyn-clone",1473 "dyn-clone",
1335 "futures 0.3.15",1474 "futures 0.3.16",
1336 "parity-scale-codec 2.1.3",1475 "parity-scale-codec",
1337 "polkadot-primitives",1476 "polkadot-primitives",
1338 "polkadot-runtime",1477 "polkadot-runtime",
1339 "sc-client-api",1478 "sc-client-api",
1352[[package]]1491[[package]]
1353name = "cumulus-client-network"1492name = "cumulus-client-network"
1354version = "0.1.0"1493version = "0.1.0"
1355source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.7#c5c3abf7eb9d4fdfb588d6560efaa8dca66a8dbc"1494source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.8#ed6ba5dfb2c112c29505e856e8971da3420ce6d0"
1356dependencies = [1495dependencies = [
1357 "derive_more",1496 "derive_more",
1358 "futures 0.3.15",1497 "futures 0.3.16",
1359 "futures-timer 3.0.2",1498 "futures-timer 3.0.2",
1360 "parity-scale-codec 2.1.3",1499 "parity-scale-codec",
1361 "parking_lot 0.10.2",1500 "parking_lot 0.10.2",
1362 "polkadot-client",1501 "polkadot-client",
1363 "polkadot-node-primitives",1502 "polkadot-node-primitives",
1376[[package]]1515[[package]]
1377name = "cumulus-client-pov-recovery"1516name = "cumulus-client-pov-recovery"
1378version = "0.1.0"1517version = "0.1.0"
1379source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.7#c5c3abf7eb9d4fdfb588d6560efaa8dca66a8dbc"1518source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.8#ed6ba5dfb2c112c29505e856e8971da3420ce6d0"
1380dependencies = [1519dependencies = [
1381 "cumulus-primitives-core",1520 "cumulus-primitives-core",
1382 "futures 0.3.15",1521 "futures 0.3.16",
1383 "futures-timer 3.0.2",1522 "futures-timer 3.0.2",
1384 "parity-scale-codec 2.1.3",1523 "parity-scale-codec",
1385 "polkadot-node-primitives",1524 "polkadot-node-primitives",
1386 "polkadot-node-subsystem",1525 "polkadot-node-subsystem",
1387 "polkadot-overseer",1526 "polkadot-overseer",
1399[[package]]1538[[package]]
1400name = "cumulus-client-service"1539name = "cumulus-client-service"
1401version = "0.1.0"1540version = "0.1.0"
1402source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.7#c5c3abf7eb9d4fdfb588d6560efaa8dca66a8dbc"1541source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.8#ed6ba5dfb2c112c29505e856e8971da3420ce6d0"
1403dependencies = [1542dependencies = [
1404 "cumulus-client-collator",1543 "cumulus-client-collator",
1405 "cumulus-client-consensus-common",1544 "cumulus-client-consensus-common",
1406 "cumulus-client-pov-recovery",1545 "cumulus-client-pov-recovery",
1407 "cumulus-primitives-core",1546 "cumulus-primitives-core",
1408 "parity-scale-codec 2.1.3",1547 "parity-scale-codec",
1409 "parking_lot 0.10.2",1548 "parking_lot 0.10.2",
1410 "polkadot-overseer",1549 "polkadot-overseer",
1411 "polkadot-primitives",1550 "polkadot-primitives",
1427[[package]]1566[[package]]
1428name = "cumulus-pallet-aura-ext"1567name = "cumulus-pallet-aura-ext"
1429version = "0.1.0"1568version = "0.1.0"
1430source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.7#c5c3abf7eb9d4fdfb588d6560efaa8dca66a8dbc"1569source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.8#ed6ba5dfb2c112c29505e856e8971da3420ce6d0"
1431dependencies = [1570dependencies = [
1432 "frame-executive",1571 "frame-executive",
1433 "frame-support",1572 "frame-support",
1434 "frame-system",1573 "frame-system",
1435 "pallet-aura",1574 "pallet-aura",
1436 "parity-scale-codec 2.1.3",1575 "parity-scale-codec",
1437 "serde",1576 "serde",
1438 "sp-application-crypto",1577 "sp-application-crypto",
1439 "sp-consensus-aura",1578 "sp-consensus-aura",
1444[[package]]1583[[package]]
1445name = "cumulus-pallet-dmp-queue"1584name = "cumulus-pallet-dmp-queue"
1446version = "0.1.0"1585version = "0.1.0"
1447source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.7#c5c3abf7eb9d4fdfb588d6560efaa8dca66a8dbc"1586source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.8#ed6ba5dfb2c112c29505e856e8971da3420ce6d0"
1448dependencies = [1587dependencies = [
1449 "cumulus-primitives-core",1588 "cumulus-primitives-core",
1450 "frame-support",1589 "frame-support",
1451 "frame-system",1590 "frame-system",
1452 "log",1591 "log",
1453 "parity-scale-codec 2.1.3",1592 "parity-scale-codec",
1454 "rand 0.8.4",1593 "rand 0.8.4",
1455 "rand_chacha 0.3.1",1594 "rand_chacha 0.3.1",
1456 "sp-io",1595 "sp-io",
1463[[package]]1602[[package]]
1464name = "cumulus-pallet-parachain-system"1603name = "cumulus-pallet-parachain-system"
1465version = "0.1.0"1604version = "0.1.0"
1466source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.7#c5c3abf7eb9d4fdfb588d6560efaa8dca66a8dbc"1605source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.8#ed6ba5dfb2c112c29505e856e8971da3420ce6d0"
1467dependencies = [1606dependencies = [
1468 "cumulus-pallet-parachain-system-proc-macro",1607 "cumulus-pallet-parachain-system-proc-macro",
1469 "cumulus-primitives-core",1608 "cumulus-primitives-core",
1473 "frame-system",1612 "frame-system",
1474 "log",1613 "log",
1475 "pallet-balances",1614 "pallet-balances",
1476 "parity-scale-codec 2.1.3",1615 "parity-scale-codec",
1477 "polkadot-parachain",1616 "polkadot-parachain",
1478 "serde",1617 "serde",
1479 "sp-core",1618 "sp-core",
1491[[package]]1630[[package]]
1492name = "cumulus-pallet-parachain-system-proc-macro"1631name = "cumulus-pallet-parachain-system-proc-macro"
1493version = "0.1.0"1632version = "0.1.0"
1494source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.7#c5c3abf7eb9d4fdfb588d6560efaa8dca66a8dbc"1633source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.8#ed6ba5dfb2c112c29505e856e8971da3420ce6d0"
1495dependencies = [1634dependencies = [
1496 "proc-macro-crate 1.0.0",1635 "proc-macro-crate 1.0.0",
1497 "proc-macro2",1636 "proc-macro2",
1502[[package]]1641[[package]]
1503name = "cumulus-pallet-xcm"1642name = "cumulus-pallet-xcm"
1504version = "0.1.0"1643version = "0.1.0"
1505source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.7#c5c3abf7eb9d4fdfb588d6560efaa8dca66a8dbc"1644source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.8#ed6ba5dfb2c112c29505e856e8971da3420ce6d0"
1506dependencies = [1645dependencies = [
1507 "cumulus-primitives-core",1646 "cumulus-primitives-core",
1508 "frame-support",1647 "frame-support",
1509 "frame-system",1648 "frame-system",
1510 "parity-scale-codec 2.1.3",1649 "parity-scale-codec",
1511 "serde",1650 "serde",
1512 "sp-io",1651 "sp-io",
1513 "sp-runtime",1652 "sp-runtime",
1518[[package]]1657[[package]]
1519name = "cumulus-pallet-xcmp-queue"1658name = "cumulus-pallet-xcmp-queue"
1520version = "0.1.0"1659version = "0.1.0"
1521source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.7#c5c3abf7eb9d4fdfb588d6560efaa8dca66a8dbc"1660source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.8#ed6ba5dfb2c112c29505e856e8971da3420ce6d0"
1522dependencies = [1661dependencies = [
1523 "cumulus-primitives-core",1662 "cumulus-primitives-core",
1524 "frame-support",1663 "frame-support",
1525 "frame-system",1664 "frame-system",
1526 "log",1665 "log",
1527 "parity-scale-codec 2.1.3",1666 "parity-scale-codec",
1528 "rand 0.8.4",1667 "rand 0.8.4",
1529 "rand_chacha 0.3.1",1668 "rand_chacha 0.3.1",
1530 "sp-runtime",1669 "sp-runtime",
1536[[package]]1675[[package]]
1537name = "cumulus-primitives-core"1676name = "cumulus-primitives-core"
1538version = "0.1.0"1677version = "0.1.0"
1539source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.7#c5c3abf7eb9d4fdfb588d6560efaa8dca66a8dbc"1678source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.8#ed6ba5dfb2c112c29505e856e8971da3420ce6d0"
1540dependencies = [1679dependencies = [
1541 "frame-support",1680 "frame-support",
1542 "impl-trait-for-tuples 0.2.1",1681 "impl-trait-for-tuples",
1543 "parity-scale-codec 2.1.3",1682 "parity-scale-codec",
1544 "polkadot-core-primitives",1683 "polkadot-core-primitives",
1545 "polkadot-parachain",1684 "polkadot-parachain",
1546 "polkadot-primitives",1685 "polkadot-primitives",
1554[[package]]1693[[package]]
1555name = "cumulus-primitives-parachain-inherent"1694name = "cumulus-primitives-parachain-inherent"
1556version = "0.1.0"1695version = "0.1.0"
1557source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.7#c5c3abf7eb9d4fdfb588d6560efaa8dca66a8dbc"1696source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.8#ed6ba5dfb2c112c29505e856e8971da3420ce6d0"
1558dependencies = [1697dependencies = [
1559 "async-trait",1698 "async-trait",
1560 "cumulus-primitives-core",1699 "cumulus-primitives-core",
1561 "parity-scale-codec 2.1.3",1700 "cumulus-test-relay-sproof-builder",
1701 "parity-scale-codec",
1562 "polkadot-client",1702 "polkadot-client",
1563 "sc-client-api",1703 "sc-client-api",
1564 "sp-api",1704 "sp-api",
1574[[package]]1714[[package]]
1575name = "cumulus-primitives-timestamp"1715name = "cumulus-primitives-timestamp"
1576version = "0.1.0"1716version = "0.1.0"
1577source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.7#c5c3abf7eb9d4fdfb588d6560efaa8dca66a8dbc"1717source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.8#ed6ba5dfb2c112c29505e856e8971da3420ce6d0"
1578dependencies = [1718dependencies = [
1579 "cumulus-primitives-core",1719 "cumulus-primitives-core",
1580 "sp-inherents",1720 "sp-inherents",
1585[[package]]1725[[package]]
1586name = "cumulus-primitives-utility"1726name = "cumulus-primitives-utility"
1587version = "0.1.0"1727version = "0.1.0"
1588source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.7#c5c3abf7eb9d4fdfb588d6560efaa8dca66a8dbc"1728source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.8#ed6ba5dfb2c112c29505e856e8971da3420ce6d0"
1589dependencies = [1729dependencies = [
1590 "cumulus-primitives-core",1730 "cumulus-primitives-core",
1591 "frame-support",1731 "frame-support",
1592 "impl-trait-for-tuples 0.2.1",1732 "impl-trait-for-tuples",
1593 "parity-scale-codec 2.1.3",1733 "parity-scale-codec",
1594 "polkadot-core-primitives",1734 "polkadot-core-primitives",
1595 "polkadot-parachain",1735 "polkadot-parachain",
1596 "polkadot-primitives",1736 "polkadot-primitives",
1601]1741]
16021742
1603[[package]]1743[[package]]
1744name = "cumulus-test-relay-sproof-builder"
1745version = "0.1.0"
1746source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.8#ed6ba5dfb2c112c29505e856e8971da3420ce6d0"
1747dependencies = [
1748 "cumulus-primitives-core",
1749 "parity-scale-codec",
1750 "polkadot-primitives",
1751 "sp-runtime",
1752 "sp-state-machine",
1753 "sp-std",
1754]
1755
1756[[package]]
1604name = "curve25519-dalek"1757name = "curve25519-dalek"
1605version = "2.1.2"1758version = "2.1.3"
1606source = "registry+https://github.com/rust-lang/crates.io-index"1759source = "registry+https://github.com/rust-lang/crates.io-index"
1607checksum = "434e1720189a637d44fe464f4df1e6eb900b4835255b14354497c78af37d9bb8"1760checksum = "4a9b85542f99a2dfa2a1b8e192662741c9859a846b296bef1c92ef9b58b5a216"
1608dependencies = [1761dependencies = [
1609 "byteorder",1762 "byteorder",
1610 "digest 0.8.1",1763 "digest 0.8.1",
1611 "rand_core 0.5.1",1764 "rand_core 0.5.1",
1612 "subtle 2.4.0",1765 "subtle 2.4.1",
1613 "zeroize",1766 "zeroize",
1614]1767]
16151768
1622 "byteorder",1775 "byteorder",
1623 "digest 0.9.0",1776 "digest 0.9.0",
1624 "rand_core 0.5.1",1777 "rand_core 0.5.1",
1625 "subtle 2.4.0",1778 "subtle 2.4.1",
1626 "zeroize",1779 "zeroize",
1627]1780]
16281781
17001853
1701[[package]]1854[[package]]
1702name = "derive_more"1855name = "derive_more"
1703version = "0.99.14"1856version = "0.99.16"
1704source = "registry+https://github.com/rust-lang/crates.io-index"1857source = "registry+https://github.com/rust-lang/crates.io-index"
1705checksum = "5cc7b9cef1e351660e5443924e4f43ab25fbbed3e9a5f052df3677deb4d6b320"1858checksum = "40eebddd2156ce1bb37b20bbe5151340a31828b1f2d22ba4141f3531710e38df"
1706dependencies = [1859dependencies = [
1707 "convert_case",1860 "convert_case",
1708 "proc-macro2",1861 "proc-macro2",
1709 "quote",1862 "quote",
1863 "rustc_version 0.3.3",
1710 "syn",1864 "syn",
1711]1865]
17121866
18141968
1815[[package]]1969[[package]]
1816name = "ed25519"1970name = "ed25519"
1817version = "1.1.1"1971version = "1.2.0"
1818source = "registry+https://github.com/rust-lang/crates.io-index"1972source = "registry+https://github.com/rust-lang/crates.io-index"
1819checksum = "8d0860415b12243916284c67a9be413e044ee6668247b99ba26d94b2bc06c8f6"1973checksum = "4620d40f6d2601794401d6dd95a5cf69b6c157852539470eeda433a99b3c0efc"
1820dependencies = [1974dependencies = [
1821 "signature",1975 "signature",
1822]1976]
19182072
1919[[package]]2073[[package]]
1920name = "erased-serde"2074name = "erased-serde"
1921version = "0.3.15"2075version = "0.3.16"
1922source = "registry+https://github.com/rust-lang/crates.io-index"2076source = "registry+https://github.com/rust-lang/crates.io-index"
1923checksum = "e5b36e6f2295f393f44894c6031f67df4d185b984cd54d08f768ce678007efcd"2077checksum = "3de9ad4541d99dc22b59134e7ff8dc3d6c988c89ecd7324bf10a8362b07a2afa"
1924dependencies = [2078dependencies = [
1925 "serde",2079 "serde",
1926]2080]
19482102
1949[[package]]2103[[package]]
1950name = "ethbloom"2104name = "ethbloom"
1951version = "0.9.2"
1952source = "registry+https://github.com/rust-lang/crates.io-index"
1953checksum = "71a6567e6fd35589fea0c63b94b4cf2e55573e413901bdbe60ab15cf0e25e5df"
1954dependencies = [
1955 "crunchy",
1956 "fixed-hash 0.6.1",
1957 "impl-rlp 0.2.1",
1958 "impl-serde",
1959 "tiny-keccak",
1960]
1961
1962[[package]]
1963name = "ethbloom"
1964version = "0.11.0"2105version = "0.11.0"
1965source = "registry+https://github.com/rust-lang/crates.io-index"2106source = "registry+https://github.com/rust-lang/crates.io-index"
1966checksum = "779864b9c7f7ead1f092972c3257496c6a84b46dba2ce131dd8a282cb2cc5972"2107checksum = "779864b9c7f7ead1f092972c3257496c6a84b46dba2ce131dd8a282cb2cc5972"
1967dependencies = [2108dependencies = [
1968 "crunchy",2109 "crunchy",
1969 "fixed-hash 0.7.0",2110 "fixed-hash",
1970 "impl-codec 0.5.0",2111 "impl-codec",
1971 "impl-rlp 0.3.0",2112 "impl-rlp",
1972 "impl-serde",2113 "impl-serde",
1973 "tiny-keccak",2114 "tiny-keccak",
1974]2115]
1979source = "registry+https://github.com/rust-lang/crates.io-index"2120source = "registry+https://github.com/rust-lang/crates.io-index"
1980checksum = "567ce064a8232c16e2b2c2173a936b91fbe35c2f2c5278871f5a1a31688b42e9"2121checksum = "567ce064a8232c16e2b2c2173a936b91fbe35c2f2c5278871f5a1a31688b42e9"
1981dependencies = [2122dependencies = [
1982 "ethereum-types 0.11.0",2123 "ethereum-types",
1983 "funty",2124 "funty",
1984 "hash-db",2125 "hash-db",
1985 "hash256-std-hasher",2126 "hash256-std-hasher",
1986 "parity-scale-codec 2.1.3",2127 "parity-scale-codec",
1987 "rlp 0.5.0",2128 "rlp",
1988 "rlp-derive",2129 "rlp-derive",
1989 "serde",2130 "serde",
1990 "sha3 0.9.1",2131 "sha3 0.9.1",
1991 "triehash",2132 "triehash",
1992]2133]
19932134
1994[[package]]2135[[package]]
1995name = "ethereum-tx-sign"
1996version = "3.0.4"
1997source = "registry+https://github.com/rust-lang/crates.io-index"
1998checksum = "bdcbb5f48282fa71ba2864818a442d0ee0ca04ebc9ef9eb1837c48298c3b8cbf"
1999dependencies = [
2000 "ethereum-types 0.9.2",
2001 "num-traits",
2002 "rlp 0.4.6",
2003 "secp256k1",
2004 "serde",
2005 "serde_derive",
2006 "serde_json",
2007 "tiny-keccak",
2008]
2009
2010[[package]]
2011name = "ethereum-types"2136name = "ethereum-types"
2012version = "0.9.2"
2013source = "registry+https://github.com/rust-lang/crates.io-index"
2014checksum = "473aecff686bd8e7b9db0165cbbb53562376b39bf35b427f0c60446a9e1634b0"
2015dependencies = [
2016 "ethbloom 0.9.2",
2017 "fixed-hash 0.6.1",
2018 "impl-rlp 0.2.1",
2019 "impl-serde",
2020 "primitive-types 0.7.3",
2021 "uint 0.8.5",
2022]
2023
2024[[package]]
2025name = "ethereum-types"
2026version = "0.11.0"2137version = "0.11.0"
2027source = "registry+https://github.com/rust-lang/crates.io-index"2138source = "registry+https://github.com/rust-lang/crates.io-index"
2028checksum = "f64b5df66a228d85e4b17e5d6c6aa43b0310898ffe8a85988c4c032357aaabfd"2139checksum = "f64b5df66a228d85e4b17e5d6c6aa43b0310898ffe8a85988c4c032357aaabfd"
2029dependencies = [2140dependencies = [
2030 "ethbloom 0.11.0",2141 "ethbloom",
2031 "fixed-hash 0.7.0",2142 "fixed-hash",
2032 "impl-codec 0.5.0",2143 "impl-codec",
2033 "impl-rlp 0.3.0",2144 "impl-rlp",
2034 "impl-serde",2145 "impl-serde",
2035 "primitive-types 0.9.0",2146 "primitive-types",
2036 "uint 0.9.0",2147 "uint",
2037]2148]
20382149
2039[[package]]2150[[package]]
2045[[package]]2156[[package]]
2046name = "evm"2157name = "evm"
2047version = "0.27.0"2158version = "0.27.0"
2048source = "git+https://github.com/usetech-llc/evm.git?branch=precompile-output-parachain#e13990a627375f327ca7da3c85d9bdfa0a9e903b"2159source = "git+https://github.com/uniquenetwork/evm.git?branch=precompile-output-parachain#e13990a627375f327ca7da3c85d9bdfa0a9e903b"
2049dependencies = [2160dependencies = [
2050 "environmental",2161 "environmental",
2051 "ethereum",2162 "ethereum",
2052 "evm-core",2163 "evm-core",
2053 "evm-gasometer",2164 "evm-gasometer",
2054 "evm-runtime",2165 "evm-runtime",
2055 "log",2166 "log",
2056 "parity-scale-codec 2.1.3",2167 "parity-scale-codec",
2057 "primitive-types 0.9.0",2168 "primitive-types",
2058 "rlp 0.5.0",2169 "rlp",
2059 "serde",2170 "serde",
2060 "sha3 0.8.2",2171 "sha3 0.8.2",
2061]2172]
2066dependencies = [2177dependencies = [
2067 "ethereum",2178 "ethereum",
2068 "evm-coder-macros",2179 "evm-coder-macros",
2180 "evm-core",
2069 "hex",2181 "hex",
2070 "hex-literal",2182 "hex-literal",
2071 "primitive-types 0.9.0",2183 "impl-trait-for-tuples",
2184 "primitive-types",
2072]2185]
20732186
2074[[package]]2187[[package]]
2087[[package]]2200[[package]]
2088name = "evm-core"2201name = "evm-core"
2089version = "0.27.1"2202version = "0.27.1"
2090source = "git+https://github.com/usetech-llc/evm.git?branch=precompile-output-parachain#e13990a627375f327ca7da3c85d9bdfa0a9e903b"2203source = "git+https://github.com/uniquenetwork/evm.git?branch=precompile-output-parachain#e13990a627375f327ca7da3c85d9bdfa0a9e903b"
2091dependencies = [2204dependencies = [
2092 "funty",2205 "funty",
2093 "parity-scale-codec 2.1.3",2206 "parity-scale-codec",
2094 "primitive-types 0.9.0",2207 "primitive-types",
2095 "serde",2208 "serde",
2096]2209]
20972210
2098[[package]]2211[[package]]
2099name = "evm-gasometer"2212name = "evm-gasometer"
2100version = "0.27.0"2213version = "0.27.0"
2101source = "git+https://github.com/usetech-llc/evm.git?branch=precompile-output-parachain#e13990a627375f327ca7da3c85d9bdfa0a9e903b"2214source = "git+https://github.com/uniquenetwork/evm.git?branch=precompile-output-parachain#e13990a627375f327ca7da3c85d9bdfa0a9e903b"
2102dependencies = [2215dependencies = [
2103 "environmental",2216 "environmental",
2104 "evm-core",2217 "evm-core",
2105 "evm-runtime",2218 "evm-runtime",
2106 "primitive-types 0.9.0",2219 "primitive-types",
2107]2220]
21082221
2109[[package]]2222[[package]]
2110name = "evm-runtime"2223name = "evm-runtime"
2111version = "0.27.0"2224version = "0.27.0"
2112source = "git+https://github.com/usetech-llc/evm.git?branch=precompile-output-parachain#e13990a627375f327ca7da3c85d9bdfa0a9e903b"2225source = "git+https://github.com/uniquenetwork/evm.git?branch=precompile-output-parachain#e13990a627375f327ca7da3c85d9bdfa0a9e903b"
2113dependencies = [2226dependencies = [
2114 "environmental",2227 "environmental",
2115 "evm-core",2228 "evm-core",
2116 "primitive-types 0.9.0",2229 "primitive-types",
2117 "sha3 0.8.2",2230 "sha3 0.8.2",
2118]2231]
21192232
2123source = "registry+https://github.com/rust-lang/crates.io-index"2236source = "registry+https://github.com/rust-lang/crates.io-index"
2124checksum = "e43f2f1833d64e33f15592464d6fdd70f349dda7b1a53088eb83cd94014008c5"2237checksum = "e43f2f1833d64e33f15592464d6fdd70f349dda7b1a53088eb83cd94014008c5"
2125dependencies = [2238dependencies = [
2126 "futures 0.3.15",2239 "futures 0.3.16",
2127]2240]
21282241
2129[[package]]2242[[package]]
21622275
2163[[package]]2276[[package]]
2164name = "fastrand"2277name = "fastrand"
2165version = "1.4.1"2278version = "1.5.0"
2166source = "registry+https://github.com/rust-lang/crates.io-index"2279source = "registry+https://github.com/rust-lang/crates.io-index"
2167checksum = "77b705829d1e87f762c2df6da140b26af5839e1033aa84aa5f56bb688e4e1bdb"2280checksum = "b394ed3d285a429378d3b384b9eb1285267e7df4b166df24b7a6939a04dc392e"
2168dependencies = [2281dependencies = [
2169 "instant",2282 "instant",
2170]2283]
21712284
2172[[package]]2285[[package]]
2173name = "fc-consensus"2286name = "fc-consensus"
2174version = "2.0.0"2287version = "2.0.0"
2175source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions-parachain#c1388c13be6d59b9a70e1277f1295977090adb63"2288source = "git+https://github.com/uniquenetwork/frontier.git?branch=injected-transactions-parachain#1e2a0537db656af0b300493b4f8eda72c22e9421"
2176dependencies = [2289dependencies = [
2177 "async-trait",2290 "async-trait",
2178 "derive_more",2291 "derive_more",
2179 "fc-db",2292 "fc-db",
2180 "fp-consensus",2293 "fp-consensus",
2181 "fp-rpc",2294 "fp-rpc",
2182 "futures 0.3.15",2295 "futures 0.3.16",
2183 "log",2296 "log",
2184 "parity-scale-codec 2.1.3",2297 "parity-scale-codec",
2185 "sc-client-api",2298 "sc-client-api",
2186 "sp-api",2299 "sp-api",
2187 "sp-block-builder",2300 "sp-block-builder",
2197[[package]]2310[[package]]
2198name = "fc-db"2311name = "fc-db"
2199version = "1.0.0"2312version = "1.0.0"
2200source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions-parachain#c1388c13be6d59b9a70e1277f1295977090adb63"2313source = "git+https://github.com/uniquenetwork/frontier.git?branch=injected-transactions-parachain#1e2a0537db656af0b300493b4f8eda72c22e9421"
2201dependencies = [2314dependencies = [
2202 "kvdb",2315 "kvdb",
2203 "kvdb-rocksdb",2316 "kvdb-rocksdb",
2204 "parity-scale-codec 2.1.3",2317 "parity-scale-codec",
2205 "parking_lot 0.11.1",2318 "parking_lot 0.11.1",
2206 "sp-core",2319 "sp-core",
2207 "sp-database",2320 "sp-database",
2211[[package]]2324[[package]]
2212name = "fc-mapping-sync"2325name = "fc-mapping-sync"
2213version = "2.0.0-dev"2326version = "2.0.0-dev"
2214source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions-parachain#c1388c13be6d59b9a70e1277f1295977090adb63"2327source = "git+https://github.com/uniquenetwork/frontier.git?branch=injected-transactions-parachain#1e2a0537db656af0b300493b4f8eda72c22e9421"
2215dependencies = [2328dependencies = [
2216 "fc-consensus",2329 "fc-consensus",
2217 "fc-db",2330 "fc-db",
2218 "fp-consensus",2331 "fp-consensus",
2219 "fp-rpc",2332 "fp-rpc",
2220 "futures 0.3.15",2333 "futures 0.3.16",
2221 "futures-timer 3.0.2",2334 "futures-timer 3.0.2",
2222 "log",2335 "log",
2223 "sc-client-api",2336 "sc-client-api",
2229[[package]]2342[[package]]
2230name = "fc-rpc"2343name = "fc-rpc"
2231version = "2.0.0-dev"2344version = "2.0.0-dev"
2232source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions-parachain#c1388c13be6d59b9a70e1277f1295977090adb63"2345source = "git+https://github.com/uniquenetwork/frontier.git?branch=injected-transactions-parachain#1e2a0537db656af0b300493b4f8eda72c22e9421"
2233dependencies = [2346dependencies = [
2234 "ethereum",2347 "ethereum",
2235 "ethereum-types 0.11.0",2348 "ethereum-types",
2236 "evm",2349 "evm",
2237 "fc-consensus",2350 "fc-consensus",
2238 "fc-db",2351 "fc-db",
2241 "fp-evm",2354 "fp-evm",
2242 "fp-rpc",2355 "fp-rpc",
2243 "fp-storage",2356 "fp-storage",
2244 "futures 0.3.15",2357 "futures 0.3.16",
2245 "jsonrpc-core 15.1.0",2358 "jsonrpc-core 15.1.0",
2246 "jsonrpc-core-client 14.2.0",2359 "jsonrpc-core-client 14.2.0",
2247 "jsonrpc-derive 14.2.2",2360 "jsonrpc-derive 14.2.2",
2250 "log",2363 "log",
2251 "pallet-ethereum",2364 "pallet-ethereum",
2252 "pallet-evm",2365 "pallet-evm",
2253 "parity-scale-codec 2.1.3",2366 "parity-scale-codec",
2254 "rand 0.7.3",2367 "rand 0.7.3",
2255 "rlp 0.5.0",2368 "rlp",
2256 "rustc-hex",2369 "rustc-hex",
2257 "sc-client-api",2370 "sc-client-api",
2258 "sc-network",2371 "sc-network",
2270[[package]]2383[[package]]
2271name = "fc-rpc-core"2384name = "fc-rpc-core"
2272version = "1.1.0-dev"2385version = "1.1.0-dev"
2273source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions-parachain#c1388c13be6d59b9a70e1277f1295977090adb63"2386source = "git+https://github.com/uniquenetwork/frontier.git?branch=injected-transactions-parachain#1e2a0537db656af0b300493b4f8eda72c22e9421"
2274dependencies = [2387dependencies = [
2275 "ethereum-types 0.11.0",2388 "ethereum-types",
2276 "jsonrpc-core 15.1.0",2389 "jsonrpc-core 15.1.0",
2277 "jsonrpc-core-client 14.2.0",2390 "jsonrpc-core-client 14.2.0",
2278 "jsonrpc-derive 14.2.2",2391 "jsonrpc-derive 14.2.2",
2308checksum = "74a1bfdcc776e63e49f741c7ce6116fa1b887e8ac2e3ccb14dd4aa113e54feb9"2421checksum = "74a1bfdcc776e63e49f741c7ce6116fa1b887e8ac2e3ccb14dd4aa113e54feb9"
2309dependencies = [2422dependencies = [
2310 "either",2423 "either",
2311 "futures 0.3.15",2424 "futures 0.3.16",
2312 "futures-timer 3.0.2",2425 "futures-timer 3.0.2",
2313 "log",2426 "log",
2314 "num-traits",2427 "num-traits",
2315 "parity-scale-codec 2.1.3",2428 "parity-scale-codec",
2316 "parking_lot 0.11.1",2429 "parking_lot 0.11.1",
2317]2430]
23182431
2319[[package]]2432[[package]]
2320name = "fixed-hash"2433name = "fixed-hash"
2321version = "0.6.1"
2322source = "registry+https://github.com/rust-lang/crates.io-index"
2323checksum = "11498d382790b7a8f2fd211780bec78619bba81cdad3a283997c0c41f836759c"
2324dependencies = [
2325 "byteorder",
2326 "rand 0.7.3",
2327 "rustc-hex",
2328 "static_assertions",
2329]
2330
2331[[package]]
2332name = "fixed-hash"
2333version = "0.7.0"2434version = "0.7.0"
2334source = "registry+https://github.com/rust-lang/crates.io-index"2435source = "registry+https://github.com/rust-lang/crates.io-index"
2335checksum = "cfcf0ed7fe52a17a03854ec54a9f76d6d84508d1c0e66bc1793301c73fc8493c"2436checksum = "cfcf0ed7fe52a17a03854ec54a9f76d6d84508d1c0e66bc1793301c73fc8493c"
2384[[package]]2485[[package]]
2385name = "fork-tree"2486name = "fork-tree"
2386version = "3.0.0"2487version = "3.0.0"
2387source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"2488source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
2388dependencies = [2489dependencies = [
2389 "parity-scale-codec 2.1.3",2490 "parity-scale-codec",
2390]2491]
23912492
2392[[package]]2493[[package]]
2402[[package]]2503[[package]]
2403name = "fp-consensus"2504name = "fp-consensus"
2404version = "1.0.0"2505version = "1.0.0"
2405source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions-parachain#c1388c13be6d59b9a70e1277f1295977090adb63"2506source = "git+https://github.com/uniquenetwork/frontier.git?branch=injected-transactions-parachain#1e2a0537db656af0b300493b4f8eda72c22e9421"
2406dependencies = [2507dependencies = [
2407 "ethereum",2508 "ethereum",
2408 "parity-scale-codec 2.1.3",2509 "parity-scale-codec",
2409 "rlp 0.5.0",2510 "rlp",
2410 "sha3 0.8.2",2511 "sha3 0.8.2",
2411 "sp-core",2512 "sp-core",
2412 "sp-runtime",2513 "sp-runtime",
2416[[package]]2517[[package]]
2417name = "fp-evm"2518name = "fp-evm"
2418version = "2.0.0"2519version = "2.0.0"
2419source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions-parachain#c1388c13be6d59b9a70e1277f1295977090adb63"2520source = "git+https://github.com/uniquenetwork/frontier.git?branch=injected-transactions-parachain#1e2a0537db656af0b300493b4f8eda72c22e9421"
2420dependencies = [2521dependencies = [
2421 "evm",2522 "evm",
2422 "impl-trait-for-tuples 0.1.3",2523 "impl-trait-for-tuples",
2423 "parity-scale-codec 2.1.3",2524 "parity-scale-codec",
2424 "serde",2525 "serde",
2425 "sp-core",2526 "sp-core",
2426 "sp-std",2527 "sp-std",
2429[[package]]2530[[package]]
2430name = "fp-rpc"2531name = "fp-rpc"
2431version = "2.1.0"2532version = "2.1.0"
2432source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions-parachain#c1388c13be6d59b9a70e1277f1295977090adb63"2533source = "git+https://github.com/uniquenetwork/frontier.git?branch=injected-transactions-parachain#1e2a0537db656af0b300493b4f8eda72c22e9421"
2433dependencies = [2534dependencies = [
2434 "ethereum",2535 "ethereum",
2435 "ethereum-types 0.11.0",2536 "ethereum-types",
2436 "fp-evm",2537 "fp-evm",
2437 "parity-scale-codec 2.1.3",2538 "parity-scale-codec",
2438 "sp-api",2539 "sp-api",
2439 "sp-core",2540 "sp-core",
2440 "sp-io",2541 "sp-io",
2445[[package]]2546[[package]]
2446name = "fp-storage"2547name = "fp-storage"
2447version = "1.0.1"2548version = "1.0.1"
2448source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions-parachain#c1388c13be6d59b9a70e1277f1295977090adb63"2549source = "git+https://github.com/uniquenetwork/frontier.git?branch=injected-transactions-parachain#1e2a0537db656af0b300493b4f8eda72c22e9421"
24492550
2450[[package]]2551[[package]]
2451name = "frame-benchmarking"2552name = "frame-benchmarking"
2452version = "3.1.0"2553version = "3.1.0"
2453source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"2554source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
2454dependencies = [2555dependencies = [
2455 "frame-support",2556 "frame-support",
2456 "frame-system",2557 "frame-system",
2457 "linregress",2558 "linregress",
2458 "log",2559 "log",
2459 "parity-scale-codec 2.1.3",2560 "parity-scale-codec",
2460 "paste",2561 "paste",
2461 "sp-api",2562 "sp-api",
2462 "sp-io",2563 "sp-io",
2469[[package]]2570[[package]]
2470name = "frame-benchmarking-cli"2571name = "frame-benchmarking-cli"
2471version = "3.0.0"2572version = "3.0.0"
2472source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"2573source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
2473dependencies = [2574dependencies = [
2474 "Inflector",2575 "Inflector",
2475 "chrono",2576 "chrono",
2476 "frame-benchmarking",2577 "frame-benchmarking",
2477 "handlebars",2578 "handlebars",
2478 "parity-scale-codec 2.1.3",2579 "parity-scale-codec",
2479 "sc-cli",2580 "sc-cli",
2480 "sc-client-db",2581 "sc-client-db",
2481 "sc-executor",2582 "sc-executor",
2492[[package]]2593[[package]]
2493name = "frame-election-provider-support"2594name = "frame-election-provider-support"
2494version = "3.0.0"2595version = "3.0.0"
2495source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"2596source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
2496dependencies = [2597dependencies = [
2497 "frame-support",2598 "frame-support",
2498 "frame-system",2599 "frame-system",
2499 "parity-scale-codec 2.1.3",2600 "parity-scale-codec",
2500 "sp-arithmetic",2601 "sp-arithmetic",
2501 "sp-npos-elections",2602 "sp-npos-elections",
2502 "sp-std",2603 "sp-std",
2505[[package]]2606[[package]]
2506name = "frame-executive"2607name = "frame-executive"
2507version = "3.0.0"2608version = "3.0.0"
2508source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"2609source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
2509dependencies = [2610dependencies = [
2510 "frame-support",2611 "frame-support",
2511 "frame-system",2612 "frame-system",
2512 "parity-scale-codec 2.1.3",2613 "parity-scale-codec",
2513 "sp-core",2614 "sp-core",
2514 "sp-io",2615 "sp-io",
2515 "sp-runtime",2616 "sp-runtime",
2520[[package]]2621[[package]]
2521name = "frame-metadata"2622name = "frame-metadata"
2522version = "13.0.0"2623version = "13.0.0"
2523source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"2624source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
2524dependencies = [2625dependencies = [
2525 "parity-scale-codec 2.1.3",2626 "parity-scale-codec",
2526 "serde",2627 "serde",
2527 "sp-core",2628 "sp-core",
2528 "sp-std",2629 "sp-std",
2531[[package]]2632[[package]]
2532name = "frame-support"2633name = "frame-support"
2533version = "3.0.0"2634version = "3.0.0"
2534source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"2635source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
2535dependencies = [2636dependencies = [
2536 "bitflags",2637 "bitflags",
2537 "frame-metadata",2638 "frame-metadata",
2538 "frame-support-procedural",2639 "frame-support-procedural",
2539 "impl-trait-for-tuples 0.2.1",2640 "impl-trait-for-tuples",
2540 "log",2641 "log",
2541 "max-encoded-len",2642 "max-encoded-len",
2542 "once_cell",2643 "once_cell",
2543 "parity-scale-codec 2.1.3",2644 "parity-scale-codec",
2544 "paste",2645 "paste",
2545 "serde",2646 "serde",
2546 "smallvec 1.6.1",2647 "smallvec 1.6.1",
2558[[package]]2659[[package]]
2559name = "frame-support-procedural"2660name = "frame-support-procedural"
2560version = "3.0.0"2661version = "3.0.0"
2561source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"2662source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
2562dependencies = [2663dependencies = [
2563 "Inflector",2664 "Inflector",
2564 "frame-support-procedural-tools",2665 "frame-support-procedural-tools",
2570[[package]]2671[[package]]
2571name = "frame-support-procedural-tools"2672name = "frame-support-procedural-tools"
2572version = "3.0.0"2673version = "3.0.0"
2573source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"2674source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
2574dependencies = [2675dependencies = [
2575 "frame-support-procedural-tools-derive",2676 "frame-support-procedural-tools-derive",
2576 "proc-macro-crate 1.0.0",2677 "proc-macro-crate 1.0.0",
2582[[package]]2683[[package]]
2583name = "frame-support-procedural-tools-derive"2684name = "frame-support-procedural-tools-derive"
2584version = "3.0.0"2685version = "3.0.0"
2585source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"2686source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
2586dependencies = [2687dependencies = [
2587 "proc-macro2",2688 "proc-macro2",
2588 "quote",2689 "quote",
2592[[package]]2693[[package]]
2593name = "frame-system"2694name = "frame-system"
2594version = "3.0.0"2695version = "3.0.0"
2595source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"2696source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
2596dependencies = [2697dependencies = [
2597 "frame-support",2698 "frame-support",
2598 "impl-trait-for-tuples 0.2.1",2699 "impl-trait-for-tuples",
2599 "log",2700 "log",
2600 "parity-scale-codec 2.1.3",2701 "parity-scale-codec",
2601 "serde",2702 "serde",
2602 "sp-core",2703 "sp-core",
2603 "sp-io",2704 "sp-io",
2609[[package]]2710[[package]]
2610name = "frame-system-benchmarking"2711name = "frame-system-benchmarking"
2611version = "3.0.0"2712version = "3.0.0"
2612source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"2713source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
2613dependencies = [2714dependencies = [
2614 "frame-benchmarking",2715 "frame-benchmarking",
2615 "frame-support",2716 "frame-support",
2616 "frame-system",2717 "frame-system",
2617 "parity-scale-codec 2.1.3",2718 "parity-scale-codec",
2618 "sp-core",2719 "sp-core",
2619 "sp-runtime",2720 "sp-runtime",
2620 "sp-std",2721 "sp-std",
2623[[package]]2724[[package]]
2624name = "frame-system-rpc-runtime-api"2725name = "frame-system-rpc-runtime-api"
2625version = "3.0.0"2726version = "3.0.0"
2626source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"2727source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
2627dependencies = [2728dependencies = [
2628 "parity-scale-codec 2.1.3",2729 "parity-scale-codec",
2629 "sp-api",2730 "sp-api",
2630]2731]
26312732
2632[[package]]2733[[package]]
2633name = "frame-try-runtime"2734name = "frame-try-runtime"
2634version = "0.9.0"2735version = "0.9.0"
2635source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"2736source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
2636dependencies = [2737dependencies = [
2637 "frame-support",2738 "frame-support",
2638 "parity-scale-codec 2.1.3",2739 "parity-scale-codec",
2639 "sp-api",2740 "sp-api",
2640 "sp-runtime",2741 "sp-runtime",
2641 "sp-std",2742 "sp-std",
27052806
2706[[package]]2807[[package]]
2707name = "futures"2808name = "futures"
2708version = "0.3.15"2809version = "0.3.16"
2709source = "registry+https://github.com/rust-lang/crates.io-index"2810source = "registry+https://github.com/rust-lang/crates.io-index"
2710checksum = "0e7e43a803dae2fa37c1f6a8fe121e1f7bf9548b4dfc0522a42f34145dadfc27"2811checksum = "1adc00f486adfc9ce99f77d717836f0c5aa84965eb0b4f051f4e83f7cab53f8b"
2711dependencies = [2812dependencies = [
2712 "futures-channel",2813 "futures-channel",
2713 "futures-core",2814 "futures-core",
27202821
2721[[package]]2822[[package]]
2722name = "futures-channel"2823name = "futures-channel"
2723version = "0.3.15"2824version = "0.3.16"
2724source = "registry+https://github.com/rust-lang/crates.io-index"2825source = "registry+https://github.com/rust-lang/crates.io-index"
2725checksum = "e682a68b29a882df0545c143dc3646daefe80ba479bcdede94d5a703de2871e2"2826checksum = "74ed2411805f6e4e3d9bc904c95d5d423b89b3b25dc0250aa74729de20629ff9"
2726dependencies = [2827dependencies = [
2727 "futures-core",2828 "futures-core",
2728 "futures-sink",2829 "futures-sink",
2729]2830]
27302831
2731[[package]]2832[[package]]
2732name = "futures-core"2833name = "futures-core"
2733version = "0.3.15"2834version = "0.3.16"
2734source = "registry+https://github.com/rust-lang/crates.io-index"2835source = "registry+https://github.com/rust-lang/crates.io-index"
2735checksum = "0402f765d8a89a26043b889b26ce3c4679d268fa6bb22cd7c6aad98340e179d1"2836checksum = "af51b1b4a7fdff033703db39de8802c673eb91855f2e0d47dcf3bf2c0ef01f99"
27362837
2737[[package]]2838[[package]]
2738name = "futures-cpupool"2839name = "futures-cpupool"
27462847
2747[[package]]2848[[package]]
2748name = "futures-executor"2849name = "futures-executor"
2749version = "0.3.15"2850version = "0.3.16"
2750source = "registry+https://github.com/rust-lang/crates.io-index"2851source = "registry+https://github.com/rust-lang/crates.io-index"
2751checksum = "badaa6a909fac9e7236d0620a2f57f7664640c56575b71a7552fbd68deafab79"2852checksum = "4d0d535a57b87e1ae31437b892713aee90cd2d7b0ee48727cd11fc72ef54761c"
2752dependencies = [2853dependencies = [
2753 "futures-core",2854 "futures-core",
2754 "futures-task",2855 "futures-task",
27582859
2759[[package]]2860[[package]]
2760name = "futures-io"2861name = "futures-io"
2761version = "0.3.15"2862version = "0.3.16"
2762source = "registry+https://github.com/rust-lang/crates.io-index"2863source = "registry+https://github.com/rust-lang/crates.io-index"
2763checksum = "acc499defb3b348f8d8f3f66415835a9131856ff7714bf10dadfc4ec4bdb29a1"2864checksum = "0b0e06c393068f3a6ef246c75cdca793d6a46347e75286933e5e75fd2fd11582"
27642865
2765[[package]]2866[[package]]
2766name = "futures-lite"2867name = "futures-lite"
2773 "futures-io",2874 "futures-io",
2774 "memchr",2875 "memchr",
2775 "parking",2876 "parking",
2776 "pin-project-lite 0.2.6",2877 "pin-project-lite 0.2.7",
2777 "waker-fn",2878 "waker-fn",
2778]2879]
27792880
2780[[package]]2881[[package]]
2781name = "futures-macro"2882name = "futures-macro"
2782version = "0.3.15"2883version = "0.3.16"
2783source = "registry+https://github.com/rust-lang/crates.io-index"2884source = "registry+https://github.com/rust-lang/crates.io-index"
2784checksum = "a4c40298486cdf52cc00cd6d6987892ba502c7656a16a4192a9992b1ccedd121"2885checksum = "c54913bae956fb8df7f4dc6fc90362aa72e69148e3f39041fbe8742d21e0ac57"
2785dependencies = [2886dependencies = [
2786 "autocfg",2887 "autocfg",
2787 "proc-macro-hack",2888 "proc-macro-hack",
28032904
2804[[package]]2905[[package]]
2805name = "futures-sink"2906name = "futures-sink"
2806version = "0.3.15"2907version = "0.3.16"
2807source = "registry+https://github.com/rust-lang/crates.io-index"2908source = "registry+https://github.com/rust-lang/crates.io-index"
2808checksum = "a57bead0ceff0d6dde8f465ecd96c9338121bb7717d3e7b108059531870c4282"2909checksum = "c0f30aaa67363d119812743aa5f33c201a7a66329f97d1a887022971feea4b53"
28092910
2810[[package]]2911[[package]]
2811name = "futures-task"2912name = "futures-task"
2812version = "0.3.15"2913version = "0.3.16"
2813source = "registry+https://github.com/rust-lang/crates.io-index"2914source = "registry+https://github.com/rust-lang/crates.io-index"
2814checksum = "8a16bef9fc1a4dddb5bee51c989e3fbba26569cbb0e31f5b303c184e3dd33dae"2915checksum = "bbe54a98670017f3be909561f6ad13e810d9a51f3f061b902062ca3da80799f2"
28152916
2816[[package]]2917[[package]]
2817name = "futures-timer"2918name = "futures-timer"
28272928
2828[[package]]2929[[package]]
2829name = "futures-util"2930name = "futures-util"
2830version = "0.3.15"2931version = "0.3.16"
2831source = "registry+https://github.com/rust-lang/crates.io-index"2932source = "registry+https://github.com/rust-lang/crates.io-index"
2832checksum = "feb5c238d27e2bf94ffdfd27b2c29e3df4a68c4193bb6427384259e2bf191967"2933checksum = "67eb846bfd58e44a8481a00049e82c43e0ccb5d61f8dc071057cb19249dd4d78"
2833dependencies = [2934dependencies = [
2834 "autocfg",2935 "autocfg",
2835 "futures 0.1.31",2936 "futures 0.1.31",
2840 "futures-sink",2941 "futures-sink",
2841 "futures-task",2942 "futures-task",
2842 "memchr",2943 "memchr",
2843 "pin-project-lite 0.2.6",2944 "pin-project-lite 0.2.7",
2844 "pin-utils",2945 "pin-utils",
2845 "proc-macro-hack",2946 "proc-macro-hack",
2846 "proc-macro-nested",2947 "proc-macro-nested",
2916]3017]
29173018
2918[[package]]3019[[package]]
3020name = "gimli"
3021version = "0.25.0"
3022source = "registry+https://github.com/rust-lang/crates.io-index"
3023checksum = "f0a01e0497841a3b2db4f8afa483cce65f7e96a3498bd6c541734792aeac8fe7"
3024
3025[[package]]
2919name = "glob"3026name = "glob"
2920version = "0.3.0"3027version = "0.3.0"
2921source = "registry+https://github.com/rust-lang/crates.io-index"3028source = "registry+https://github.com/rust-lang/crates.io-index"
2922checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"3029checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
29233030
2924[[package]]3031[[package]]
2925name = "globset"3032name = "globset"
2926version = "0.4.7"3033version = "0.4.8"
2927source = "registry+https://github.com/rust-lang/crates.io-index"3034source = "registry+https://github.com/rust-lang/crates.io-index"
2928checksum = "f0fc1b9fa0e64ffb1aa5b95daa0f0f167734fd528b7c02eabc581d9d843649b1"3035checksum = "10463d9ff00a2a068db14231982f5132edebad0d7660cd956a1c30292dbcbfbd"
2929dependencies = [3036dependencies = [
2930 "aho-corasick",3037 "aho-corasick",
2931 "bstr",3038 "bstr",
3020source = "registry+https://github.com/rust-lang/crates.io-index"3127source = "registry+https://github.com/rust-lang/crates.io-index"
3021checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04"3128checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04"
3022dependencies = [3129dependencies = [
3023 "ahash",3130 "ahash 0.4.7",
3024]3131]
30253132
3026[[package]]3133[[package]]
3134name = "hashbrown"
3135version = "0.11.2"
3136source = "registry+https://github.com/rust-lang/crates.io-index"
3137checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
3138dependencies = [
3139 "ahash 0.7.4",
3140]
3141
3142[[package]]
3027name = "heck"3143name = "heck"
3028version = "0.3.3"3144version = "0.3.3"
3029source = "registry+https://github.com/rust-lang/crates.io-index"3145source = "registry+https://github.com/rust-lang/crates.io-index"
30343150
3035[[package]]3151[[package]]
3036name = "hermit-abi"3152name = "hermit-abi"
3037version = "0.1.18"3153version = "0.1.19"
3038source = "registry+https://github.com/rust-lang/crates.io-index"3154source = "registry+https://github.com/rust-lang/crates.io-index"
3039checksum = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c"3155checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
3040dependencies = [3156dependencies = [
3041 "libc",3157 "libc",
3042]3158]
30493165
3050[[package]]3166[[package]]
3051name = "hex-literal"3167name = "hex-literal"
3052version = "0.3.1"3168version = "0.3.3"
3053source = "registry+https://github.com/rust-lang/crates.io-index"3169source = "registry+https://github.com/rust-lang/crates.io-index"
3054checksum = "5af1f635ef1bc545d78392b136bfe1c9809e029023c84a3638a864a10b8819c8"3170checksum = "21e4590e13640f19f249fe3e4eca5113bc4289f2497710378190e7f4bd96f45b"
30553171
3056[[package]]3172[[package]]
3057name = "hex_fmt"3173name = "hex_fmt"
3164dependencies = [3280dependencies = [
3165 "bytes 1.0.1",3281 "bytes 1.0.1",
3166 "http 0.2.4",3282 "http 0.2.4",
3167 "pin-project-lite 0.2.6",3283 "pin-project-lite 0.2.7",
3168]3284]
31693285
3170[[package]]3286[[package]]
3217 "itoa",3333 "itoa",
3218 "log",3334 "log",
3219 "net2",3335 "net2",
3220 "rustc_version",3336 "rustc_version 0.2.3",
3221 "time",3337 "time",
3222 "tokio 0.1.22",3338 "tokio 0.1.22",
3223 "tokio-buf",3339 "tokio-buf",
3246 "httparse",3362 "httparse",
3247 "httpdate 0.3.2",3363 "httpdate 0.3.2",
3248 "itoa",3364 "itoa",
3249 "pin-project 1.0.7",3365 "pin-project 1.0.8",
3250 "socket2 0.3.19",3366 "socket2 0.3.19",
3251 "tokio 0.2.25",3367 "tokio 0.2.25",
3252 "tower-service",3368 "tower-service",
32563372
3257[[package]]3373[[package]]
3258name = "hyper"3374name = "hyper"
3259version = "0.14.10"3375version = "0.14.11"
3260source = "registry+https://github.com/rust-lang/crates.io-index"3376source = "registry+https://github.com/rust-lang/crates.io-index"
3261checksum = "7728a72c4c7d72665fde02204bcbd93b247721025b222ef78606f14513e0fd03"3377checksum = "0b61cf2d1aebcf6e6352c97b81dc2244ca29194be1b276f5d8ad5c6330fffb11"
3262dependencies = [3378dependencies = [
3263 "bytes 1.0.1",3379 "bytes 1.0.1",
3264 "futures-channel",3380 "futures-channel",
3269 "httparse",3385 "httparse",
3270 "httpdate 1.0.1",3386 "httpdate 1.0.1",
3271 "itoa",3387 "itoa",
3272 "pin-project-lite 0.2.6",3388 "pin-project-lite 0.2.7",
3273 "tokio 1.8.1",3389 "tokio 1.9.0",
3274 "tower-service",3390 "tower-service",
3275 "tracing",3391 "tracing",
3276 "want 0.3.0",3392 "want 0.3.0",
3350checksum = "ae8ab7f67bad3240049cb24fb9cb0b4c2c6af4c245840917fbbdededeee91179"3466checksum = "ae8ab7f67bad3240049cb24fb9cb0b4c2c6af4c245840917fbbdededeee91179"
3351dependencies = [3467dependencies = [
3352 "async-io",3468 "async-io",
3353 "futures 0.3.15",3469 "futures 0.3.16",
3354 "futures-lite",3470 "futures-lite",
3355 "if-addrs",3471 "if-addrs",
3356 "ipnet",3472 "ipnet",
33613477
3362[[package]]3478[[package]]
3363name = "impl-codec"3479name = "impl-codec"
3364version = "0.4.2"3480version = "0.5.1"
3365source = "registry+https://github.com/rust-lang/crates.io-index"3481source = "registry+https://github.com/rust-lang/crates.io-index"
3366checksum = "1be51a921b067b0eaca2fad532d9400041561aa922221cc65f95a85641c6bf53"3482checksum = "161ebdfec3c8e3b52bf61c4f3550a1eea4f9579d10dc1b936f3171ebdcd6c443"
3367dependencies = [3483dependencies = [
3368 "parity-scale-codec 1.3.7",3484 "parity-scale-codec",
3369]3485]
33703486
3371[[package]]3487[[package]]
3372name = "impl-codec"
3373version = "0.5.0"
3374source = "registry+https://github.com/rust-lang/crates.io-index"
3375checksum = "df170efa359aebdd5cb7fe78edcc67107748e4737bdca8a8fb40d15ea7a877ed"
3376dependencies = [
3377 "parity-scale-codec 2.1.3",
3378]
3379
3380[[package]]
3381name = "impl-rlp"3488name = "impl-rlp"
3382version = "0.2.1"
3383source = "registry+https://github.com/rust-lang/crates.io-index"
3384checksum = "8f7a72f11830b52333f36e3b09a288333888bf54380fd0ac0790a3c31ab0f3c5"
3385dependencies = [
3386 "rlp 0.4.6",
3387]
3388
3389[[package]]
3390name = "impl-rlp"
3391version = "0.3.0"3489version = "0.3.0"
3392source = "registry+https://github.com/rust-lang/crates.io-index"3490source = "registry+https://github.com/rust-lang/crates.io-index"
3393checksum = "f28220f89297a075ddc7245cd538076ee98b01f2a9c23a53a4f1105d5a322808"3491checksum = "f28220f89297a075ddc7245cd538076ee98b01f2a9c23a53a4f1105d5a322808"
3394dependencies = [3492dependencies = [
3395 "rlp 0.5.0",3493 "rlp",
3396]3494]
33973495
3398[[package]]3496[[package]]
34063504
3407[[package]]3505[[package]]
3408name = "impl-trait-for-tuples"3506name = "impl-trait-for-tuples"
3409version = "0.1.3"
3410source = "registry+https://github.com/rust-lang/crates.io-index"
3411checksum = "7ef5550a42e3740a0e71f909d4c861056a284060af885ae7aa6242820f920d9d"
3412dependencies = [
3413 "proc-macro2",
3414 "quote",
3415 "syn",
3416]
3417
3418[[package]]
3419name = "impl-trait-for-tuples"
3420version = "0.2.1"3507version = "0.2.1"
3421source = "registry+https://github.com/rust-lang/crates.io-index"3508source = "registry+https://github.com/rust-lang/crates.io-index"
3422checksum = "d5dacb10c5b3bb92d46ba347505a9041e676bb20ad220101326bffb0c93031ee"3509checksum = "d5dacb10c5b3bb92d46ba347505a9041e676bb20ad220101326bffb0c93031ee"
34283515
3429[[package]]3516[[package]]
3430name = "indexmap"3517name = "indexmap"
3431version = "1.6.2"3518version = "1.7.0"
3432source = "registry+https://github.com/rust-lang/crates.io-index"3519source = "registry+https://github.com/rust-lang/crates.io-index"
3433checksum = "824845a0bf897a9042383849b02c1bc219c2383772efcd5c6f9766fa4b81aef3"3520checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5"
3434dependencies = [3521dependencies = [
3435 "autocfg",3522 "autocfg",
3436 "hashbrown",3523 "hashbrown 0.11.2",
3437 "serde",3524 "serde",
3438]3525]
34393526
3440[[package]]3527[[package]]
3441name = "instant"3528name = "instant"
3442version = "0.1.9"3529version = "0.1.10"
3443source = "registry+https://github.com/rust-lang/crates.io-index"3530source = "registry+https://github.com/rust-lang/crates.io-index"
3444checksum = "61124eeebbd69b8190558df225adf7e4caafce0d743919e5d6b19652314ec5ec"3531checksum = "bee0328b1209d157ef001c94dd85b4f8f64139adb0eac2659f4b08382b2f474d"
3445dependencies = [3532dependencies = [
3446 "cfg-if 1.0.0",3533 "cfg-if 1.0.0",
3447]3534]
3467source = "registry+https://github.com/rust-lang/crates.io-index"3554source = "registry+https://github.com/rust-lang/crates.io-index"
3468checksum = "64fa110ec7b8f493f416eed552740d10e7030ad5f63b2308f82c9608ec2df275"3555checksum = "64fa110ec7b8f493f416eed552740d10e7030ad5f63b2308f82c9608ec2df275"
3469dependencies = [3556dependencies = [
3470 "futures 0.3.15",3557 "futures 0.3.16",
3471 "futures-timer 2.0.2",3558 "futures-timer 2.0.2",
3472]3559]
34733560
3754 "beef",3841 "beef",
3755 "futures-channel",3842 "futures-channel",
3756 "futures-util",3843 "futures-util",
3757 "hyper 0.14.10",3844 "hyper 0.14.11",
3758 "log",3845 "log",
3759 "serde",3846 "serde",
3760 "serde_json",3847 "serde_json",
3770dependencies = [3857dependencies = [
3771 "async-trait",3858 "async-trait",
3772 "fnv",3859 "fnv",
3773 "futures 0.3.15",3860 "futures 0.3.16",
3774 "jsonrpsee-types",3861 "jsonrpsee-types",
3775 "log",3862 "log",
3776 "pin-project 1.0.7",3863 "pin-project 1.0.8",
3777 "rustls 0.19.1",3864 "rustls 0.19.1",
3778 "rustls-native-certs 0.5.0",3865 "rustls-native-certs 0.5.0",
3779 "serde",3866 "serde",
3803]3890]
38043891
3805[[package]]3892[[package]]
3893name = "kusama-runtime"
3894version = "0.9.8"
3895source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
3896dependencies = [
3897 "beefy-primitives",
3898 "bitvec 0.20.4",
3899 "frame-benchmarking",
3900 "frame-election-provider-support",
3901 "frame-executive",
3902 "frame-support",
3903 "frame-system",
3904 "frame-system-benchmarking",
3905 "frame-system-rpc-runtime-api",
3906 "frame-try-runtime",
3907 "hex-literal",
3908 "log",
3909 "max-encoded-len",
3910 "pallet-authority-discovery",
3911 "pallet-authorship",
3912 "pallet-babe",
3913 "pallet-balances",
3914 "pallet-bounties",
3915 "pallet-collective",
3916 "pallet-democracy",
3917 "pallet-election-provider-multi-phase",
3918 "pallet-elections-phragmen",
3919 "pallet-gilt",
3920 "pallet-grandpa",
3921 "pallet-identity",
3922 "pallet-im-online",
3923 "pallet-indices",
3924 "pallet-membership",
3925 "pallet-mmr-primitives",
3926 "pallet-multisig",
3927 "pallet-nicks",
3928 "pallet-offences",
3929 "pallet-offences-benchmarking",
3930 "pallet-proxy",
3931 "pallet-recovery",
3932 "pallet-scheduler 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8)",
3933 "pallet-session",
3934 "pallet-session-benchmarking",
3935 "pallet-society",
3936 "pallet-staking",
3937 "pallet-staking-reward-fn",
3938 "pallet-timestamp",
3939 "pallet-tips",
3940 "pallet-transaction-payment",
3941 "pallet-transaction-payment-rpc-runtime-api",
3942 "pallet-treasury",
3943 "pallet-utility",
3944 "pallet-vesting",
3945 "pallet-xcm",
3946 "parity-scale-codec",
3947 "polkadot-primitives",
3948 "polkadot-runtime-common",
3949 "polkadot-runtime-parachains",
3950 "rustc-hex",
3951 "serde",
3952 "serde_derive",
3953 "smallvec 1.6.1",
3954 "sp-api",
3955 "sp-arithmetic",
3956 "sp-authority-discovery",
3957 "sp-block-builder",
3958 "sp-consensus-babe",
3959 "sp-core",
3960 "sp-inherents",
3961 "sp-io",
3962 "sp-npos-elections",
3963 "sp-offchain",
3964 "sp-runtime",
3965 "sp-session",
3966 "sp-staking",
3967 "sp-std",
3968 "sp-transaction-pool",
3969 "sp-version",
3970 "static_assertions",
3971 "substrate-wasm-builder 4.0.0 (git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8)",
3972 "xcm",
3973 "xcm-builder",
3974 "xcm-executor",
3975]
3976
3977[[package]]
3806name = "kv-log-macro"3978name = "kv-log-macro"
3807version = "1.0.7"3979version = "1.0.7"
3808source = "registry+https://github.com/rust-lang/crates.io-index"3980source = "registry+https://github.com/rust-lang/crates.io-index"
38704042
3871[[package]]4043[[package]]
3872name = "libc"4044name = "libc"
3873version = "0.2.97"4045version = "0.2.98"
3874source = "registry+https://github.com/rust-lang/crates.io-index"4046source = "registry+https://github.com/rust-lang/crates.io-index"
3875checksum = "12b8adadd720df158f4d70dfe7ccc6adb0472d7c55ca83445f6a5ab3e36f8fb6"4047checksum = "320cfe77175da3a483efed4bc0adc1968ca050b098ce4f2f1c13a56626128790"
38764048
3877[[package]]4049[[package]]
3878name = "libloading"4050name = "libloading"
3908dependencies = [4080dependencies = [
3909 "atomic",4081 "atomic",
3910 "bytes 1.0.1",4082 "bytes 1.0.1",
3911 "futures 0.3.15",4083 "futures 0.3.16",
3912 "lazy_static",4084 "lazy_static",
3913 "libp2p-core",4085 "libp2p-core",
3914 "libp2p-deflate",4086 "libp2p-deflate",
3934 "libp2p-yamux",4106 "libp2p-yamux",
3935 "parity-multiaddr",4107 "parity-multiaddr",
3936 "parking_lot 0.11.1",4108 "parking_lot 0.11.1",
3937 "pin-project 1.0.7",4109 "pin-project 1.0.8",
3938 "smallvec 1.6.1",4110 "smallvec 1.6.1",
3939 "wasm-timer",4111 "wasm-timer",
3940]4112]
3950 "ed25519-dalek",4122 "ed25519-dalek",
3951 "either",4123 "either",
3952 "fnv",4124 "fnv",
3953 "futures 0.3.15",4125 "futures 0.3.16",
3954 "futures-timer 3.0.2",4126 "futures-timer 3.0.2",
3955 "lazy_static",4127 "lazy_static",
3956 "libsecp256k1 0.3.5",4128 "libsecp256k1 0.3.5",
3959 "multistream-select",4131 "multistream-select",
3960 "parity-multiaddr",4132 "parity-multiaddr",
3961 "parking_lot 0.11.1",4133 "parking_lot 0.11.1",
3962 "pin-project 1.0.7",4134 "pin-project 1.0.8",
3963 "prost",4135 "prost",
3964 "prost-build",4136 "prost-build",
3965 "rand 0.7.3",4137 "rand 0.7.3",
3980checksum = "a2181a641cd15f9b6ba71b1335800f309012a0a97a29ffaabbbf40e9d3d58f08"4152checksum = "a2181a641cd15f9b6ba71b1335800f309012a0a97a29ffaabbbf40e9d3d58f08"
3981dependencies = [4153dependencies = [
3982 "flate2",4154 "flate2",
3983 "futures 0.3.15",4155 "futures 0.3.16",
3984 "libp2p-core",4156 "libp2p-core",
3985]4157]
39864158
3991checksum = "62e63dab8b5ff35e0c101a3e51e843ba782c07bbb1682f5fd827622e0d02b98b"4163checksum = "62e63dab8b5ff35e0c101a3e51e843ba782c07bbb1682f5fd827622e0d02b98b"
3992dependencies = [4164dependencies = [
3993 "async-std-resolver",4165 "async-std-resolver",
3994 "futures 0.3.15",4166 "futures 0.3.16",
3995 "libp2p-core",4167 "libp2p-core",
3996 "log",4168 "log",
3997 "smallvec 1.6.1",4169 "smallvec 1.6.1",
4006dependencies = [4178dependencies = [
4007 "cuckoofilter",4179 "cuckoofilter",
4008 "fnv",4180 "fnv",
4009 "futures 0.3.15",4181 "futures 0.3.16",
4010 "libp2p-core",4182 "libp2p-core",
4011 "libp2p-swarm",4183 "libp2p-swarm",
4012 "log",4184 "log",
4027 "byteorder",4199 "byteorder",
4028 "bytes 1.0.1",4200 "bytes 1.0.1",
4029 "fnv",4201 "fnv",
4030 "futures 0.3.15",4202 "futures 0.3.16",
4031 "hex_fmt",4203 "hex_fmt",
4032 "libp2p-core",4204 "libp2p-core",
4033 "libp2p-swarm",4205 "libp2p-swarm",
4048source = "registry+https://github.com/rust-lang/crates.io-index"4220source = "registry+https://github.com/rust-lang/crates.io-index"
4049checksum = "5f668f00efd9883e8b7bcc582eaf0164615792608f886f6577da18bcbeea0a46"4221checksum = "5f668f00efd9883e8b7bcc582eaf0164615792608f886f6577da18bcbeea0a46"
4050dependencies = [4222dependencies = [
4051 "futures 0.3.15",4223 "futures 0.3.16",
4052 "libp2p-core",4224 "libp2p-core",
4053 "libp2p-swarm",4225 "libp2p-swarm",
4054 "log",4226 "log",
4069 "bytes 1.0.1",4241 "bytes 1.0.1",
4070 "either",4242 "either",
4071 "fnv",4243 "fnv",
4072 "futures 0.3.15",4244 "futures 0.3.16",
4073 "libp2p-core",4245 "libp2p-core",
4074 "libp2p-swarm",4246 "libp2p-swarm",
4075 "log",4247 "log",
4078 "rand 0.7.3",4250 "rand 0.7.3",
4079 "sha2 0.9.5",4251 "sha2 0.9.5",
4080 "smallvec 1.6.1",4252 "smallvec 1.6.1",
4081 "uint 0.9.0",4253 "uint",
4082 "unsigned-varint 0.7.0",4254 "unsigned-varint 0.7.0",
4083 "void",4255 "void",
4084 "wasm-timer",4256 "wasm-timer",
4093 "async-io",4265 "async-io",
4094 "data-encoding",4266 "data-encoding",
4095 "dns-parser",4267 "dns-parser",
4096 "futures 0.3.15",4268 "futures 0.3.16",
4097 "if-watch",4269 "if-watch",
4098 "lazy_static",4270 "lazy_static",
4099 "libp2p-core",4271 "libp2p-core",
4113dependencies = [4285dependencies = [
4114 "asynchronous-codec 0.6.0",4286 "asynchronous-codec 0.6.0",
4115 "bytes 1.0.1",4287 "bytes 1.0.1",
4116 "futures 0.3.15",4288 "futures 0.3.16",
4117 "libp2p-core",4289 "libp2p-core",
4118 "log",4290 "log",
4119 "nohash-hasher",4291 "nohash-hasher",
4131dependencies = [4303dependencies = [
4132 "bytes 1.0.1",4304 "bytes 1.0.1",
4133 "curve25519-dalek 3.1.0",4305 "curve25519-dalek 3.1.0",
4134 "futures 0.3.15",4306 "futures 0.3.16",
4135 "lazy_static",4307 "lazy_static",
4136 "libp2p-core",4308 "libp2p-core",
4137 "log",4309 "log",
4151source = "registry+https://github.com/rust-lang/crates.io-index"4323source = "registry+https://github.com/rust-lang/crates.io-index"
4152checksum = "bf4bfaffac63bf3c7ec11ed9d8879d455966ddea7e78ee14737f0b6dce0d1cd1"4324checksum = "bf4bfaffac63bf3c7ec11ed9d8879d455966ddea7e78ee14737f0b6dce0d1cd1"
4153dependencies = [4325dependencies = [
4154 "futures 0.3.15",4326 "futures 0.3.16",
4155 "libp2p-core",4327 "libp2p-core",
4156 "libp2p-swarm",4328 "libp2p-swarm",
4157 "log",4329 "log",
4168dependencies = [4340dependencies = [
4169 "asynchronous-codec 0.6.0",4341 "asynchronous-codec 0.6.0",
4170 "bytes 1.0.1",4342 "bytes 1.0.1",
4171 "futures 0.3.15",4343 "futures 0.3.16",
4172 "libp2p-core",4344 "libp2p-core",
4173 "log",4345 "log",
4174 "prost",4346 "prost",
4183source = "registry+https://github.com/rust-lang/crates.io-index"4355source = "registry+https://github.com/rust-lang/crates.io-index"
4184checksum = "6ce3374f3b28162db9d3442c9347c4f14cb01e8290052615c7d341d40eae0599"4356checksum = "6ce3374f3b28162db9d3442c9347c4f14cb01e8290052615c7d341d40eae0599"
4185dependencies = [4357dependencies = [
4186 "futures 0.3.15",4358 "futures 0.3.16",
4187 "log",4359 "log",
4188 "pin-project 1.0.7",4360 "pin-project 1.0.8",
4189 "rand 0.7.3",4361 "rand 0.7.3",
4190 "salsa20",4362 "salsa20",
4191 "sha3 0.9.1",4363 "sha3 0.9.1",
4199dependencies = [4371dependencies = [
4200 "asynchronous-codec 0.6.0",4372 "asynchronous-codec 0.6.0",
4201 "bytes 1.0.1",4373 "bytes 1.0.1",
4202 "futures 0.3.15",4374 "futures 0.3.16",
4203 "futures-timer 3.0.2",4375 "futures-timer 3.0.2",
4204 "libp2p-core",4376 "libp2p-core",
4205 "libp2p-swarm",4377 "libp2p-swarm",
4206 "log",4378 "log",
4207 "pin-project 1.0.7",4379 "pin-project 1.0.8",
4208 "prost",4380 "prost",
4209 "prost-build",4381 "prost-build",
4210 "rand 0.7.3",4382 "rand 0.7.3",
4222dependencies = [4394dependencies = [
4223 "async-trait",4395 "async-trait",
4224 "bytes 1.0.1",4396 "bytes 1.0.1",
4225 "futures 0.3.15",4397 "futures 0.3.16",
4226 "libp2p-core",4398 "libp2p-core",
4227 "libp2p-swarm",4399 "libp2p-swarm",
4228 "log",4400 "log",
4241checksum = "1e04d8e1eef675029ec728ba14e8d0da7975d84b6679b699b4ae91a1de9c3a92"4413checksum = "1e04d8e1eef675029ec728ba14e8d0da7975d84b6679b699b4ae91a1de9c3a92"
4242dependencies = [4414dependencies = [
4243 "either",4415 "either",
4244 "futures 0.3.15",4416 "futures 0.3.16",
4245 "libp2p-core",4417 "libp2p-core",
4246 "log",4418 "log",
4247 "rand 0.7.3",4419 "rand 0.7.3",
4267checksum = "2b1a27d21c477951799e99d5c105d78868258502ce092988040a808d5a19bbd9"4439checksum = "2b1a27d21c477951799e99d5c105d78868258502ce092988040a808d5a19bbd9"
4268dependencies = [4440dependencies = [
4269 "async-io",4441 "async-io",
4270 "futures 0.3.15",4442 "futures 0.3.16",
4271 "futures-timer 3.0.2",4443 "futures-timer 3.0.2",
4272 "if-watch",4444 "if-watch",
4273 "ipnet",4445 "ipnet",
4284checksum = "ffd6564bb3b7ff203661ccbb69003c2b551e34cef974f2d6c6a28306a12170b5"4456checksum = "ffd6564bb3b7ff203661ccbb69003c2b551e34cef974f2d6c6a28306a12170b5"
4285dependencies = [4457dependencies = [
4286 "async-std",4458 "async-std",
4287 "futures 0.3.15",4459 "futures 0.3.16",
4288 "libp2p-core",4460 "libp2p-core",
4289 "log",4461 "log",
4290]4462]
4295source = "registry+https://github.com/rust-lang/crates.io-index"4467source = "registry+https://github.com/rust-lang/crates.io-index"
4296checksum = "e2d413e4cf9b8e5dfbcd2a60d3dc5a3391308bdb463684093d4f67137b7113de"4468checksum = "e2d413e4cf9b8e5dfbcd2a60d3dc5a3391308bdb463684093d4f67137b7113de"
4297dependencies = [4469dependencies = [
4298 "futures 0.3.15",4470 "futures 0.3.16",
4299 "js-sys",4471 "js-sys",
4300 "libp2p-core",4472 "libp2p-core",
4301 "parity-send-wrapper",4473 "parity-send-wrapper",
4310checksum = "cace60995ef6f637e4752cccbb2590f6bc358e8741a0d066307636c69a4b3a74"4482checksum = "cace60995ef6f637e4752cccbb2590f6bc358e8741a0d066307636c69a4b3a74"
4311dependencies = [4483dependencies = [
4312 "either",4484 "either",
4313 "futures 0.3.15",4485 "futures 0.3.16",
4314 "futures-rustls",4486 "futures-rustls",
4315 "libp2p-core",4487 "libp2p-core",
4316 "log",4488 "log",
4327source = "registry+https://github.com/rust-lang/crates.io-index"4499source = "registry+https://github.com/rust-lang/crates.io-index"
4328checksum = "f35da42cfc6d5cb0dcf3ad6881bc68d146cdf38f98655e09e33fbba4d13eabc4"4500checksum = "f35da42cfc6d5cb0dcf3ad6881bc68d146cdf38f98655e09e33fbba4d13eabc4"
4329dependencies = [4501dependencies = [
4330 "futures 0.3.15",4502 "futures 0.3.16",
4331 "libp2p-core",4503 "libp2p-core",
4332 "parking_lot 0.11.1",4504 "parking_lot 0.11.1",
4333 "thiserror",4505 "thiserror",
43364508
4337[[package]]4509[[package]]
4338name = "librocksdb-sys"4510name = "librocksdb-sys"
4339version = "6.17.3"4511version = "6.20.3"
4340source = "registry+https://github.com/rust-lang/crates.io-index"4512source = "registry+https://github.com/rust-lang/crates.io-index"
4341checksum = "5da125e1c0f22c7cae785982115523a0738728498547f415c9054cb17c7e89f9"4513checksum = "c309a9d2470844aceb9a4a098cf5286154d20596868b75a6b36357d2bb9ca25d"
4342dependencies = [4514dependencies = [
4343 "bindgen",4515 "bindgen",
4344 "cc",4516 "cc",
4358 "hmac-drbg 0.2.0",4530 "hmac-drbg 0.2.0",
4359 "rand 0.7.3",4531 "rand 0.7.3",
4360 "sha2 0.8.2",4532 "sha2 0.8.2",
4361 "subtle 2.4.0",4533 "subtle 2.4.1",
4362 "typenum",4534 "typenum",
4363]4535]
43644536
43834555
4384[[package]]4556[[package]]
4385name = "libsecp256k1-core"4557name = "libsecp256k1-core"
4386version = "0.2.1"4558version = "0.2.2"
4387source = "registry+https://github.com/rust-lang/crates.io-index"4559source = "registry+https://github.com/rust-lang/crates.io-index"
4388checksum = "4ee11012b293ea30093c129173cac4335513064094619f4639a25b310fd33c11"4560checksum = "d0f6ab710cec28cef759c5f18671a27dae2a5f952cdaaee1d8e2908cb2478a80"
4389dependencies = [4561dependencies = [
4390 "crunchy",4562 "crunchy",
4391 "digest 0.9.0",4563 "digest 0.9.0",
4392 "subtle 2.4.0",4564 "subtle 2.4.1",
4393]4565]
43944566
4395[[package]]4567[[package]]
4396name = "libsecp256k1-gen-ecmult"4568name = "libsecp256k1-gen-ecmult"
4397version = "0.2.0"4569version = "0.2.1"
4398source = "registry+https://github.com/rust-lang/crates.io-index"4570source = "registry+https://github.com/rust-lang/crates.io-index"
4399checksum = "32239626ffbb6a095b83b37a02ceb3672b2443a87a000a884fc3c4d16925c9c0"4571checksum = "ccab96b584d38fac86a83f07e659f0deafd0253dc096dab5a36d53efe653c5c3"
4400dependencies = [4572dependencies = [
4401 "libsecp256k1-core",4573 "libsecp256k1-core",
4402]4574]
44034575
4404[[package]]4576[[package]]
4405name = "libsecp256k1-gen-genmult"4577name = "libsecp256k1-gen-genmult"
4406version = "0.2.0"4578version = "0.2.1"
4407source = "registry+https://github.com/rust-lang/crates.io-index"4579source = "registry+https://github.com/rust-lang/crates.io-index"
4408checksum = "76acb433e21d10f5f9892b1962c2856c58c7f39a9e4bd68ac82b9436a0ffd5b9"4580checksum = "67abfe149395e3aa1c48a2beb32b068e2334402df8181f818d3aee2b304c4f5d"
4409dependencies = [4581dependencies = [
4410 "libsecp256k1-core",4582 "libsecp256k1-core",
4411]4583]
44384610
4439[[package]]4611[[package]]
4440name = "linregress"4612name = "linregress"
4441version = "0.4.2"4613version = "0.4.3"
4442source = "registry+https://github.com/rust-lang/crates.io-index"4614source = "registry+https://github.com/rust-lang/crates.io-index"
4443checksum = "b1ff7f341d23e1275eec0656a9a07225fcc86216c4322392868adffe59023d1a"4615checksum = "1e6e407dadb4ca4b31bc69c27aff00e7ca4534fdcee855159b039a7cebb5f395"
4444dependencies = [4616dependencies = [
4445 "nalgebra 0.27.1",4617 "nalgebra",
4446 "statrs",4618 "statrs",
4447]4619]
44484620
4480source = "registry+https://github.com/rust-lang/crates.io-index"4652source = "registry+https://github.com/rust-lang/crates.io-index"
4481checksum = "1f374d42cdfc1d7dbf3d3dec28afab2eb97ffbf43a3234d795b5986dbf4b90ba"4653checksum = "1f374d42cdfc1d7dbf3d3dec28afab2eb97ffbf43a3234d795b5986dbf4b90ba"
4482dependencies = [4654dependencies = [
4483 "hashbrown",4655 "hashbrown 0.9.1",
4484]4656]
44854657
4486[[package]]4658[[package]]
4540[[package]]4712[[package]]
4541name = "max-encoded-len"4713name = "max-encoded-len"
4542version = "3.0.0"4714version = "3.0.0"
4543source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"4715source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
4544dependencies = [4716dependencies = [
4545 "impl-trait-for-tuples 0.2.1",4717 "impl-trait-for-tuples",
4546 "max-encoded-len-derive",4718 "max-encoded-len-derive",
4547 "parity-scale-codec 2.1.3",4719 "parity-scale-codec",
4548 "primitive-types 0.9.0",4720 "primitive-types",
4549]4721]
45504722
4551[[package]]4723[[package]]
4552name = "max-encoded-len-derive"4724name = "max-encoded-len-derive"
4553version = "3.0.0"4725version = "3.0.0"
4554source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"4726source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
4555dependencies = [4727dependencies = [
4556 "proc-macro-crate 1.0.0",4728 "proc-macro-crate 1.0.0",
4557 "proc-macro2",4729 "proc-macro2",
4605checksum = "814bbecfc0451fc314eeea34f05bbcd5b98a7ad7af37faee088b86a1e633f1d4"4777checksum = "814bbecfc0451fc314eeea34f05bbcd5b98a7ad7af37faee088b86a1e633f1d4"
4606dependencies = [4778dependencies = [
4607 "hash-db",4779 "hash-db",
4608 "hashbrown",4780 "hashbrown 0.9.1",
4609 "parity-util-mem",4781 "parity-util-mem",
4610]4782]
46114783
4639[[package]]4811[[package]]
4640name = "metered-channel"4812name = "metered-channel"
4641version = "0.1.0"4813version = "0.1.0"
4642source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"4814source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
4643dependencies = [4815dependencies = [
4644 "derive_more",4816 "derive_more",
4645 "futures 0.3.15",4817 "futures 0.3.16",
4646 "futures-timer 3.0.2",4818 "futures-timer 3.0.2",
4647]4819]
46484820
4652source = "registry+https://github.com/rust-lang/crates.io-index"4824source = "registry+https://github.com/rust-lang/crates.io-index"
4653checksum = "c023c3f16109e7f33aa451f773fd61070e265b4977d0b6e344a51049296dd7df"4825checksum = "c023c3f16109e7f33aa451f773fd61070e265b4977d0b6e344a51049296dd7df"
4654dependencies = [4826dependencies = [
4655 "futures 0.3.15",4827 "futures 0.3.16",
4656 "rand 0.7.3",4828 "rand 0.7.3",
4657 "thrift",4829 "thrift",
4658]4830]
46684840
4669[[package]]4841[[package]]
4670name = "minicbor-derive"4842name = "minicbor-derive"
4671version = "0.6.3"4843version = "0.6.4"
4672source = "registry+https://github.com/rust-lang/crates.io-index"4844source = "registry+https://github.com/rust-lang/crates.io-index"
4673checksum = "7f2b9e8883d58e34b18facd16c4564a77ea50fce028ad3d0ee6753440e37acc8"4845checksum = "54999f917cd092b13904737e26631aa2b2b88d625db68e4bab461dcd8006c788"
4674dependencies = [4846dependencies = [
4675 "proc-macro2",4847 "proc-macro2",
4676 "quote",4848 "quote",
4823checksum = "7d91ec0a2440aaff5f78ec35631a7027d50386c6163aa975f7caa0d5da4b6ff8"4995checksum = "7d91ec0a2440aaff5f78ec35631a7027d50386c6163aa975f7caa0d5da4b6ff8"
4824dependencies = [4996dependencies = [
4825 "bytes 1.0.1",4997 "bytes 1.0.1",
4826 "futures 0.3.15",4998 "futures 0.3.16",
4827 "log",4999 "log",
4828 "pin-project 1.0.7",5000 "pin-project 1.0.8",
4829 "smallvec 1.6.1",5001 "smallvec 1.6.1",
4830 "unsigned-varint 0.7.0",5002 "unsigned-varint 0.7.0",
4831]5003]
48325004
4833[[package]]5005[[package]]
4834name = "nalgebra"5006name = "nalgebra"
4835version = "0.26.2"
4836source = "registry+https://github.com/rust-lang/crates.io-index"
4837checksum = "476d1d59fe02fe54c86356e91650cd892f392782a1cb9fc524ec84f7aa9e1d06"
4838dependencies = [
4839 "approx 0.4.0",
4840 "matrixmultiply",
4841 "num-complex 0.3.1",
4842 "num-rational 0.3.2",
4843 "num-traits",
4844 "rand 0.8.4",
4845 "rand_distr",
4846 "simba 0.4.0",
4847 "typenum",
4848]
4849
4850[[package]]
4851name = "nalgebra"
4852version = "0.27.1"5007version = "0.27.1"
4853source = "registry+https://github.com/rust-lang/crates.io-index"5008source = "registry+https://github.com/rust-lang/crates.io-index"
4854checksum = "462fffe4002f4f2e1f6a9dcf12cc1a6fc0e15989014efc02a941d3e0f5dc2120"5009checksum = "462fffe4002f4f2e1f6a9dcf12cc1a6fc0e15989014efc02a941d3e0f5dc2120"
4855dependencies = [5010dependencies = [
4856 "approx 0.5.0",5011 "approx",
4857 "matrixmultiply",5012 "matrixmultiply",
4858 "nalgebra-macros",5013 "nalgebra-macros",
4859 "num-complex 0.4.0",5014 "num-complex",
4860 "num-rational 0.4.0",5015 "num-rational 0.4.0",
4861 "num-traits",5016 "num-traits",
4862 "simba 0.5.1",5017 "rand 0.8.4",
5018 "rand_distr",
5019 "simba",
4863 "typenum",5020 "typenum",
4864]5021]
48655022
4915 "fp-rpc",5072 "fp-rpc",
4916 "frame-benchmarking",5073 "frame-benchmarking",
4917 "frame-benchmarking-cli",5074 "frame-benchmarking-cli",
4918 "futures 0.3.15",5075 "futures 0.3.16",
4919 "jsonrpc-core 15.1.0",5076 "jsonrpc-core 15.1.0",
4920 "jsonrpc-pubsub 15.1.0",5077 "jsonrpc-pubsub 15.1.0",
4921 "log",5078 "log",
4924 "nft-runtime",5081 "nft-runtime",
4925 "pallet-ethereum",5082 "pallet-ethereum",
4926 "pallet-transaction-payment-rpc",5083 "pallet-transaction-payment-rpc",
4927 "parity-scale-codec 2.1.3",5084 "parity-scale-codec",
4928 "parking_lot 0.10.2",5085 "parking_lot 0.10.2",
4929 "polkadot-cli",5086 "polkadot-cli",
4930 "polkadot-parachain",5087 "polkadot-parachain",
4974name = "nft-data-structs"5131name = "nft-data-structs"
4975version = "0.9.0"5132version = "0.9.0"
4976dependencies = [5133dependencies = [
5134 "derivative",
4977 "frame-support",5135 "frame-support",
4978 "frame-system",5136 "frame-system",
4979 "parity-scale-codec 2.1.3",5137 "max-encoded-len",
5138 "parity-scale-codec",
4980 "serde",5139 "serde",
4981 "sp-core",5140 "sp-core",
4982 "sp-runtime",5141 "sp-runtime",
5142 "sp-std",
4983]5143]
49845144
4985[[package]]5145[[package]]
4991 "fc-rpc",5151 "fc-rpc",
4992 "fc-rpc-core",5152 "fc-rpc-core",
4993 "fp-rpc",5153 "fp-rpc",
4994 "futures 0.3.15",5154 "futures 0.3.16",
4995 "jsonrpc-core 15.1.0",5155 "jsonrpc-core 15.1.0",
4996 "jsonrpc-pubsub 15.1.0",5156 "jsonrpc-pubsub 15.1.0",
4997 "nft-runtime",5157 "nft-runtime",
5038 "cumulus-primitives-core",5198 "cumulus-primitives-core",
5039 "cumulus-primitives-timestamp",5199 "cumulus-primitives-timestamp",
5040 "cumulus-primitives-utility",5200 "cumulus-primitives-utility",
5201 "derivative",
5041 "fp-rpc",5202 "fp-rpc",
5042 "frame-benchmarking",5203 "frame-benchmarking",
5043 "frame-executive",5204 "frame-executive",
5046 "frame-system-benchmarking",5207 "frame-system-benchmarking",
5047 "frame-system-rpc-runtime-api",5208 "frame-system-rpc-runtime-api",
5048 "hex-literal",5209 "hex-literal",
5210 "max-encoded-len",
5049 "nft-data-structs",5211 "nft-data-structs",
5050 "pallet-aura",5212 "pallet-aura",
5051 "pallet-balances",5213 "pallet-balances",
5052 "pallet-ethereum",5214 "pallet-ethereum",
5053 "pallet-evm",5215 "pallet-evm",
5216 "pallet-evm-coder-substrate",
5217 "pallet-evm-contract-helpers",
5218 "pallet-evm-migration",
5219 "pallet-evm-transaction-payment",
5054 "pallet-inflation",5220 "pallet-inflation",
5055 "pallet-nft",5221 "pallet-nft",
5056 "pallet-nft-charge-transaction",5222 "pallet-nft-charge-transaction",
5065 "pallet-vesting",5231 "pallet-vesting",
5066 "pallet-xcm",5232 "pallet-xcm",
5067 "parachain-info",5233 "parachain-info",
5068 "parity-scale-codec 2.1.3",5234 "parity-scale-codec",
5069 "polkadot-parachain",5235 "polkadot-parachain",
5070 "serde",5236 "serde",
5071 "smallvec 1.6.1",5237 "smallvec 1.6.1",
5082 "sp-std",5248 "sp-std",
5083 "sp-transaction-pool",5249 "sp-transaction-pool",
5084 "sp-version",5250 "sp-version",
5085 "substrate-wasm-builder 4.0.0",5251 "substrate-wasm-builder 4.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
5086 "xcm",5252 "xcm",
5087 "xcm-builder",5253 "xcm-builder",
5088 "xcm-executor",5254 "xcm-executor",
51025268
5103[[package]]5269[[package]]
5104name = "nom"5270name = "nom"
5105version = "5.1.2"5271version = "6.1.2"
5106source = "registry+https://github.com/rust-lang/crates.io-index"5272source = "registry+https://github.com/rust-lang/crates.io-index"
5107checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af"5273checksum = "e7413f999671bd4745a7b624bd370a569fb6bc574b23c83a3c5ed2e453f3d5e2"
5108dependencies = [5274dependencies = [
5275 "bitvec 0.19.5",
5276 "funty",
5109 "memchr",5277 "memchr",
5110 "version_check",5278 "version_check",
5111]5279]
51235291
5124[[package]]5292[[package]]
5125name = "num-complex"5293name = "num-complex"
5126version = "0.3.1"
5127source = "registry+https://github.com/rust-lang/crates.io-index"
5128checksum = "747d632c0c558b87dbabbe6a82f3b4ae03720d0646ac5b7b4dae89394be5f2c5"
5129dependencies = [
5130 "num-traits",
5131]
5132
5133[[package]]
5134name = "num-complex"
5135version = "0.4.0"5294version = "0.4.0"
5136source = "registry+https://github.com/rust-lang/crates.io-index"5295source = "registry+https://github.com/rust-lang/crates.io-index"
5137checksum = "26873667bbbb7c5182d4a37c1add32cdf09f841af72da53318fdb81543c15085"5296checksum = "26873667bbbb7c5182d4a37c1add32cdf09f841af72da53318fdb81543c15085"
51635322
5164[[package]]5323[[package]]
5165name = "num-rational"5324name = "num-rational"
5166version = "0.3.2"
5167source = "registry+https://github.com/rust-lang/crates.io-index"
5168checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07"
5169dependencies = [
5170 "autocfg",
5171 "num-integer",
5172 "num-traits",
5173]
5174
5175[[package]]
5176name = "num-rational"
5177version = "0.4.0"5325version = "0.4.0"
5178source = "registry+https://github.com/rust-lang/crates.io-index"5326source = "registry+https://github.com/rust-lang/crates.io-index"
5179checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a"5327checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a"
52155363
5216[[package]]5364[[package]]
5217name = "object"5365name = "object"
5218version = "0.25.3"5366version = "0.26.0"
5219source = "registry+https://github.com/rust-lang/crates.io-index"5367source = "registry+https://github.com/rust-lang/crates.io-index"
5220checksum = "a38f2be3697a57b4060074ff41b44c16870d916ad7877c17696e063257482bc7"5368checksum = "c55827317fb4c08822499848a14237d2874d6f139828893017237e7ab93eb386"
5221dependencies = [5369dependencies = [
5222 "memchr",5370 "memchr",
5223]5371]
5270[[package]]5418[[package]]
5271name = "pallet-aura"5419name = "pallet-aura"
5272version = "3.0.0"5420version = "3.0.0"
5273source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"5421source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
5274dependencies = [5422dependencies = [
5275 "frame-support",5423 "frame-support",
5276 "frame-system",5424 "frame-system",
5277 "pallet-session",5425 "pallet-session",
5278 "pallet-timestamp",5426 "pallet-timestamp",
5279 "parity-scale-codec 2.1.3",5427 "parity-scale-codec",
5280 "sp-application-crypto",5428 "sp-application-crypto",
5281 "sp-consensus-aura",5429 "sp-consensus-aura",
5282 "sp-runtime",5430 "sp-runtime",
5286[[package]]5434[[package]]
5287name = "pallet-authority-discovery"5435name = "pallet-authority-discovery"
5288version = "3.0.0"5436version = "3.0.0"
5289source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"5437source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
5290dependencies = [5438dependencies = [
5291 "frame-support",5439 "frame-support",
5292 "frame-system",5440 "frame-system",
5293 "pallet-session",5441 "pallet-session",
5294 "parity-scale-codec 2.1.3",5442 "parity-scale-codec",
5295 "sp-application-crypto",5443 "sp-application-crypto",
5296 "sp-authority-discovery",5444 "sp-authority-discovery",
5297 "sp-runtime",5445 "sp-runtime",
5301[[package]]5449[[package]]
5302name = "pallet-authorship"5450name = "pallet-authorship"
5303version = "3.0.0"5451version = "3.0.0"
5304source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"5452source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
5305dependencies = [5453dependencies = [
5306 "frame-support",5454 "frame-support",
5307 "frame-system",5455 "frame-system",
5308 "impl-trait-for-tuples 0.2.1",5456 "impl-trait-for-tuples",
5309 "parity-scale-codec 2.1.3",5457 "parity-scale-codec",
5310 "sp-authorship",5458 "sp-authorship",
5311 "sp-runtime",5459 "sp-runtime",
5312 "sp-std",5460 "sp-std",
5315[[package]]5463[[package]]
5316name = "pallet-babe"5464name = "pallet-babe"
5317version = "3.0.0"5465version = "3.0.0"
5318source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"5466source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
5319dependencies = [5467dependencies = [
5320 "frame-benchmarking",5468 "frame-benchmarking",
5321 "frame-support",5469 "frame-support",
5324 "pallet-authorship",5472 "pallet-authorship",
5325 "pallet-session",5473 "pallet-session",
5326 "pallet-timestamp",5474 "pallet-timestamp",
5327 "parity-scale-codec 2.1.3",5475 "parity-scale-codec",
5328 "sp-application-crypto",5476 "sp-application-crypto",
5329 "sp-consensus-babe",5477 "sp-consensus-babe",
5330 "sp-consensus-vrf",5478 "sp-consensus-vrf",
5338[[package]]5486[[package]]
5339name = "pallet-balances"5487name = "pallet-balances"
5340version = "3.0.0"5488version = "3.0.0"
5341source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"5489source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
5342dependencies = [5490dependencies = [
5343 "frame-benchmarking",5491 "frame-benchmarking",
5344 "frame-support",5492 "frame-support",
5345 "frame-system",5493 "frame-system",
5346 "log",5494 "log",
5347 "max-encoded-len",5495 "max-encoded-len",
5348 "parity-scale-codec 2.1.3",5496 "parity-scale-codec",
5349 "sp-runtime",5497 "sp-runtime",
5350 "sp-std",5498 "sp-std",
5351]5499]
53525500
5353[[package]]5501[[package]]
5354name = "pallet-beefy"5502name = "pallet-beefy"
5355version = "0.1.0"5503version = "0.1.0"
5356source = "git+https://github.com/paritytech/grandpa-bridge-gadget?branch=polkadot-v0.9.7#299dd5fd3fabd99c3c919f1312001283ddc5b365"5504source = "git+https://github.com/paritytech/grandpa-bridge-gadget?branch=polkadot-v0.9.8#55ae3329847e0bbde51c9d45991d99f444777555"
5357dependencies = [5505dependencies = [
5358 "beefy-primitives",5506 "beefy-primitives",
5359 "frame-support",5507 "frame-support",
5360 "frame-system",5508 "frame-system",
5361 "pallet-session",5509 "pallet-session",
5362 "parity-scale-codec 2.1.3",5510 "parity-scale-codec",
5363 "serde",5511 "serde",
5364 "sp-runtime",5512 "sp-runtime",
5365 "sp-std",5513 "sp-std",
5368[[package]]5516[[package]]
5369name = "pallet-bounties"5517name = "pallet-bounties"
5370version = "3.0.0"5518version = "3.0.0"
5371source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"5519source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
5372dependencies = [5520dependencies = [
5521 "frame-benchmarking",
5373 "frame-support",5522 "frame-support",
5374 "frame-system",5523 "frame-system",
5375 "pallet-treasury",5524 "pallet-treasury",
5376 "parity-scale-codec 2.1.3",5525 "parity-scale-codec",
5377 "sp-runtime",5526 "sp-runtime",
5378 "sp-std",5527 "sp-std",
5379]5528]
53805529
5381[[package]]5530[[package]]
5531name = "pallet-bridge-grandpa"
5532version = "0.1.0"
5533source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
5534dependencies = [
5535 "bp-header-chain",
5536 "bp-runtime",
5537 "bp-test-utils",
5538 "finality-grandpa",
5539 "frame-support",
5540 "frame-system",
5541 "log",
5542 "num-traits",
5543 "parity-scale-codec",
5544 "serde",
5545 "sp-finality-grandpa",
5546 "sp-runtime",
5547 "sp-std",
5548 "sp-trie",
5549]
5550
5551[[package]]
5382name = "pallet-collective"5552name = "pallet-collective"
5383version = "3.0.0"5553version = "3.0.0"
5384source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"5554source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
5385dependencies = [5555dependencies = [
5556 "frame-benchmarking",
5386 "frame-support",5557 "frame-support",
5387 "frame-system",5558 "frame-system",
5388 "log",5559 "log",
5389 "parity-scale-codec 2.1.3",5560 "parity-scale-codec",
5390 "sp-core",5561 "sp-core",
5391 "sp-io",5562 "sp-io",
5392 "sp-runtime",5563 "sp-runtime",
5400 "frame-support",5571 "frame-support",
5401 "frame-system",5572 "frame-system",
5402 "pallet-contracts",5573 "pallet-contracts",
5403 "parity-scale-codec 2.1.3",5574 "parity-scale-codec",
5404 "sp-runtime",5575 "sp-runtime",
5405 "sp-std",5576 "sp-std",
5406 "up-sponsorship",5577 "up-sponsorship",
5409[[package]]5580[[package]]
5410name = "pallet-contracts"5581name = "pallet-contracts"
5411version = "3.0.0"5582version = "3.0.0"
5412source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"5583source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
5413dependencies = [5584dependencies = [
5414 "bitflags",5585 "bitflags",
5415 "frame-support",5586 "frame-support",
5416 "frame-system",5587 "frame-system",
5417 "log",5588 "log",
5418 "pallet-contracts-primitives",5589 "pallet-contracts-primitives",
5419 "pallet-contracts-proc-macro",5590 "pallet-contracts-proc-macro",
5420 "parity-scale-codec 2.1.3",5591 "parity-scale-codec",
5421 "pwasm-utils",5592 "pwasm-utils",
5422 "serde",5593 "serde",
5423 "smallvec 1.6.1",5594 "smallvec 1.6.1",
5432[[package]]5603[[package]]
5433name = "pallet-contracts-primitives"5604name = "pallet-contracts-primitives"
5434version = "3.0.0"5605version = "3.0.0"
5435source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"5606source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
5436dependencies = [5607dependencies = [
5437 "bitflags",5608 "bitflags",
5438 "parity-scale-codec 2.1.3",5609 "parity-scale-codec",
5439 "serde",5610 "serde",
5440 "sp-core",5611 "sp-core",
5441 "sp-runtime",5612 "sp-runtime",
5445[[package]]5616[[package]]
5446name = "pallet-contracts-proc-macro"5617name = "pallet-contracts-proc-macro"
5447version = "3.0.0"5618version = "3.0.0"
5448source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"5619source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
5449dependencies = [5620dependencies = [
5450 "proc-macro2",5621 "proc-macro2",
5451 "quote",5622 "quote",
5455[[package]]5626[[package]]
5456name = "pallet-democracy"5627name = "pallet-democracy"
5457version = "3.0.0"5628version = "3.0.0"
5458source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"5629source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
5459dependencies = [5630dependencies = [
5460 "frame-benchmarking",5631 "frame-benchmarking",
5461 "frame-support",5632 "frame-support",
5462 "frame-system",5633 "frame-system",
5463 "parity-scale-codec 2.1.3",5634 "parity-scale-codec",
5464 "serde",5635 "serde",
5465 "sp-io",5636 "sp-io",
5466 "sp-runtime",5637 "sp-runtime",
5470[[package]]5641[[package]]
5471name = "pallet-election-provider-multi-phase"5642name = "pallet-election-provider-multi-phase"
5472version = "3.0.0"5643version = "3.0.0"
5473source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"5644source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
5474dependencies = [5645dependencies = [
5646 "frame-benchmarking",
5475 "frame-election-provider-support",5647 "frame-election-provider-support",
5476 "frame-support",5648 "frame-support",
5477 "frame-system",5649 "frame-system",
5478 "log",5650 "log",
5479 "parity-scale-codec 2.1.3",5651 "parity-scale-codec",
5652 "rand 0.7.3",
5480 "sp-arithmetic",5653 "sp-arithmetic",
5481 "sp-core",5654 "sp-core",
5482 "sp-io",5655 "sp-io",
5489[[package]]5662[[package]]
5490name = "pallet-elections-phragmen"5663name = "pallet-elections-phragmen"
5491version = "4.0.0"5664version = "4.0.0"
5492source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"5665source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
5493dependencies = [5666dependencies = [
5667 "frame-benchmarking",
5494 "frame-support",5668 "frame-support",
5495 "frame-system",5669 "frame-system",
5496 "log",5670 "log",
5497 "parity-scale-codec 2.1.3",5671 "parity-scale-codec",
5498 "sp-core",5672 "sp-core",
5499 "sp-io",5673 "sp-io",
5500 "sp-npos-elections",5674 "sp-npos-elections",
5505[[package]]5679[[package]]
5506name = "pallet-ethereum"5680name = "pallet-ethereum"
5507version = "3.0.0-dev"5681version = "3.0.0-dev"
5508source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions-parachain#c1388c13be6d59b9a70e1277f1295977090adb63"5682source = "git+https://github.com/uniquenetwork/frontier.git?branch=injected-transactions-parachain#1e2a0537db656af0b300493b4f8eda72c22e9421"
5509dependencies = [5683dependencies = [
5510 "ethereum",5684 "ethereum",
5511 "ethereum-types 0.11.0",5685 "ethereum-types",
5512 "evm",5686 "evm",
5513 "fp-consensus",5687 "fp-consensus",
5514 "fp-evm",5688 "fp-evm",
5520 "pallet-balances",5694 "pallet-balances",
5521 "pallet-evm",5695 "pallet-evm",
5522 "pallet-timestamp",5696 "pallet-timestamp",
5523 "parity-scale-codec 2.1.3",5697 "parity-scale-codec",
5524 "rlp 0.5.0",5698 "rlp",
5525 "rustc-hex",5699 "rustc-hex",
5526 "serde",5700 "serde",
5527 "sha3 0.8.2",5701 "sha3 0.8.2",
5533[[package]]5707[[package]]
5534name = "pallet-evm"5708name = "pallet-evm"
5535version = "5.0.0-dev"5709version = "5.0.0-dev"
5536source = "git+https://github.com/usetech-llc/frontier.git?branch=injected-transactions-parachain#c1388c13be6d59b9a70e1277f1295977090adb63"5710source = "git+https://github.com/uniquenetwork/frontier.git?branch=injected-transactions-parachain#1e2a0537db656af0b300493b4f8eda72c22e9421"
5537dependencies = [5711dependencies = [
5538 "evm",5712 "evm",
5539 "evm-gasometer",5713 "evm-gasometer",
5540 "evm-runtime",5714 "evm-runtime",
5541 "fp-evm",5715 "fp-evm",
5716 "frame-benchmarking",
5542 "frame-support",5717 "frame-support",
5543 "frame-system",5718 "frame-system",
5544 "impl-trait-for-tuples 0.2.1",5719 "hex",
5720 "impl-trait-for-tuples",
5545 "log",5721 "log",
5546 "pallet-balances",5722 "pallet-balances",
5547 "pallet-timestamp",5723 "pallet-timestamp",
5548 "parity-scale-codec 2.1.3",5724 "parity-scale-codec",
5549 "primitive-types 0.9.0",5725 "primitive-types",
5550 "rlp 0.5.0",5726 "rlp",
5551 "serde",5727 "serde",
5552 "sha3 0.8.2",5728 "sha3 0.8.2",
5553 "sp-core",5729 "sp-core",
5557]5733]
55585734
5559[[package]]5735[[package]]
5736name = "pallet-evm-coder-substrate"
5737version = "0.1.0"
5738dependencies = [
5739 "ethereum",
5740 "evm-coder",
5741 "frame-support",
5742 "frame-system",
5743 "pallet-ethereum",
5744 "pallet-evm",
5745 "parity-scale-codec",
5746 "sp-core",
5747 "sp-std",
5748]
5749
5750[[package]]
5751name = "pallet-evm-contract-helpers"
5752version = "0.1.0"
5753dependencies = [
5754 "evm-coder",
5755 "frame-support",
5756 "frame-system",
5757 "log",
5758 "pallet-evm",
5759 "pallet-evm-coder-substrate",
5760 "parity-scale-codec",
5761 "sp-core",
5762 "sp-runtime",
5763 "sp-std",
5764 "up-sponsorship",
5765]
5766
5767[[package]]
5768name = "pallet-evm-migration"
5769version = "0.1.0"
5770dependencies = [
5771 "fp-evm",
5772 "frame-benchmarking",
5773 "frame-support",
5774 "frame-system",
5775 "pallet-evm",
5776 "parity-scale-codec",
5777 "sp-core",
5778 "sp-io",
5779 "sp-runtime",
5780 "sp-std",
5781]
5782
5783[[package]]
5784name = "pallet-evm-transaction-payment"
5785version = "0.1.0"
5786dependencies = [
5787 "fp-evm",
5788 "frame-support",
5789 "frame-system",
5790 "pallet-ethereum",
5791 "pallet-evm",
5792 "parity-scale-codec",
5793 "sp-core",
5794 "sp-io",
5795 "sp-runtime",
5796 "sp-std",
5797 "up-sponsorship",
5798]
5799
5800[[package]]
5801name = "pallet-gilt"
5802version = "3.0.0"
5803source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
5804dependencies = [
5805 "frame-benchmarking",
5806 "frame-support",
5807 "frame-system",
5808 "parity-scale-codec",
5809 "sp-arithmetic",
5810 "sp-runtime",
5811 "sp-std",
5812]
5813
5814[[package]]
5560name = "pallet-grandpa"5815name = "pallet-grandpa"
5561version = "3.1.0"5816version = "3.1.0"
5562source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"5817source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
5563dependencies = [5818dependencies = [
5564 "frame-benchmarking",5819 "frame-benchmarking",
5565 "frame-support",5820 "frame-support",
5566 "frame-system",5821 "frame-system",
5567 "log",5822 "log",
5568 "pallet-authorship",5823 "pallet-authorship",
5569 "pallet-session",5824 "pallet-session",
5570 "parity-scale-codec 2.1.3",5825 "parity-scale-codec",
5571 "sp-application-crypto",5826 "sp-application-crypto",
5572 "sp-core",5827 "sp-core",
5573 "sp-finality-grandpa",5828 "sp-finality-grandpa",
5581[[package]]5836[[package]]
5582name = "pallet-identity"5837name = "pallet-identity"
5583version = "3.0.0"5838version = "3.0.0"
5584source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"5839source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
5585dependencies = [5840dependencies = [
5586 "enumflags2",5841 "enumflags2",
5587 "frame-benchmarking",5842 "frame-benchmarking",
5588 "frame-support",5843 "frame-support",
5589 "frame-system",5844 "frame-system",
5590 "parity-scale-codec 2.1.3",5845 "parity-scale-codec",
5591 "sp-io",5846 "sp-io",
5592 "sp-runtime",5847 "sp-runtime",
5593 "sp-std",5848 "sp-std",
5596[[package]]5851[[package]]
5597name = "pallet-im-online"5852name = "pallet-im-online"
5598version = "3.0.0"5853version = "3.0.0"
5599source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"5854source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
5600dependencies = [5855dependencies = [
5856 "frame-benchmarking",
5601 "frame-support",5857 "frame-support",
5602 "frame-system",5858 "frame-system",
5603 "log",5859 "log",
5604 "pallet-authorship",5860 "pallet-authorship",
5605 "parity-scale-codec 2.1.3",5861 "parity-scale-codec",
5606 "sp-application-crypto",5862 "sp-application-crypto",
5607 "sp-core",5863 "sp-core",
5608 "sp-io",5864 "sp-io",
5614[[package]]5870[[package]]
5615name = "pallet-indices"5871name = "pallet-indices"
5616version = "3.0.0"5872version = "3.0.0"
5617source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"5873source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
5618dependencies = [5874dependencies = [
5875 "frame-benchmarking",
5619 "frame-support",5876 "frame-support",
5620 "frame-system",5877 "frame-system",
5621 "parity-scale-codec 2.1.3",5878 "parity-scale-codec",
5622 "sp-core",5879 "sp-core",
5623 "sp-io",5880 "sp-io",
5624 "sp-keyring",5881 "sp-keyring",
5636 "pallet-balances",5893 "pallet-balances",
5637 "pallet-randomness-collective-flip",5894 "pallet-randomness-collective-flip",
5638 "pallet-timestamp",5895 "pallet-timestamp",
5639 "parity-scale-codec 2.1.3",5896 "parity-scale-codec",
5640 "serde",5897 "serde",
5641 "sp-core",5898 "sp-core",
5642 "sp-io",5899 "sp-io",
5647[[package]]5904[[package]]
5648name = "pallet-membership"5905name = "pallet-membership"
5649version = "3.0.0"5906version = "3.0.0"
5650source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"5907source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
5651dependencies = [5908dependencies = [
5652 "frame-benchmarking",5909 "frame-benchmarking",
5653 "frame-support",5910 "frame-support",
5654 "frame-system",5911 "frame-system",
5655 "log",5912 "log",
5656 "parity-scale-codec 2.1.3",5913 "parity-scale-codec",
5657 "sp-io",5914 "sp-io",
5658 "sp-runtime",5915 "sp-runtime",
5659 "sp-std",5916 "sp-std",
5662[[package]]5919[[package]]
5663name = "pallet-mmr"5920name = "pallet-mmr"
5664version = "3.0.0"5921version = "3.0.0"
5665source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"5922source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
5666dependencies = [5923dependencies = [
5667 "ckb-merkle-mountain-range",5924 "ckb-merkle-mountain-range",
5668 "frame-benchmarking",5925 "frame-benchmarking",
5669 "frame-support",5926 "frame-support",
5670 "frame-system",5927 "frame-system",
5671 "pallet-mmr-primitives",5928 "pallet-mmr-primitives",
5672 "parity-scale-codec 2.1.3",5929 "parity-scale-codec",
5673 "sp-core",5930 "sp-core",
5674 "sp-io",5931 "sp-io",
5675 "sp-runtime",5932 "sp-runtime",
5679[[package]]5936[[package]]
5680name = "pallet-mmr-primitives"5937name = "pallet-mmr-primitives"
5681version = "3.0.0"5938version = "3.0.0"
5682source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"5939source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
5683dependencies = [5940dependencies = [
5684 "frame-support",5941 "frame-support",
5685 "frame-system",5942 "frame-system",
5686 "log",5943 "log",
5687 "parity-scale-codec 2.1.3",5944 "parity-scale-codec",
5688 "serde",5945 "serde",
5689 "sp-api",5946 "sp-api",
5690 "sp-core",5947 "sp-core",
5695[[package]]5952[[package]]
5696name = "pallet-mmr-rpc"5953name = "pallet-mmr-rpc"
5697version = "3.0.0"5954version = "3.0.0"
5698source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"5955source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
5699dependencies = [5956dependencies = [
5700 "jsonrpc-core 15.1.0",5957 "jsonrpc-core 15.1.0",
5701 "jsonrpc-core-client 15.1.0",5958 "jsonrpc-core-client 15.1.0",
5702 "jsonrpc-derive 15.1.0",5959 "jsonrpc-derive 15.1.0",
5703 "pallet-mmr-primitives",5960 "pallet-mmr-primitives",
5704 "parity-scale-codec 2.1.3",5961 "parity-scale-codec",
5705 "serde",5962 "serde",
5706 "sp-api",5963 "sp-api",
5707 "sp-blockchain",5964 "sp-blockchain",
5713[[package]]5970[[package]]
5714name = "pallet-multisig"5971name = "pallet-multisig"
5715version = "3.0.0"5972version = "3.0.0"
5716source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"5973source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
5717dependencies = [5974dependencies = [
5975 "frame-benchmarking",
5718 "frame-support",5976 "frame-support",
5719 "frame-system",5977 "frame-system",
5720 "parity-scale-codec 2.1.3",5978 "parity-scale-codec",
5721 "sp-core",5979 "sp-core",
5722 "sp-io",5980 "sp-io",
5723 "sp-runtime",5981 "sp-runtime",
5729version = "3.0.0"5987version = "3.0.0"
5730dependencies = [5988dependencies = [
5731 "ethereum",5989 "ethereum",
5732 "ethereum-tx-sign",
5733 "evm-coder",5990 "evm-coder",
5734 "fp-evm",5991 "fp-evm",
5735 "frame-benchmarking",5992 "frame-benchmarking",
5740 "pallet-balances",5997 "pallet-balances",
5741 "pallet-ethereum",5998 "pallet-ethereum",
5742 "pallet-evm",5999 "pallet-evm",
6000 "pallet-evm-coder-substrate",
5743 "pallet-randomness-collective-flip",6001 "pallet-randomness-collective-flip",
5744 "pallet-timestamp",6002 "pallet-timestamp",
5745 "pallet-transaction-payment",6003 "pallet-transaction-payment",
5746 "parity-scale-codec 2.1.3",6004 "parity-scale-codec",
5747 "primitive-types 0.9.0",6005 "primitive-types",
5748 "rlp 0.5.0",6006 "rlp",
5749 "serde",6007 "serde",
5750 "sp-api",6008 "sp-api",
5751 "sp-core",6009 "sp-core",
5765 "pallet-balances",6023 "pallet-balances",
5766 "pallet-nft-transaction-payment",6024 "pallet-nft-transaction-payment",
5767 "pallet-transaction-payment",6025 "pallet-transaction-payment",
5768 "parity-scale-codec 2.1.3",6026 "parity-scale-codec",
5769 "serde",6027 "serde",
5770 "sp-core",6028 "sp-core",
5771 "sp-io",6029 "sp-io",
5781 "frame-support",6039 "frame-support",
5782 "frame-system",6040 "frame-system",
5783 "pallet-transaction-payment",6041 "pallet-transaction-payment",
5784 "parity-scale-codec 2.1.3",6042 "parity-scale-codec",
5785 "serde",6043 "serde",
5786 "sp-core",6044 "sp-core",
5787 "sp-io",6045 "sp-io",
5793[[package]]6051[[package]]
5794name = "pallet-nicks"6052name = "pallet-nicks"
5795version = "3.0.0"6053version = "3.0.0"
5796source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"6054source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
5797dependencies = [6055dependencies = [
5798 "frame-support",6056 "frame-support",
5799 "frame-system",6057 "frame-system",
5800 "parity-scale-codec 2.1.3",6058 "parity-scale-codec",
5801 "sp-io",6059 "sp-io",
5802 "sp-runtime",6060 "sp-runtime",
5803 "sp-std",6061 "sp-std",
5806[[package]]6064[[package]]
5807name = "pallet-offences"6065name = "pallet-offences"
5808version = "3.0.0"6066version = "3.0.0"
5809source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"6067source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
5810dependencies = [6068dependencies = [
5811 "frame-support",6069 "frame-support",
5812 "frame-system",6070 "frame-system",
5813 "log",6071 "log",
5814 "pallet-balances",6072 "pallet-balances",
5815 "parity-scale-codec 2.1.3",6073 "parity-scale-codec",
5816 "serde",6074 "serde",
5817 "sp-runtime",6075 "sp-runtime",
5818 "sp-staking",6076 "sp-staking",
5819 "sp-std",6077 "sp-std",
5820]6078]
58216079
5822[[package]]6080[[package]]
6081name = "pallet-offences-benchmarking"
6082version = "3.0.0"
6083source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
6084dependencies = [
6085 "frame-benchmarking",
6086 "frame-election-provider-support",
6087 "frame-support",
6088 "frame-system",
6089 "pallet-babe",
6090 "pallet-balances",
6091 "pallet-grandpa",
6092 "pallet-im-online",
6093 "pallet-offences",
6094 "pallet-session",
6095 "pallet-staking",
6096 "parity-scale-codec",
6097 "sp-runtime",
6098 "sp-staking",
6099 "sp-std",
6100]
6101
6102[[package]]
5823name = "pallet-proxy"6103name = "pallet-proxy"
5824version = "3.0.0"6104version = "3.0.0"
5825source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"6105source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
5826dependencies = [6106dependencies = [
6107 "frame-benchmarking",
5827 "frame-support",6108 "frame-support",
5828 "frame-system",6109 "frame-system",
5829 "max-encoded-len",6110 "max-encoded-len",
5830 "parity-scale-codec 2.1.3",6111 "parity-scale-codec",
5831 "sp-core",6112 "sp-core",
5832 "sp-io",6113 "sp-io",
5833 "sp-runtime",6114 "sp-runtime",
5837[[package]]6118[[package]]
5838name = "pallet-randomness-collective-flip"6119name = "pallet-randomness-collective-flip"
5839version = "3.0.0"6120version = "3.0.0"
5840source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"6121source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
5841dependencies = [6122dependencies = [
5842 "frame-support",6123 "frame-support",
5843 "frame-system",6124 "frame-system",
5844 "parity-scale-codec 2.1.3",6125 "parity-scale-codec",
5845 "safe-mix",6126 "safe-mix",
5846 "sp-runtime",6127 "sp-runtime",
5847 "sp-std",6128 "sp-std",
5848]6129]
58496130
5850[[package]]6131[[package]]
6132name = "pallet-recovery"
6133version = "3.0.0"
6134source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
6135dependencies = [
6136 "enumflags2",
6137 "frame-support",
6138 "frame-system",
6139 "parity-scale-codec",
6140 "sp-io",
6141 "sp-runtime",
6142 "sp-std",
6143]
6144
6145[[package]]
5851name = "pallet-scheduler"6146name = "pallet-scheduler"
5852version = "3.0.0"6147version = "3.0.0"
5853source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"6148source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
5854dependencies = [6149dependencies = [
5855 "frame-benchmarking",6150 "frame-benchmarking",
5856 "frame-support",6151 "frame-support",
5857 "frame-system",6152 "frame-system",
5858 "log",6153 "log",
5859 "parity-scale-codec 2.1.3",6154 "parity-scale-codec",
5860 "sp-io",6155 "sp-io",
5861 "sp-runtime",6156 "sp-runtime",
5862 "sp-std",6157 "sp-std",
5870 "frame-support",6165 "frame-support",
5871 "frame-system",6166 "frame-system",
5872 "log",6167 "log",
5873 "parity-scale-codec 2.1.3",6168 "parity-scale-codec",
5874 "serde",6169 "serde",
5875 "sp-core",6170 "sp-core",
5876 "sp-io",6171 "sp-io",
5883[[package]]6178[[package]]
5884name = "pallet-session"6179name = "pallet-session"
5885version = "3.0.0"6180version = "3.0.0"
5886source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"6181source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
5887dependencies = [6182dependencies = [
5888 "frame-support",6183 "frame-support",
5889 "frame-system",6184 "frame-system",
5890 "impl-trait-for-tuples 0.2.1",6185 "impl-trait-for-tuples",
5891 "log",6186 "log",
5892 "pallet-timestamp",6187 "pallet-timestamp",
5893 "parity-scale-codec 2.1.3",6188 "parity-scale-codec",
5894 "sp-core",6189 "sp-core",
5895 "sp-io",6190 "sp-io",
5896 "sp-runtime",6191 "sp-runtime",
5901]6196]
59026197
5903[[package]]6198[[package]]
6199name = "pallet-session-benchmarking"
6200version = "3.0.0"
6201source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
6202dependencies = [
6203 "frame-benchmarking",
6204 "frame-support",
6205 "frame-system",
6206 "pallet-session",
6207 "pallet-staking",
6208 "rand 0.7.3",
6209 "sp-runtime",
6210 "sp-session",
6211 "sp-std",
6212]
6213
6214[[package]]
6215name = "pallet-society"
6216version = "3.0.0"
6217source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
6218dependencies = [
6219 "frame-support",
6220 "frame-system",
6221 "parity-scale-codec",
6222 "rand_chacha 0.2.2",
6223 "sp-runtime",
6224 "sp-std",
6225]
6226
6227[[package]]
5904name = "pallet-staking"6228name = "pallet-staking"
5905version = "3.0.0"6229version = "3.0.0"
5906source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"6230source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
5907dependencies = [6231dependencies = [
6232 "frame-benchmarking",
5908 "frame-election-provider-support",6233 "frame-election-provider-support",
5909 "frame-support",6234 "frame-support",
5910 "frame-system",6235 "frame-system",
5911 "log",6236 "log",
5912 "pallet-authorship",6237 "pallet-authorship",
5913 "pallet-session",6238 "pallet-session",
5914 "parity-scale-codec 2.1.3",6239 "parity-scale-codec",
5915 "paste",6240 "paste",
6241 "rand_chacha 0.2.2",
5916 "serde",6242 "serde",
5917 "sp-application-crypto",6243 "sp-application-crypto",
5918 "sp-io",6244 "sp-io",
5925[[package]]6251[[package]]
5926name = "pallet-staking-reward-curve"6252name = "pallet-staking-reward-curve"
5927version = "3.0.0"6253version = "3.0.0"
5928source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"6254source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
5929dependencies = [6255dependencies = [
5930 "proc-macro-crate 1.0.0",6256 "proc-macro-crate 1.0.0",
5931 "proc-macro2",6257 "proc-macro2",
5934]6260]
59356261
5936[[package]]6262[[package]]
6263name = "pallet-staking-reward-fn"
6264version = "3.0.0"
6265source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
6266dependencies = [
6267 "log",
6268 "sp-arithmetic",
6269]
6270
6271[[package]]
5937name = "pallet-sudo"6272name = "pallet-sudo"
5938version = "3.0.0"6273version = "3.0.0"
5939source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"6274source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
5940dependencies = [6275dependencies = [
5941 "frame-support",6276 "frame-support",
5942 "frame-system",6277 "frame-system",
5943 "parity-scale-codec 2.1.3",6278 "parity-scale-codec",
5944 "sp-io",6279 "sp-io",
5945 "sp-runtime",6280 "sp-runtime",
5946 "sp-std",6281 "sp-std",
5949[[package]]6284[[package]]
5950name = "pallet-timestamp"6285name = "pallet-timestamp"
5951version = "3.0.0"6286version = "3.0.0"
5952source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"6287source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
5953dependencies = [6288dependencies = [
5954 "frame-benchmarking",6289 "frame-benchmarking",
5955 "frame-support",6290 "frame-support",
5956 "frame-system",6291 "frame-system",
5957 "impl-trait-for-tuples 0.2.1",6292 "impl-trait-for-tuples",
5958 "log",6293 "log",
5959 "parity-scale-codec 2.1.3",6294 "parity-scale-codec",
5960 "sp-inherents",6295 "sp-inherents",
5961 "sp-io",6296 "sp-io",
5962 "sp-runtime",6297 "sp-runtime",
5967[[package]]6302[[package]]
5968name = "pallet-tips"6303name = "pallet-tips"
5969version = "3.0.0"6304version = "3.0.0"
5970source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"6305source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
5971dependencies = [6306dependencies = [
6307 "frame-benchmarking",
5972 "frame-support",6308 "frame-support",
5973 "frame-system",6309 "frame-system",
5974 "pallet-treasury",6310 "pallet-treasury",
5975 "parity-scale-codec 2.1.3",6311 "parity-scale-codec",
5976 "serde",6312 "serde",
5977 "sp-runtime",6313 "sp-runtime",
5978 "sp-std",6314 "sp-std",
5981[[package]]6317[[package]]
5982name = "pallet-transaction-payment"6318name = "pallet-transaction-payment"
5983version = "3.0.0"6319version = "3.0.0"
5984source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"6320source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
5985dependencies = [6321dependencies = [
5986 "frame-support",6322 "frame-support",
5987 "frame-system",6323 "frame-system",
5988 "parity-scale-codec 2.1.3",6324 "parity-scale-codec",
5989 "serde",6325 "serde",
5990 "smallvec 1.6.1",6326 "smallvec 1.6.1",
5991 "sp-core",6327 "sp-core",
5997[[package]]6333[[package]]
5998name = "pallet-transaction-payment-rpc"6334name = "pallet-transaction-payment-rpc"
5999version = "3.0.0"6335version = "3.0.0"
6000source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"6336source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
6001dependencies = [6337dependencies = [
6002 "jsonrpc-core 15.1.0",6338 "jsonrpc-core 15.1.0",
6003 "jsonrpc-core-client 15.1.0",6339 "jsonrpc-core-client 15.1.0",
6004 "jsonrpc-derive 15.1.0",6340 "jsonrpc-derive 15.1.0",
6005 "pallet-transaction-payment-rpc-runtime-api",6341 "pallet-transaction-payment-rpc-runtime-api",
6006 "parity-scale-codec 2.1.3",6342 "parity-scale-codec",
6007 "sp-api",6343 "sp-api",
6008 "sp-blockchain",6344 "sp-blockchain",
6009 "sp-core",6345 "sp-core",
6014[[package]]6350[[package]]
6015name = "pallet-transaction-payment-rpc-runtime-api"6351name = "pallet-transaction-payment-rpc-runtime-api"
6016version = "3.0.0"6352version = "3.0.0"
6017source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"6353source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
6018dependencies = [6354dependencies = [
6019 "pallet-transaction-payment",6355 "pallet-transaction-payment",
6020 "parity-scale-codec 2.1.3",6356 "parity-scale-codec",
6021 "sp-api",6357 "sp-api",
6022 "sp-runtime",6358 "sp-runtime",
6023]6359]
60246360
6025[[package]]6361[[package]]
6026name = "pallet-treasury"6362name = "pallet-treasury"
6027version = "3.0.0"6363version = "3.0.0"
6028source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"6364source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
6029dependencies = [6365dependencies = [
6366 "frame-benchmarking",
6030 "frame-support",6367 "frame-support",
6031 "frame-system",6368 "frame-system",
6032 "impl-trait-for-tuples 0.2.1",6369 "impl-trait-for-tuples",
6033 "pallet-balances",6370 "pallet-balances",
6034 "parity-scale-codec 2.1.3",6371 "parity-scale-codec",
6035 "serde",6372 "serde",
6036 "sp-runtime",6373 "sp-runtime",
6037 "sp-std",6374 "sp-std",
6040[[package]]6377[[package]]
6041name = "pallet-utility"6378name = "pallet-utility"
6042version = "3.0.0"6379version = "3.0.0"
6043source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"6380source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
6044dependencies = [6381dependencies = [
6382 "frame-benchmarking",
6045 "frame-support",6383 "frame-support",
6046 "frame-system",6384 "frame-system",
6047 "parity-scale-codec 2.1.3",6385 "parity-scale-codec",
6048 "sp-core",6386 "sp-core",
6049 "sp-io",6387 "sp-io",
6050 "sp-runtime",6388 "sp-runtime",
6054[[package]]6392[[package]]
6055name = "pallet-vesting"6393name = "pallet-vesting"
6056version = "3.0.0"6394version = "3.0.0"
6057source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"6395source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
6058dependencies = [6396dependencies = [
6059 "enumflags2",6397 "enumflags2",
6398 "frame-benchmarking",
6060 "frame-support",6399 "frame-support",
6061 "frame-system",6400 "frame-system",
6062 "parity-scale-codec 2.1.3",6401 "parity-scale-codec",
6063 "sp-runtime",6402 "sp-runtime",
6064 "sp-std",6403 "sp-std",
6065]6404]
60666405
6067[[package]]6406[[package]]
6068name = "pallet-xcm"6407name = "pallet-xcm"
6069version = "0.1.0"6408version = "0.1.0"
6070source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"6409source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
6071dependencies = [6410dependencies = [
6072 "frame-support",6411 "frame-support",
6073 "frame-system",6412 "frame-system",
6074 "parity-scale-codec 2.1.3",6413 "parity-scale-codec",
6414 "serde",
6075 "sp-runtime",6415 "sp-runtime",
6076 "sp-std",6416 "sp-std",
6077 "xcm",6417 "xcm",
6081[[package]]6421[[package]]
6082name = "parachain-info"6422name = "parachain-info"
6083version = "0.1.0"6423version = "0.1.0"
6084source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.7#c5c3abf7eb9d4fdfb588d6560efaa8dca66a8dbc"6424source = "git+https://github.com/paritytech/cumulus.git?branch=polkadot-v0.9.8#ed6ba5dfb2c112c29505e856e8971da3420ce6d0"
6085dependencies = [6425dependencies = [
6086 "cumulus-primitives-core",6426 "cumulus-primitives-core",
6087 "frame-support",6427 "frame-support",
6088 "frame-system",6428 "frame-system",
6089 "parity-scale-codec 2.1.3",6429 "parity-scale-codec",
6090 "serde",6430 "serde",
6091]6431]
60926432
61276467
6128[[package]]6468[[package]]
6129name = "parity-scale-codec"6469name = "parity-scale-codec"
6130version = "1.3.7"6470version = "2.2.0"
6131source = "registry+https://github.com/rust-lang/crates.io-index"6471source = "registry+https://github.com/rust-lang/crates.io-index"
6132checksum = "a4b26b16c7687c3075982af47719e481815df30bc544f7a6690763a25ca16e9d"6472checksum = "8975095a2a03bbbdc70a74ab11a4f76a6d0b84680d87c68d722531b0ac28e8a9"
6133dependencies = [6473dependencies = [
6134 "arrayvec 0.5.2",
6135 "bitvec 0.17.4",
6136 "byte-slice-cast 0.3.5",
6137 "serde",
6138]
6139
6140[[package]]
6141name = "parity-scale-codec"
6142version = "2.1.3"
6143source = "registry+https://github.com/rust-lang/crates.io-index"
6144checksum = "b310f220c335f9df1b3d2e9fbe3890bbfeef5030dad771620f48c5c229877cd3"
6145dependencies = [
6146 "arrayvec 0.7.1",6474 "arrayvec 0.7.1",
6147 "bitvec 0.20.4",6475 "bitvec 0.20.4",
6148 "byte-slice-cast 1.0.0",6476 "byte-slice-cast",
6477 "impl-trait-for-tuples",
6149 "parity-scale-codec-derive",6478 "parity-scale-codec-derive",
6150 "serde",6479 "serde",
6151]6480]
61526481
6153[[package]]6482[[package]]
6154name = "parity-scale-codec-derive"6483name = "parity-scale-codec-derive"
6155version = "2.1.3"6484version = "2.2.0"
6156source = "registry+https://github.com/rust-lang/crates.io-index"6485source = "registry+https://github.com/rust-lang/crates.io-index"
6157checksum = "81038e13ca2c32587201d544ea2e6b6c47120f1e4eae04478f9f60b6bcb89145"6486checksum = "40dbbfef7f0a1143c5b06e0d76a6278e25dac0bc1af4be51a0fbb73f07e7ad09"
6158dependencies = [6487dependencies = [
6159 "proc-macro-crate 1.0.0",6488 "proc-macro-crate 1.0.0",
6160 "proc-macro2",6489 "proc-macro2",
6194checksum = "664a8c6b8e62d8f9f2f937e391982eb433ab285b4cd9545b342441e04a906e42"6523checksum = "664a8c6b8e62d8f9f2f937e391982eb433ab285b4cd9545b342441e04a906e42"
6195dependencies = [6524dependencies = [
6196 "cfg-if 1.0.0",6525 "cfg-if 1.0.0",
6197 "ethereum-types 0.11.0",6526 "ethereum-types",
6198 "hashbrown",6527 "hashbrown 0.9.1",
6199 "impl-trait-for-tuples 0.2.1",6528 "impl-trait-for-tuples",
6200 "lru",6529 "lru",
6201 "parity-util-mem-derive",6530 "parity-util-mem-derive",
6202 "parking_lot 0.11.1",6531 "parking_lot 0.11.1",
6203 "primitive-types 0.9.0",6532 "primitive-types",
6204 "smallvec 1.6.1",6533 "smallvec 1.6.1",
6205 "winapi 0.3.9",6534 "winapi 0.3.9",
6206]6535]
62336562
6234[[package]]6563[[package]]
6235name = "parity-ws"6564name = "parity-ws"
6236version = "0.10.0"6565version = "0.10.1"
6237source = "registry+https://github.com/rust-lang/crates.io-index"6566source = "registry+https://github.com/rust-lang/crates.io-index"
6238checksum = "9e02a625dd75084c2a7024f07c575b61b782f729d18702dabb3cdbf31911dc61"6567checksum = "322d72dfe461b8b9e367d057ceace105379d64d5b03907d23c481ccf3fbf8aa4"
6239dependencies = [6568dependencies = [
6240 "byteorder",6569 "byteorder",
6241 "bytes 0.4.12",6570 "bytes 0.4.12",
6263dependencies = [6592dependencies = [
6264 "lock_api 0.3.4",6593 "lock_api 0.3.4",
6265 "parking_lot_core 0.6.2",6594 "parking_lot_core 0.6.2",
6266 "rustc_version",6595 "rustc_version 0.2.3",
6267]6596]
62686597
6269[[package]]6598[[package]]
6297 "cloudabi",6626 "cloudabi",
6298 "libc",6627 "libc",
6299 "redox_syscall 0.1.57",6628 "redox_syscall 0.1.57",
6300 "rustc_version",6629 "rustc_version 0.2.3",
6301 "smallvec 0.6.14",6630 "smallvec 0.6.14",
6302 "winapi 0.3.9",6631 "winapi 0.3.9",
6303]6632]
64436772
6444[[package]]6773[[package]]
6445name = "pin-project"6774name = "pin-project"
6446version = "1.0.7"6775version = "1.0.8"
6447source = "registry+https://github.com/rust-lang/crates.io-index"6776source = "registry+https://github.com/rust-lang/crates.io-index"
6448checksum = "c7509cc106041c40a4518d2af7a61530e1eed0e6285296a3d8c5472806ccc4a4"6777checksum = "576bc800220cc65dac09e99e97b08b358cfab6e17078de8dc5fee223bd2d0c08"
6449dependencies = [6778dependencies = [
6450 "pin-project-internal 1.0.7",6779 "pin-project-internal 1.0.8",
6451]6780]
64526781
6453[[package]]6782[[package]]
64636792
6464[[package]]6793[[package]]
6465name = "pin-project-internal"6794name = "pin-project-internal"
6466version = "1.0.7"6795version = "1.0.8"
6467source = "registry+https://github.com/rust-lang/crates.io-index"6796source = "registry+https://github.com/rust-lang/crates.io-index"
6468checksum = "48c950132583b500556b1efd71d45b319029f2b71518d979fcc208e16b42426f"6797checksum = "6e8fe8163d14ce7f0cdac2e040116f22eac817edabff0be91e8aff7e9accf389"
6469dependencies = [6798dependencies = [
6470 "proc-macro2",6799 "proc-macro2",
6471 "quote",6800 "quote",
64806809
6481[[package]]6810[[package]]
6482name = "pin-project-lite"6811name = "pin-project-lite"
6483version = "0.2.6"6812version = "0.2.7"
6484source = "registry+https://github.com/rust-lang/crates.io-index"6813source = "registry+https://github.com/rust-lang/crates.io-index"
6485checksum = "dc0e1f259c92177c30a4c9d177246edd0a3568b25756a977d0632cf8fa37e905"6814checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443"
64866815
6487[[package]]6816[[package]]
6488name = "pin-utils"6817name = "pin-utils"
6505[[package]]6834[[package]]
6506name = "polkadot-approval-distribution"6835name = "polkadot-approval-distribution"
6507version = "0.1.0"6836version = "0.1.0"
6508source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"6837source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
6509dependencies = [6838dependencies = [
6510 "futures 0.3.15",6839 "futures 0.3.16",
6511 "polkadot-node-network-protocol",6840 "polkadot-node-network-protocol",
6512 "polkadot-node-primitives",6841 "polkadot-node-primitives",
6513 "polkadot-node-subsystem",6842 "polkadot-node-subsystem",
6519[[package]]6848[[package]]
6520name = "polkadot-availability-bitfield-distribution"6849name = "polkadot-availability-bitfield-distribution"
6521version = "0.1.0"6850version = "0.1.0"
6522source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"6851source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
6523dependencies = [6852dependencies = [
6524 "futures 0.3.15",6853 "futures 0.3.16",
6525 "polkadot-node-network-protocol",6854 "polkadot-node-network-protocol",
6526 "polkadot-node-subsystem",6855 "polkadot-node-subsystem",
6527 "polkadot-node-subsystem-util",6856 "polkadot-node-subsystem-util",
6532[[package]]6861[[package]]
6533name = "polkadot-availability-distribution"6862name = "polkadot-availability-distribution"
6534version = "0.1.0"6863version = "0.1.0"
6535source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"6864source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
6536dependencies = [6865dependencies = [
6537 "futures 0.3.15",6866 "futures 0.3.16",
6538 "lru",6867 "lru",
6539 "parity-scale-codec 2.1.3",6868 "parity-scale-codec",
6540 "polkadot-erasure-coding",6869 "polkadot-erasure-coding",
6541 "polkadot-node-core-runtime-api",6870 "polkadot-node-core-runtime-api",
6542 "polkadot-node-network-protocol",6871 "polkadot-node-network-protocol",
6555[[package]]6884[[package]]
6556name = "polkadot-availability-recovery"6885name = "polkadot-availability-recovery"
6557version = "0.1.0"6886version = "0.1.0"
6558source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"6887source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
6559dependencies = [6888dependencies = [
6560 "futures 0.3.15",6889 "futures 0.3.16",
6561 "lru",6890 "lru",
6562 "parity-scale-codec 2.1.3",6891 "parity-scale-codec",
6563 "polkadot-erasure-coding",6892 "polkadot-erasure-coding",
6564 "polkadot-node-network-protocol",6893 "polkadot-node-network-protocol",
6565 "polkadot-node-primitives",6894 "polkadot-node-primitives",
65736902
6574[[package]]6903[[package]]
6575name = "polkadot-cli"6904name = "polkadot-cli"
6576version = "0.9.7"6905version = "0.9.8"
6577source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"6906source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
6578dependencies = [6907dependencies = [
6579 "frame-benchmarking-cli",6908 "frame-benchmarking-cli",
6580 "futures 0.3.15",6909 "futures 0.3.16",
6581 "log",6910 "log",
6582 "polkadot-node-core-pvf",6911 "polkadot-node-core-pvf",
6583 "polkadot-service",6912 "polkadot-service",
65936922
6594[[package]]6923[[package]]
6595name = "polkadot-client"6924name = "polkadot-client"
6596version = "0.9.7"6925version = "0.9.8"
6597source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"6926source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
6598dependencies = [6927dependencies = [
6599 "beefy-primitives",6928 "beefy-primitives",
6600 "frame-benchmarking",6929 "frame-benchmarking",
6623[[package]]6952[[package]]
6624name = "polkadot-collator-protocol"6953name = "polkadot-collator-protocol"
6625version = "0.1.0"6954version = "0.1.0"
6626source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"6955source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
6627dependencies = [6956dependencies = [
6628 "always-assert",6957 "always-assert",
6629 "futures 0.3.15",6958 "futures 0.3.16",
6630 "futures-timer 3.0.2",6959 "futures-timer 3.0.2",
6631 "polkadot-node-network-protocol",6960 "polkadot-node-network-protocol",
6632 "polkadot-node-primitives",6961 "polkadot-node-primitives",
66426971
6643[[package]]6972[[package]]
6644name = "polkadot-core-primitives"6973name = "polkadot-core-primitives"
6645version = "0.9.7"6974version = "0.9.8"
6646source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"6975source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
6647dependencies = [6976dependencies = [
6648 "parity-scale-codec 2.1.3",6977 "parity-scale-codec",
6649 "parity-util-mem",6978 "parity-util-mem",
6650 "sp-core",6979 "sp-core",
6651 "sp-runtime",6980 "sp-runtime",
66546983
6655[[package]]6984[[package]]
6656name = "polkadot-erasure-coding"6985name = "polkadot-erasure-coding"
6657version = "0.9.7"6986version = "0.9.8"
6658source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"6987source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
6659dependencies = [6988dependencies = [
6660 "parity-scale-codec 2.1.3",6989 "parity-scale-codec",
6661 "polkadot-node-primitives",6990 "polkadot-node-primitives",
6662 "polkadot-primitives",6991 "polkadot-primitives",
6663 "reed-solomon-novelpoly",6992 "reed-solomon-novelpoly",
6669[[package]]6998[[package]]
6670name = "polkadot-gossip-support"6999name = "polkadot-gossip-support"
6671version = "0.1.0"7000version = "0.1.0"
6672source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"7001source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
6673dependencies = [7002dependencies = [
6674 "futures 0.3.15",7003 "futures 0.3.16",
6675 "polkadot-node-network-protocol",7004 "polkadot-node-network-protocol",
6676 "polkadot-node-subsystem",7005 "polkadot-node-subsystem",
6677 "polkadot-node-subsystem-util",7006 "polkadot-node-subsystem-util",
6678 "polkadot-primitives",7007 "polkadot-primitives",
7008 "rand 0.8.4",
7009 "rand_chacha 0.3.1",
6679 "sp-application-crypto",7010 "sp-application-crypto",
7011 "sp-core",
6680 "sp-keystore",7012 "sp-keystore",
6681 "tracing",7013 "tracing",
6682]7014]
66837015
6684[[package]]7016[[package]]
6685name = "polkadot-network-bridge"7017name = "polkadot-network-bridge"
6686version = "0.1.0"7018version = "0.1.0"
6687source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"7019source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
6688dependencies = [7020dependencies = [
6689 "async-trait",7021 "async-trait",
6690 "futures 0.3.15",7022 "futures 0.3.16",
6691 "parity-scale-codec 2.1.3",7023 "parity-scale-codec",
6692 "parking_lot 0.11.1",7024 "parking_lot 0.11.1",
6693 "polkadot-node-network-protocol",7025 "polkadot-node-network-protocol",
6694 "polkadot-node-subsystem",7026 "polkadot-node-subsystem",
6704[[package]]7036[[package]]
6705name = "polkadot-node-collation-generation"7037name = "polkadot-node-collation-generation"
6706version = "0.1.0"7038version = "0.1.0"
6707source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"7039source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
6708dependencies = [7040dependencies = [
6709 "futures 0.3.15",7041 "futures 0.3.16",
6710 "parity-scale-codec 2.1.3",7042 "parity-scale-codec",
6711 "polkadot-erasure-coding",7043 "polkadot-erasure-coding",
6712 "polkadot-node-primitives",7044 "polkadot-node-primitives",
6713 "polkadot-node-subsystem",7045 "polkadot-node-subsystem",
6722[[package]]7054[[package]]
6723name = "polkadot-node-core-approval-voting"7055name = "polkadot-node-core-approval-voting"
6724version = "0.1.0"7056version = "0.1.0"
6725source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"7057source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
6726dependencies = [7058dependencies = [
6727 "bitvec 0.20.4",7059 "bitvec 0.20.4",
6728 "derive_more",7060 "derive_more",
6729 "futures 0.3.15",7061 "futures 0.3.16",
6730 "futures-timer 3.0.2",7062 "futures-timer 3.0.2",
6731 "kvdb",7063 "kvdb",
7064 "lru",
6732 "merlin",7065 "merlin",
6733 "parity-scale-codec 2.1.3",7066 "parity-scale-codec",
6734 "polkadot-node-jaeger",7067 "polkadot-node-jaeger",
6735 "polkadot-node-primitives",7068 "polkadot-node-primitives",
6736 "polkadot-node-subsystem",7069 "polkadot-node-subsystem",
6751[[package]]7084[[package]]
6752name = "polkadot-node-core-av-store"7085name = "polkadot-node-core-av-store"
6753version = "0.1.0"7086version = "0.1.0"
6754source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"7087source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
6755dependencies = [7088dependencies = [
6756 "bitvec 0.20.4",7089 "bitvec 0.20.4",
6757 "futures 0.3.15",7090 "futures 0.3.16",
6758 "futures-timer 3.0.2",7091 "futures-timer 3.0.2",
6759 "kvdb",7092 "kvdb",
6760 "parity-scale-codec 2.1.3",7093 "parity-scale-codec",
6761 "polkadot-erasure-coding",7094 "polkadot-erasure-coding",
6762 "polkadot-node-primitives",7095 "polkadot-node-primitives",
6763 "polkadot-node-subsystem",7096 "polkadot-node-subsystem",
6771[[package]]7104[[package]]
6772name = "polkadot-node-core-backing"7105name = "polkadot-node-core-backing"
6773version = "0.1.0"7106version = "0.1.0"
6774source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"7107source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
6775dependencies = [7108dependencies = [
6776 "bitvec 0.20.4",7109 "bitvec 0.20.4",
6777 "futures 0.3.15",7110 "futures 0.3.16",
6778 "polkadot-erasure-coding",7111 "polkadot-erasure-coding",
6779 "polkadot-node-primitives",7112 "polkadot-node-primitives",
6780 "polkadot-node-subsystem",7113 "polkadot-node-subsystem",
6789[[package]]7122[[package]]
6790name = "polkadot-node-core-bitfield-signing"7123name = "polkadot-node-core-bitfield-signing"
6791version = "0.1.0"7124version = "0.1.0"
6792source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"7125source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
6793dependencies = [7126dependencies = [
6794 "futures 0.3.15",7127 "futures 0.3.16",
6795 "polkadot-node-subsystem",7128 "polkadot-node-subsystem",
6796 "polkadot-node-subsystem-util",7129 "polkadot-node-subsystem-util",
6797 "polkadot-primitives",7130 "polkadot-primitives",
6804[[package]]7137[[package]]
6805name = "polkadot-node-core-candidate-validation"7138name = "polkadot-node-core-candidate-validation"
6806version = "0.1.0"7139version = "0.1.0"
6807source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"7140source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
6808dependencies = [7141dependencies = [
6809 "async-trait",7142 "async-trait",
6810 "futures 0.3.15",7143 "futures 0.3.16",
6811 "parity-scale-codec 2.1.3",7144 "parity-scale-codec",
6812 "polkadot-node-core-pvf",7145 "polkadot-node-core-pvf",
6813 "polkadot-node-primitives",7146 "polkadot-node-primitives",
6814 "polkadot-node-subsystem",7147 "polkadot-node-subsystem",
6822[[package]]7155[[package]]
6823name = "polkadot-node-core-chain-api"7156name = "polkadot-node-core-chain-api"
6824version = "0.1.0"7157version = "0.1.0"
6825source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"7158source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
6826dependencies = [7159dependencies = [
6827 "futures 0.3.15",7160 "futures 0.3.16",
6828 "polkadot-node-subsystem",7161 "polkadot-node-subsystem",
6829 "polkadot-node-subsystem-util",7162 "polkadot-node-subsystem-util",
6830 "polkadot-primitives",7163 "polkadot-primitives",
7164 "sc-client-api",
7165 "sc-consensus-babe",
6831 "sp-blockchain",7166 "sp-blockchain",
6832 "tracing",7167 "tracing",
6833]7168]
68347169
6835[[package]]7170[[package]]
6836name = "polkadot-node-core-parachains-inherent"7171name = "polkadot-node-core-parachains-inherent"
6837version = "0.1.0"7172version = "0.1.0"
6838source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"7173source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
6839dependencies = [7174dependencies = [
6840 "async-trait",7175 "async-trait",
6841 "futures 0.3.15",7176 "futures 0.3.16",
6842 "futures-timer 3.0.2",7177 "futures-timer 3.0.2",
6843 "polkadot-node-subsystem",7178 "polkadot-node-subsystem",
6844 "polkadot-overseer",7179 "polkadot-overseer",
6853[[package]]7188[[package]]
6854name = "polkadot-node-core-provisioner"7189name = "polkadot-node-core-provisioner"
6855version = "0.1.0"7190version = "0.1.0"
6856source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"7191source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
6857dependencies = [7192dependencies = [
6858 "bitvec 0.20.4",7193 "bitvec 0.20.4",
6859 "futures 0.3.15",7194 "futures 0.3.16",
6860 "futures-timer 3.0.2",7195 "futures-timer 3.0.2",
6861 "polkadot-node-subsystem",7196 "polkadot-node-subsystem",
6862 "polkadot-node-subsystem-util",7197 "polkadot-node-subsystem-util",
6868[[package]]7203[[package]]
6869name = "polkadot-node-core-pvf"7204name = "polkadot-node-core-pvf"
6870version = "0.1.0"7205version = "0.1.0"
6871source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"7206source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
6872dependencies = [7207dependencies = [
6873 "always-assert",7208 "always-assert",
6874 "assert_matches",7209 "assert_matches",
6875 "async-process",7210 "async-process",
6876 "async-std",7211 "async-std",
6877 "futures 0.3.15",7212 "futures 0.3.16",
6878 "futures-timer 3.0.2",7213 "futures-timer 3.0.2",
6879 "libc",7214 "libc",
6880 "parity-scale-codec 2.1.3",7215 "parity-scale-codec",
6881 "pin-project 1.0.7",7216 "pin-project 1.0.8",
6882 "polkadot-core-primitives",7217 "polkadot-core-primitives",
6883 "polkadot-parachain",7218 "polkadot-parachain",
6884 "rand 0.8.4",7219 "rand 0.8.4",
6889 "sp-core",7224 "sp-core",
6890 "sp-externalities",7225 "sp-externalities",
6891 "sp-io",7226 "sp-io",
7227 "sp-maybe-compressed-blob",
6892 "sp-wasm-interface",7228 "sp-wasm-interface",
6893 "tracing",7229 "tracing",
6894]7230]
68957231
6896[[package]]7232[[package]]
6897name = "polkadot-node-core-runtime-api"7233name = "polkadot-node-core-runtime-api"
6898version = "0.1.0"7234version = "0.1.0"
6899source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"7235source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
6900dependencies = [7236dependencies = [
6901 "futures 0.3.15",7237 "futures 0.3.16",
6902 "memory-lru",7238 "memory-lru",
6903 "parity-util-mem",7239 "parity-util-mem",
6904 "polkadot-node-subsystem",7240 "polkadot-node-subsystem",
6914[[package]]7250[[package]]
6915name = "polkadot-node-jaeger"7251name = "polkadot-node-jaeger"
6916version = "0.1.0"7252version = "0.1.0"
6917source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"7253source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
6918dependencies = [7254dependencies = [
6919 "async-std",7255 "async-std",
6920 "lazy_static",7256 "lazy_static",
6921 "log",7257 "log",
6922 "mick-jaeger",7258 "mick-jaeger",
6923 "parity-scale-codec 2.1.3",7259 "parity-scale-codec",
6924 "parking_lot 0.11.1",7260 "parking_lot 0.11.1",
6925 "polkadot-node-primitives",7261 "polkadot-node-primitives",
6926 "polkadot-primitives",7262 "polkadot-primitives",
6932[[package]]7268[[package]]
6933name = "polkadot-node-network-protocol"7269name = "polkadot-node-network-protocol"
6934version = "0.1.0"7270version = "0.1.0"
6935source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"7271source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
6936dependencies = [7272dependencies = [
6937 "futures 0.3.15",7273 "futures 0.3.16",
6938 "parity-scale-codec 2.1.3",7274 "parity-scale-codec",
6939 "polkadot-node-jaeger",7275 "polkadot-node-jaeger",
6940 "polkadot-node-primitives",7276 "polkadot-node-primitives",
6941 "polkadot-primitives",7277 "polkadot-primitives",
6947[[package]]7283[[package]]
6948name = "polkadot-node-primitives"7284name = "polkadot-node-primitives"
6949version = "0.1.0"7285version = "0.1.0"
6950source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"7286source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
6951dependencies = [7287dependencies = [
6952 "futures 0.3.15",7288 "futures 0.3.16",
6953 "parity-scale-codec 2.1.3",7289 "parity-scale-codec",
6954 "polkadot-parachain",7290 "polkadot-parachain",
6955 "polkadot-primitives",7291 "polkadot-primitives",
6956 "polkadot-statement-table",7292 "polkadot-statement-table",
6970[[package]]7306[[package]]
6971name = "polkadot-node-subsystem"7307name = "polkadot-node-subsystem"
6972version = "0.1.0"7308version = "0.1.0"
6973source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"7309source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
6974dependencies = [7310dependencies = [
6975 "async-std",7311 "async-std",
6976 "async-trait",7312 "async-trait",
6977 "derive_more",7313 "derive_more",
6978 "futures 0.3.15",7314 "futures 0.3.16",
6979 "futures-timer 3.0.2",7315 "futures-timer 3.0.2",
6980 "lazy_static",7316 "lazy_static",
6981 "log",7317 "log",
6982 "mick-jaeger",7318 "mick-jaeger",
6983 "parity-scale-codec 2.1.3",7319 "parity-scale-codec",
6984 "parking_lot 0.11.1",7320 "parking_lot 0.11.1",
6985 "pin-project 1.0.7",7321 "pin-project 1.0.8",
6986 "polkadot-node-jaeger",7322 "polkadot-node-jaeger",
6987 "polkadot-node-network-protocol",7323 "polkadot-node-network-protocol",
6988 "polkadot-node-primitives",7324 "polkadot-node-primitives",
7000[[package]]7336[[package]]
7001name = "polkadot-node-subsystem-util"7337name = "polkadot-node-subsystem-util"
7002version = "0.1.0"7338version = "0.1.0"
7003source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"7339source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
7004dependencies = [7340dependencies = [
7005 "async-trait",7341 "async-trait",
7006 "futures 0.3.15",7342 "futures 0.3.16",
7007 "futures-timer 3.0.2",7343 "futures-timer 3.0.2",
7344 "itertools 0.10.1",
7008 "lru",7345 "lru",
7009 "metered-channel",7346 "metered-channel",
7010 "parity-scale-codec 2.1.3",7347 "parity-scale-codec",
7011 "pin-project 1.0.7",7348 "pin-project 1.0.8",
7012 "polkadot-node-jaeger",7349 "polkadot-node-jaeger",
7013 "polkadot-node-network-protocol",7350 "polkadot-node-network-protocol",
7014 "polkadot-node-primitives",7351 "polkadot-node-primitives",
7019 "sp-application-crypto",7356 "sp-application-crypto",
7020 "sp-core",7357 "sp-core",
7021 "sp-keystore",7358 "sp-keystore",
7022 "streamunordered",
7023 "substrate-prometheus-endpoint",7359 "substrate-prometheus-endpoint",
7024 "thiserror",7360 "thiserror",
7025 "tracing",7361 "tracing",
7028[[package]]7364[[package]]
7029name = "polkadot-overseer"7365name = "polkadot-overseer"
7030version = "0.1.0"7366version = "0.1.0"
7031source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"7367source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
7032dependencies = [7368dependencies = [
7033 "async-trait",7369 "async-trait",
7034 "futures 0.3.15",7370 "futures 0.3.16",
7035 "futures-timer 3.0.2",7371 "futures-timer 3.0.2",
7036 "lru",7372 "lru",
7037 "polkadot-node-primitives",7373 "polkadot-node-primitives",
70467382
7047[[package]]7383[[package]]
7048name = "polkadot-parachain"7384name = "polkadot-parachain"
7049version = "0.9.7"7385version = "0.9.8"
7050source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"7386source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
7051dependencies = [7387dependencies = [
7052 "derive_more",7388 "derive_more",
7053 "parity-scale-codec 2.1.3",7389 "parity-scale-codec",
7054 "parity-util-mem",7390 "parity-util-mem",
7055 "polkadot-core-primitives",7391 "polkadot-core-primitives",
7056 "serde",7392 "serde",
70617397
7062[[package]]7398[[package]]
7063name = "polkadot-primitives"7399name = "polkadot-primitives"
7064version = "0.9.7"7400version = "0.9.8"
7065source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"7401source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
7066dependencies = [7402dependencies = [
7067 "bitvec 0.20.4",7403 "bitvec 0.20.4",
7068 "frame-system",7404 "frame-system",
7069 "hex-literal",7405 "hex-literal",
7070 "parity-scale-codec 2.1.3",7406 "parity-scale-codec",
7071 "parity-util-mem",7407 "parity-util-mem",
7072 "polkadot-core-primitives",7408 "polkadot-core-primitives",
7073 "polkadot-parachain",7409 "polkadot-parachain",
7092[[package]]7428[[package]]
7093name = "polkadot-procmacro-overseer-subsystems-gen"7429name = "polkadot-procmacro-overseer-subsystems-gen"
7094version = "0.1.0"7430version = "0.1.0"
7095source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"7431source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
7096dependencies = [7432dependencies = [
7097 "assert_matches",7433 "assert_matches",
7098 "proc-macro2",7434 "proc-macro2",
7103[[package]]7439[[package]]
7104name = "polkadot-procmacro-subsystem-dispatch-gen"7440name = "polkadot-procmacro-subsystem-dispatch-gen"
7105version = "0.1.0"7441version = "0.1.0"
7106source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"7442source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
7107dependencies = [7443dependencies = [
7108 "assert_matches",7444 "assert_matches",
7109 "proc-macro2",7445 "proc-macro2",
71137449
7114[[package]]7450[[package]]
7115name = "polkadot-rpc"7451name = "polkadot-rpc"
7116version = "0.9.7"7452version = "0.9.8"
7117source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"7453source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
7118dependencies = [7454dependencies = [
7119 "beefy-gadget",7455 "beefy-gadget",
7120 "beefy-gadget-rpc",7456 "beefy-gadget-rpc",
7121 "jsonrpc-core 15.1.0",7457 "jsonrpc-core 15.1.0",
7122 "pallet-mmr-rpc",7458 "pallet-mmr-rpc",
7123 "pallet-transaction-payment-rpc",7459 "pallet-transaction-payment-rpc",
7124 "parity-scale-codec 2.1.3",7460 "parity-scale-codec",
7125 "polkadot-primitives",7461 "polkadot-primitives",
7126 "sc-chain-spec",7462 "sc-chain-spec",
7127 "sc-client-api",7463 "sc-client-api",
71467482
7147[[package]]7483[[package]]
7148name = "polkadot-runtime"7484name = "polkadot-runtime"
7149version = "0.9.7"7485version = "0.9.8"
7150source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"7486source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
7151dependencies = [7487dependencies = [
7152 "beefy-primitives",7488 "beefy-primitives",
7153 "bitvec 0.20.4",7489 "bitvec 0.20.4",
7490 "frame-benchmarking",
7154 "frame-election-provider-support",7491 "frame-election-provider-support",
7155 "frame-executive",7492 "frame-executive",
7156 "frame-support",7493 "frame-support",
7157 "frame-system",7494 "frame-system",
7495 "frame-system-benchmarking",
7158 "frame-system-rpc-runtime-api",7496 "frame-system-rpc-runtime-api",
7159 "frame-try-runtime",7497 "frame-try-runtime",
7498 "hex-literal",
7160 "log",7499 "log",
7161 "max-encoded-len",7500 "max-encoded-len",
7162 "pallet-authority-discovery",7501 "pallet-authority-discovery",
7177 "pallet-multisig",7516 "pallet-multisig",
7178 "pallet-nicks",7517 "pallet-nicks",
7179 "pallet-offences",7518 "pallet-offences",
7519 "pallet-offences-benchmarking",
7180 "pallet-proxy",7520 "pallet-proxy",
7181 "pallet-randomness-collective-flip",7521 "pallet-scheduler 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8)",
7182 "pallet-scheduler 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7)",
7183 "pallet-session",7522 "pallet-session",
7523 "pallet-session-benchmarking",
7184 "pallet-staking",7524 "pallet-staking",
7185 "pallet-staking-reward-curve",7525 "pallet-staking-reward-curve",
7186 "pallet-timestamp",7526 "pallet-timestamp",
7190 "pallet-treasury",7530 "pallet-treasury",
7191 "pallet-utility",7531 "pallet-utility",
7192 "pallet-vesting",7532 "pallet-vesting",
7193 "parity-scale-codec 2.1.3",7533 "parity-scale-codec",
7194 "polkadot-primitives",7534 "polkadot-primitives",
7195 "polkadot-runtime-common",7535 "polkadot-runtime-common",
7196 "rustc-hex",7536 "rustc-hex",
7213 "sp-transaction-pool",7553 "sp-transaction-pool",
7214 "sp-version",7554 "sp-version",
7215 "static_assertions",7555 "static_assertions",
7216 "substrate-wasm-builder 3.0.0",7556 "substrate-wasm-builder 4.0.0 (git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8)",
7217]7557]
72187558
7219[[package]]7559[[package]]
7220name = "polkadot-runtime-common"7560name = "polkadot-runtime-common"
7221version = "0.9.7"7561version = "0.9.8"
7222source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"7562source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
7223dependencies = [7563dependencies = [
7224 "beefy-primitives",7564 "beefy-primitives",
7225 "bitvec 0.20.4",7565 "bitvec 0.20.4",
7566 "frame-benchmarking",
7226 "frame-support",7567 "frame-support",
7227 "frame-system",7568 "frame-system",
7228 "impl-trait-for-tuples 0.2.1",7569 "impl-trait-for-tuples",
7229 "libsecp256k1 0.3.5",7570 "libsecp256k1 0.3.5",
7230 "log",7571 "log",
7231 "pallet-authorship",7572 "pallet-authorship",
7573 "pallet-babe",
7232 "pallet-balances",7574 "pallet-balances",
7233 "pallet-beefy",7575 "pallet-beefy",
7576 "pallet-election-provider-multi-phase",
7234 "pallet-mmr",7577 "pallet-mmr",
7235 "pallet-offences",7578 "pallet-offences",
7236 "pallet-session",7579 "pallet-session",
7239 "pallet-transaction-payment",7582 "pallet-transaction-payment",
7240 "pallet-treasury",7583 "pallet-treasury",
7241 "pallet-vesting",7584 "pallet-vesting",
7242 "parity-scale-codec 2.1.3",7585 "parity-scale-codec",
7243 "polkadot-primitives",7586 "polkadot-primitives",
7244 "polkadot-runtime-parachains",7587 "polkadot-runtime-parachains",
7245 "rustc-hex",7588 "rustc-hex",
72607603
7261[[package]]7604[[package]]
7262name = "polkadot-runtime-parachains"7605name = "polkadot-runtime-parachains"
7263version = "0.9.7"7606version = "0.9.8"
7264source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"7607source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
7265dependencies = [7608dependencies = [
7266 "bitvec 0.20.4",7609 "bitvec 0.20.4",
7267 "derive_more",7610 "derive_more",
7611 "frame-benchmarking",
7268 "frame-support",7612 "frame-support",
7269 "frame-system",7613 "frame-system",
7614 "libsecp256k1 0.3.5",
7270 "log",7615 "log",
7271 "pallet-authority-discovery",7616 "pallet-authority-discovery",
7272 "pallet-authorship",7617 "pallet-authorship",
7276 "pallet-staking",7621 "pallet-staking",
7277 "pallet-timestamp",7622 "pallet-timestamp",
7278 "pallet-vesting",7623 "pallet-vesting",
7279 "parity-scale-codec 2.1.3",7624 "parity-scale-codec",
7280 "polkadot-primitives",7625 "polkadot-primitives",
7281 "rand 0.8.4",7626 "rand 0.8.4",
7282 "rand_chacha 0.3.1",7627 "rand_chacha 0.3.1",
72977642
7298[[package]]7643[[package]]
7299name = "polkadot-service"7644name = "polkadot-service"
7300version = "0.9.7"7645version = "0.9.8"
7301source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"7646source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
7302dependencies = [7647dependencies = [
7648 "async-trait",
7303 "beefy-gadget",7649 "beefy-gadget",
7304 "beefy-primitives",7650 "beefy-primitives",
7305 "frame-system-rpc-runtime-api",7651 "frame-system-rpc-runtime-api",
7306 "futures 0.3.15",7652 "futures 0.3.16",
7307 "hex-literal",7653 "hex-literal",
7654 "kusama-runtime",
7308 "kvdb",7655 "kvdb",
7309 "kvdb-rocksdb",7656 "kvdb-rocksdb",
7310 "pallet-babe",7657 "pallet-babe",
7340 "polkadot-runtime",7687 "polkadot-runtime",
7341 "polkadot-runtime-parachains",7688 "polkadot-runtime-parachains",
7342 "polkadot-statement-distribution",7689 "polkadot-statement-distribution",
7690 "rococo-runtime",
7343 "sc-authority-discovery",7691 "sc-authority-discovery",
7344 "sc-basic-authorship",7692 "sc-basic-authorship",
7345 "sc-block-builder",7693 "sc-block-builder",
7381 "substrate-prometheus-endpoint",7729 "substrate-prometheus-endpoint",
7382 "thiserror",7730 "thiserror",
7383 "tracing",7731 "tracing",
7732 "westend-runtime",
7384]7733]
73857734
7386[[package]]7735[[package]]
7387name = "polkadot-statement-distribution"7736name = "polkadot-statement-distribution"
7388version = "0.1.0"7737version = "0.1.0"
7389source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"7738source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
7390dependencies = [7739dependencies = [
7391 "arrayvec 0.5.2",7740 "arrayvec 0.5.2",
7392 "futures 0.3.15",7741 "futures 0.3.16",
7393 "indexmap",7742 "indexmap",
7394 "parity-scale-codec 2.1.3",7743 "parity-scale-codec",
7395 "polkadot-node-network-protocol",7744 "polkadot-node-network-protocol",
7396 "polkadot-node-primitives",7745 "polkadot-node-primitives",
7397 "polkadot-node-subsystem",7746 "polkadot-node-subsystem",
74067755
7407[[package]]7756[[package]]
7408name = "polkadot-statement-table"7757name = "polkadot-statement-table"
7409version = "0.9.7"7758version = "0.9.8"
7410source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"7759source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
7411dependencies = [7760dependencies = [
7412 "parity-scale-codec 2.1.3",7761 "parity-scale-codec",
7413 "polkadot-primitives",7762 "polkadot-primitives",
7414 "sp-core",7763 "sp-core",
7415]7764]
74167765
7417[[package]]7766[[package]]
7418name = "polkadot-test-runtime"7767name = "polkadot-test-runtime"
7419version = "0.9.7"7768version = "0.9.8"
7420source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"7769source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
7421dependencies = [7770dependencies = [
7422 "beefy-primitives",7771 "beefy-primitives",
7423 "bitvec 0.20.4",7772 "bitvec 0.20.4",
7436 "pallet-mmr-primitives",7785 "pallet-mmr-primitives",
7437 "pallet-nicks",7786 "pallet-nicks",
7438 "pallet-offences",7787 "pallet-offences",
7439 "pallet-randomness-collective-flip",
7440 "pallet-session",7788 "pallet-session",
7441 "pallet-staking",7789 "pallet-staking",
7442 "pallet-staking-reward-curve",7790 "pallet-staking-reward-curve",
7445 "pallet-transaction-payment",7793 "pallet-transaction-payment",
7446 "pallet-transaction-payment-rpc-runtime-api",7794 "pallet-transaction-payment-rpc-runtime-api",
7447 "pallet-vesting",7795 "pallet-vesting",
7448 "parity-scale-codec 2.1.3",7796 "parity-scale-codec",
7449 "polkadot-parachain",7797 "polkadot-parachain",
7450 "polkadot-primitives",7798 "polkadot-primitives",
7451 "polkadot-runtime-common",7799 "polkadot-runtime-common",
7468 "sp-std",7816 "sp-std",
7469 "sp-transaction-pool",7817 "sp-transaction-pool",
7470 "sp-version",7818 "sp-version",
7471 "substrate-wasm-builder 3.0.0",7819 "substrate-wasm-builder 4.0.0 (git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8)",
7472]7820]
74737821
7474[[package]]7822[[package]]
7475name = "polkadot-test-service"7823name = "polkadot-test-service"
7476version = "0.9.7"7824version = "0.9.8"
7477source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"7825source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
7478dependencies = [7826dependencies = [
7479 "frame-benchmarking",7827 "frame-benchmarking",
7480 "frame-system",7828 "frame-system",
7481 "futures 0.1.31",7829 "futures 0.1.31",
7482 "futures 0.3.15",7830 "futures 0.3.16",
7483 "hex",7831 "hex",
7484 "pallet-balances",7832 "pallet-balances",
7485 "pallet-staking",7833 "pallet-staking",
75657913
7566[[package]]7914[[package]]
7567name = "primitive-types"7915name = "primitive-types"
7568version = "0.7.3"7916version = "0.9.1"
7569source = "registry+https://github.com/rust-lang/crates.io-index"7917source = "registry+https://github.com/rust-lang/crates.io-index"
7570checksum = "7dd39dcacf71411ba488570da7bbc89b717225e46478b30ba99b92db6b149809"7918checksum = "06345ee39fbccfb06ab45f3a1a5798d9dafa04cb8921a76d227040003a234b0e"
7571dependencies = [7919dependencies = [
7572 "fixed-hash 0.6.1",7920 "fixed-hash",
7573 "impl-codec 0.4.2",7921 "impl-codec",
7574 "impl-rlp 0.2.1",7922 "impl-rlp",
7575 "impl-serde",7923 "impl-serde",
7576 "uint 0.8.5",7924 "uint",
7577]7925]
75787926
7579[[package]]7927[[package]]
7580name = "primitive-types"
7581version = "0.9.0"
7582source = "registry+https://github.com/rust-lang/crates.io-index"
7583checksum = "2415937401cb030a2a0a4d922483f945fa068f52a7dbb22ce0fe5f2b6f6adace"
7584dependencies = [
7585 "fixed-hash 0.7.0",
7586 "impl-codec 0.5.0",
7587 "impl-rlp 0.3.0",
7588 "impl-serde",
7589 "uint 0.9.0",
7590]
7591
7592[[package]]
7593name = "proc-macro-crate"7928name = "proc-macro-crate"
7594version = "0.1.5"7929version = "0.1.5"
7595source = "registry+https://github.com/rust-lang/crates.io-index"7930source = "registry+https://github.com/rust-lang/crates.io-index"
76467981
7647[[package]]7982[[package]]
7648name = "proc-macro2"7983name = "proc-macro2"
7649version = "1.0.27"7984version = "1.0.28"
7650source = "registry+https://github.com/rust-lang/crates.io-index"7985source = "registry+https://github.com/rust-lang/crates.io-index"
7651checksum = "f0d8caf72986c1a598726adc988bb5984792ef84f5ee5aa50209145ee8077038"7986checksum = "5c7ed8b8c7b886ea3ed7dde405212185f423ab44682667c8c6dd14aa1d9f6612"
7652dependencies = [7987dependencies = [
7653 "unicode-xid",7988 "unicode-xid",
7654]7989]
77208055
7721[[package]]8056[[package]]
7722name = "psm"8057name = "psm"
7723version = "0.1.13"8058version = "0.1.14"
7724source = "registry+https://github.com/rust-lang/crates.io-index"8059source = "registry+https://github.com/rust-lang/crates.io-index"
7725checksum = "21ff0279b4a85e576b97e4a21d13e437ebcd56612706cde5d3f0d5c9399490c0"8060checksum = "14ce37fa8c0428a37307d163292add09b3aedc003472e6b3622486878404191d"
7726dependencies = [8061dependencies = [
7727 "cc",8062 "cc",
7728]8063]
77728107
7773[[package]]8108[[package]]
7774name = "radium"8109name = "radium"
7775version = "0.3.0"8110version = "0.5.3"
7776source = "registry+https://github.com/rust-lang/crates.io-index"8111source = "registry+https://github.com/rust-lang/crates.io-index"
7777checksum = "def50a86306165861203e7f84ecffbbdfdea79f0e51039b33de1e952358c47ac"8112checksum = "941ba9d78d8e2f7ce474c015eea4d9c6d25b6a3327f9832ee29a4de27f91bbb8"
77788113
7779[[package]]8114[[package]]
7780name = "radium"8115name = "radium"
8072[[package]]8407[[package]]
8073name = "remote-externalities"8408name = "remote-externalities"
8074version = "0.9.0"8409version = "0.9.0"
8075source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"8410source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
8076dependencies = [8411dependencies = [
8077 "env_logger 0.8.4",8412 "env_logger 0.8.4",
8078 "hex",8413 "hex",
8079 "jsonrpsee-proc-macros",8414 "jsonrpsee-proc-macros",
8080 "jsonrpsee-ws-client",8415 "jsonrpsee-ws-client",
8081 "log",8416 "log",
8082 "parity-scale-codec 2.1.3",8417 "parity-scale-codec",
8083 "serde",8418 "serde",
8084 "serde_json",8419 "serde_json",
8085 "sp-core",8420 "sp-core",
81298464
8130[[package]]8465[[package]]
8131name = "rlp"8466name = "rlp"
8132version = "0.4.6"
8133source = "registry+https://github.com/rust-lang/crates.io-index"
8134checksum = "1190dcc8c3a512f1eef5d09bb8c84c7f39e1054e174d1795482e18f5272f2e73"
8135dependencies = [
8136 "rustc-hex",
8137]
8138
8139[[package]]
8140name = "rlp"
8141version = "0.5.0"8467version = "0.5.0"
8142source = "registry+https://github.com/rust-lang/crates.io-index"8468source = "registry+https://github.com/rust-lang/crates.io-index"
8143checksum = "e54369147e3e7796c9b885c7304db87ca3d09a0a98f72843d532868675bbfba8"8469checksum = "e54369147e3e7796c9b885c7304db87ca3d09a0a98f72843d532868675bbfba8"
8168]8494]
81698495
8170[[package]]8496[[package]]
8497name = "rococo-runtime"
8498version = "0.9.8"
8499source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
8500dependencies = [
8501 "beefy-primitives",
8502 "bp-rococo",
8503 "bp-wococo",
8504 "frame-executive",
8505 "frame-support",
8506 "frame-system",
8507 "frame-system-rpc-runtime-api",
8508 "hex-literal",
8509 "log",
8510 "max-encoded-len",
8511 "pallet-authority-discovery",
8512 "pallet-authorship",
8513 "pallet-babe",
8514 "pallet-balances",
8515 "pallet-beefy",
8516 "pallet-bridge-grandpa",
8517 "pallet-collective",
8518 "pallet-grandpa",
8519 "pallet-im-online",
8520 "pallet-indices",
8521 "pallet-membership",
8522 "pallet-mmr",
8523 "pallet-mmr-primitives",
8524 "pallet-offences",
8525 "pallet-proxy",
8526 "pallet-session",
8527 "pallet-staking",
8528 "pallet-staking-reward-curve",
8529 "pallet-sudo",
8530 "pallet-timestamp",
8531 "pallet-transaction-payment",
8532 "pallet-transaction-payment-rpc-runtime-api",
8533 "pallet-utility",
8534 "pallet-xcm",
8535 "parity-scale-codec",
8536 "polkadot-parachain",
8537 "polkadot-primitives",
8538 "polkadot-runtime-common",
8539 "polkadot-runtime-parachains",
8540 "serde",
8541 "serde_derive",
8542 "smallvec 1.6.1",
8543 "sp-api",
8544 "sp-authority-discovery",
8545 "sp-block-builder",
8546 "sp-consensus-babe",
8547 "sp-core",
8548 "sp-inherents",
8549 "sp-io",
8550 "sp-offchain",
8551 "sp-runtime",
8552 "sp-session",
8553 "sp-staking",
8554 "sp-std",
8555 "sp-transaction-pool",
8556 "sp-version",
8557 "substrate-wasm-builder 4.0.0 (git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8)",
8558 "xcm",
8559 "xcm-builder",
8560 "xcm-executor",
8561]
8562
8563[[package]]
8171name = "rpassword"8564name = "rpassword"
8172version = "5.0.1"8565version = "5.0.1"
8173source = "registry+https://github.com/rust-lang/crates.io-index"8566source = "registry+https://github.com/rust-lang/crates.io-index"
81798572
8180[[package]]8573[[package]]
8181name = "rustc-demangle"8574name = "rustc-demangle"
8182version = "0.1.19"8575version = "0.1.20"
8183source = "registry+https://github.com/rust-lang/crates.io-index"8576source = "registry+https://github.com/rust-lang/crates.io-index"
8184checksum = "410f7acf3cb3a44527c5d9546bad4bf4e6c460915d5f9f2fc524498bfe8f70ce"8577checksum = "dead70b0b5e03e9c814bcb6b01e03e68f7c57a80aa48c72ec92152ab3e818d49"
81858578
8186[[package]]8579[[package]]
8187name = "rustc-hash"8580name = "rustc-hash"
8205]8598]
82068599
8207[[package]]8600[[package]]
8601name = "rustc_version"
8602version = "0.3.3"
8603source = "registry+https://github.com/rust-lang/crates.io-index"
8604checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee"
8605dependencies = [
8606 "semver 0.11.0",
8607]
8608
8609[[package]]
8208name = "rustls"8610name = "rustls"
8209version = "0.18.1"8611version = "0.18.1"
8210source = "registry+https://github.com/rust-lang/crates.io-index"8612source = "registry+https://github.com/rust-lang/crates.io-index"
82568658
8257[[package]]8659[[package]]
8258name = "ruzstd"8660name = "ruzstd"
8259version = "0.2.2"8661version = "0.2.4"
8260source = "registry+https://github.com/rust-lang/crates.io-index"8662source = "registry+https://github.com/rust-lang/crates.io-index"
8261checksum = "3d425143485a37727c7a46e689bbe3b883a00f42b4a52c4ac0f44855c1009b00"8663checksum = "8cada0ef59efa6a5f4dc5e491f93d9f31e3fc7758df421ff1de8a706338e1100"
8262dependencies = [8664dependencies = [
8263 "byteorder",8665 "byteorder",
8264 "twox-hash",8666 "twox-hash",
8270source = "registry+https://github.com/rust-lang/crates.io-index"8672source = "registry+https://github.com/rust-lang/crates.io-index"
8271checksum = "4da5fcb054c46f5a5dff833b129285a93d3f0179531735e6c866e8cc307d2020"8673checksum = "4da5fcb054c46f5a5dff833b129285a93d3f0179531735e6c866e8cc307d2020"
8272dependencies = [8674dependencies = [
8273 "futures 0.3.15",8675 "futures 0.3.16",
8274 "pin-project 0.4.28",8676 "pin-project 0.4.28",
8275 "static_assertions",8677 "static_assertions",
8276]8678]
8287source = "registry+https://github.com/rust-lang/crates.io-index"8689source = "registry+https://github.com/rust-lang/crates.io-index"
8288checksum = "6d3d055a2582e6b00ed7a31c1524040aa391092bf636328350813f3a0605215c"8690checksum = "6d3d055a2582e6b00ed7a31c1524040aa391092bf636328350813f3a0605215c"
8289dependencies = [8691dependencies = [
8290 "rustc_version",8692 "rustc_version 0.2.3",
8291]8693]
82928694
8293[[package]]8695[[package]]
8309]8711]
83108712
8311[[package]]8713[[package]]
8714name = "sc-allocator"
8715version = "3.0.0"
8716source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
8717dependencies = [
8718 "log",
8719 "sp-core",
8720 "sp-std",
8721 "sp-wasm-interface",
8722 "thiserror",
8723]
8724
8725[[package]]
8312name = "sc-authority-discovery"8726name = "sc-authority-discovery"
8313version = "0.9.0"8727version = "0.9.0"
8314source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"8728source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
8315dependencies = [8729dependencies = [
8316 "async-trait",8730 "async-trait",
8317 "derive_more",8731 "derive_more",
8318 "either",8732 "either",
8319 "futures 0.3.15",8733 "futures 0.3.16",
8320 "futures-timer 3.0.2",8734 "futures-timer 3.0.2",
8321 "ip_network",8735 "ip_network",
8322 "libp2p",8736 "libp2p",
8323 "log",8737 "log",
8324 "parity-scale-codec 2.1.3",8738 "parity-scale-codec",
8325 "prost",8739 "prost",
8326 "prost-build",8740 "prost-build",
8327 "rand 0.7.3",8741 "rand 0.7.3",
8340[[package]]8754[[package]]
8341name = "sc-basic-authorship"8755name = "sc-basic-authorship"
8342version = "0.9.0"8756version = "0.9.0"
8343source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"8757source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
8344dependencies = [8758dependencies = [
8345 "futures 0.3.15",8759 "futures 0.3.16",
8346 "futures-timer 3.0.2",8760 "futures-timer 3.0.2",
8347 "log",8761 "log",
8348 "parity-scale-codec 2.1.3",8762 "parity-scale-codec",
8349 "sc-block-builder",8763 "sc-block-builder",
8350 "sc-client-api",8764 "sc-client-api",
8351 "sc-proposer-metrics",8765 "sc-proposer-metrics",
8363[[package]]8777[[package]]
8364name = "sc-block-builder"8778name = "sc-block-builder"
8365version = "0.9.0"8779version = "0.9.0"
8366source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"8780source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
8367dependencies = [8781dependencies = [
8368 "parity-scale-codec 2.1.3",8782 "parity-scale-codec",
8369 "sc-client-api",8783 "sc-client-api",
8370 "sp-api",8784 "sp-api",
8371 "sp-block-builder",8785 "sp-block-builder",
8379[[package]]8793[[package]]
8380name = "sc-chain-spec"8794name = "sc-chain-spec"
8381version = "3.0.0"8795version = "3.0.0"
8382source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"8796source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
8383dependencies = [8797dependencies = [
8384 "impl-trait-for-tuples 0.2.1",8798 "impl-trait-for-tuples",
8385 "parity-scale-codec 2.1.3",8799 "parity-scale-codec",
8386 "sc-chain-spec-derive",8800 "sc-chain-spec-derive",
8387 "sc-consensus-babe",8801 "sc-consensus-babe",
8388 "sc-consensus-epochs",8802 "sc-consensus-epochs",
8391 "sc-telemetry",8805 "sc-telemetry",
8392 "serde",8806 "serde",
8393 "serde_json",8807 "serde_json",
8394 "sp-chain-spec",
8395 "sp-consensus-babe",8808 "sp-consensus-babe",
8396 "sp-core",8809 "sp-core",
8397 "sp-runtime",8810 "sp-runtime",
8400[[package]]8813[[package]]
8401name = "sc-chain-spec-derive"8814name = "sc-chain-spec-derive"
8402version = "3.0.0"8815version = "3.0.0"
8403source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"8816source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
8404dependencies = [8817dependencies = [
8405 "proc-macro-crate 1.0.0",8818 "proc-macro-crate 1.0.0",
8406 "proc-macro2",8819 "proc-macro2",
8411[[package]]8824[[package]]
8412name = "sc-cli"8825name = "sc-cli"
8413version = "0.9.0"8826version = "0.9.0"
8414source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"8827source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
8415dependencies = [8828dependencies = [
8416 "chrono",8829 "chrono",
8417 "fdlimit",8830 "fdlimit",
8418 "futures 0.3.15",8831 "futures 0.3.16",
8419 "hex",8832 "hex",
8420 "libp2p",8833 "libp2p",
8421 "log",8834 "log",
8422 "names",8835 "names",
8423 "parity-scale-codec 2.1.3",8836 "parity-scale-codec",
8424 "rand 0.7.3",8837 "rand 0.7.3",
8425 "regex",8838 "regex",
8426 "rpassword",8839 "rpassword",
8449[[package]]8862[[package]]
8450name = "sc-client-api"8863name = "sc-client-api"
8451version = "3.0.0"8864version = "3.0.0"
8452source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"8865source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
8453dependencies = [8866dependencies = [
8454 "derive_more",8867 "derive_more",
8455 "fnv",8868 "fnv",
8456 "futures 0.3.15",8869 "futures 0.3.16",
8457 "hash-db",8870 "hash-db",
8458 "kvdb",8871 "kvdb",
8459 "lazy_static",8872 "lazy_static",
8460 "log",8873 "log",
8461 "parity-scale-codec 2.1.3",8874 "parity-scale-codec",
8462 "parking_lot 0.11.1",8875 "parking_lot 0.11.1",
8463 "sc-executor",8876 "sc-executor",
8464 "sp-api",8877 "sp-api",
8483[[package]]8896[[package]]
8484name = "sc-client-db"8897name = "sc-client-db"
8485version = "0.9.0"8898version = "0.9.0"
8486source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"8899source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
8487dependencies = [8900dependencies = [
8488 "blake2-rfc",8901 "blake2-rfc",
8489 "hash-db",8902 "hash-db",
8493 "linked-hash-map",8906 "linked-hash-map",
8494 "log",8907 "log",
8495 "parity-db",8908 "parity-db",
8496 "parity-scale-codec 2.1.3",8909 "parity-scale-codec",
8497 "parity-util-mem",8910 "parity-util-mem",
8498 "parking_lot 0.11.1",8911 "parking_lot 0.11.1",
8499 "sc-client-api",8912 "sc-client-api",
8513[[package]]8926[[package]]
8514name = "sc-consensus"8927name = "sc-consensus"
8515version = "0.9.0"8928version = "0.9.0"
8516source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"8929source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
8517dependencies = [8930dependencies = [
8931 "async-trait",
8518 "parking_lot 0.11.1",8932 "parking_lot 0.11.1",
8519 "sc-client-api",8933 "sc-client-api",
8520 "sp-blockchain",8934 "sp-blockchain",
8525[[package]]8939[[package]]
8526name = "sc-consensus-aura"8940name = "sc-consensus-aura"
8527version = "0.9.0"8941version = "0.9.0"
8528source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"8942source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
8529dependencies = [8943dependencies = [
8530 "async-trait",8944 "async-trait",
8531 "derive_more",8945 "derive_more",
8532 "futures 0.3.15",8946 "futures 0.3.16",
8533 "futures-timer 3.0.2",8947 "futures-timer 3.0.2",
8534 "log",8948 "log",
8535 "parity-scale-codec 2.1.3",8949 "parity-scale-codec",
8536 "sc-block-builder",8950 "sc-block-builder",
8537 "sc-client-api",8951 "sc-client-api",
8538 "sc-consensus-slots",8952 "sc-consensus-slots",
8556[[package]]8970[[package]]
8557name = "sc-consensus-babe"8971name = "sc-consensus-babe"
8558version = "0.9.0"8972version = "0.9.0"
8559source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"8973source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
8560dependencies = [8974dependencies = [
8561 "async-trait",8975 "async-trait",
8562 "derive_more",8976 "derive_more",
8563 "fork-tree",8977 "fork-tree",
8564 "futures 0.3.15",8978 "futures 0.3.16",
8565 "futures-timer 3.0.2",8979 "futures-timer 3.0.2",
8566 "log",8980 "log",
8567 "merlin",8981 "merlin",
8568 "num-bigint",8982 "num-bigint",
8569 "num-rational 0.2.4",8983 "num-rational 0.2.4",
8570 "num-traits",8984 "num-traits",
8571 "parity-scale-codec 2.1.3",8985 "parity-scale-codec",
8572 "parking_lot 0.11.1",8986 "parking_lot 0.11.1",
8573 "pdqselect",8987 "pdqselect",
8574 "rand 0.7.3",8988 "rand 0.7.3",
8602[[package]]9016[[package]]
8603name = "sc-consensus-babe-rpc"9017name = "sc-consensus-babe-rpc"
8604version = "0.9.0"9018version = "0.9.0"
8605source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"9019source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
8606dependencies = [9020dependencies = [
8607 "derive_more",9021 "derive_more",
8608 "futures 0.3.15",9022 "futures 0.3.16",
8609 "jsonrpc-core 15.1.0",9023 "jsonrpc-core 15.1.0",
8610 "jsonrpc-core-client 15.1.0",9024 "jsonrpc-core-client 15.1.0",
8611 "jsonrpc-derive 15.1.0",9025 "jsonrpc-derive 15.1.0",
8626[[package]]9040[[package]]
8627name = "sc-consensus-epochs"9041name = "sc-consensus-epochs"
8628version = "0.9.0"9042version = "0.9.0"
8629source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"9043source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
8630dependencies = [9044dependencies = [
8631 "fork-tree",9045 "fork-tree",
8632 "parity-scale-codec 2.1.3",9046 "parity-scale-codec",
8633 "sc-client-api",9047 "sc-client-api",
8634 "sc-consensus",9048 "sc-consensus",
8635 "sp-blockchain",9049 "sp-blockchain",
8639[[package]]9053[[package]]
8640name = "sc-consensus-slots"9054name = "sc-consensus-slots"
8641version = "0.9.0"9055version = "0.9.0"
8642source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"9056source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
8643dependencies = [9057dependencies = [
8644 "async-trait",9058 "async-trait",
8645 "futures 0.3.15",9059 "futures 0.3.16",
8646 "futures-timer 3.0.2",9060 "futures-timer 3.0.2",
8647 "impl-trait-for-tuples 0.2.1",9061 "impl-trait-for-tuples",
8648 "log",9062 "log",
8649 "parity-scale-codec 2.1.3",9063 "parity-scale-codec",
8650 "sc-client-api",9064 "sc-client-api",
8651 "sc-telemetry",9065 "sc-telemetry",
8652 "sp-api",9066 "sp-api",
8667[[package]]9081[[package]]
8668name = "sc-consensus-uncles"9082name = "sc-consensus-uncles"
8669version = "0.9.0"9083version = "0.9.0"
8670source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"9084source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
8671dependencies = [9085dependencies = [
8672 "sc-client-api",9086 "sc-client-api",
8673 "sp-authorship",9087 "sp-authorship",
8678[[package]]9092[[package]]
8679name = "sc-executor"9093name = "sc-executor"
8680version = "0.9.0"9094version = "0.9.0"
8681source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"9095source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
8682dependencies = [9096dependencies = [
8683 "derive_more",9097 "derive_more",
8684 "lazy_static",9098 "lazy_static",
8685 "libsecp256k1 0.3.5",9099 "libsecp256k1 0.3.5",
8686 "log",9100 "log",
8687 "parity-scale-codec 2.1.3",9101 "parity-scale-codec",
8688 "parity-wasm 0.42.2",9102 "parity-wasm 0.42.2",
8689 "parking_lot 0.11.1",9103 "parking_lot 0.11.1",
8690 "sc-executor-common",9104 "sc-executor-common",
8707[[package]]9121[[package]]
8708name = "sc-executor-common"9122name = "sc-executor-common"
8709version = "0.9.0"9123version = "0.9.0"
8710source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"9124source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
8711dependencies = [9125dependencies = [
8712 "derive_more",9126 "derive_more",
8713 "parity-scale-codec 2.1.3",9127 "parity-scale-codec",
8714 "pwasm-utils",9128 "pwasm-utils",
8715 "sp-allocator",9129 "sc-allocator",
8716 "sp-core",9130 "sp-core",
8717 "sp-maybe-compressed-blob",9131 "sp-maybe-compressed-blob",
8718 "sp-serializer",9132 "sp-serializer",
8724[[package]]9138[[package]]
8725name = "sc-executor-wasmi"9139name = "sc-executor-wasmi"
8726version = "0.9.0"9140version = "0.9.0"
8727source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"9141source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
8728dependencies = [9142dependencies = [
8729 "log",9143 "log",
8730 "parity-scale-codec 2.1.3",9144 "parity-scale-codec",
9145 "sc-allocator",
8731 "sc-executor-common",9146 "sc-executor-common",
8732 "sp-allocator",
8733 "sp-core",9147 "sp-core",
8734 "sp-runtime-interface",9148 "sp-runtime-interface",
8735 "sp-wasm-interface",9149 "sp-wasm-interface",
8739[[package]]9153[[package]]
8740name = "sc-executor-wasmtime"9154name = "sc-executor-wasmtime"
8741version = "0.9.0"9155version = "0.9.0"
8742source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"9156source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
8743dependencies = [9157dependencies = [
9158 "cfg-if 1.0.0",
9159 "libc",
8744 "log",9160 "log",
8745 "parity-scale-codec 2.1.3",9161 "parity-scale-codec",
8746 "parity-wasm 0.42.2",9162 "parity-wasm 0.42.2",
9163 "sc-allocator",
8747 "sc-executor-common",9164 "sc-executor-common",
8748 "scoped-tls",9165 "scoped-tls",
8749 "sp-allocator",
8750 "sp-core",9166 "sp-core",
8751 "sp-runtime-interface",9167 "sp-runtime-interface",
8752 "sp-wasm-interface",9168 "sp-wasm-interface",
8756[[package]]9172[[package]]
8757name = "sc-finality-grandpa"9173name = "sc-finality-grandpa"
8758version = "0.9.0"9174version = "0.9.0"
8759source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"9175source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
8760dependencies = [9176dependencies = [
8761 "async-trait",9177 "async-trait",
8762 "derive_more",9178 "derive_more",
8763 "dyn-clone",9179 "dyn-clone",
8764 "finality-grandpa",9180 "finality-grandpa",
8765 "fork-tree",9181 "fork-tree",
8766 "futures 0.3.15",9182 "futures 0.3.16",
8767 "futures-timer 3.0.2",9183 "futures-timer 3.0.2",
8768 "linked-hash-map",9184 "linked-hash-map",
8769 "log",9185 "log",
8770 "parity-scale-codec 2.1.3",9186 "parity-scale-codec",
8771 "parking_lot 0.11.1",9187 "parking_lot 0.11.1",
8772 "pin-project 1.0.7",9188 "pin-project 1.0.8",
8773 "rand 0.7.3",9189 "rand 0.7.3",
8774 "sc-block-builder",9190 "sc-block-builder",
8775 "sc-client-api",9191 "sc-client-api",
8797[[package]]9213[[package]]
8798name = "sc-finality-grandpa-rpc"9214name = "sc-finality-grandpa-rpc"
8799version = "0.9.0"9215version = "0.9.0"
8800source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"9216source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
8801dependencies = [9217dependencies = [
8802 "derive_more",9218 "derive_more",
8803 "finality-grandpa",9219 "finality-grandpa",
8804 "futures 0.3.15",9220 "futures 0.3.16",
8805 "jsonrpc-core 15.1.0",9221 "jsonrpc-core 15.1.0",
8806 "jsonrpc-core-client 15.1.0",9222 "jsonrpc-core-client 15.1.0",
8807 "jsonrpc-derive 15.1.0",9223 "jsonrpc-derive 15.1.0",
8808 "jsonrpc-pubsub 15.1.0",9224 "jsonrpc-pubsub 15.1.0",
8809 "log",9225 "log",
8810 "parity-scale-codec 2.1.3",9226 "parity-scale-codec",
8811 "sc-client-api",9227 "sc-client-api",
8812 "sc-finality-grandpa",9228 "sc-finality-grandpa",
8813 "sc-rpc",9229 "sc-rpc",
8821[[package]]9237[[package]]
8822name = "sc-finality-grandpa-warp-sync"9238name = "sc-finality-grandpa-warp-sync"
8823version = "0.9.0"9239version = "0.9.0"
8824source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"9240source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
8825dependencies = [9241dependencies = [
8826 "derive_more",9242 "derive_more",
8827 "futures 0.3.15",9243 "futures 0.3.16",
8828 "log",9244 "log",
8829 "num-traits",9245 "num-traits",
8830 "parity-scale-codec 2.1.3",9246 "parity-scale-codec",
8831 "parking_lot 0.11.1",9247 "parking_lot 0.11.1",
8832 "prost",9248 "prost",
8833 "sc-client-api",9249 "sc-client-api",
8842[[package]]9258[[package]]
8843name = "sc-informant"9259name = "sc-informant"
8844version = "0.9.0"9260version = "0.9.0"
8845source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"9261source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
8846dependencies = [9262dependencies = [
8847 "ansi_term 0.12.1",9263 "ansi_term 0.12.1",
8848 "futures 0.3.15",9264 "futures 0.3.16",
8849 "futures-timer 3.0.2",9265 "futures-timer 3.0.2",
8850 "log",9266 "log",
8851 "parity-util-mem",9267 "parity-util-mem",
8860[[package]]9276[[package]]
8861name = "sc-keystore"9277name = "sc-keystore"
8862version = "3.0.0"9278version = "3.0.0"
8863source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"9279source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
8864dependencies = [9280dependencies = [
8865 "async-trait",9281 "async-trait",
8866 "derive_more",9282 "derive_more",
8867 "futures 0.3.15",9283 "futures 0.3.16",
8868 "futures-util",9284 "futures-util",
8869 "hex",9285 "hex",
8870 "merlin",9286 "merlin",
8874 "sp-application-crypto",9290 "sp-application-crypto",
8875 "sp-core",9291 "sp-core",
8876 "sp-keystore",9292 "sp-keystore",
8877 "subtle 2.4.0",9293 "subtle 2.4.1",
8878]9294]
88799295
8880[[package]]9296[[package]]
8881name = "sc-light"9297name = "sc-light"
8882version = "3.0.0"9298version = "3.0.0"
8883source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"9299source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
8884dependencies = [9300dependencies = [
8885 "hash-db",9301 "hash-db",
8886 "lazy_static",9302 "lazy_static",
8887 "parity-scale-codec 2.1.3",9303 "parity-scale-codec",
8888 "parking_lot 0.11.1",9304 "parking_lot 0.11.1",
8889 "sc-client-api",9305 "sc-client-api",
8890 "sc-executor",9306 "sc-executor",
8899[[package]]9315[[package]]
8900name = "sc-network"9316name = "sc-network"
8901version = "0.9.0"9317version = "0.9.0"
8902source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"9318source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
8903dependencies = [9319dependencies = [
8904 "async-std",9320 "async-std",
8905 "async-trait",9321 "async-trait",
8913 "erased-serde",9329 "erased-serde",
8914 "fnv",9330 "fnv",
8915 "fork-tree",9331 "fork-tree",
8916 "futures 0.3.15",9332 "futures 0.3.16",
8917 "futures-timer 3.0.2",9333 "futures-timer 3.0.2",
8918 "hex",9334 "hex",
8919 "ip_network",9335 "ip_network",
8923 "log",9339 "log",
8924 "lru",9340 "lru",
8925 "nohash-hasher",9341 "nohash-hasher",
8926 "parity-scale-codec 2.1.3",9342 "parity-scale-codec",
8927 "parking_lot 0.11.1",9343 "parking_lot 0.11.1",
8928 "pin-project 1.0.7",9344 "pin-project 1.0.8",
8929 "prost",9345 "prost",
8930 "prost-build",9346 "prost-build",
8931 "rand 0.7.3",9347 "rand 0.7.3",
8952[[package]]9368[[package]]
8953name = "sc-network-gossip"9369name = "sc-network-gossip"
8954version = "0.9.0"9370version = "0.9.0"
8955source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"9371source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
8956dependencies = [9372dependencies = [
8957 "futures 0.3.15",9373 "futures 0.3.16",
8958 "futures-timer 3.0.2",9374 "futures-timer 3.0.2",
8959 "libp2p",9375 "libp2p",
8960 "log",9376 "log",
8969[[package]]9385[[package]]
8970name = "sc-offchain"9386name = "sc-offchain"
8971version = "3.0.0"9387version = "3.0.0"
8972source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"9388source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
8973dependencies = [9389dependencies = [
8974 "bytes 0.5.6",9390 "bytes 0.5.6",
8975 "fnv",9391 "fnv",
8976 "futures 0.3.15",9392 "futures 0.3.16",
8977 "futures-timer 3.0.2",9393 "futures-timer 3.0.2",
8978 "hex",9394 "hex",
8979 "hyper 0.13.10",9395 "hyper 0.13.10",
8980 "hyper-rustls",9396 "hyper-rustls",
8981 "log",9397 "log",
8982 "num_cpus",9398 "num_cpus",
8983 "parity-scale-codec 2.1.3",9399 "parity-scale-codec",
8984 "parking_lot 0.11.1",9400 "parking_lot 0.11.1",
8985 "rand 0.7.3",9401 "rand 0.7.3",
8986 "sc-client-api",9402 "sc-client-api",
8997[[package]]9413[[package]]
8998name = "sc-peerset"9414name = "sc-peerset"
8999version = "3.0.0"9415version = "3.0.0"
9000source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"9416source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
9001dependencies = [9417dependencies = [
9002 "futures 0.3.15",9418 "futures 0.3.16",
9003 "libp2p",9419 "libp2p",
9004 "log",9420 "log",
9005 "serde_json",9421 "serde_json",
9010[[package]]9426[[package]]
9011name = "sc-proposer-metrics"9427name = "sc-proposer-metrics"
9012version = "0.9.0"9428version = "0.9.0"
9013source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"9429source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
9014dependencies = [9430dependencies = [
9015 "log",9431 "log",
9016 "substrate-prometheus-endpoint",9432 "substrate-prometheus-endpoint",
9019[[package]]9435[[package]]
9020name = "sc-rpc"9436name = "sc-rpc"
9021version = "3.0.0"9437version = "3.0.0"
9022source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"9438source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
9023dependencies = [9439dependencies = [
9024 "futures 0.3.15",9440 "futures 0.3.16",
9025 "hash-db",9441 "hash-db",
9026 "jsonrpc-core 15.1.0",9442 "jsonrpc-core 15.1.0",
9027 "jsonrpc-pubsub 15.1.0",9443 "jsonrpc-pubsub 15.1.0",
9028 "log",9444 "log",
9029 "parity-scale-codec 2.1.3",9445 "parity-scale-codec",
9030 "parking_lot 0.11.1",9446 "parking_lot 0.11.1",
9031 "sc-block-builder",9447 "sc-block-builder",
9448 "sc-chain-spec",
9032 "sc-client-api",9449 "sc-client-api",
9033 "sc-executor",9450 "sc-executor",
9034 "sc-keystore",9451 "sc-keystore",
9037 "serde_json",9454 "serde_json",
9038 "sp-api",9455 "sp-api",
9039 "sp-blockchain",9456 "sp-blockchain",
9040 "sp-chain-spec",
9041 "sp-core",9457 "sp-core",
9042 "sp-keystore",9458 "sp-keystore",
9043 "sp-offchain",9459 "sp-offchain",
9054[[package]]9470[[package]]
9055name = "sc-rpc-api"9471name = "sc-rpc-api"
9056version = "0.9.0"9472version = "0.9.0"
9057source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"9473source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
9058dependencies = [9474dependencies = [
9059 "derive_more",9475 "derive_more",
9060 "futures 0.3.15",9476 "futures 0.3.16",
9061 "jsonrpc-core 15.1.0",9477 "jsonrpc-core 15.1.0",
9062 "jsonrpc-core-client 15.1.0",9478 "jsonrpc-core-client 15.1.0",
9063 "jsonrpc-derive 15.1.0",9479 "jsonrpc-derive 15.1.0",
9064 "jsonrpc-pubsub 15.1.0",9480 "jsonrpc-pubsub 15.1.0",
9065 "log",9481 "log",
9066 "parity-scale-codec 2.1.3",9482 "parity-scale-codec",
9067 "parking_lot 0.11.1",9483 "parking_lot 0.11.1",
9484 "sc-chain-spec",
9068 "serde",9485 "serde",
9069 "serde_json",9486 "serde_json",
9070 "sp-chain-spec",
9071 "sp-core",9487 "sp-core",
9072 "sp-rpc",9488 "sp-rpc",
9073 "sp-runtime",9489 "sp-runtime",
9079[[package]]9495[[package]]
9080name = "sc-rpc-server"9496name = "sc-rpc-server"
9081version = "3.0.0"9497version = "3.0.0"
9082source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"9498source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
9083dependencies = [9499dependencies = [
9084 "futures 0.1.31",9500 "futures 0.1.31",
9085 "jsonrpc-core 15.1.0",9501 "jsonrpc-core 15.1.0",
9097[[package]]9513[[package]]
9098name = "sc-service"9514name = "sc-service"
9099version = "0.9.0"9515version = "0.9.0"
9100source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"9516source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
9101dependencies = [9517dependencies = [
9102 "async-trait",9518 "async-trait",
9103 "directories",9519 "directories",
9104 "exit-future",9520 "exit-future",
9105 "futures 0.1.31",9521 "futures 0.1.31",
9106 "futures 0.3.15",9522 "futures 0.3.16",
9107 "futures-timer 3.0.2",9523 "futures-timer 3.0.2",
9108 "hash-db",9524 "hash-db",
9109 "jsonrpc-core 15.1.0",9525 "jsonrpc-core 15.1.0",
9110 "jsonrpc-pubsub 15.1.0",9526 "jsonrpc-pubsub 15.1.0",
9111 "lazy_static",9527 "lazy_static",
9112 "log",9528 "log",
9113 "parity-scale-codec 2.1.3",9529 "parity-scale-codec",
9114 "parity-util-mem",9530 "parity-util-mem",
9115 "parking_lot 0.11.1",9531 "parking_lot 0.11.1",
9116 "pin-project 1.0.7",9532 "pin-project 1.0.8",
9117 "rand 0.7.3",9533 "rand 0.7.3",
9118 "sc-block-builder",9534 "sc-block-builder",
9119 "sc-chain-spec",9535 "sc-chain-spec",
9145 "sp-runtime",9561 "sp-runtime",
9146 "sp-session",9562 "sp-session",
9147 "sp-state-machine",9563 "sp-state-machine",
9564 "sp-storage",
9148 "sp-tracing",9565 "sp-tracing",
9149 "sp-transaction-pool",9566 "sp-transaction-pool",
9150 "sp-transaction-storage-proof",9567 "sp-transaction-storage-proof",
9162[[package]]9579[[package]]
9163name = "sc-state-db"9580name = "sc-state-db"
9164version = "0.9.0"9581version = "0.9.0"
9165source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"9582source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
9166dependencies = [9583dependencies = [
9167 "log",9584 "log",
9168 "parity-scale-codec 2.1.3",9585 "parity-scale-codec",
9169 "parity-util-mem",9586 "parity-util-mem",
9170 "parity-util-mem-derive",9587 "parity-util-mem-derive",
9171 "parking_lot 0.11.1",9588 "parking_lot 0.11.1",
9177[[package]]9594[[package]]
9178name = "sc-sync-state-rpc"9595name = "sc-sync-state-rpc"
9179version = "0.9.0"9596version = "0.9.0"
9180source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"9597source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
9181dependencies = [9598dependencies = [
9182 "jsonrpc-core 15.1.0",9599 "jsonrpc-core 15.1.0",
9183 "jsonrpc-core-client 15.1.0",9600 "jsonrpc-core-client 15.1.0",
9197[[package]]9614[[package]]
9198name = "sc-telemetry"9615name = "sc-telemetry"
9199version = "3.0.0"9616version = "3.0.0"
9200source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"9617source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
9201dependencies = [9618dependencies = [
9202 "chrono",9619 "chrono",
9203 "futures 0.3.15",9620 "futures 0.3.16",
9204 "libp2p",9621 "libp2p",
9205 "log",9622 "log",
9206 "parking_lot 0.11.1",9623 "parking_lot 0.11.1",
9207 "pin-project 1.0.7",9624 "pin-project 1.0.8",
9208 "rand 0.7.3",9625 "rand 0.7.3",
9209 "serde",9626 "serde",
9210 "serde_json",9627 "serde_json",
9217[[package]]9634[[package]]
9218name = "sc-tracing"9635name = "sc-tracing"
9219version = "3.0.0"9636version = "3.0.0"
9220source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"9637source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
9221dependencies = [9638dependencies = [
9222 "ansi_term 0.12.1",9639 "ansi_term 0.12.1",
9223 "atty",9640 "atty",
9254[[package]]9671[[package]]
9255name = "sc-tracing-proc-macro"9672name = "sc-tracing-proc-macro"
9256version = "3.0.0"9673version = "3.0.0"
9257source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"9674source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
9258dependencies = [9675dependencies = [
9259 "proc-macro-crate 1.0.0",9676 "proc-macro-crate 1.0.0",
9260 "proc-macro2",9677 "proc-macro2",
9265[[package]]9682[[package]]
9266name = "sc-transaction-graph"9683name = "sc-transaction-graph"
9267version = "3.0.0"9684version = "3.0.0"
9268source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"9685source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
9269dependencies = [9686dependencies = [
9270 "derive_more",9687 "derive_more",
9271 "futures 0.3.15",9688 "futures 0.3.16",
9272 "linked-hash-map",9689 "linked-hash-map",
9273 "log",9690 "log",
9274 "parity-util-mem",9691 "parity-util-mem",
9287[[package]]9704[[package]]
9288name = "sc-transaction-pool"9705name = "sc-transaction-pool"
9289version = "3.0.0"9706version = "3.0.0"
9290source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"9707source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
9291dependencies = [9708dependencies = [
9292 "futures 0.3.15",9709 "futures 0.3.16",
9293 "intervalier",9710 "intervalier",
9294 "log",9711 "log",
9295 "parity-scale-codec 2.1.3",9712 "parity-scale-codec",
9296 "parity-util-mem",9713 "parity-util-mem",
9297 "parking_lot 0.11.1",9714 "parking_lot 0.11.1",
9298 "sc-client-api",9715 "sc-client-api",
9327dependencies = [9744dependencies = [
9328 "arrayref",9745 "arrayref",
9329 "arrayvec 0.5.2",9746 "arrayvec 0.5.2",
9330 "curve25519-dalek 2.1.2",9747 "curve25519-dalek 2.1.3",
9331 "getrandom 0.1.16",9748 "getrandom 0.1.16",
9332 "merlin",9749 "merlin",
9333 "rand 0.7.3",9750 "rand 0.7.3",
9334 "rand_core 0.5.1",9751 "rand_core 0.5.1",
9335 "sha2 0.8.2",9752 "sha2 0.8.2",
9336 "subtle 2.4.0",9753 "subtle 2.4.1",
9337 "zeroize",9754 "zeroize",
9338]9755]
93399756
9380]9797]
93819798
9382[[package]]9799[[package]]
9383name = "secp256k1"
9384version = "0.19.0"
9385source = "registry+https://github.com/rust-lang/crates.io-index"
9386checksum = "c6179428c22c73ac0fbb7b5579a56353ce78ba29759b3b8575183336ea74cdfb"
9387dependencies = [
9388 "secp256k1-sys",
9389]
9390
9391[[package]]
9392name = "secp256k1-sys"
9393version = "0.3.0"
9394source = "registry+https://github.com/rust-lang/crates.io-index"
9395checksum = "11553d210db090930f4432bea123b31f70bbf693ace14504ea2a35e796c28dd2"
9396dependencies = [
9397 "cc",
9398]
9399
9400[[package]]
9401name = "secrecy"9800name = "secrecy"
9402version = "0.7.0"9801version = "0.7.0"
9403source = "registry+https://github.com/rust-lang/crates.io-index"9802source = "registry+https://github.com/rust-lang/crates.io-index"
95409939
9541[[package]]9940[[package]]
9542name = "sha-1"9941name = "sha-1"
9543version = "0.9.6"9942version = "0.9.7"
9544source = "registry+https://github.com/rust-lang/crates.io-index"9943source = "registry+https://github.com/rust-lang/crates.io-index"
9545checksum = "8c4cfa741c5832d0ef7fab46cabed29c2aae926db0b11bb2069edd8db5e64e16"9944checksum = "1a0c8611594e2ab4ebbf06ec7cbbf0a99450b8570e96cbf5188b5d5f6ef18d81"
9546dependencies = [9945dependencies = [
9547 "block-buffer 0.9.0",9946 "block-buffer 0.9.0",
9548 "cfg-if 1.0.0",9947 "cfg-if 1.0.0",
961210011
9613[[package]]10012[[package]]
9614name = "shlex"10013name = "shlex"
9615version = "0.1.1"10014version = "1.0.0"
9616source = "registry+https://github.com/rust-lang/crates.io-index"10015source = "registry+https://github.com/rust-lang/crates.io-index"
9617checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2"10016checksum = "42a568c8f2cd051a4d283bd6eb0343ac214c1b0f1ac19f93e1175b2dee38c73d"
961810017
9619[[package]]10018[[package]]
9620name = "signal-hook"10019name = "signal-hook"
963710036
9638[[package]]10037[[package]]
9639name = "signature"10038name = "signature"
9640version = "1.3.0"10039version = "1.3.1"
9641source = "registry+https://github.com/rust-lang/crates.io-index"10040source = "registry+https://github.com/rust-lang/crates.io-index"
9642checksum = "0f0242b8e50dd9accdd56170e94ca1ebd223b098eb9c83539a6e367d0f36ae68"10041checksum = "c19772be3c4dd2ceaacf03cb41d5885f2a02c4d8804884918e3a258480803335"
964310042
9644[[package]]10043[[package]]
9645name = "simba"10044name = "simba"
9646version = "0.4.0"
9647source = "registry+https://github.com/rust-lang/crates.io-index"
9648checksum = "5132a955559188f3d13c9ba831e77c802ddc8782783f050ed0c52f5988b95f4c"
9649dependencies = [
9650 "approx 0.4.0",
9651 "num-complex 0.3.1",
9652 "num-traits",
9653 "paste",
9654]
9655
9656[[package]]
9657name = "simba"
9658version = "0.5.1"10045version = "0.5.1"
9659source = "registry+https://github.com/rust-lang/crates.io-index"10046source = "registry+https://github.com/rust-lang/crates.io-index"
9660checksum = "8e82063457853d00243beda9952e910b82593e4b07ae9f721b9278a99a0d3d5c"10047checksum = "8e82063457853d00243beda9952e910b82593e4b07ae9f721b9278a99a0d3d5c"
9661dependencies = [10048dependencies = [
9662 "approx 0.5.0",10049 "approx",
9663 "num-complex 0.4.0",10050 "num-complex",
9664 "num-traits",10051 "num-traits",
9665 "paste",10052 "paste",
9666]10053]
968210069
9683[[package]]10070[[package]]
9684name = "slot-range-helper"10071name = "slot-range-helper"
9685version = "0.9.7"10072version = "0.9.8"
9686source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"10073source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
9687dependencies = [10074dependencies = [
9688 "enumn",10075 "enumn",
9689 "parity-scale-codec 2.1.3",10076 "parity-scale-codec",
9690 "paste",10077 "paste",
9691 "sp-runtime",10078 "sp-runtime",
9692 "sp-std",10079 "sp-std",
9693]10080]
969410081
9695[[package]]10082[[package]]
9696name = "slotmap"10083name = "slotmap"
9697version = "1.0.3"10084version = "1.0.5"
9698source = "registry+https://github.com/rust-lang/crates.io-index"10085source = "registry+https://github.com/rust-lang/crates.io-index"
9699checksum = "585cd5dffe4e9e06f6dfdf66708b70aca3f781bed561f4f667b2d9c0d4559e36"10086checksum = "a952280edbecfb1d4bd3cf2dbc309dc6ab523e53487c438ae21a6df09fe84bc4"
9700dependencies = [10087dependencies = [
9701 "version_check",10088 "version_check",
9702]10089]
9728 "rand 0.7.3",10115 "rand 0.7.3",
9729 "rand_core 0.5.1",10116 "rand_core 0.5.1",
9730 "ring",10117 "ring",
9731 "rustc_version",10118 "rustc_version 0.2.3",
9732 "sha2 0.9.5",10119 "sha2 0.9.5",
9733 "subtle 2.4.0",10120 "subtle 2.4.1",
9734 "x25519-dalek",10121 "x25519-dalek",
9735]10122]
973610123
9764 "base64 0.12.3",10151 "base64 0.12.3",
9765 "bytes 0.5.6",10152 "bytes 0.5.6",
9766 "flate2",10153 "flate2",
9767 "futures 0.3.15",10154 "futures 0.3.16",
9768 "httparse",10155 "httparse",
9769 "log",10156 "log",
9770 "rand 0.7.3",10157 "rand 0.7.3",
9771 "sha-1 0.9.6",10158 "sha-1 0.9.7",
9772]10159]
977310160
9774[[package]]10161[[package]]
9779dependencies = [10166dependencies = [
9780 "base64 0.13.0",10167 "base64 0.13.0",
9781 "bytes 1.0.1",10168 "bytes 1.0.1",
9782 "futures 0.3.15",10169 "futures 0.3.16",
9783 "httparse",10170 "httparse",
9784 "log",10171 "log",
9785 "rand 0.8.4",10172 "rand 0.8.4",
9786 "sha-1 0.9.6",10173 "sha-1 0.9.7",
9787]10174]
978810175
9789[[package]]10176[[package]]
9790name = "sp-allocator"
9791version = "3.0.0"
9792source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"
9793dependencies = [
9794 "log",
9795 "sp-core",
9796 "sp-std",
9797 "sp-wasm-interface",
9798 "thiserror",
9799]
9800
9801[[package]]
9802name = "sp-api"10177name = "sp-api"
9803version = "3.0.0"10178version = "3.0.0"
9804source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10179source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
9805dependencies = [10180dependencies = [
9806 "hash-db",10181 "hash-db",
9807 "log",10182 "log",
9808 "parity-scale-codec 2.1.3",10183 "parity-scale-codec",
9809 "sp-api-proc-macro",10184 "sp-api-proc-macro",
9810 "sp-core",10185 "sp-core",
9811 "sp-runtime",10186 "sp-runtime",
9818[[package]]10193[[package]]
9819name = "sp-api-proc-macro"10194name = "sp-api-proc-macro"
9820version = "3.0.0"10195version = "3.0.0"
9821source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10196source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
9822dependencies = [10197dependencies = [
9823 "blake2-rfc",10198 "blake2-rfc",
9824 "proc-macro-crate 1.0.0",10199 "proc-macro-crate 1.0.0",
9830[[package]]10205[[package]]
9831name = "sp-application-crypto"10206name = "sp-application-crypto"
9832version = "3.0.0"10207version = "3.0.0"
9833source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10208source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
9834dependencies = [10209dependencies = [
9835 "max-encoded-len",10210 "max-encoded-len",
9836 "parity-scale-codec 2.1.3",10211 "parity-scale-codec",
9837 "serde",10212 "serde",
9838 "sp-core",10213 "sp-core",
9839 "sp-io",10214 "sp-io",
9843[[package]]10218[[package]]
9844name = "sp-arithmetic"10219name = "sp-arithmetic"
9845version = "3.0.0"10220version = "3.0.0"
9846source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10221source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
9847dependencies = [10222dependencies = [
9848 "integer-sqrt",10223 "integer-sqrt",
9849 "num-traits",10224 "num-traits",
9850 "parity-scale-codec 2.1.3",10225 "parity-scale-codec",
9851 "serde",10226 "serde",
9852 "sp-debug-derive",10227 "sp-debug-derive",
9853 "sp-std",10228 "sp-std",
9857[[package]]10232[[package]]
9858name = "sp-authority-discovery"10233name = "sp-authority-discovery"
9859version = "3.0.0"10234version = "3.0.0"
9860source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10235source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
9861dependencies = [10236dependencies = [
9862 "parity-scale-codec 2.1.3",10237 "parity-scale-codec",
9863 "sp-api",10238 "sp-api",
9864 "sp-application-crypto",10239 "sp-application-crypto",
9865 "sp-runtime",10240 "sp-runtime",
9869[[package]]10244[[package]]
9870name = "sp-authorship"10245name = "sp-authorship"
9871version = "3.0.0"10246version = "3.0.0"
9872source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10247source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
9873dependencies = [10248dependencies = [
9874 "async-trait",10249 "async-trait",
9875 "parity-scale-codec 2.1.3",10250 "parity-scale-codec",
9876 "sp-inherents",10251 "sp-inherents",
9877 "sp-runtime",10252 "sp-runtime",
9878 "sp-std",10253 "sp-std",
9881[[package]]10256[[package]]
9882name = "sp-block-builder"10257name = "sp-block-builder"
9883version = "3.0.0"10258version = "3.0.0"
9884source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10259source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
9885dependencies = [10260dependencies = [
9886 "parity-scale-codec 2.1.3",10261 "parity-scale-codec",
9887 "sp-api",10262 "sp-api",
9888 "sp-inherents",10263 "sp-inherents",
9889 "sp-runtime",10264 "sp-runtime",
9893[[package]]10268[[package]]
9894name = "sp-blockchain"10269name = "sp-blockchain"
9895version = "3.0.0"10270version = "3.0.0"
9896source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10271source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
9897dependencies = [10272dependencies = [
9898 "futures 0.3.15",10273 "futures 0.3.16",
9899 "log",10274 "log",
9900 "lru",10275 "lru",
9901 "parity-scale-codec 2.1.3",10276 "parity-scale-codec",
9902 "parking_lot 0.11.1",10277 "parking_lot 0.11.1",
9903 "sp-api",10278 "sp-api",
9904 "sp-consensus",10279 "sp-consensus",
9909]10284]
991010285
9911[[package]]10286[[package]]
9912name = "sp-chain-spec"
9913version = "3.0.0"
9914source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"
9915dependencies = [
9916 "serde",
9917 "serde_json",
9918]
9919
9920[[package]]
9921name = "sp-consensus"10287name = "sp-consensus"
9922version = "0.9.0"10288version = "0.9.0"
9923source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10289source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
9924dependencies = [10290dependencies = [
9925 "async-trait",10291 "async-trait",
9926 "futures 0.3.15",10292 "futures 0.3.16",
9927 "futures-timer 3.0.2",10293 "futures-timer 3.0.2",
9928 "libp2p",10294 "libp2p",
9929 "log",10295 "log",
9930 "parity-scale-codec 2.1.3",10296 "parity-scale-codec",
9931 "parking_lot 0.11.1",10297 "parking_lot 0.11.1",
9932 "serde",10298 "serde",
9933 "sp-api",10299 "sp-api",
9947[[package]]10313[[package]]
9948name = "sp-consensus-aura"10314name = "sp-consensus-aura"
9949version = "0.9.0"10315version = "0.9.0"
9950source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10316source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
9951dependencies = [10317dependencies = [
9952 "async-trait",10318 "async-trait",
9953 "parity-scale-codec 2.1.3",10319 "parity-scale-codec",
9954 "sp-api",10320 "sp-api",
9955 "sp-application-crypto",10321 "sp-application-crypto",
9956 "sp-consensus",10322 "sp-consensus",
9964[[package]]10330[[package]]
9965name = "sp-consensus-babe"10331name = "sp-consensus-babe"
9966version = "0.9.0"10332version = "0.9.0"
9967source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10333source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
9968dependencies = [10334dependencies = [
9969 "async-trait",10335 "async-trait",
9970 "merlin",10336 "merlin",
9971 "parity-scale-codec 2.1.3",10337 "parity-scale-codec",
9972 "serde",10338 "serde",
9973 "sp-api",10339 "sp-api",
9974 "sp-application-crypto",10340 "sp-application-crypto",
9986[[package]]10352[[package]]
9987name = "sp-consensus-slots"10353name = "sp-consensus-slots"
9988version = "0.9.0"10354version = "0.9.0"
9989source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10355source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
9990dependencies = [10356dependencies = [
9991 "parity-scale-codec 2.1.3",10357 "parity-scale-codec",
9992 "sp-arithmetic",10358 "sp-arithmetic",
9993 "sp-runtime",10359 "sp-runtime",
9994]10360]
999510361
9996[[package]]10362[[package]]
9997name = "sp-consensus-vrf"10363name = "sp-consensus-vrf"
9998version = "0.9.0"10364version = "0.9.0"
9999source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10365source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10000dependencies = [10366dependencies = [
10001 "parity-scale-codec 2.1.3",10367 "parity-scale-codec",
10002 "schnorrkel",10368 "schnorrkel",
10003 "sp-core",10369 "sp-core",
10004 "sp-runtime",10370 "sp-runtime",
10008[[package]]10374[[package]]
10009name = "sp-core"10375name = "sp-core"
10010version = "3.0.0"10376version = "3.0.0"
10011source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10377source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10012dependencies = [10378dependencies = [
10013 "base58",10379 "base58",
10014 "blake2-rfc",10380 "blake2-rfc",
10015 "byteorder",10381 "byteorder",
10016 "dyn-clonable",10382 "dyn-clonable",
10017 "ed25519-dalek",10383 "ed25519-dalek",
10018 "futures 0.3.15",10384 "futures 0.3.16",
10019 "hash-db",10385 "hash-db",
10020 "hash256-std-hasher",10386 "hash256-std-hasher",
10021 "hex",10387 "hex",
10026 "max-encoded-len",10392 "max-encoded-len",
10027 "merlin",10393 "merlin",
10028 "num-traits",10394 "num-traits",
10029 "parity-scale-codec 2.1.3",10395 "parity-scale-codec",
10030 "parity-util-mem",10396 "parity-util-mem",
10031 "parking_lot 0.11.1",10397 "parking_lot 0.11.1",
10032 "primitive-types 0.9.0",10398 "primitive-types",
10033 "rand 0.7.3",10399 "rand 0.7.3",
10034 "regex",10400 "regex",
10035 "schnorrkel",10401 "schnorrkel",
10053[[package]]10419[[package]]
10054name = "sp-database"10420name = "sp-database"
10055version = "3.0.0"10421version = "3.0.0"
10056source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10422source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10057dependencies = [10423dependencies = [
10058 "kvdb",10424 "kvdb",
10059 "parking_lot 0.11.1",10425 "parking_lot 0.11.1",
10062[[package]]10428[[package]]
10063name = "sp-debug-derive"10429name = "sp-debug-derive"
10064version = "3.0.0"10430version = "3.0.0"
10065source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10431source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10066dependencies = [10432dependencies = [
10067 "proc-macro2",10433 "proc-macro2",
10068 "quote",10434 "quote",
10072[[package]]10438[[package]]
10073name = "sp-externalities"10439name = "sp-externalities"
10074version = "0.9.0"10440version = "0.9.0"
10075source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10441source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10076dependencies = [10442dependencies = [
10077 "environmental",10443 "environmental",
10078 "parity-scale-codec 2.1.3",10444 "parity-scale-codec",
10079 "sp-std",10445 "sp-std",
10080 "sp-storage",10446 "sp-storage",
10081]10447]
1008210448
10083[[package]]10449[[package]]
10084name = "sp-finality-grandpa"10450name = "sp-finality-grandpa"
10085version = "3.0.0"10451version = "3.0.0"
10086source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10452source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10087dependencies = [10453dependencies = [
10088 "finality-grandpa",10454 "finality-grandpa",
10089 "log",10455 "log",
10090 "parity-scale-codec 2.1.3",10456 "parity-scale-codec",
10091 "serde",10457 "serde",
10092 "sp-api",10458 "sp-api",
10093 "sp-application-crypto",10459 "sp-application-crypto",
10100[[package]]10466[[package]]
10101name = "sp-inherents"10467name = "sp-inherents"
10102version = "3.0.0"10468version = "3.0.0"
10103source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10469source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10104dependencies = [10470dependencies = [
10105 "async-trait",10471 "async-trait",
10106 "impl-trait-for-tuples 0.2.1",10472 "impl-trait-for-tuples",
10107 "parity-scale-codec 2.1.3",10473 "parity-scale-codec",
10108 "sp-core",10474 "sp-core",
10109 "sp-runtime",10475 "sp-runtime",
10110 "sp-std",10476 "sp-std",
10114[[package]]10480[[package]]
10115name = "sp-io"10481name = "sp-io"
10116version = "3.0.0"10482version = "3.0.0"
10117source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10483source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10118dependencies = [10484dependencies = [
10119 "futures 0.3.15",10485 "futures 0.3.16",
10120 "hash-db",10486 "hash-db",
10121 "libsecp256k1 0.3.5",10487 "libsecp256k1 0.3.5",
10122 "log",10488 "log",
10123 "parity-scale-codec 2.1.3",10489 "parity-scale-codec",
10124 "parking_lot 0.11.1",10490 "parking_lot 0.11.1",
10125 "sp-core",10491 "sp-core",
10126 "sp-externalities",10492 "sp-externalities",
10139[[package]]10505[[package]]
10140name = "sp-keyring"10506name = "sp-keyring"
10141version = "3.0.0"10507version = "3.0.0"
10142source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10508source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10143dependencies = [10509dependencies = [
10144 "lazy_static",10510 "lazy_static",
10145 "sp-core",10511 "sp-core",
10150[[package]]10516[[package]]
10151name = "sp-keystore"10517name = "sp-keystore"
10152version = "0.9.0"10518version = "0.9.0"
10153source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10519source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10154dependencies = [10520dependencies = [
10155 "async-trait",10521 "async-trait",
10156 "derive_more",10522 "derive_more",
10157 "futures 0.3.15",10523 "futures 0.3.16",
10158 "merlin",10524 "merlin",
10159 "parity-scale-codec 2.1.3",10525 "parity-scale-codec",
10160 "parking_lot 0.11.1",10526 "parking_lot 0.11.1",
10161 "schnorrkel",10527 "schnorrkel",
10162 "serde",10528 "serde",
10167[[package]]10533[[package]]
10168name = "sp-maybe-compressed-blob"10534name = "sp-maybe-compressed-blob"
10169version = "3.0.0"10535version = "3.0.0"
10170source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10536source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10171dependencies = [10537dependencies = [
10172 "ruzstd",10538 "ruzstd",
10173 "zstd",10539 "zstd",
10176[[package]]10542[[package]]
10177name = "sp-npos-elections"10543name = "sp-npos-elections"
10178version = "3.0.0"10544version = "3.0.0"
10179source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10545source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10180dependencies = [10546dependencies = [
10181 "parity-scale-codec 2.1.3",10547 "parity-scale-codec",
10182 "serde",10548 "serde",
10183 "sp-arithmetic",10549 "sp-arithmetic",
10184 "sp-core",10550 "sp-core",
10189[[package]]10555[[package]]
10190name = "sp-npos-elections-compact"10556name = "sp-npos-elections-compact"
10191version = "3.0.0"10557version = "3.0.0"
10192source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10558source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10193dependencies = [10559dependencies = [
10194 "proc-macro-crate 1.0.0",10560 "proc-macro-crate 1.0.0",
10195 "proc-macro2",10561 "proc-macro2",
10200[[package]]10566[[package]]
10201name = "sp-offchain"10567name = "sp-offchain"
10202version = "3.0.0"10568version = "3.0.0"
10203source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10569source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10204dependencies = [10570dependencies = [
10205 "sp-api",10571 "sp-api",
10206 "sp-core",10572 "sp-core",
10210[[package]]10576[[package]]
10211name = "sp-panic-handler"10577name = "sp-panic-handler"
10212version = "3.0.0"10578version = "3.0.0"
10213source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10579source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10214dependencies = [10580dependencies = [
10215 "backtrace",10581 "backtrace",
10216]10582]
1021710583
10218[[package]]10584[[package]]
10219name = "sp-rpc"10585name = "sp-rpc"
10220version = "3.0.0"10586version = "3.0.0"
10221source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10587source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10222dependencies = [10588dependencies = [
10223 "rustc-hash",10589 "rustc-hash",
10224 "serde",10590 "serde",
10229[[package]]10595[[package]]
10230name = "sp-runtime"10596name = "sp-runtime"
10231version = "3.0.0"10597version = "3.0.0"
10232source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10598source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10233dependencies = [10599dependencies = [
10234 "either",10600 "either",
10235 "hash256-std-hasher",10601 "hash256-std-hasher",
10236 "impl-trait-for-tuples 0.2.1",10602 "impl-trait-for-tuples",
10237 "log",10603 "log",
10238 "max-encoded-len",10604 "max-encoded-len",
10239 "parity-scale-codec 2.1.3",10605 "parity-scale-codec",
10240 "parity-util-mem",10606 "parity-util-mem",
10241 "paste",10607 "paste",
10242 "rand 0.7.3",10608 "rand 0.7.3",
10251[[package]]10617[[package]]
10252name = "sp-runtime-interface"10618name = "sp-runtime-interface"
10253version = "3.0.0"10619version = "3.0.0"
10254source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10620source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10255dependencies = [10621dependencies = [
10256 "impl-trait-for-tuples 0.2.1",10622 "impl-trait-for-tuples",
10257 "parity-scale-codec 2.1.3",10623 "parity-scale-codec",
10258 "primitive-types 0.9.0",10624 "primitive-types",
10259 "sp-externalities",10625 "sp-externalities",
10260 "sp-runtime-interface-proc-macro",10626 "sp-runtime-interface-proc-macro",
10261 "sp-std",10627 "sp-std",
10268[[package]]10634[[package]]
10269name = "sp-runtime-interface-proc-macro"10635name = "sp-runtime-interface-proc-macro"
10270version = "3.0.0"10636version = "3.0.0"
10271source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10637source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10272dependencies = [10638dependencies = [
10273 "Inflector",10639 "Inflector",
10274 "proc-macro-crate 1.0.0",10640 "proc-macro-crate 1.0.0",
10280[[package]]10646[[package]]
10281name = "sp-sandbox"10647name = "sp-sandbox"
10282version = "0.9.0"10648version = "0.9.0"
10283source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10649source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10284dependencies = [10650dependencies = [
10285 "parity-scale-codec 2.1.3",10651 "parity-scale-codec",
10286 "sp-core",10652 "sp-core",
10287 "sp-io",10653 "sp-io",
10288 "sp-std",10654 "sp-std",
10293[[package]]10659[[package]]
10294name = "sp-serializer"10660name = "sp-serializer"
10295version = "3.0.0"10661version = "3.0.0"
10296source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10662source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10297dependencies = [10663dependencies = [
10298 "serde",10664 "serde",
10299 "serde_json",10665 "serde_json",
10302[[package]]10668[[package]]
10303name = "sp-session"10669name = "sp-session"
10304version = "3.0.0"10670version = "3.0.0"
10305source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10671source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10306dependencies = [10672dependencies = [
10307 "parity-scale-codec 2.1.3",10673 "parity-scale-codec",
10308 "sp-api",10674 "sp-api",
10309 "sp-core",10675 "sp-core",
10310 "sp-runtime",10676 "sp-runtime",
10315[[package]]10681[[package]]
10316name = "sp-staking"10682name = "sp-staking"
10317version = "3.0.0"10683version = "3.0.0"
10318source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10684source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10319dependencies = [10685dependencies = [
10320 "parity-scale-codec 2.1.3",10686 "parity-scale-codec",
10321 "sp-runtime",10687 "sp-runtime",
10322 "sp-std",10688 "sp-std",
10323]10689]
1032410690
10325[[package]]10691[[package]]
10326name = "sp-state-machine"10692name = "sp-state-machine"
10327version = "0.9.0"10693version = "0.9.0"
10328source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10694source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10329dependencies = [10695dependencies = [
10330 "hash-db",10696 "hash-db",
10331 "log",10697 "log",
10332 "num-traits",10698 "num-traits",
10333 "parity-scale-codec 2.1.3",10699 "parity-scale-codec",
10334 "parking_lot 0.11.1",10700 "parking_lot 0.11.1",
10335 "rand 0.7.3",10701 "rand 0.7.3",
10336 "smallvec 1.6.1",10702 "smallvec 1.6.1",
10348[[package]]10714[[package]]
10349name = "sp-std"10715name = "sp-std"
10350version = "3.0.0"10716version = "3.0.0"
10351source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10717source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
1035210718
10353[[package]]10719[[package]]
10354name = "sp-storage"10720name = "sp-storage"
10355version = "3.0.0"10721version = "3.0.0"
10356source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10722source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10357dependencies = [10723dependencies = [
10358 "impl-serde",10724 "impl-serde",
10359 "parity-scale-codec 2.1.3",10725 "parity-scale-codec",
10360 "ref-cast",10726 "ref-cast",
10361 "serde",10727 "serde",
10362 "sp-debug-derive",10728 "sp-debug-derive",
10366[[package]]10732[[package]]
10367name = "sp-tasks"10733name = "sp-tasks"
10368version = "3.0.0"10734version = "3.0.0"
10369source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10735source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10370dependencies = [10736dependencies = [
10371 "log",10737 "log",
10372 "sp-core",10738 "sp-core",
10379[[package]]10745[[package]]
10380name = "sp-timestamp"10746name = "sp-timestamp"
10381version = "3.0.0"10747version = "3.0.0"
10382source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10748source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10383dependencies = [10749dependencies = [
10384 "async-trait",10750 "async-trait",
10385 "futures-timer 3.0.2",10751 "futures-timer 3.0.2",
10386 "log",10752 "log",
10387 "parity-scale-codec 2.1.3",10753 "parity-scale-codec",
10388 "sp-api",10754 "sp-api",
10389 "sp-inherents",10755 "sp-inherents",
10390 "sp-runtime",10756 "sp-runtime",
10396[[package]]10762[[package]]
10397name = "sp-tracing"10763name = "sp-tracing"
10398version = "3.0.0"10764version = "3.0.0"
10399source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10765source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10400dependencies = [10766dependencies = [
10401 "erased-serde",10767 "erased-serde",
10402 "log",10768 "log",
10403 "parity-scale-codec 2.1.3",10769 "parity-scale-codec",
10404 "parking_lot 0.10.2",10770 "parking_lot 0.10.2",
10405 "serde",10771 "serde",
10406 "serde_json",10772 "serde_json",
10414[[package]]10780[[package]]
10415name = "sp-transaction-pool"10781name = "sp-transaction-pool"
10416version = "3.0.0"10782version = "3.0.0"
10417source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10783source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10418dependencies = [10784dependencies = [
10419 "derive_more",10785 "derive_more",
10420 "futures 0.3.15",10786 "futures 0.3.16",
10421 "log",10787 "log",
10422 "parity-scale-codec 2.1.3",10788 "parity-scale-codec",
10423 "serde",10789 "serde",
10424 "sp-api",10790 "sp-api",
10425 "sp-blockchain",10791 "sp-blockchain",
10430[[package]]10796[[package]]
10431name = "sp-transaction-storage-proof"10797name = "sp-transaction-storage-proof"
10432version = "3.0.0"10798version = "3.0.0"
10433source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10799source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10434dependencies = [10800dependencies = [
10435 "async-trait",10801 "async-trait",
10436 "log",10802 "log",
10437 "parity-scale-codec 2.1.3",10803 "parity-scale-codec",
10438 "sp-core",10804 "sp-core",
10439 "sp-inherents",10805 "sp-inherents",
10440 "sp-runtime",10806 "sp-runtime",
10445[[package]]10811[[package]]
10446name = "sp-trie"10812name = "sp-trie"
10447version = "3.0.0"10813version = "3.0.0"
10448source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10814source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10449dependencies = [10815dependencies = [
10450 "hash-db",10816 "hash-db",
10451 "memory-db",10817 "memory-db",
10452 "parity-scale-codec 2.1.3",10818 "parity-scale-codec",
10453 "sp-core",10819 "sp-core",
10454 "sp-std",10820 "sp-std",
10455 "trie-db",10821 "trie-db",
10459[[package]]10825[[package]]
10460name = "sp-utils"10826name = "sp-utils"
10461version = "3.0.0"10827version = "3.0.0"
10462source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10828source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10463dependencies = [10829dependencies = [
10464 "futures 0.3.15",10830 "futures 0.3.16",
10465 "futures-core",10831 "futures-core",
10466 "futures-timer 3.0.2",10832 "futures-timer 3.0.2",
10467 "lazy_static",10833 "lazy_static",
10471[[package]]10837[[package]]
10472name = "sp-version"10838name = "sp-version"
10473version = "3.0.0"10839version = "3.0.0"
10474source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10840source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10475dependencies = [10841dependencies = [
10476 "impl-serde",10842 "impl-serde",
10477 "parity-scale-codec 2.1.3",10843 "parity-scale-codec",
10478 "serde",10844 "serde",
10479 "sp-runtime",10845 "sp-runtime",
10480 "sp-std",10846 "sp-std",
10484[[package]]10850[[package]]
10485name = "sp-version-proc-macro"10851name = "sp-version-proc-macro"
10486version = "3.0.0"10852version = "3.0.0"
10487source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10853source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10488dependencies = [10854dependencies = [
10489 "parity-scale-codec 2.1.3",10855 "parity-scale-codec",
10490 "proc-macro-crate 1.0.0",10856 "proc-macro-crate 1.0.0",
10491 "proc-macro2",10857 "proc-macro2",
10492 "quote",10858 "quote",
10496[[package]]10862[[package]]
10497name = "sp-wasm-interface"10863name = "sp-wasm-interface"
10498version = "3.0.0"10864version = "3.0.0"
10499source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"10865source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10500dependencies = [10866dependencies = [
10501 "impl-trait-for-tuples 0.2.1",10867 "impl-trait-for-tuples",
10502 "parity-scale-codec 2.1.3",10868 "parity-scale-codec",
10503 "sp-std",10869 "sp-std",
10504 "wasmi",10870 "wasmi",
10505]10871]
1054910915
10550[[package]]10916[[package]]
10551name = "statrs"10917name = "statrs"
10552version = "0.14.0"10918version = "0.15.0"
10553source = "registry+https://github.com/rust-lang/crates.io-index"10919source = "registry+https://github.com/rust-lang/crates.io-index"
10554checksum = "1e0c1f144861fbfd2a8cc82d564ccbf7fb3b7834d4fa128b84e9c2a73371aead"10920checksum = "05bdbb8e4e78216a85785a85d3ec3183144f98d0097b9281802c019bb07a6f05"
10555dependencies = [10921dependencies = [
10556 "approx 0.4.0",10922 "approx",
10557 "lazy_static",10923 "lazy_static",
10558 "nalgebra 0.26.2",10924 "nalgebra",
10559 "num-traits",10925 "num-traits",
10560 "rand 0.8.4",10926 "rand 0.8.4",
10561]10927]
10571]10937]
1057210938
10573[[package]]10939[[package]]
10574name = "streamunordered"
10575version = "0.5.2"
10576source = "registry+https://github.com/rust-lang/crates.io-index"
10577checksum = "e68576e37c8a37f5372796df15202190349dd80e7ed6a79544c0232213e90e35"
10578dependencies = [
10579 "futures-core",
10580 "futures-sink",
10581 "futures-util",
10582 "slab",
10583]
10584
10585[[package]]
10586name = "string"10940name = "string"
10587version = "0.2.1"10941version = "0.2.1"
10588source = "registry+https://github.com/rust-lang/crates.io-index"10942source = "registry+https://github.com/rust-lang/crates.io-index"
1060510959
10606[[package]]10960[[package]]
10607name = "structopt"10961name = "structopt"
10608version = "0.3.21"10962version = "0.3.22"
10609source = "registry+https://github.com/rust-lang/crates.io-index"10963source = "registry+https://github.com/rust-lang/crates.io-index"
10610checksum = "5277acd7ee46e63e5168a80734c9f6ee81b1367a7d8772a2d765df2a3705d28c"10964checksum = "69b041cdcb67226aca307e6e7be44c8806423d83e018bd662360a93dabce4d71"
10611dependencies = [10965dependencies = [
10612 "clap",10966 "clap",
10613 "lazy_static",10967 "lazy_static",
1061610970
10617[[package]]10971[[package]]
10618name = "structopt-derive"10972name = "structopt-derive"
10619version = "0.4.14"10973version = "0.4.15"
10620source = "registry+https://github.com/rust-lang/crates.io-index"10974source = "registry+https://github.com/rust-lang/crates.io-index"
10621checksum = "5ba9cdfda491b814720b6b06e0cac513d922fc407582032e8706e9f137976f90"10975checksum = "7813934aecf5f51a54775e00068c237de98489463968231a51746bbbc03f9c10"
10622dependencies = [10976dependencies = [
10623 "heck",10977 "heck",
10624 "proc-macro-error",10978 "proc-macro-error",
10664[[package]]11018[[package]]
10665name = "substrate-build-script-utils"11019name = "substrate-build-script-utils"
10666version = "3.0.0"11020version = "3.0.0"
10667source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"11021source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10668dependencies = [11022dependencies = [
10669 "platforms",11023 "platforms",
10670]11024]
1067111025
10672[[package]]11026[[package]]
10673name = "substrate-frame-rpc-system"11027name = "substrate-frame-rpc-system"
10674version = "3.0.0"11028version = "3.0.0"
10675source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"11029source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10676dependencies = [11030dependencies = [
10677 "frame-system-rpc-runtime-api",11031 "frame-system-rpc-runtime-api",
10678 "futures 0.3.15",11032 "futures 0.3.16",
10679 "jsonrpc-core 15.1.0",11033 "jsonrpc-core 15.1.0",
10680 "jsonrpc-core-client 15.1.0",11034 "jsonrpc-core-client 15.1.0",
10681 "jsonrpc-derive 15.1.0",11035 "jsonrpc-derive 15.1.0",
10682 "log",11036 "log",
10683 "parity-scale-codec 2.1.3",11037 "parity-scale-codec",
10684 "sc-client-api",11038 "sc-client-api",
10685 "sc-rpc-api",11039 "sc-rpc-api",
10686 "serde",11040 "serde",
10695[[package]]11049[[package]]
10696name = "substrate-prometheus-endpoint"11050name = "substrate-prometheus-endpoint"
10697version = "0.9.0"11051version = "0.9.0"
10698source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"11052source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10699dependencies = [11053dependencies = [
10700 "async-std",11054 "async-std",
10701 "derive_more",11055 "derive_more",
10709[[package]]11063[[package]]
10710name = "substrate-test-client"11064name = "substrate-test-client"
10711version = "2.0.1"11065version = "2.0.1"
10712source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"11066source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10713dependencies = [11067dependencies = [
10714 "async-trait",11068 "async-trait",
10715 "futures 0.1.31",11069 "futures 0.1.31",
10716 "futures 0.3.15",11070 "futures 0.3.16",
10717 "hash-db",11071 "hash-db",
10718 "hex",11072 "hex",
10719 "parity-scale-codec 2.1.3",11073 "parity-scale-codec",
10720 "sc-client-api",11074 "sc-client-api",
10721 "sc-client-db",11075 "sc-client-db",
10722 "sc-consensus",11076 "sc-consensus",
10738[[package]]11092[[package]]
10739name = "substrate-test-utils"11093name = "substrate-test-utils"
10740version = "3.0.0"11094version = "3.0.0"
10741source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"11095source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10742dependencies = [11096dependencies = [
10743 "futures 0.3.15",11097 "futures 0.3.16",
10744 "substrate-test-utils-derive",11098 "substrate-test-utils-derive",
10745 "tokio 0.2.25",11099 "tokio 0.2.25",
10746]11100]
1074711101
10748[[package]]11102[[package]]
10749name = "substrate-test-utils-derive"11103name = "substrate-test-utils-derive"
10750version = "0.9.0"11104version = "0.9.0"
10751source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"11105source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10752dependencies = [11106dependencies = [
10753 "proc-macro-crate 1.0.0",11107 "proc-macro-crate 1.0.0",
10754 "quote",11108 "quote",
1075711111
10758[[package]]11112[[package]]
10759name = "substrate-wasm-builder"11113name = "substrate-wasm-builder"
10760version = "3.0.0"11114version = "4.0.0"
10761source = "registry+https://github.com/rust-lang/crates.io-index"11115source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
10762checksum = "79091baab813855ddf65b191de9fe53e656b6b67c1e9bd23fdcbff8788164684"
10763dependencies = [11116dependencies = [
10764 "ansi_term 0.12.1",11117 "ansi_term 0.12.1",
10765 "atty",11118 "atty",
10766 "build-helper",11119 "build-helper",
10767 "cargo_metadata",11120 "cargo_metadata 0.13.1",
11121 "sp-maybe-compressed-blob",
10768 "tempfile",11122 "tempfile",
10769 "toml",11123 "toml",
10770 "walkdir",11124 "walkdir",
10780 "ansi_term 0.12.1",11134 "ansi_term 0.12.1",
10781 "atty",11135 "atty",
10782 "build-helper",11136 "build-helper",
10783 "cargo_metadata",11137 "cargo_metadata 0.12.3",
10784 "tempfile",11138 "tempfile",
10785 "toml",11139 "toml",
10786 "walkdir",11140 "walkdir",
1079511149
10796[[package]]11150[[package]]
10797name = "subtle"11151name = "subtle"
10798version = "2.4.0"11152version = "2.4.1"
10799source = "registry+https://github.com/rust-lang/crates.io-index"11153source = "registry+https://github.com/rust-lang/crates.io-index"
10800checksum = "1e81da0851ada1f3e9d4312c704aa4f8806f0f9d69faaf8df2f3464b4a9437c2"11154checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
1080111155
10802[[package]]11156[[package]]
10803name = "syn"11157name = "syn"
10804version = "1.0.73"11158version = "1.0.74"
10805source = "registry+https://github.com/rust-lang/crates.io-index"11159source = "registry+https://github.com/rust-lang/crates.io-index"
10806checksum = "f71489ff30030d2ae598524f61326b902466f72a0fb1a8564c001cc63425bcc7"11160checksum = "1873d832550d4588c3dbc20f01361ab00bfe741048f71e3fecf145a7cc18b29c"
10807dependencies = [11161dependencies = [
10808 "proc-macro2",11162 "proc-macro2",
10809 "quote",11163 "quote",
1081211166
10813[[package]]11167[[package]]
10814name = "synstructure"11168name = "synstructure"
10815version = "0.12.4"11169version = "0.12.5"
10816source = "registry+https://github.com/rust-lang/crates.io-index"11170source = "registry+https://github.com/rust-lang/crates.io-index"
10817checksum = "b834f2d66f734cb897113e34aaff2f1ab4719ca946f9a7358dba8f8064148701"11171checksum = "474aaa926faa1603c40b7885a9eaea29b444d1cb2850cb7c0e37bb1a4182f4fa"
10818dependencies = [11172dependencies = [
10819 "proc-macro2",11173 "proc-macro2",
10820 "quote",11174 "quote",
1083611190
10837[[package]]11191[[package]]
10838name = "target-lexicon"11192name = "target-lexicon"
10839version = "0.12.0"11193version = "0.12.1"
10840source = "registry+https://github.com/rust-lang/crates.io-index"11194source = "registry+https://github.com/rust-lang/crates.io-index"
10841checksum = "64ae3b39281e4b14b8123bdbaddd472b7dfe215e444181f2f9d2443c2444f834"11195checksum = "b0652da4c4121005e9ed22b79f6c5f2d9e2752906b53a33e9490489ba421a6fb"
1084211196
10843[[package]]11197[[package]]
10844name = "tempfile"11198name = "tempfile"
1087411228
10875[[package]]11229[[package]]
10876name = "thiserror"11230name = "thiserror"
10877version = "1.0.25"11231version = "1.0.26"
10878source = "registry+https://github.com/rust-lang/crates.io-index"11232source = "registry+https://github.com/rust-lang/crates.io-index"
10879checksum = "fa6f76457f59514c7eeb4e59d891395fab0b2fd1d40723ae737d64153392e9c6"11233checksum = "93119e4feac1cbe6c798c34d3a53ea0026b0b1de6a120deef895137c0529bfe2"
10880dependencies = [11234dependencies = [
10881 "thiserror-impl",11235 "thiserror-impl",
10882]11236]
1088311237
10884[[package]]11238[[package]]
10885name = "thiserror-impl"11239name = "thiserror-impl"
10886version = "1.0.25"11240version = "1.0.26"
10887source = "registry+https://github.com/rust-lang/crates.io-index"11241source = "registry+https://github.com/rust-lang/crates.io-index"
10888checksum = "8a36768c0fbf1bb15eca10defa29526bda730a2376c2ab4393ccfa16fb1a318d"11242checksum = "060d69a0afe7796bf42e9e2ff91f5ee691fb15c53d38b4b62a9a53eb23164745"
10889dependencies = [11243dependencies = [
10890 "proc-macro2",11244 "proc-macro2",
10891 "quote",11245 "quote",
1096311317
10964[[package]]11318[[package]]
10965name = "tinyvec"11319name = "tinyvec"
10966version = "1.2.0"11320version = "1.3.1"
10967source = "registry+https://github.com/rust-lang/crates.io-index"11321source = "registry+https://github.com/rust-lang/crates.io-index"
10968checksum = "5b5220f05bb7de7f3f53c7c065e1199b3172696fe2db9f9c4d8ad9b4ee74c342"11322checksum = "848a1e1181b9f6753b5e96a092749e29b11d19ede67dfbbd6c7dc7e0f49b5338"
10969dependencies = [11323dependencies = [
10970 "tinyvec_macros",11324 "tinyvec_macros",
10971]11325]
1102511379
11026[[package]]11380[[package]]
11027name = "tokio"11381name = "tokio"
11028version = "1.8.1"11382version = "1.9.0"
11029source = "registry+https://github.com/rust-lang/crates.io-index"11383source = "registry+https://github.com/rust-lang/crates.io-index"
11030checksum = "98c8b05dc14c75ea83d63dd391100353789f5f24b8b3866542a5e85c8be8e985"11384checksum = "4b7b349f11a7047e6d1276853e612d152f5e8a352c61917887cc2169e2366b4c"
11031dependencies = [11385dependencies = [
11032 "autocfg",11386 "autocfg",
11033 "pin-project-lite 0.2.6",11387 "pin-project-lite 0.2.7",
11034]11388]
1103511389
11036[[package]]11390[[package]]
11297dependencies = [11651dependencies = [
11298 "cfg-if 1.0.0",11652 "cfg-if 1.0.0",
11299 "log",11653 "log",
11300 "pin-project-lite 0.2.6",11654 "pin-project-lite 0.2.7",
11301 "tracing-attributes",11655 "tracing-attributes",
11302 "tracing-core",11656 "tracing-core",
11303]11657]
11328source = "registry+https://github.com/rust-lang/crates.io-index"11682source = "registry+https://github.com/rust-lang/crates.io-index"
11329checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2"11683checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2"
11330dependencies = [11684dependencies = [
11331 "pin-project 1.0.7",11685 "pin-project 1.0.8",
11332 "tracing",11686 "tracing",
11333]11687]
1133411688
1135511709
11356[[package]]11710[[package]]
11357name = "tracing-subscriber"11711name = "tracing-subscriber"
11358version = "0.2.18"11712version = "0.2.19"
11359source = "registry+https://github.com/rust-lang/crates.io-index"11713source = "registry+https://github.com/rust-lang/crates.io-index"
11360checksum = "aa5553bf0883ba7c9cbe493b085c29926bd41b66afc31ff72cf17ff4fb60dcd5"11714checksum = "ab69019741fca4d98be3c62d2b75254528b5432233fd8a4d2739fec20278de48"
11361dependencies = [11715dependencies = [
11362 "ansi_term 0.12.1",11716 "ansi_term 0.12.1",
11363 "chrono",11717 "chrono",
1137711731
11378[[package]]11732[[package]]
11379name = "trie-db"11733name = "trie-db"
11380version = "0.22.5"11734version = "0.22.6"
11381source = "registry+https://github.com/rust-lang/crates.io-index"11735source = "registry+https://github.com/rust-lang/crates.io-index"
11382checksum = "cd81fe0c8bc2b528a51c9d2c31dae4483367a26a723a3c9a4a8120311d7774e3"11736checksum = "9eac131e334e81b6b3be07399482042838adcd7957aa0010231d0813e39e02fa"
11383dependencies = [11737dependencies = [
11384 "hash-db",11738 "hash-db",
11385 "hashbrown",11739 "hashbrown 0.11.2",
11386 "log",11740 "log",
11387 "rustc-hex",11741 "rustc-hex",
11388 "smallvec 1.6.1",11742 "smallvec 1.6.1",
11404checksum = "a1631b201eb031b563d2e85ca18ec8092508e262a3196ce9bd10a67ec87b9f5c"11758checksum = "a1631b201eb031b563d2e85ca18ec8092508e262a3196ce9bd10a67ec87b9f5c"
11405dependencies = [11759dependencies = [
11406 "hash-db",11760 "hash-db",
11407 "rlp 0.5.0",11761 "rlp",
11408]11762]
1140911763
11410[[package]]11764[[package]]
11459[[package]]11813[[package]]
11460name = "try-runtime-cli"11814name = "try-runtime-cli"
11461version = "0.9.0"11815version = "0.9.0"
11462source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.7#9c572625f6557dfdb19f47474369a0327d51dfbc"11816source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8#74101dc21cfffb4c2d014fcc28edc166d5ca1b16"
11463dependencies = [11817dependencies = [
11464 "frame-try-runtime",11818 "frame-try-runtime",
11465 "log",11819 "log",
11466 "parity-scale-codec 2.1.3",11820 "parity-scale-codec",
11467 "remote-externalities",11821 "remote-externalities",
11468 "sc-chain-spec",11822 "sc-chain-spec",
11469 "sc-cli",11823 "sc-cli",
11475 "sp-blockchain",11829 "sp-blockchain",
11476 "sp-core",11830 "sp-core",
11477 "sp-externalities",11831 "sp-externalities",
11832 "sp-io",
11478 "sp-keystore",11833 "sp-keystore",
11479 "sp-runtime",11834 "sp-runtime",
11480 "sp-state-machine",11835 "sp-state-machine",
11488checksum = "04f8ab788026715fa63b31960869617cba39117e520eb415b0139543e325ab59"11843checksum = "04f8ab788026715fa63b31960869617cba39117e520eb415b0139543e325ab59"
11489dependencies = [11844dependencies = [
11490 "cfg-if 0.1.10",11845 "cfg-if 0.1.10",
11491 "rand 0.3.23",11846 "rand 0.7.3",
11492 "static_assertions",11847 "static_assertions",
11493]11848]
1149411849
1150611861
11507[[package]]11862[[package]]
11508name = "uint"11863name = "uint"
11509version = "0.8.5"11864version = "0.9.1"
11510source = "registry+https://github.com/rust-lang/crates.io-index"11865source = "registry+https://github.com/rust-lang/crates.io-index"
11511checksum = "9db035e67dfaf7edd9aebfe8676afcd63eed53c8a4044fed514c8cccf1835177"11866checksum = "6470ab50f482bde894a037a57064480a246dbfdd5960bd65a44824693f08da5f"
11512dependencies = [11867dependencies = [
11513 "byteorder",11868 "byteorder",
11514 "crunchy",11869 "crunchy",
11515 "rustc-hex",
11516 "static_assertions",
11517]
11518
11519[[package]]
11520name = "uint"
11521version = "0.9.0"
11522source = "registry+https://github.com/rust-lang/crates.io-index"
11523checksum = "e11fe9a9348741cf134085ad57c249508345fe16411b3d7fb4ff2da2f1d6382e"
11524dependencies = [
11525 "byteorder",
11526 "crunchy",
11527 "hex",11870 "hex",
11528 "static_assertions",11871 "static_assertions",
11529]11872]
1155711900
11558[[package]]11901[[package]]
11559name = "unicode-segmentation"11902name = "unicode-segmentation"
11560version = "1.7.1"11903version = "1.8.0"
11561source = "registry+https://github.com/rust-lang/crates.io-index"11904source = "registry+https://github.com/rust-lang/crates.io-index"
11562checksum = "bb0d2e7be6ae3a5fa87eed5fb451aff96f2573d2694942e40543ae0bbe19c796"11905checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b"
1156311906
11564[[package]]11907[[package]]
11565name = "unicode-width"11908name = "unicode-width"
1157511918
11576[[package]]11919[[package]]
11577name = "universal-hash"11920name = "universal-hash"
11578version = "0.4.0"11921version = "0.4.1"
11579source = "registry+https://github.com/rust-lang/crates.io-index"11922source = "registry+https://github.com/rust-lang/crates.io-index"
11580checksum = "8326b2c654932e3e4f9196e69d08fdf7cfd718e1dc6f66b347e6024a0c961402"11923checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05"
11581dependencies = [11924dependencies = [
11582 "generic-array 0.14.4",11925 "generic-array 0.14.4",
11583 "subtle 2.4.0",11926 "subtle 2.4.1",
11584]11927]
1158511928
11586[[package]]11929[[package]]
11623name = "up-sponsorship"11966name = "up-sponsorship"
11624version = "0.1.0"11967version = "0.1.0"
11625dependencies = [11968dependencies = [
11626 "impl-trait-for-tuples 0.2.1",11969 "impl-trait-for-tuples",
11627]11970]
1162811971
11629[[package]]11972[[package]]
1166112004
11662[[package]]12005[[package]]
11663name = "vcpkg"12006name = "vcpkg"
11664version = "0.2.14"12007version = "0.2.15"
11665source = "registry+https://github.com/rust-lang/crates.io-index"12008source = "registry+https://github.com/rust-lang/crates.io-index"
11666checksum = "70455df2fdf4e9bf580a92e443f1eb0303c390d682e2ea817312c9e81f8c3399"12009checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
1166712010
11668[[package]]12011[[package]]
11669name = "vec_map"12012name = "vec_map"
11816source = "registry+https://github.com/rust-lang/crates.io-index"12159source = "registry+https://github.com/rust-lang/crates.io-index"
11817checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f"12160checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f"
11818dependencies = [12161dependencies = [
11819 "futures 0.3.15",12162 "futures 0.3.16",
11820 "js-sys",12163 "js-sys",
11821 "parking_lot 0.11.1",12164 "parking_lot 0.11.1",
11822 "pin-utils",12165 "pin-utils",
11931checksum = "c5d2a763e7a6fc734218e0e463196762a4f409c483063d81e0e85f96343b2e0a"12274checksum = "c5d2a763e7a6fc734218e0e463196762a4f409c483063d81e0e85f96343b2e0a"
11932dependencies = [12275dependencies = [
11933 "anyhow",12276 "anyhow",
11934 "gimli",12277 "gimli 0.24.0",
11935 "more-asserts",12278 "more-asserts",
11936 "object 0.24.0",12279 "object 0.24.0",
11937 "target-lexicon",12280 "target-lexicon",
11950 "cranelift-codegen",12293 "cranelift-codegen",
11951 "cranelift-entity",12294 "cranelift-entity",
11952 "cranelift-wasm",12295 "cranelift-wasm",
11953 "gimli",12296 "gimli 0.24.0",
11954 "indexmap",12297 "indexmap",
11955 "log",12298 "log",
11956 "more-asserts",12299 "more-asserts",
11976source = "registry+https://github.com/rust-lang/crates.io-index"12319source = "registry+https://github.com/rust-lang/crates.io-index"
11977checksum = "4d4539ea734422b7c868107e2187d7746d8affbcaa71916d72639f53757ad707"12320checksum = "4d4539ea734422b7c868107e2187d7746d8affbcaa71916d72639f53757ad707"
11978dependencies = [12321dependencies = [
11979 "addr2line",12322 "addr2line 0.15.2",
11980 "anyhow",12323 "anyhow",
11981 "cfg-if 1.0.0",12324 "cfg-if 1.0.0",
11982 "cranelift-codegen",12325 "cranelift-codegen",
11983 "cranelift-entity",12326 "cranelift-entity",
11984 "cranelift-frontend",12327 "cranelift-frontend",
11985 "cranelift-native",12328 "cranelift-native",
11986 "cranelift-wasm",12329 "cranelift-wasm",
11987 "gimli",12330 "gimli 0.24.0",
11988 "log",12331 "log",
11989 "more-asserts",12332 "more-asserts",
11990 "object 0.24.0",12333 "object 0.24.0",
12025dependencies = [12368dependencies = [
12026 "anyhow",12369 "anyhow",
12027 "cfg-if 1.0.0",12370 "cfg-if 1.0.0",
12028 "gimli",12371 "gimli 0.24.0",
12029 "lazy_static",12372 "lazy_static",
12030 "libc",12373 "libc",
12031 "object 0.24.0",12374 "object 0.24.0",
12118]12461]
1211912462
12120[[package]]12463[[package]]
12464name = "westend-runtime"
12465version = "0.9.8"
12466source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
12467dependencies = [
12468 "beefy-primitives",
12469 "bitvec 0.20.4",
12470 "frame-benchmarking",
12471 "frame-election-provider-support",
12472 "frame-executive",
12473 "frame-support",
12474 "frame-system",
12475 "frame-system-benchmarking",
12476 "frame-system-rpc-runtime-api",
12477 "frame-try-runtime",
12478 "hex-literal",
12479 "log",
12480 "max-encoded-len",
12481 "pallet-authority-discovery",
12482 "pallet-authorship",
12483 "pallet-babe",
12484 "pallet-balances",
12485 "pallet-collective",
12486 "pallet-democracy",
12487 "pallet-election-provider-multi-phase",
12488 "pallet-elections-phragmen",
12489 "pallet-grandpa",
12490 "pallet-identity",
12491 "pallet-im-online",
12492 "pallet-indices",
12493 "pallet-membership",
12494 "pallet-mmr-primitives",
12495 "pallet-multisig",
12496 "pallet-nicks",
12497 "pallet-offences",
12498 "pallet-offences-benchmarking",
12499 "pallet-proxy",
12500 "pallet-recovery",
12501 "pallet-scheduler 3.0.0 (git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8)",
12502 "pallet-session",
12503 "pallet-session-benchmarking",
12504 "pallet-society",
12505 "pallet-staking",
12506 "pallet-staking-reward-curve",
12507 "pallet-sudo",
12508 "pallet-timestamp",
12509 "pallet-transaction-payment",
12510 "pallet-transaction-payment-rpc-runtime-api",
12511 "pallet-treasury",
12512 "pallet-utility",
12513 "pallet-vesting",
12514 "pallet-xcm",
12515 "parity-scale-codec",
12516 "polkadot-parachain",
12517 "polkadot-primitives",
12518 "polkadot-runtime-common",
12519 "polkadot-runtime-parachains",
12520 "rustc-hex",
12521 "serde",
12522 "serde_derive",
12523 "smallvec 1.6.1",
12524 "sp-api",
12525 "sp-authority-discovery",
12526 "sp-block-builder",
12527 "sp-consensus-babe",
12528 "sp-core",
12529 "sp-inherents",
12530 "sp-io",
12531 "sp-npos-elections",
12532 "sp-offchain",
12533 "sp-runtime",
12534 "sp-session",
12535 "sp-staking",
12536 "sp-std",
12537 "sp-transaction-pool",
12538 "sp-version",
12539 "static_assertions",
12540 "substrate-wasm-builder 4.0.0 (git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.8)",
12541 "xcm",
12542 "xcm-builder",
12543 "xcm-executor",
12544]
12545
12546[[package]]
12121name = "which"12547name = "which"
12122version = "4.1.0"12548version = "4.1.0"
12123source = "registry+https://github.com/rust-lang/crates.io-index"12549source = "registry+https://github.com/rust-lang/crates.io-index"
1221412640
12215[[package]]12641[[package]]
12216name = "xcm"12642name = "xcm"
12217version = "0.9.7"12643version = "0.9.8"
12218source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"12644source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
12219dependencies = [12645dependencies = [
12220 "derivative",12646 "derivative",
12221 "impl-trait-for-tuples 0.2.1",12647 "impl-trait-for-tuples",
12222 "parity-scale-codec 2.1.3",12648 "parity-scale-codec",
12223]12649]
1222412650
12225[[package]]12651[[package]]
12226name = "xcm-builder"12652name = "xcm-builder"
12227version = "0.9.7"12653version = "0.9.8"
12228source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"12654source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
12229dependencies = [12655dependencies = [
12230 "frame-support",12656 "frame-support",
12231 "frame-system",12657 "frame-system",
12232 "impl-trait-for-tuples 0.2.1",12658 "impl-trait-for-tuples",
12233 "pallet-transaction-payment",12659 "pallet-transaction-payment",
12234 "parity-scale-codec 2.1.3",12660 "parity-scale-codec",
12235 "polkadot-parachain",12661 "polkadot-parachain",
12236 "sp-arithmetic",12662 "sp-arithmetic",
12237 "sp-io",12663 "sp-io",
1224312669
12244[[package]]12670[[package]]
12245name = "xcm-executor"12671name = "xcm-executor"
12246version = "0.9.7"12672version = "0.9.8"
12247source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.7#5d35bac7408a4cb12a578764217d06f3920b36aa"12673source = "git+https://github.com/paritytech/polkadot?branch=release-v0.9.8#3a10ee63c0b5703a1c802db3438ab7e01344a8ce"
12248dependencies = [12674dependencies = [
12249 "frame-support",12675 "frame-support",
12250 "impl-trait-for-tuples 0.2.1",12676 "impl-trait-for-tuples",
12251 "log",12677 "log",
12252 "parity-scale-codec 2.1.3",12678 "parity-scale-codec",
12253 "sp-arithmetic",12679 "sp-arithmetic",
12254 "sp-core",12680 "sp-core",
12255 "sp-io",12681 "sp-io",
12264source = "registry+https://github.com/rust-lang/crates.io-index"12690source = "registry+https://github.com/rust-lang/crates.io-index"
12265checksum = "e7d9028f208dd5e63c614be69f115c1b53cacc1111437d4c765185856666c107"12691checksum = "e7d9028f208dd5e63c614be69f115c1b53cacc1111437d4c765185856666c107"
12266dependencies = [12692dependencies = [
12267 "futures 0.3.15",12693 "futures 0.3.16",
12268 "log",12694 "log",
12269 "nohash-hasher",12695 "nohash-hasher",
12270 "parking_lot 0.11.1",12696 "parking_lot 0.11.1",
1228012706
12281[[package]]12707[[package]]
12282name = "zeroize"12708name = "zeroize"
12283version = "1.3.0"12709version = "1.4.1"
12284source = "registry+https://github.com/rust-lang/crates.io-index"12710source = "registry+https://github.com/rust-lang/crates.io-index"
12285checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd"12711checksum = "377db0846015f7ae377174787dd452e1c5f5a9050bc6f954911d01f116daa0cd"
12286dependencies = [12712dependencies = [
12287 "zeroize_derive",12713 "zeroize_derive",
12288]12714]
modifiedCargo.tomldiffbeforeafterboth
5 'pallets/*',5 'pallets/*',
6 'primitives/*',6 'primitives/*',
7 'runtime',7 'runtime',
8 'crates/evm-coder',8 'crates/*',
9 'crates/evm-coder-macros',
10]9]
11[profile.release]10[profile.release]
12panic = 'unwind'11panic = 'unwind'
addedMakefilediffbeforeafterboth

no changes

modifiedREADME.mddiffbeforeafterboth
257Uncomment following lies:257Uncomment following lies:
2581. In node/rpc/Cargo.toml2581. In node/rpc/Cargo.toml
259```259```
260# pallet-contracts-rpc = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }260# pallet-contracts-rpc = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
261```261```
262262
2632. In node/rpc/src/lib.rs2632. In node/rpc/src/lib.rs
280 # [dependencies.pallet-contracts]280 # [dependencies.pallet-contracts]
281 # git = 'https://github.com/paritytech/substrate.git'281 # git = 'https://github.com/paritytech/substrate.git'
282 # default-features = false282 # default-features = false
283 # branch = 'polkadot-v0.9.7'283 # branch = 'polkadot-v0.9.8'
284 # version = '3.0.0'284 # version = '3.0.0'
285285
286 # [dependencies.pallet-contracts-primitives]286 # [dependencies.pallet-contracts-primitives]
287 # git = 'https://github.com/paritytech/substrate.git'287 # git = 'https://github.com/paritytech/substrate.git'
288 # default-features = false288 # default-features = false
289 # branch = 'polkadot-v0.9.7'289 # branch = 'polkadot-v0.9.8'
290 # version = '3.0.0'290 # version = '3.0.0'
291291
292 # [dependencies.pallet-contracts-rpc-runtime-api]292 # [dependencies.pallet-contracts-rpc-runtime-api]
293 # git = 'https://github.com/paritytech/substrate.git'293 # git = 'https://github.com/paritytech/substrate.git'
294 # default-features = false294 # default-features = false
295 # branch = 'polkadot-v0.9.7'295 # branch = 'polkadot-v0.9.8'
296 # version = '3.0.0'296 # version = '3.0.0'
297...297...
298 # pallet-contract-helpers = { path = '../pallets/contract-helpers', default-features = false, version = '0.1.0' }298 # pallet-contract-helpers = { path = '../pallets/contract-helpers', default-features = false, version = '0.1.0' }
modifiedcrates/evm-coder-macros/src/lib.rsdiffbeforeafterboth
6use quote::quote;6use quote::quote;
7use sha3::{Digest, Keccak256};7use sha3::{Digest, Keccak256};
8use syn::{8use syn::{
9 AttributeArgs, DeriveInput, GenericArgument, Ident, ItemTrait, Pat, Path, PathArguments,9 AttributeArgs, DeriveInput, GenericArgument, Ident, ItemImpl, Pat, Path, PathArguments,
10 PathSegment, Type, parse_macro_input, spanned::Spanned,10 PathSegment, Type, parse_macro_input, spanned::Spanned,
11};11};
1212
106 }106 }
107}107}
108108
109fn parse_ident_from_segment(segment: &PathSegment) -> syn::Result<&Ident> {109fn parse_ident_from_segment(segment: &PathSegment, allow_generics: bool) -> syn::Result<&Ident> {
110 if segment.arguments != PathArguments::None {110 if segment.arguments != PathArguments::None && !allow_generics {
111 return Err(syn::Error::new(111 return Err(syn::Error::new(
112 segment.arguments.span(),112 segment.arguments.span(),
113 "unexpected generic type",113 "unexpected generic type",
116 Ok(&segment.ident)116 Ok(&segment.ident)
117}117}
118118
119fn parse_ident_from_path(path: &Path) -> syn::Result<&Ident> {119fn parse_ident_from_path(path: &Path, allow_generics: bool) -> syn::Result<&Ident> {
120 let segment = parse_path_segment(path)?;120 let segment = parse_path_segment(path)?;
121 parse_ident_from_segment(segment)121 parse_ident_from_segment(segment, allow_generics)
122}122}
123123
124fn parse_ident_from_type(ty: &Type) -> syn::Result<&Ident> {124fn parse_ident_from_type(ty: &Type, allow_generics: bool) -> syn::Result<&Ident> {
125 let path = parse_path(ty)?;125 let path = parse_path(ty)?;
126 parse_ident_from_path(path)126 parse_ident_from_path(path, allow_generics)
127}127}
128128
129// Gets T out of Result<T>129// Gets T out of Result<T>
130fn parse_result_ok(ty: &Type) -> syn::Result<&Ident> {130fn parse_result_ok(ty: &Type) -> syn::Result<&Type> {
131 let path = parse_path(ty)?;131 let path = parse_path(ty)?;
132 let segment = parse_path_segment(path)?;132 let segment = parse_path_segment(path)?;
133133
160 }160 }
161 };161 };
162162
163 parse_ident_from_type(ty)163 Ok(ty)
164}164}
165165
166fn pascal_ident_to_call(ident: &Ident) -> Ident {166fn pascal_ident_to_call(ident: &Ident) -> Ident {
184 Ident::new(&name, ident.span())184 Ident::new(&name, ident.span())
185}185}
186
187fn format_ty(ty: &Ident) -> String {
188 if ty == "string" {
189 format!("{} memory", ty)
190 } else {
191 ty.to_string()
192 }
193}
194186
195#[proc_macro_attribute]187#[proc_macro_attribute]
196pub fn solidity_interface(args: TokenStream, stream: TokenStream) -> TokenStream {188pub fn solidity_interface(args: TokenStream, stream: TokenStream) -> TokenStream {
197 let args = parse_macro_input!(args as AttributeArgs);189 let args = parse_macro_input!(args as AttributeArgs);
198 let args = solidity_interface::InterfaceInfo::from_list(&args).unwrap();190 let args = solidity_interface::InterfaceInfo::from_list(&args).unwrap();
199191
200 let input: ItemTrait = match syn::parse(stream) {192 let input: ItemImpl = match syn::parse(stream) {
201 Ok(t) => t,193 Ok(t) => t,
202 Err(e) => return e.to_compile_error().into(),194 Err(e) => return e.to_compile_error().into(),
203 };195 };
204196
205 match solidity_interface::SolidityInterface::try_from(args, &input) {197 let expanded = match solidity_interface::SolidityInterface::try_from(args, &input) {
206 Ok(v) => v.expand(),198 Ok(v) => v.expand(),
207 Err(e) => e.to_compile_error(),199 Err(e) => e.to_compile_error(),
208 }200 };
201
202 (quote! {
203 #input
204
205 #expanded
206 })
209 .into()207 .into()
210}208}
211209
modifiedcrates/evm-coder-macros/src/solidity_interface.rsdiffbeforeafterboth
5use inflector::cases;5use inflector::cases;
6use std::fmt::Write;6use std::fmt::Write;
7use syn::{7use syn::{
8 FnArg, Ident, ItemTrait, Meta, NestedMeta, PatType, Path, ReturnType, TraitItem,8 FnArg, Generics, Ident, ImplItem, ImplItemMethod, ItemImpl, Meta, NestedMeta, PatType, Path,
9 TraitItemMethod, Visibility, spanned::Spanned,9 ReturnType, Type, spanned::Spanned,
10};10};
1111
12use crate::{12use crate::{
13 fn_selector_str, format_ty, parse_ident_from_pat, parse_ident_from_path, parse_ident_from_type,13 fn_selector_str, parse_ident_from_pat, parse_ident_from_path, parse_ident_from_type,
14 parse_result_ok, pascal_ident_to_call, pascal_ident_to_snake_call, snake_ident_to_pascal,14 parse_result_ok, pascal_ident_to_call, pascal_ident_to_snake_call, snake_ident_to_pascal,
15 snake_ident_to_screaming,15 snake_ident_to_screaming,
16};16};
22}22}
23impl Is {23impl Is {
24 fn try_from(path: &Path) -> syn::Result<Self> {24 fn try_from(path: &Path) -> syn::Result<Self> {
25 let name = parse_ident_from_path(path)?.clone();25 let name = parse_ident_from_path(path, false)?.clone();
26 Ok(Self {26 Ok(Self {
27 pascal_call_name: pascal_ident_to_call(&name),27 pascal_call_name: pascal_ident_to_call(&name),
28 snake_call_name: pascal_ident_to_snake_call(&name),28 snake_call_name: pascal_ident_to_snake_call(&name),
5454
55 fn expand_variant_call(&self) -> proc_macro2::TokenStream {55 fn expand_variant_call(&self) -> proc_macro2::TokenStream {
56 let name = &self.name;56 let name = &self.name;
57 let snake_call_name = &self.snake_call_name;57 let pascal_call_name = &self.pascal_call_name;
58 quote! {58 quote! {
59 InternalCall::#name(call) => return self.#snake_call_name(Msg {59 InternalCall::#name(call) => return <Self as ::evm_coder::Callable<#pascal_call_name>>::call(self, Msg {
60 call,60 call,
61 caller: c.caller,61 caller: c.caller,
62 value: c.value,62 value: c.value,
63 })63 })
64 }64 }
65 }65 }
6666
67 fn expand_call_inner(&self) -> proc_macro2::TokenStream {67 fn expand_parse(&self) -> proc_macro2::TokenStream {
68 let snake_call_name = &self.snake_call_name;68 let name = &self.name;
69 let pascal_call_name = &self.pascal_call_name;69 let pascal_call_name = &self.pascal_call_name;
70 quote! {70 quote! {
71 fn #snake_call_name(&mut self, c: Msg<#pascal_call_name>) -> ::core::result::Result<::evm_coder::abi::AbiWriter, Self::Error>;71 if let Some(parsed_call) = #pascal_call_name::parse(method_id, reader)? {
72 return Ok(Some(Self::#name(parsed_call)))
73 }
72 }74 }
73 }75 }
7476
75 fn expand_parse(&self) -> proc_macro2::TokenStream {77 fn expand_generator(&self) -> proc_macro2::TokenStream {
76 let name = &self.name;
77 let pascal_call_name = &self.pascal_call_name;78 let pascal_call_name = &self.pascal_call_name;
78 quote! {79 quote! {
79 if let Some(parsed_call) = #pascal_call_name::parse(method_id, reader)? {80 #pascal_call_name::generate_solidity_interface(out_set, is_impl);
80 return Ok(Some(Self::#name(parsed_call)))
81 }
82 }81 }
83 }82 }
83
84 fn expand_event_generator(&self) -> proc_macro2::TokenStream {
85 let name = &self.name;
86 quote! {
87 #name::generate_solidity_interface(out_set, is_impl);
88 }
89 }
84}90}
8591
86#[derive(Default)]92#[derive(Default)]
100106
101#[derive(FromMeta)]107#[derive(FromMeta)]
102pub struct InterfaceInfo {108pub struct InterfaceInfo {
109 name: Ident,
103 #[darling(default)]110 #[darling(default)]
104 is: IsList,111 is: IsList,
105 #[darling(default)]112 #[darling(default)]
116123
117struct MethodArg {124struct MethodArg {
118 name: Ident,125 name: Ident,
126 camel_name: String,
119 ty: Ident,127 ty: Ident,
120}128}
121impl MethodArg {129impl MethodArg {
122 fn try_from(value: &PatType) -> syn::Result<Self> {130 fn try_from(value: &PatType) -> syn::Result<Self> {
123 Ok(Self {
124 name: parse_ident_from_pat(&value.pat)?.clone(),131 let name = parse_ident_from_pat(&value.pat)?.clone();
132 Ok(Self {
133 camel_name: cases::camelcase::to_camel_case(&name.to_string()),
134 name,
125 ty: parse_ident_from_type(&value.ty)?.clone(),135 ty: parse_ident_from_type(&value.ty, false)?.clone(),
126 })136 })
127 }137 }
128 fn is_value(&self) -> bool {138 fn is_value(&self) -> bool {
129 self.ty == "value"139 self.ty == "value"
174 }184 }
175 }185 }
176186
177 fn solidity_def(&self) -> String {187 fn expand_solidity_argument(&self) -> proc_macro2::TokenStream {
178 assert!(!self.is_special());188 let camel_name = &self.camel_name.to_string();
179 format!("{} {}", format_ty(&self.ty), self.name)189 let ty = &self.ty;
190 quote! {
191 <NamedArgument<#ty>>::new(#camel_name)
192 }
180 }193 }
181}194}
182195
197 args: Vec<MethodArg>,210 args: Vec<MethodArg>,
198 has_normal_args: bool,211 has_normal_args: bool,
199 mutability: Mutability,212 mutability: Mutability,
200 result: Ident,213 result: Type,
201}214}
202impl Method {215impl Method {
203 fn try_from(value: &TraitItemMethod) -> syn::Result<Self> {216 fn try_from(value: &ImplItemMethod) -> syn::Result<Self> {
204 let mut info = MethodInfo {217 let mut info = MethodInfo {
205 rename_selector: None,218 rename_selector: None,
206 };219 };
207 for attr in &value.attrs {220 for attr in &value.attrs {
208 let ident = parse_ident_from_path(&attr.path)?;221 let ident = parse_ident_from_path(&attr.path, false)?;
209 if ident == "solidity" {222 if ident == "solidity" {
210 let args = attr.parse_meta().unwrap();223 let args = attr.parse_meta().unwrap();
211 info = MethodInfo::from_meta(&args).unwrap();224 info = MethodInfo::from_meta(&args).unwrap();
392 }405 }
393 }406 }
394407
395 fn solidity_def(&self) -> String {408 fn expand_solidity_function(&self) -> proc_macro2::TokenStream {
396 let mut out = format!("function {}(", self.camel_name);409 let camel_name = &self.camel_name;
397 for (i, arg) in self.args.iter().filter(|a| !a.is_special()).enumerate() {
398 if i != 0 {
399 out.push_str(", ");
400 }
401 out.push_str(&arg.solidity_def());
402 }
403 out.push(')');
404 match self.mutability {410 let mutability = match self.mutability {
405 Mutability::Mutable => {}411 Mutability::Mutable => quote! {SolidityMutability::Mutable},
406 Mutability::View => write!(out, " view").unwrap(),412 Mutability::View => quote! { SolidityMutability::View },
407 Mutability::Pure => write!(out, " pure").unwrap(),413 Mutability::Pure => quote! {SolidityMutability::Pure},
408 }414 };
409 if self.result != "void" {415 let result = &self.result;
416
410 write!(out, " returns ({})", format_ty(&self.result)).unwrap();417 let args = self
411 }418 .args
419 .iter()
420 .filter(|a| !a.is_special())
421 .map(MethodArg::expand_solidity_argument);
422
423 quote! {
424 SolidityFunction {
425 name: #camel_name,
426 mutability: #mutability,
427 args: (
428 #(
429 #args,
430 )*
431 ),
412 out.push(';');432 result: <UnnamedArgument<#result>>::default(),
413 out433 }
434 }
414 }435 }
415}436}
416437
417pub struct SolidityInterface {438pub struct SolidityInterface {
418 vis: Visibility,439 generics: Generics,
419 name: Ident,440 name: Box<syn::Type>,
420 info: InterfaceInfo,441 info: InterfaceInfo,
421 methods: Vec<Method>,442 methods: Vec<Method>,
422 items: Vec<TraitItem>,
423}443}
424impl SolidityInterface {444impl SolidityInterface {
425 pub fn try_from(info: InterfaceInfo, value: &ItemTrait) -> syn::Result<Self> {445 pub fn try_from(info: InterfaceInfo, value: &ItemImpl) -> syn::Result<Self> {
426 let mut found_error = false;
427 let mut methods = Vec::new();446 let mut methods = Vec::new();
428447
429 for item in &value.items {448 for item in &value.items {
430 match item {
431 TraitItem::Type(ty) => {449 if let ImplItem::Method(method) = item {
432 if ty.ident == "Error" {
433 found_error = true;
434 }
435 }
436 TraitItem::Method(method) => methods.push(Method::try_from(method)?),450 methods.push(Method::try_from(method)?)
437 _ => {}451 }
438 }
439 }452 }
440 if !found_error {
441 return Err(syn::Error::new(
442 value.span(),
443 "expected associated type called Error, which should implement From<&str>",
444 ));
445 }
446 Ok(Self {453 Ok(Self {
447 vis: value.vis.clone(),454 generics: value.generics.clone(),
448 name: value.ident.clone(),455 name: value.self_ty.clone(),
449 info,456 info,
450 methods,457 methods,
451 items: value.items.clone(),
452 })458 })
453 }459 }
454 pub fn expand(self) -> proc_macro2::TokenStream {460 pub fn expand(self) -> proc_macro2::TokenStream {
455 let vis = self.vis;
456 let name = self.name;461 let name = self.name;
462
457 let items = self.items;463 let solidity_name = self.info.name.to_string();
458
459 let call_name = pascal_ident_to_call(&name);464 let call_name = pascal_ident_to_call(&self.info.name);
460
461 let call_sub = self465 let generics = self.generics;
462 .info466
463 .inline_is
464 .0
465 .iter()
466 .chain(self.info.is.0.iter())
467 .map(Is::expand_call_def);
468 let call_inner = self467 let call_sub = self
469 .info468 .info
470 .inline_is469 .inline_is
471 .0470 .0
472 .iter()471 .iter()
473 .chain(self.info.is.0.iter())472 .chain(self.info.is.0.iter())
474 .map(Is::expand_call_inner);473 .map(Is::expand_call_def);
475 let call_parse = self474 let call_parse = self
476 .info475 .info
477 .inline_is476 .inline_is
495 let interface_id = self.methods.iter().map(Method::expand_interface_id);494 let interface_id = self.methods.iter().map(Method::expand_interface_id);
496 let parsers = self.methods.iter().map(Method::expand_parse);495 let parsers = self.methods.iter().map(Method::expand_parse);
497 let call_variants_this = self.methods.iter().map(Method::expand_variant_call);496 let call_variants_this = self.methods.iter().map(Method::expand_variant_call);
497 let solidity_functions = self.methods.iter().map(Method::expand_solidity_function);
498
499 // TODO: Inline inline_is
500 let solidity_is = self
501 .info
502 .is
503 .0
504 .iter()
505 .chain(self.info.inline_is.0.iter())
506 .map(|is| is.name.to_string());
507 let solidity_events_is = self.info.events.0.iter().map(|is| is.name.to_string());
508 let solidity_generators = self
509 .info
510 .is
511 .0
512 .iter()
513 .chain(self.info.inline_is.0.iter())
514 .map(Is::expand_generator);
515 let solidity_event_generators = self.info.events.0.iter().map(Is::expand_event_generator);
498516
499 // let methods = self.methods.iter().map(Method::solidity_def);517 // let methods = self.methods.iter().map(Method::solidity_def);
500518
501 quote! {519 quote! {
502 #[derive(Debug)]520 #[derive(Debug)]
503 #vis enum #call_name {521 pub enum #call_name {
504 #(522 #(
505 #calls,523 #calls,
506 )*524 )*
507 #(525 #(
508 #call_sub,526 #call_sub,
509 )*527 )*
510 }528 }
511 impl #call_name {529 impl #call_name {
530 #(
531 #consts
532 )*
533 pub const fn interface_id() -> u32 {
534 let mut interface_id = 0;
535 #(#interface_id)*
536 #(#inline_interface_id)*
537 interface_id
538 }
539 pub fn supports_interface(interface_id: u32) -> bool {
540 interface_id != 0xffffff && (
541 interface_id == Self::interface_id()
542 #(
543 || #supports_interface
544 )*
545 )
546 }
547 pub fn generate_solidity_interface(out_set: &mut sp_std::collections::btree_set::BTreeSet<string>, is_impl: bool) {
548 use evm_coder::solidity::*;
549 use core::fmt::Write;
550 let interface = SolidityInterface {
551 name: #solidity_name,
552 is: &["Dummy", #(
553 #solidity_is,
554 )* #(
555 #solidity_events_is,
556 )* ],
557 functions: (#(
558 #solidity_functions,
559 )*),
560 };
561 if is_impl {
562 out_set.insert("// Common stubs holder\ncontract Dummy {\n\tuint8 dummy;\n\tstring stub_error = \"this contract is implemented in native\";\n}\n".into());
563 } else {
564 out_set.insert("// Common stubs holder\ninterface Dummy {\n}\n".into());
565 }
566 #(
567 #solidity_generators
568 )*
569 #(
570 #solidity_event_generators
571 )*
572
573 let mut out = string::new();
574 // In solidity interface usage (is) should be preceeded by interface definition
575 // This comment helps to sort it in a set
576 if #solidity_name.starts_with("Inline") {
577 out.push_str("// Inline\n");
578 }
579 let _ = interface.format(is_impl, &mut out);
580 out_set.insert(out);
581 }
582 }
512 #(583 impl ::evm_coder::Call for #call_name {
513 #consts
514 )*
515 pub fn parse(method_id: u32, reader: &mut ::evm_coder::abi::AbiReader) -> ::evm_coder::abi::Result<Option<Self>> {584 fn parse(method_id: u32, reader: &mut ::evm_coder::abi::AbiReader) -> ::evm_coder::execution::Result<Option<Self>> {
516 use ::evm_coder::abi::AbiRead;585 use ::evm_coder::abi::AbiRead;
517 match method_id {586 match method_id {
518 #(587 #(
525 )else*594 )else*
526 return Ok(None);595 return Ok(None);
527 }596 }
528 pub const fn interface_id() -> u32 {597 }
529 let mut interface_id = 0;
530 #(#interface_id)*598 impl #generics ::evm_coder::Callable<#call_name> for #name {
531 #(#inline_interface_id)*
532 interface_id
533 }
534 pub fn supports_interface(interface_id: u32) -> bool {
535 interface_id != 0xffffff && (
536 interface_id == Self::interface_id()
537 #(
538 || #supports_interface
539 )*
540 )
541 }
542 }
543 #vis trait #name {
544 #(
545 #items
546 )*
547 #(
548 #call_inner
549 )*
550 #[allow(unreachable_code)] // In case of no inner calls599 #[allow(unreachable_code)] // In case of no inner calls
551 fn call(&mut self, c: Msg<#call_name>) -> ::core::result::Result<::evm_coder::abi::AbiWriter, Self::Error> {600 fn call(&mut self, c: Msg<#call_name>) -> Result<::evm_coder::abi::AbiWriter> {
552 use ::evm_coder::abi::AbiWrite;601 use ::evm_coder::abi::AbiWrite;
553 type InternalCall = #call_name;602 type InternalCall = #call_name;
554 match c.call {603 match c.call {
modifiedcrates/evm-coder-macros/src/to_log.rsdiffbeforeafterboth
1use inflector::cases;
1use syn::{Data, DeriveInput, Field, Fields, Ident, Variant, spanned::Spanned};2use syn::{Data, DeriveInput, Field, Fields, Ident, Variant, spanned::Spanned};
2use std::fmt::Write;3use std::fmt::Write;
3use quote::quote;4use quote::quote;
67
7struct EventField {8struct EventField {
8 name: Ident,9 name: Ident,
10 camel_name: String,
9 ty: Ident,11 ty: Ident,
10 indexed: bool,12 indexed: bool,
11}13}
1214
13impl EventField {15impl EventField {
14 fn try_from(field: &Field) -> syn::Result<Self> {16 fn try_from(field: &Field) -> syn::Result<Self> {
15 let name = field.ident.as_ref().unwrap();17 let name = field.ident.as_ref().unwrap();
16 let ty = parse_ident_from_type(&field.ty)?;18 let ty = parse_ident_from_type(&field.ty, false)?;
17 let mut indexed = false;19 let mut indexed = false;
18 for attr in &field.attrs {20 for attr in &field.attrs {
19 if let Ok(ident) = parse_ident_from_path(&attr.path) {21 if let Ok(ident) = parse_ident_from_path(&attr.path, false) {
20 if ident == "indexed" {22 if ident == "indexed" {
21 indexed = true;23 indexed = true;
22 }24 }
23 }25 }
24 }26 }
25 Ok(Self {27 Ok(Self {
26 name: name.to_owned(),28 name: name.to_owned(),
29 camel_name: cases::camelcase::to_camel_case(&name.to_string()),
27 ty: ty.to_owned(),30 ty: ty.to_owned(),
28 indexed,31 indexed,
29 })32 })
30 }33 }
34 fn expand_solidity_argument(&self) -> proc_macro2::TokenStream {
35 let camel_name = &self.camel_name;
36 let ty = &self.ty;
37 let indexed = self.indexed;
38 quote! {
39 <SolidityEventArgument<#ty>>::new(#indexed, #camel_name)
40 }
41 }
31}42}
3243
33struct Event {44struct Event {
56 for field in &named.named {67 for field in &named.named {
57 fields.push(EventField::try_from(field)?);68 fields.push(EventField::try_from(field)?);
58 }69 }
70 if fields.iter().filter(|f| f.indexed).count() > 3 {
71 return Err(syn::Error::new(
72 variant.fields.span(),
73 "events can have at most 4 indexed fields (1 indexed field is reserved for event signature)"
74 ));
75 }
59 let mut selector_str = format!("{}(", name);76 let mut selector_str = format!("{}(", name);
60 for (i, arg) in fields.iter().enumerate() {77 for (i, arg) in fields.iter().enumerate() {
61 if i != 0 {78 if i != 0 {
111 }128 }
112 }129 }
130
131 fn expand_solidity_function(&self) -> proc_macro2::TokenStream {
132 let name = self.name.to_string();
133 let args = self.fields.iter().map(EventField::expand_solidity_argument);
134 quote! {
135 SolidityEvent {
136 name: #name,
137 args: (
138 #(
139 #args,
140 )*
141 ),
142 }
143 }
144 }
113}145}
114146
115pub struct Events {147pub struct Events {
138170
139 let consts = self.events.iter().map(Event::expand_consts);171 let consts = self.events.iter().map(Event::expand_consts);
140 let serializers = self.events.iter().map(Event::expand_serializers);172 let serializers = self.events.iter().map(Event::expand_serializers);
173 let solidity_name = self.name.to_string();
174 let solidity_functions = self.events.iter().map(Event::expand_solidity_function);
141175
142 quote! {176 quote! {
143 impl #name {177 impl #name {
144 #(178 #(
145 #consts179 #consts
146 )*180 )*
181
182 pub fn generate_solidity_interface(out_set: &mut sp_std::collections::btree_set::BTreeSet<string>, is_impl: bool) {
183 use evm_coder::solidity::*;
184 use core::fmt::Write;
185 let interface = SolidityInterface {
186 name: #solidity_name,
187 is: &[],
188 functions: (#(
189 #solidity_functions,
190 )*),
191 };
192 let mut out = string::new();
193 out.push_str("// Inline\n");
194 let _ = interface.format(is_impl, &mut out);
195 out_set.insert(out);
196 }
147 }197 }
148198
149 #[automatically_derived]199 #[automatically_derived]
modifiedcrates/evm-coder/Cargo.tomldiffbeforeafterboth
8primitive-types = { version = "0.9", default-features = false }8primitive-types = { version = "0.9", default-features = false }
9hex-literal = "0.3"9hex-literal = "0.3"
10ethereum = { version = "0.7.1", default-features = false }10ethereum = { version = "0.7.1", default-features = false }
11evm-core = { default-features = false, git = "https://github.com/uniquenetwork/evm.git", branch="precompile-output-parachain" }
12impl-trait-for-tuples = "0.2.1"
1113
12[dev-dependencies]14[dev-dependencies]
13hex = "0.4.3"15hex = "0.4.3"
1416
15[features]17[features]
16default = ["std"]18default = ["std"]
17std = ["ethereum/std", "primitive-types/std"]19std = ["ethereum/std", "primitive-types/std", "evm-core/std"]
modifiedcrates/evm-coder/src/abi.rsdiffbeforeafterboth
8 string::{String, ToString},8 string::{String, ToString},
9 vec::Vec,9 vec::Vec,
10};10};
11use evm_core::ExitError;
11use primitive_types::{H160, U256};12use primitive_types::{H160, U256};
1213
13use crate::types::string;14use crate::{execution::Error, types::string};
15use crate::execution::Result;
1416
15const ABI_ALIGNMENT: usize = 32;17const ABI_ALIGNMENT: usize = 32;
16
17pub type Result<T> = core::result::Result<T, &'static str>;
1818
19#[derive(Clone)]19#[derive(Clone)]
20pub struct AbiReader<'i> {20pub struct AbiReader<'i> {
21 buf: &'i [u8],21 buf: &'i [u8],
22 subresult_offset: usize,
22 offset: usize,23 offset: usize,
23}24}
24impl<'i> AbiReader<'i> {25impl<'i> AbiReader<'i> {
25 pub fn new(buf: &'i [u8]) -> Self {26 pub fn new(buf: &'i [u8]) -> Self {
26 Self { buf, offset: 0 }27 Self {
28 buf,
29 subresult_offset: 0,
30 offset: 0,
31 }
27 }32 }
28 pub fn new_call(buf: &'i [u8]) -> Result<(u32, Self)> {33 pub fn new_call(buf: &'i [u8]) -> Result<(u32, Self)> {
29 if buf.len() < 4 {34 if buf.len() < 4 {
30 return Err("missing method id");35 return Err(Error::Error(ExitError::OutOfOffset));
31 }36 }
32 let mut method_id = [0; 4];37 let mut method_id = [0; 4];
33 method_id.copy_from_slice(&buf[0..4]);38 method_id.copy_from_slice(&buf[0..4]);
3439
35 Ok((u32::from_be_bytes(method_id), Self { buf, offset: 4 }))40 Ok((
41 u32::from_be_bytes(method_id),
42 Self {
43 buf,
44 subresult_offset: 4,
45 offset: 4,
46 },
47 ))
36 }48 }
3749
38 fn read_padleft<const S: usize>(&mut self) -> Result<[u8; S]> {50 fn read_padleft<const S: usize>(&mut self) -> Result<[u8; S]> {
39 if self.buf.len() - self.offset < 32 {51 if self.buf.len() - self.offset < ABI_ALIGNMENT {
40 return Err("missing padding");52 return Err(Error::Error(ExitError::OutOfOffset));
41 }53 }
42 let mut block = [0; S];54 let mut block = [0; S];
43 // Verify padding is empty55 // Verify padding is empty
44 if !self.buf[self.offset..self.offset + ABI_ALIGNMENT - S]56 if !self.buf[self.offset..self.offset + ABI_ALIGNMENT - S]
45 .iter()57 .iter()
46 .all(|&v| v == 0)58 .all(|&v| v == 0)
47 {59 {
48 return Err("non zero padding (wrong types?)");60 return Err(Error::Error(ExitError::InvalidRange));
49 }61 }
50 block.copy_from_slice(62 block.copy_from_slice(
51 &self.buf[self.offset + ABI_ALIGNMENT - S..self.offset + ABI_ALIGNMENT],63 &self.buf[self.offset + ABI_ALIGNMENT - S..self.offset + ABI_ALIGNMENT],
63 match data[0] {75 match data[0] {
64 0 => Ok(false),76 0 => Ok(false),
65 1 => Ok(true),77 1 => Ok(true),
66 _ => Err("wrong bool value"),78 _ => Err(Error::Error(ExitError::InvalidRange)),
67 }79 }
68 }80 }
6981
75 let mut subresult = self.subresult()?;87 let mut subresult = self.subresult()?;
76 let length = subresult.read_usize()?;88 let length = subresult.read_usize()?;
77 if subresult.buf.len() <= subresult.offset + length {89 if subresult.buf.len() <= subresult.offset + length {
78 return Err("bytes out of bounds");90 return Err(Error::Error(ExitError::OutOfOffset));
79 }91 }
80 Ok(subresult.buf[subresult.offset..subresult.offset + length].into())92 Ok(subresult.buf[subresult.offset..subresult.offset + length].into())
81 }93 }
94 pub fn string(&mut self) -> Result<string> {
95 string::from_utf8(self.bytes()?).map_err(|_| Error::Error(ExitError::InvalidRange))
96 }
8297
83 pub fn uint32(&mut self) -> Result<u32> {98 pub fn uint32(&mut self) -> Result<u32> {
84 Ok(u32::from_be_bytes(self.read_padleft()?))99 Ok(u32::from_be_bytes(self.read_padleft()?))
103118
104 fn subresult(&mut self) -> Result<AbiReader<'i>> {119 fn subresult(&mut self) -> Result<AbiReader<'i>> {
105 let offset = self.read_usize()?;120 let offset = self.read_usize()?;
121 if offset + self.subresult_offset > self.buf.len() {
122 return Err(Error::Error(ExitError::InvalidRange));
123 }
106 Ok(AbiReader {124 Ok(AbiReader {
107 buf: self.buf,125 buf: self.buf,
126 subresult_offset: offset + self.subresult_offset,
108 offset: offset + self.offset,127 offset: offset + self.subresult_offset,
109 })128 })
110 }129 }
111130
163 self.write_padleft(&u128::to_be_bytes(*value))182 self.write_padleft(&u128::to_be_bytes(*value))
164 }183 }
165184
166 /// This method writes u128, and exists only for convenience, because there is
167 /// no u256 support in rust
168 pub fn uint256(&mut self, value: &U256) {185 pub fn uint256(&mut self, value: &U256) {
169 let mut out = [0; 32];186 let mut out = [0; 32];
170 value.to_big_endian(&mut out);187 value.to_big_endian(&mut out);
198 for (static_offset, part) in self.dynamic_part {215 for (static_offset, part) in self.dynamic_part {
199 let part_offset = self.static_part.len();216 let part_offset = self.static_part.len();
200217
201 let encoded_dynamic_offset = usize::to_be_bytes(part_offset - static_offset);218 let encoded_dynamic_offset = usize::to_be_bytes(part_offset);
202 self.static_part[static_offset + ABI_ALIGNMENT - encoded_dynamic_offset.len()219 self.static_part[static_offset + ABI_ALIGNMENT - encoded_dynamic_offset.len()
203 ..static_offset + ABI_ALIGNMENT]220 ..static_offset + ABI_ALIGNMENT]
204 .copy_from_slice(&encoded_dynamic_offset);221 .copy_from_slice(&encoded_dynamic_offset);
228impl_abi_readable!(H160, address);245impl_abi_readable!(H160, address);
229impl_abi_readable!(Vec<u8>, bytes);246impl_abi_readable!(Vec<u8>, bytes);
230impl_abi_readable!(bool, bool);247impl_abi_readable!(bool, bool);
248impl_abi_readable!(string, string);
231249
232pub trait AbiWrite {250pub trait AbiWrite {
233 fn abi_write(&self, writer: &mut AbiWriter);251 fn abi_write(&self, writer: &mut AbiWriter);
260 fn abi_write(&self, _writer: &mut AbiWriter) {}278 fn abi_write(&self, _writer: &mut AbiWriter) {}
261}279}
262
263/// Error, which can be constructed from any ToString type
264/// Encoded to Abi as Error(string)
265#[derive(Debug)]
266pub struct StringError(String);
267
268impl<E> From<E> for StringError
269where
270 E: ToString,
271{
272 fn from(e: E) -> Self {
273 Self(e.to_string())
274 }
275}
276
277impl From<StringError> for AbiWriter {
278 fn from(v: StringError) -> Self {
279 let mut out = AbiWriter::new_call(crate::fn_selector!(Error(string)));
280 out.string(&v.0);
281 out
282 }
283}
284280
285#[macro_export]281#[macro_export]
286macro_rules! abi_decode {282macro_rules! abi_decode {
310 }}306 }}
311}307}
308
309#[cfg(test)]
310pub mod test {
311 use super::{AbiReader, AbiWriter};
312 use hex_literal::hex;
313
314 #[test]
315 fn dynamic_after_static() {
316 let mut encoder = AbiWriter::new();
317 encoder.bool(&true);
318 encoder.string("test");
319 let encoded = encoder.finish();
320
321 let mut encoder = AbiWriter::new();
322 encoder.bool(&true);
323 // Offset to subresult
324 encoder.uint32(&(32 * 2));
325 // Len of "test"
326 encoder.uint32(&4);
327 encoder.write_padright(&[b't', b'e', b's', b't']);
328 let alternative_encoded = encoder.finish();
329
330 assert_eq!(encoded, alternative_encoded);
331
332 let mut decoder = AbiReader::new(&encoded);
333 assert_eq!(decoder.bool().unwrap(), true);
334 assert_eq!(decoder.string().unwrap(), "test");
335 }
336
337 #[test]
338 fn mint_sample() {
339 let (call, mut decoder) = AbiReader::new_call(&hex!(
340 "
341 50bb4e7f
342 000000000000000000000000ad2c0954693c2b5404b7e50967d3481bea432374
343 0000000000000000000000000000000000000000000000000000000000000001
344 0000000000000000000000000000000000000000000000000000000000000060
345 0000000000000000000000000000000000000000000000000000000000000008
346 5465737420555249000000000000000000000000000000000000000000000000
347 "
348 ))
349 .unwrap();
350 assert_eq!(call, 0x50bb4e7f);
351 assert_eq!(
352 format!("{:?}", decoder.address().unwrap()),
353 "0xad2c0954693c2b5404b7e50967d3481bea432374"
354 );
355 assert_eq!(decoder.uint32().unwrap(), 1);
356 assert_eq!(decoder.string().unwrap(), "Test URI");
357 }
358}
312359
addedcrates/evm-coder/src/execution.rsdiffbeforeafterboth

no changes

modifiedcrates/evm-coder/src/lib.rsdiffbeforeafterboth
2#[cfg(not(feature = "std"))]2#[cfg(not(feature = "std"))]
3extern crate alloc;3extern crate alloc;
44
5use abi::{AbiReader, AbiWriter};
5pub use evm_coder_macros::{event_topic, fn_selector, solidity_interface, solidity, ToLog};6pub use evm_coder_macros::{event_topic, fn_selector, solidity_interface, solidity, ToLog};
6pub mod abi;7pub mod abi;
7pub mod events;8pub mod events;
8pub use events::ToLog;9pub use events::ToLog;
10pub mod execution;
11pub mod solidity;
912
10/// Solidity type definitions13/// Solidity type definitions
11pub mod types {14pub mod types {
50 }53 }
51}54}
55
56pub trait Call: Sized {
57 fn parse(selector: u32, input: &mut AbiReader) -> execution::Result<Option<Self>>;
58}
59
60pub trait Callable<C: Call> {
61 fn call(&mut self, call: types::Msg<C>) -> execution::Result<AbiWriter>;
62}
63
64#[macro_export]
65macro_rules! generate_stubgen {
66 ($name:ident, $decl:ident, $is_impl:literal) => {
67 #[test]
68 #[ignore]
69 fn $name() {
70 use sp_std::collections::btree_set::BTreeSet;
71 let mut out = BTreeSet::new();
72 $decl::generate_solidity_interface(&mut out, $is_impl);
73 println!("=== SNIP START ===");
74 println!("// SPDX-License-Identifier: OTHER");
75 println!("// This code is automatically generated");
76 println!();
77 println!("pragma solidity >=0.8.0 <0.9.0;");
78 println!();
79 for b in out {
80 println!("{}", b);
81 }
82 println!("=== SNIP END ===");
83 }
84 };
85}
5286
53#[cfg(test)]87#[cfg(test)]
54mod tests {88mod tests {
addedcrates/evm-coder/src/solidity.rsdiffbeforeafterboth

no changes

modifiedcrates/evm-coder/tests/a.rsdiffbeforeafterboth
1#![allow(dead_code)] // This test only checks that macros is not panicking1#![allow(dead_code)] // This test only checks that macros is not panicking
22
3use evm_coder::{solidity_interface, types::*, ToLog};3use evm_coder::{solidity_interface, types::*, ToLog, execution::Result};
4use evm_coder_macros::solidity;4use evm_coder_macros::solidity;
5use std as sp_std;
6
7struct Impls;
58
6#[solidity_interface]9#[solidity_interface(name = "OurInterface")]
7trait OurInterface {10impl Impls {
8 type Error;
9 fn fn_a(&self, input: uint256) -> Result<bool, Self::Error>;11 fn fn_a(&self, _input: uint256) -> Result<bool> {
12 todo!()
13 }
10}14}
1115
12#[solidity_interface]16#[solidity_interface(name = "OurInterface1")]
13trait OurInterface1 {17impl Impls {
14 type Error;
15 fn fn_b(&self, input: uint128) -> Result<uint32, Self::Error>;18 fn fn_b(&self, _input: uint128) -> Result<uint32> {
19 todo!()
20 }
16}21}
1722
18#[solidity_interface(is(OurInterface), inline_is(OurInterface1), events(ERC721Log))]23#[solidity_interface(
24 name = "OurInterface2",
25 is(OurInterface),
26 inline_is(OurInterface1),
27 events(ERC721Log)
28)]
19trait OurInterface2 {29impl Impls {
20 type Error;
21 #[solidity(rename_selector = "fnK")]30 #[solidity(rename_selector = "fnK")]
22 fn fn_c(&self, input: uint32) -> Result<uint8, Self::Error>;31 fn fn_c(&self, _input: uint32) -> Result<uint8> {
32 todo!()
33 }
23 fn fn_d(&self, value: uint32) -> Result<uint32, Self::Error>;34 fn fn_d(&self, _value: uint32) -> Result<uint32> {
35 todo!()
36 }
2437
25 fn caller_sensitive(&self, caller: caller) -> Result<uint8, Self::Error>;38 fn caller_sensitive(&self, _caller: caller) -> Result<uint8> {
39 todo!()
40 }
26 fn payable(&mut self, value: value) -> Result<uint8, Self::Error>;41 fn payable(&mut self, _value: value) -> Result<uint8> {
42 todo!()
43 }
27}44}
2845
29#[derive(ToLog)]46#[derive(ToLog)]
42 },59 },
43}60}
61
62struct ERC20;
4463
45#[solidity_interface]64#[solidity_interface(name = "ERC20")]
46trait ERC20 {65impl ERC20 {
47 type Error;
48
49 fn decimals(&self) -> Result<uint8, Self::Error>;66 fn decimals(&self) -> Result<uint8> {
67 todo!()
68 }
50 fn balance_of(&self, owner: address) -> Result<uint256, Self::Error>;69 fn balance_of(&self, _owner: address) -> Result<uint256> {
70 todo!()
71 }
51 fn transfer(72 fn transfer(&mut self, _caller: caller, _to: address, _value: uint256) -> Result<bool> {
52 &mut self,73 todo!()
53 caller: caller,74 }
54 to: address,
55 value: uint256,
56 ) -> Result<bool, Self::Error>;
57 fn transfer_from(75 fn transfer_from(
58 &mut self,76 &mut self,
59 caller: caller,77 _caller: caller,
60 from: address,78 _from: address,
61 to: address,79 _to: address,
62 value: uint256,80 _value: uint256,
63 ) -> Result<bool, Self::Error>;81 ) -> Result<bool> {
82 todo!()
83 }
64 fn approve(84 fn approve(&mut self, _caller: caller, _spender: address, _value: uint256) -> Result<bool> {
65 &mut self,85 todo!()
66 caller: caller,86 }
67 spender: address,
68 value: uint256,
69 ) -> Result<bool, Self::Error>;
70 fn allowance(&self, owner: address, spender: address) -> Result<uint256, Self::Error>;87 fn allowance(&self, _owner: address, _spender: address) -> Result<uint256> {
88 todo!()
89 }
71}90}
7291
modifiedlaunch-config.jsondiffbeforeafterboth
7 "name": "alice",7 "name": "alice",
8 "wsPort": 9844,8 "wsPort": 9844,
9 "rpcPort": 9843,9 "rpcPort": 9843,
10 "port": 3044410 "port": 30444,
11 "flags": [
12 "--rpc-port=9843"
13 ]
11 },14 },
12 {15 {
13 "name": "bob",16 "name": "bob",
14 "wsPort": 9855,17 "wsPort": 9855,
15 "rpcPort": 9854,18 "rpcPort": 9854,
16 "port": 3055519 "port": 30555,
20 "flags": [
21 "--rpc-port=9854"
22 ]
17 },23 },
18 {24 {
19 "name": "charlie",25 "name": "charlie",
20 "wsPort": 9866,26 "wsPort": 9866,
21 "rpcPort": 9865,27 "rpcPort": 9865,
22 "port": 3066628 "port": 30666,
29 "flags": [
30 "--rpc-port=9865"
31 ]
23 },32 },
24 {33 {
25 "name": "dave",34 "name": "dave",
26 "wsPort": 9877,35 "wsPort": 9877,
27 "rpcPort": 9876,36 "rpcPort": 9876,
28 "port": 3077737 "port": 30777,
38 "flags": [
39 "--rpc-port=9876"
40 ]
29 }41 }
30 ],42 ],
31 "genesis": {43 "genesis": {
53 "rpcPort": 9933,65 "rpcPort": 9933,
54 "name": "alice",66 "name": "alice",
55 "flags": []67 "flags": [
68 "--rpc-cors=all",
69 "--rpc-port=9933"
70 ]
56 },71 },
57 {72 {
60 "rpcPort": 9934,75 "rpcPort": 9934,
61 "name": "bob",76 "name": "bob",
62 "flags": []77 "flags": [
78 "--rpc-cors=all",
79 "--rpc-port=9934"
80 ]
63 }81 }
64 ]82 ]
modifiednode/cli/Cargo.tomldiffbeforeafterboth
33
4[build-dependencies.substrate-build-script-utils]4[build-dependencies.substrate-build-script-utils]
5git = 'https://github.com/paritytech/substrate.git'5git = 'https://github.com/paritytech/substrate.git'
6branch = 'polkadot-v0.9.7'6branch = 'polkadot-v0.9.8'
7version = '3.0.0'7version = '3.0.0'
88
9################################################################################9################################################################################
1717
18[dependencies.frame-benchmarking]18[dependencies.frame-benchmarking]
19git = 'https://github.com/paritytech/substrate.git'19git = 'https://github.com/paritytech/substrate.git'
20branch = 'polkadot-v0.9.7'20branch = 'polkadot-v0.9.8'
21version = '3.0.0'21version = '3.0.0'
2222
23[dependencies.frame-benchmarking-cli]23[dependencies.frame-benchmarking-cli]
24git = 'https://github.com/paritytech/substrate.git'24git = 'https://github.com/paritytech/substrate.git'
25branch = 'polkadot-v0.9.7'25branch = 'polkadot-v0.9.8'
26version = '3.0.0'26version = '3.0.0'
2727
28[dependencies.pallet-transaction-payment-rpc]28[dependencies.pallet-transaction-payment-rpc]
29git = 'https://github.com/paritytech/substrate.git'29git = 'https://github.com/paritytech/substrate.git'
30branch = 'polkadot-v0.9.7'30branch = 'polkadot-v0.9.8'
31version = '3.0.0'31version = '3.0.0'
3232
33[dependencies.substrate-prometheus-endpoint]33[dependencies.substrate-prometheus-endpoint]
34git = 'https://github.com/paritytech/substrate.git'34git = 'https://github.com/paritytech/substrate.git'
35branch = 'polkadot-v0.9.7'35branch = 'polkadot-v0.9.8'
36version = '0.9.0'36version = '0.9.0'
3737
38[dependencies.sc-basic-authorship]38[dependencies.sc-basic-authorship]
39git = 'https://github.com/paritytech/substrate.git'39git = 'https://github.com/paritytech/substrate.git'
40branch = 'polkadot-v0.9.7'40branch = 'polkadot-v0.9.8'
41version = '0.9.0'41version = '0.9.0'
4242
43[dependencies.sc-chain-spec]43[dependencies.sc-chain-spec]
44git = 'https://github.com/paritytech/substrate.git'44git = 'https://github.com/paritytech/substrate.git'
45branch = 'polkadot-v0.9.7'45branch = 'polkadot-v0.9.8'
46version = '3.0.0'46version = '3.0.0'
4747
48[dependencies.sc-cli]48[dependencies.sc-cli]
49features = ['wasmtime']49features = ['wasmtime']
50git = 'https://github.com/paritytech/substrate.git'50git = 'https://github.com/paritytech/substrate.git'
51branch = 'polkadot-v0.9.7'51branch = 'polkadot-v0.9.8'
52version = '0.9.0'52version = '0.9.0'
5353
54[dependencies.sc-client-api]54[dependencies.sc-client-api]
55git = 'https://github.com/paritytech/substrate.git'55git = 'https://github.com/paritytech/substrate.git'
56branch = 'polkadot-v0.9.7'56branch = 'polkadot-v0.9.8'
57version = '3.0.0'57version = '3.0.0'
5858
59[dependencies.sc-consensus]59[dependencies.sc-consensus]
60git = 'https://github.com/paritytech/substrate.git'60git = 'https://github.com/paritytech/substrate.git'
61branch = 'polkadot-v0.9.7'61branch = 'polkadot-v0.9.8'
62version = '0.9.0'62version = '0.9.0'
6363
64[dependencies.sc-consensus-aura]64[dependencies.sc-consensus-aura]
65git = 'https://github.com/paritytech/substrate.git'65git = 'https://github.com/paritytech/substrate.git'
66branch = 'polkadot-v0.9.7'66branch = 'polkadot-v0.9.8'
67version = '0.9.0'67version = '0.9.0'
6868
69[dependencies.sc-executor]69[dependencies.sc-executor]
70features = ['wasmtime']70features = ['wasmtime']
71git = 'https://github.com/paritytech/substrate.git'71git = 'https://github.com/paritytech/substrate.git'
72branch = 'polkadot-v0.9.7'72branch = 'polkadot-v0.9.8'
73version = '0.9.0'73version = '0.9.0'
7474
75[dependencies.sc-finality-grandpa]75[dependencies.sc-finality-grandpa]
76git = 'https://github.com/paritytech/substrate.git'76git = 'https://github.com/paritytech/substrate.git'
77branch = 'polkadot-v0.9.7'77branch = 'polkadot-v0.9.8'
78version = '0.9.0'78version = '0.9.0'
7979
80[dependencies.sc-keystore]80[dependencies.sc-keystore]
81git = 'https://github.com/paritytech/substrate.git'81git = 'https://github.com/paritytech/substrate.git'
82branch = 'polkadot-v0.9.7'82branch = 'polkadot-v0.9.8'
83version = '3.0.0'83version = '3.0.0'
8484
85[dependencies.sc-rpc]85[dependencies.sc-rpc]
86git = 'https://github.com/paritytech/substrate.git'86git = 'https://github.com/paritytech/substrate.git'
87branch = 'polkadot-v0.9.7'87branch = 'polkadot-v0.9.8'
88version = '3.0.0'88version = '3.0.0'
8989
90[dependencies.sc-rpc-api]90[dependencies.sc-rpc-api]
91git = 'https://github.com/paritytech/substrate.git'91git = 'https://github.com/paritytech/substrate.git'
92branch = 'polkadot-v0.9.7'92branch = 'polkadot-v0.9.8'
93version = '0.9.0'93version = '0.9.0'
9494
95[dependencies.sc-service]95[dependencies.sc-service]
96features = ['wasmtime']96features = ['wasmtime']
97git = 'https://github.com/paritytech/substrate.git'97git = 'https://github.com/paritytech/substrate.git'
98branch = 'polkadot-v0.9.7'98branch = 'polkadot-v0.9.8'
99version = '0.9.0'99version = '0.9.0'
100100
101[dependencies.sc-telemetry]101[dependencies.sc-telemetry]
102git = 'https://github.com/paritytech/substrate.git'102git = 'https://github.com/paritytech/substrate.git'
103branch = 'polkadot-v0.9.7'103branch = 'polkadot-v0.9.8'
104version = '3.0.0'104version = '3.0.0'
105105
106[dependencies.sc-transaction-pool]106[dependencies.sc-transaction-pool]
107git = 'https://github.com/paritytech/substrate.git'107git = 'https://github.com/paritytech/substrate.git'
108branch = 'polkadot-v0.9.7'108branch = 'polkadot-v0.9.8'
109version = '3.0.0'109version = '3.0.0'
110110
111[dependencies.sc-tracing]111[dependencies.sc-tracing]
112git = 'https://github.com/paritytech/substrate.git'112git = 'https://github.com/paritytech/substrate.git'
113branch = 'polkadot-v0.9.7'113branch = 'polkadot-v0.9.8'
114version = '3.0.0'114version = '3.0.0'
115115
116[dependencies.sp-block-builder]116[dependencies.sp-block-builder]
117git = 'https://github.com/paritytech/substrate.git'117git = 'https://github.com/paritytech/substrate.git'
118branch = 'polkadot-v0.9.7'118branch = 'polkadot-v0.9.8'
119version = '3.0.0'119version = '3.0.0'
120120
121[dependencies.sp-api]121[dependencies.sp-api]
122git = 'https://github.com/paritytech/substrate.git'122git = 'https://github.com/paritytech/substrate.git'
123branch = 'polkadot-v0.9.7'123branch = 'polkadot-v0.9.8'
124version = '3.0.0'124version = '3.0.0'
125125
126[dependencies.sp-blockchain]126[dependencies.sp-blockchain]
127git = 'https://github.com/paritytech/substrate.git'127git = 'https://github.com/paritytech/substrate.git'
128branch = 'polkadot-v0.9.7'128branch = 'polkadot-v0.9.8'
129version = '3.0.0'129version = '3.0.0'
130130
131[dependencies.sp-consensus]131[dependencies.sp-consensus]
132git = 'https://github.com/paritytech/substrate.git'132git = 'https://github.com/paritytech/substrate.git'
133branch = 'polkadot-v0.9.7'133branch = 'polkadot-v0.9.8'
134version = '0.9.0'134version = '0.9.0'
135135
136[dependencies.sp-consensus-aura]136[dependencies.sp-consensus-aura]
137git = 'https://github.com/paritytech/substrate.git'137git = 'https://github.com/paritytech/substrate.git'
138branch = 'polkadot-v0.9.7'138branch = 'polkadot-v0.9.8'
139version = '0.9.0'139version = '0.9.0'
140140
141[dependencies.sp-core]141[dependencies.sp-core]
142git = 'https://github.com/paritytech/substrate.git'142git = 'https://github.com/paritytech/substrate.git'
143branch = 'polkadot-v0.9.7'143branch = 'polkadot-v0.9.8'
144version = '3.0.0'144version = '3.0.0'
145145
146[dependencies.sp-finality-grandpa]146[dependencies.sp-finality-grandpa]
147git = 'https://github.com/paritytech/substrate.git'147git = 'https://github.com/paritytech/substrate.git'
148branch = 'polkadot-v0.9.7'148branch = 'polkadot-v0.9.8'
149version = '3.0.0'149version = '3.0.0'
150150
151[dependencies.sp-inherents]151[dependencies.sp-inherents]
152git = 'https://github.com/paritytech/substrate.git'152git = 'https://github.com/paritytech/substrate.git'
153branch = 'polkadot-v0.9.7'153branch = 'polkadot-v0.9.8'
154version = '3.0.0'154version = '3.0.0'
155155
156[dependencies.sp-keystore]156[dependencies.sp-keystore]
157git = 'https://github.com/paritytech/substrate.git'157git = 'https://github.com/paritytech/substrate.git'
158branch = 'polkadot-v0.9.7'158branch = 'polkadot-v0.9.8'
159version = '0.9.0'159version = '0.9.0'
160160
161[dependencies.sp-offchain]161[dependencies.sp-offchain]
162git = 'https://github.com/paritytech/substrate.git'162git = 'https://github.com/paritytech/substrate.git'
163branch = 'polkadot-v0.9.7'163branch = 'polkadot-v0.9.8'
164version = '3.0.0'164version = '3.0.0'
165165
166[dependencies.sp-runtime]166[dependencies.sp-runtime]
167git = 'https://github.com/paritytech/substrate.git'167git = 'https://github.com/paritytech/substrate.git'
168branch = 'polkadot-v0.9.7'168branch = 'polkadot-v0.9.8'
169version = '3.0.0'169version = '3.0.0'
170170
171[dependencies.sp-session]171[dependencies.sp-session]
172git = 'https://github.com/paritytech/substrate.git'172git = 'https://github.com/paritytech/substrate.git'
173branch = 'polkadot-v0.9.7'173branch = 'polkadot-v0.9.8'
174version = '3.0.0'174version = '3.0.0'
175175
176[dependencies.sp-timestamp]176[dependencies.sp-timestamp]
177git = 'https://github.com/paritytech/substrate.git'177git = 'https://github.com/paritytech/substrate.git'
178branch = 'polkadot-v0.9.7'178branch = 'polkadot-v0.9.8'
179version = '3.0.0'179version = '3.0.0'
180180
181[dependencies.sp-transaction-pool]181[dependencies.sp-transaction-pool]
182git = 'https://github.com/paritytech/substrate.git'182git = 'https://github.com/paritytech/substrate.git'
183branch = 'polkadot-v0.9.7'183branch = 'polkadot-v0.9.8'
184version = '3.0.0'184version = '3.0.0'
185185
186[dependencies.sp-trie]186[dependencies.sp-trie]
187git = 'https://github.com/paritytech/substrate.git'187git = 'https://github.com/paritytech/substrate.git'
188branch = 'polkadot-v0.9.7'188branch = 'polkadot-v0.9.8'
189version = '3.0.0'189version = '3.0.0'
190190
191[dependencies.substrate-frame-rpc-system]191[dependencies.substrate-frame-rpc-system]
192git = 'https://github.com/paritytech/substrate.git'192git = 'https://github.com/paritytech/substrate.git'
193branch = 'polkadot-v0.9.7'193branch = 'polkadot-v0.9.8'
194version = '3.0.0'194version = '3.0.0'
195195
196[dependencies.sc-network]196[dependencies.sc-network]
197git = 'https://github.com/paritytech/substrate.git'197git = 'https://github.com/paritytech/substrate.git'
198branch = 'polkadot-v0.9.7'198branch = 'polkadot-v0.9.8'
199version = '0.9.0'199version = '0.9.0'
200200
201[dependencies.serde]201[dependencies.serde]
211211
212[dependencies.cumulus-client-consensus-aura]212[dependencies.cumulus-client-consensus-aura]
213git = 'https://github.com/paritytech/cumulus.git'213git = 'https://github.com/paritytech/cumulus.git'
214branch = 'polkadot-v0.9.7'214branch = 'polkadot-v0.9.8'
215215
216[dependencies.cumulus-client-consensus-common]216[dependencies.cumulus-client-consensus-common]
217git = 'https://github.com/paritytech/cumulus.git'217git = 'https://github.com/paritytech/cumulus.git'
218branch = 'polkadot-v0.9.7'218branch = 'polkadot-v0.9.8'
219219
220[dependencies.cumulus-client-collator]220[dependencies.cumulus-client-collator]
221git = 'https://github.com/paritytech/cumulus.git'221git = 'https://github.com/paritytech/cumulus.git'
222branch = 'polkadot-v0.9.7'222branch = 'polkadot-v0.9.8'
223223
224[dependencies.cumulus-client-cli]224[dependencies.cumulus-client-cli]
225git = 'https://github.com/paritytech/cumulus.git'225git = 'https://github.com/paritytech/cumulus.git'
226branch = 'polkadot-v0.9.7'226branch = 'polkadot-v0.9.8'
227227
228[dependencies.cumulus-client-network]228[dependencies.cumulus-client-network]
229git = 'https://github.com/paritytech/cumulus.git'229git = 'https://github.com/paritytech/cumulus.git'
230branch = 'polkadot-v0.9.7'230branch = 'polkadot-v0.9.8'
231231
232[dependencies.cumulus-primitives-core]232[dependencies.cumulus-primitives-core]
233git = 'https://github.com/paritytech/cumulus.git'233git = 'https://github.com/paritytech/cumulus.git'
234branch = 'polkadot-v0.9.7'234branch = 'polkadot-v0.9.8'
235235
236[dependencies.cumulus-primitives-parachain-inherent]236[dependencies.cumulus-primitives-parachain-inherent]
237git = 'https://github.com/paritytech/cumulus.git'237git = 'https://github.com/paritytech/cumulus.git'
238branch = 'polkadot-v0.9.7'238branch = 'polkadot-v0.9.8'
239239
240[dependencies.cumulus-client-service]240[dependencies.cumulus-client-service]
241git = 'https://github.com/paritytech/cumulus.git'241git = 'https://github.com/paritytech/cumulus.git'
242branch = 'polkadot-v0.9.7'242branch = 'polkadot-v0.9.8'
243243
244244
245################################################################################245################################################################################
246# Polkadot dependencies246# Polkadot dependencies
247[dependencies.polkadot-primitives]247[dependencies.polkadot-primitives]
248git = "https://github.com/paritytech/polkadot"248git = "https://github.com/paritytech/polkadot"
249branch = 'release-v0.9.7'249branch = 'release-v0.9.8'
250250
251[dependencies.polkadot-service]251[dependencies.polkadot-service]
252git = "https://github.com/paritytech/polkadot"252git = "https://github.com/paritytech/polkadot"
253branch = 'release-v0.9.7'253branch = 'release-v0.9.8'
254254
255[dependencies.polkadot-cli]255[dependencies.polkadot-cli]
256git = "https://github.com/paritytech/polkadot"256git = "https://github.com/paritytech/polkadot"
257branch = 'release-v0.9.7'257branch = 'release-v0.9.8'
258258
259[dependencies.polkadot-test-service]259[dependencies.polkadot-test-service]
260git = "https://github.com/paritytech/polkadot"260git = "https://github.com/paritytech/polkadot"
261branch = 'release-v0.9.7'261branch = 'release-v0.9.8'
262262
263[dependencies.polkadot-parachain]263[dependencies.polkadot-parachain]
264git = "https://github.com/paritytech/polkadot"264git = "https://github.com/paritytech/polkadot"
265branch = 'release-v0.9.7'265branch = 'release-v0.9.8'
266266
267267
268################################################################################268################################################################################
305jsonrpc-core = '15.0.0'305jsonrpc-core = '15.0.0'
306jsonrpc-pubsub = "15.0.0"306jsonrpc-pubsub = "15.0.0"
307307
308fc-rpc-core = { version = "1.1.0-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }308fc-rpc-core = { version = "1.1.0-dev", git = "https://github.com/uniquenetwork/frontier.git", branch = "injected-transactions-parachain" }
309fc-consensus = { version = "2.0.0-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }309fc-consensus = { version = "2.0.0-dev", git = "https://github.com/uniquenetwork/frontier.git", branch = "injected-transactions-parachain" }
310fc-mapping-sync = { version = "2.0.0-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }310fc-mapping-sync = { version = "2.0.0-dev", git = "https://github.com/uniquenetwork/frontier.git", branch = "injected-transactions-parachain" }
311fc-rpc = { version = "2.0.0-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }311fc-rpc = { version = "2.0.0-dev", git = "https://github.com/uniquenetwork/frontier.git", branch = "injected-transactions-parachain" }
312fc-db = { version = "1.0.0", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }312fc-db = { version = "1.0.0", git = "https://github.com/uniquenetwork/frontier.git", branch = "injected-transactions-parachain" }
313fp-rpc = { version = "2.0.0", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }313fp-rpc = { version = "2.0.0", git = "https://github.com/uniquenetwork/frontier.git", branch = "injected-transactions-parachain" }
314pallet-ethereum = { version = "3.0.0-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }314pallet-ethereum = { version = "3.0.0-dev", git = "https://github.com/uniquenetwork/frontier.git", branch = "injected-transactions-parachain" }
315315
316nft-rpc = { path = "../rpc" }316nft-rpc = { path = "../rpc" }
317317
318[features]318[features]
319default = []319default = []
320runtime-benchmarks = ['nft-runtime/runtime-benchmarks']320runtime-benchmarks = [
321 'nft-runtime/runtime-benchmarks',
322 'polkadot-service/runtime-benchmarks',
323]
321324
modifiednode/cli/src/chain_spec.rsdiffbeforeafterboth
197 variable_on_chain_schema: vec![],197 variable_on_chain_schema: vec![],
198 limits: CollectionLimits::default(),198 limits: CollectionLimits::default(),
199 meta_update_permission: MetaUpdatePermission::ItemOwner,199 meta_update_permission: MetaUpdatePermission::ItemOwner,
200 transfers_enabled: true,
200 },201 },
201 )],202 )],
202 nft_item_id: vec![],203 nft_item_id: vec![],
203 fungible_item_id: vec![],204 fungible_item_id: vec![],
204 refungible_item_id: vec![],205 refungible_item_id: vec![],
205 chain_limit: ChainLimits {
206 collection_numbers_limit: 100000,
207 account_token_ownership_limit: 1000000,
208 collections_admins_limit: 5,
209 custom_data_limit: 2048,
210 nft_sponsor_transfer_timeout: 15,
211 fungible_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,
216 },
217 },206 },
218 parachain_info: nft_runtime::ParachainInfoConfig { parachain_id: id },207 parachain_info: nft_runtime::ParachainInfoConfig { parachain_id: id },
219 aura: nft_runtime::AuraConfig {208 aura: nft_runtime::AuraConfig {
modifiednode/cli/src/service.rsdiffbeforeafterboth
10use std::sync::Mutex;10use std::sync::Mutex;
11use std::collections::BTreeMap;11use std::collections::BTreeMap;
12use std::collections::HashMap;12use std::collections::HashMap;
13use std::time::Duration;
14use futures::StreamExt;
1315
14// Local Runtime Types16// Local Runtime Types
15use nft_runtime::RuntimeApi;17use nft_runtime::RuntimeApi;
34use sp_keystore::SyncCryptoStorePtr;36use sp_keystore::SyncCryptoStorePtr;
35use sp_runtime::traits::BlakeTwo256;37use sp_runtime::traits::BlakeTwo256;
36use substrate_prometheus_endpoint::Registry;38use substrate_prometheus_endpoint::Registry;
39use sc_client_api::BlockchainEvents;
3740
38// Frontier Imports41// Frontier Imports
39use fc_rpc_core::types::FilterPool;42use fc_rpc_core::types::FilterPool;
40use fc_rpc_core::types::PendingTransactions;43use fc_rpc_core::types::PendingTransactions;
44use fc_mapping_sync::MappingSyncWorker;
4145
42// Runtime type overrides46// Runtime type overrides
43type BlockNumber = u32;47type BlockNumber = u32;
280 let is_authority = parachain_config.role.clone().is_authority();284 let is_authority = parachain_config.role.clone().is_authority();
281 let rpc_network = network.clone();285 let rpc_network = network.clone();
286
287 let rpc_frontier_backend = frontier_backend.clone();
282 let rpc_extensions_builder = Box::new(move |deny_unsafe, _| {288 let rpc_extensions_builder = Box::new(move |deny_unsafe, _| {
283 let full_deps = nft_rpc::FullDeps {289 let full_deps = nft_rpc::FullDeps {
284 backend: frontier_backend.clone(),290 backend: rpc_frontier_backend.clone(),
285 deny_unsafe,291 deny_unsafe,
286 client: rpc_client.clone(),292 client: rpc_client.clone(),
287 pool: rpc_pool.clone(),293 pool: rpc_pool.clone(),
299 nft_rpc::create_full::<_, _, _, RuntimeApi, _>(full_deps, subscription_executor.clone())305 nft_rpc::create_full::<_, _, _, RuntimeApi, _>(full_deps, subscription_executor.clone())
300 });306 });
307
308 task_manager.spawn_essential_handle().spawn(
309 "frontier-mapping-sync-worker",
310 MappingSyncWorker::new(
311 client.import_notification_stream(),
312 Duration::new(6, 0),
313 client.clone(),
314 backend.clone(),
315 frontier_backend.clone(),
316 )
317 .for_each(|()| futures::future::ready(())),
318 );
301319
302 sc_service::spawn_tasks(sc_service::SpawnTasksParams {320 sc_service::spawn_tasks(sc_service::SpawnTasksParams {
303 on_demand: None,321 on_demand: None,
486 // We got around 500ms for proposing504 // We got around 500ms for proposing
487 block_proposal_slot_portion: SlotProportion::new(1f32 / 24f32),505 block_proposal_slot_portion: SlotProportion::new(1f32 / 24f32),
488 telemetry,506 telemetry,
507 max_block_proposal_slot_portion: None,
489 }))508 }))
490 },509 },
491 )510 )
modifiednode/rpc/Cargo.tomldiffbeforeafterboth
13futures = { version = "0.3.1", features = ["compat"] }13futures = { version = "0.3.1", features = ["compat"] }
14jsonrpc-core = "15.0.0"14jsonrpc-core = "15.0.0"
15jsonrpc-pubsub = "15.0.0"15jsonrpc-pubsub = "15.0.0"
16# pallet-contracts-rpc = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }16# pallet-contracts-rpc = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
17pallet-transaction-payment-rpc = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }17pallet-transaction-payment-rpc = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
18pallet-transaction-payment-rpc-runtime-api = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }18pallet-transaction-payment-rpc-runtime-api = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
19sc-client-api = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }19sc-client-api = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
20sc-consensus-aura = { version = "0.9", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }20sc-consensus-aura = { version = "0.9", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
21sc-consensus-epochs = { version = "0.9", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }21sc-consensus-epochs = { version = "0.9", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
22sc-finality-grandpa = { version = "0.9", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }22sc-finality-grandpa = { version = "0.9", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
23sc-finality-grandpa-rpc = { version = "0.9", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }23sc-finality-grandpa-rpc = { version = "0.9", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
24sc-keystore = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }24sc-keystore = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
25sc-network = { version = "0.9", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }25sc-network = { version = "0.9", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
26sc-rpc-api = { version = "0.9", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }26sc-rpc-api = { version = "0.9", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
27sc-rpc = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }27sc-rpc = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
28sc-service = { version = "0.9", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }28sc-service = { version = "0.9", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
29sp-api = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }29sp-api = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
30sp-block-builder = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }30sp-block-builder = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
31sp-blockchain = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }31sp-blockchain = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
32sp-consensus = { version = "0.9", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }32sp-consensus = { version = "0.9", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
33sp-consensus-aura = { version = "0.9", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }33sp-consensus-aura = { version = "0.9", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
34sp-core = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }34sp-core = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
35sp-offchain = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }35sp-offchain = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
36sp-runtime = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }36sp-runtime = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
37sp-storage = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }37sp-storage = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
38sp-session = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }38sp-session = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
39sp-transaction-pool = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }39sp-transaction-pool = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
40sc-transaction-pool = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }40sc-transaction-pool = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
41sc-transaction-graph = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }41sc-transaction-graph = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
42substrate-frame-rpc-system = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }42substrate-frame-rpc-system = { version = "3.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
43tokio = { version = "0.2.13", features = ["macros", "sync"] }43tokio = { version = "0.2.13", features = ["macros", "sync"] }
4444
45pallet-ethereum = { git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }45pallet-ethereum = { git = "https://github.com/uniquenetwork/frontier.git", branch = "injected-transactions-parachain" }
46fc-rpc = { default-features = false, git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }46fc-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "injected-transactions-parachain" }
47fp-rpc = { default-features = false, git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }47fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "injected-transactions-parachain" }
48fc-rpc-core = { default-features = false, git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }48fc-rpc-core = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "injected-transactions-parachain" }
49fc-db = { default-features = false, git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }49fc-db = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "injected-transactions-parachain" }
50fc-mapping-sync = { default-features = false, git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }50fc-mapping-sync = { default-features = false, git = "https://github.com/uniquenetwork/frontier.git", branch = "injected-transactions-parachain" }
5151
52pallet-nft = { path = "../../pallets/nft" }52pallet-nft = { path = "../../pallets/nft" }
53nft-runtime = { path = "../../runtime" }53nft-runtime = { path = "../../runtime" }
modifiedpallets/contract-helpers/Cargo.tomldiffbeforeafterboth
15version = '0.1.0'15version = '0.1.0'
1616
17[dependencies]17[dependencies]
18frame-support = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }18frame-support = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
19frame-system = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }19frame-system = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
20pallet-contracts = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }20pallet-contracts = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
21sp-runtime = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }21sp-runtime = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
22sp-std = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }22sp-std = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
2323
24[features]24[features]
25default = ["std"]25default = ["std"]
modifiedpallets/contract-helpers/src/lib.rsdiffbeforeafterboth
2323
24 #[pallet::config]24 #[pallet::config]
25 pub trait Config: frame_system::Config + pallet_contracts::Config {}25 pub trait Config: frame_system::Config + pallet_contracts::Config {
26 type DefaultSponsoringRateLimit: Get<Self::BlockNumber>;
27 }
2628
27 #[pallet::pallet]29 #[pallet::pallet]
60 Key = T::AccountId,62 Key = T::AccountId,
61 Value = T::BlockNumber,63 Value = T::BlockNumber,
62 QueryKind = ValueQuery,64 QueryKind = ValueQuery,
65 OnEmpty = T::DefaultSponsoringRateLimit,
63 >;66 >;
6467
65 #[pallet::storage]68 #[pallet::storage]
72 QueryKind = ValueQuery,75 QueryKind = ValueQuery,
73 >;76 >;
77
78 impl<T: Config> Pallet<T> {
79 pub fn allowed(contract: T::AccountId, user: T::AccountId, default: bool) -> bool {
80 if !<AllowlistEnabled<T>>::get(&contract) {
81 return default;
82 }
83 <Allowlist<T>>::get(&contract, &user) || <Owner<T>>::get(contract) == user
84 }
85 }
7486
75 #[pallet::call]87 #[pallet::call]
76 impl<T: Config> Pallet<T> {88 impl<T: Config> Pallet<T> {
191 {203 {
192 let called_contract: T::AccountId =204 let called_contract: T::AccountId =
193 T::Lookup::lookup((*dest).clone()).unwrap_or_default();205 T::Lookup::lookup((*dest).clone()).unwrap_or_default();
194 if <AllowlistEnabled<T>>::get(&called_contract)206 if !<Pallet<T>>::allowed(called_contract, who.clone(), true) {
195 && !<Allowlist<T>>::get(&called_contract, who)
196 && &<Owner<T>>::get(&called_contract) != who
197 {
198 return Err(transaction_validity::InvalidTransaction::Call.into());207 return Err(transaction_validity::InvalidTransaction::Call.into());
199 }208 }
252 let called_contract: T::AccountId =261 let called_contract: T::AccountId =
253 T::Lookup::lookup((*dest).clone()).unwrap_or_default();262 T::Lookup::lookup((*dest).clone()).unwrap_or_default();
254 if <SelfSponsoring<T>>::get(&called_contract) {263 if <SelfSponsoring<T>>::get(&called_contract)
264 && <Pallet<T>>::allowed(called_contract.clone(), who.clone(), false)
265 {
255 let last_tx_block = SponsorBasket::<T>::get(&called_contract, &who);266 let last_tx_block = SponsorBasket::<T>::get(&called_contract, &who);
256 let block_number = <frame_system::Pallet<T>>::block_number() as T::BlockNumber;267 let block_number = <frame_system::Pallet<T>>::block_number() as T::BlockNumber;
addedpallets/evm-coder-substrate/Cargo.tomldiffbeforeafterboth

no changes

addedpallets/evm-coder-substrate/src/lib.rsdiffbeforeafterboth

no changes

addedpallets/evm-contract-helpers/Cargo.tomldiffbeforeafterboth

no changes

addedpallets/evm-contract-helpers/src/eth.rsdiffbeforeafterboth

no changes

addedpallets/evm-contract-helpers/src/lib.rsdiffbeforeafterboth

no changes

addedpallets/evm-contract-helpers/src/stubs/ContractHelpers.rawdiffbeforeafterboth

binary blob — no preview

addedpallets/evm-contract-helpers/src/stubs/ContractHelpers.soldiffbeforeafterboth

no changes

addedpallets/evm-migration/Cargo.tomldiffbeforeafterboth

no changes

addedpallets/evm-migration/src/benchmarking.rsdiffbeforeafterboth

no changes

addedpallets/evm-migration/src/lib.rsdiffbeforeafterboth

no changes

addedpallets/evm-migration/src/weights.rsdiffbeforeafterboth

no changes

addedpallets/evm-transaction-payment/Cargo.tomldiffbeforeafterboth

no changes

addedpallets/evm-transaction-payment/src/lib.rsdiffbeforeafterboth

no changes

modifiedpallets/inflation/Cargo.tomldiffbeforeafterboth
43default-features = false43default-features = false
44optional = true44optional = true
45git = 'https://github.com/paritytech/substrate.git'45git = 'https://github.com/paritytech/substrate.git'
46branch = 'polkadot-v0.9.7'46branch = 'polkadot-v0.9.8'
47version = '3.0.0'47version = '3.0.0'
4848
49[dependencies.frame-support]49[dependencies.frame-support]
50default-features = false50default-features = false
51git = 'https://github.com/paritytech/substrate.git'51git = 'https://github.com/paritytech/substrate.git'
52branch = 'polkadot-v0.9.7'52branch = 'polkadot-v0.9.8'
53version = '3.0.0'53version = '3.0.0'
5454
55[dependencies.frame-system]55[dependencies.frame-system]
56default-features = false56default-features = false
57git = 'https://github.com/paritytech/substrate.git'57git = 'https://github.com/paritytech/substrate.git'
58branch = 'polkadot-v0.9.7'58branch = 'polkadot-v0.9.8'
59version = '3.0.0'59version = '3.0.0'
6060
61[dependencies.pallet-balances]61[dependencies.pallet-balances]
62default-features = false62default-features = false
63git = 'https://github.com/paritytech/substrate.git'63git = 'https://github.com/paritytech/substrate.git'
64branch = 'polkadot-v0.9.7'64branch = 'polkadot-v0.9.8'
65version = '3.0.0'65version = '3.0.0'
6666
67[dependencies.pallet-timestamp]67[dependencies.pallet-timestamp]
68default-features = false68default-features = false
69git = 'https://github.com/paritytech/substrate.git'69git = 'https://github.com/paritytech/substrate.git'
70branch = 'polkadot-v0.9.7'70branch = 'polkadot-v0.9.8'
71version = '3.0.0'71version = '3.0.0'
7272
73[dependencies.pallet-randomness-collective-flip]73[dependencies.pallet-randomness-collective-flip]
74default-features = false74default-features = false
75git = 'https://github.com/paritytech/substrate.git'75git = 'https://github.com/paritytech/substrate.git'
76branch = 'polkadot-v0.9.7'76branch = 'polkadot-v0.9.8'
77version = '3.0.0'77version = '3.0.0'
7878
79[dependencies.sp-std]79[dependencies.sp-std]
80default-features = false80default-features = false
81git = 'https://github.com/paritytech/substrate.git'81git = 'https://github.com/paritytech/substrate.git'
82branch = 'polkadot-v0.9.7'82branch = 'polkadot-v0.9.8'
83version = '3.0.0'83version = '3.0.0'
8484
85[dependencies.serde]85[dependencies.serde]
90[dependencies.sp-runtime]90[dependencies.sp-runtime]
91default-features = false91default-features = false
92git = 'https://github.com/paritytech/substrate.git'92git = 'https://github.com/paritytech/substrate.git'
93branch = 'polkadot-v0.9.7'93branch = 'polkadot-v0.9.8'
94version = '3.0.0'94version = '3.0.0'
9595
96[dependencies.sp-core]96[dependencies.sp-core]
97default-features = false97default-features = false
98git = 'https://github.com/paritytech/substrate.git'98git = 'https://github.com/paritytech/substrate.git'
99branch = 'polkadot-v0.9.7'99branch = 'polkadot-v0.9.8'
100version = '3.0.0'100version = '3.0.0'
101101
102[dependencies.sp-io]102[dependencies.sp-io]
103default-features = false103default-features = false
104git = 'https://github.com/paritytech/substrate.git'104git = 'https://github.com/paritytech/substrate.git'
105branch = 'polkadot-v0.9.7'105branch = 'polkadot-v0.9.8'
106version = '3.0.0'106version = '3.0.0'
107107
108108
modifiedpallets/inflation/src/tests.rsdiffbeforeafterboth
32 type WeightInfo = ();32 type WeightInfo = ();
33 type MaxLocks = MaxLocks;33 type MaxLocks = MaxLocks;
34 type MaxReserves = ();34 type MaxReserves = ();
35 type ReserveIdentifier = [u8; 8];35 type ReserveIdentifier = ();
36}36}
3737
38frame_support::construct_runtime!(38frame_support::construct_runtime!(
91 type InflationBlockInterval = InflationBlockInterval;91 type InflationBlockInterval = InflationBlockInterval;
92}92}
9393
94// Build genesis storage according to the mock runtime.
95pub fn new_test_ext() -> sp_io::TestExternalities {94pub fn new_test_ext() -> sp_io::TestExternalities {
96 frame_system::GenesisConfig::default()95 frame_system::GenesisConfig::default()
97 .build_storage::<Test>()96 .build_storage::<Test>()
111 // first inflation deposit should be equal to BlockInflation110 // first inflation deposit should be equal to BlockInflation
112 Inflation::on_initialize(1);111 Inflation::on_initialize(1);
112
113 // SBP M2 review: Verify expected block inflation for year 1
113 assert!(Inflation::block_inflation() > 0);114 assert_eq!(Inflation::block_inflation(), 1901);
114 assert_eq!(115 assert_eq!(
115 Balances::free_balance(1234) - initial_issuance,116 Balances::free_balance(1234) - initial_issuance,
116 Inflation::block_inflation()117 Inflation::block_inflation()
157 Inflation::on_initialize(1);158 Inflation::on_initialize(1);
158 let block_inflation_year_0 = Inflation::block_inflation();159 let block_inflation_year_0 = Inflation::block_inflation();
160
161 // SBP M2 review: go through all the block inflations for year 1,
162 // total issuance will be updated accordingly
163 for block in (100..YEAR).step_by(100) {
164 Inflation::on_initialize(block);
165 }
166 assert_eq!(
167 initial_issuance + (1901 * (YEAR / 100)),
168 <Balances as Currency<_>>::total_issuance()
169 );
159170
160 Inflation::on_initialize(YEAR);171 Inflation::on_initialize(YEAR);
161 let block_inflation_year_1 = Inflation::block_inflation();172 let block_inflation_year_1 = Inflation::block_inflation();
162173 // SBP M2 review: Verify expected block inflation for year 2
163 // Assert that year 1 inflation is less than year 0
164 assert!(block_inflation_year_0 > block_inflation_year_1);174 assert_eq!(block_inflation_year_1, 1952);
175
176 // SBP M2 review: this is actually not true
177 // Assert that year 1 inflation is less than year 0
178 // assert!(block_inflation_year_0 > block_inflation_year_1);
165 });179 });
166}180}
167181
179 Inflation::on_initialize(YEAR * year);193 Inflation::on_initialize(YEAR * year);
180 let block_inflation_year_after = Inflation::block_inflation();194 let block_inflation_year_after = Inflation::block_inflation();
181195
196 // SBP M2 review: this is actually not true (not for the first few years)
182 // Assert that next year inflation is less than previous year inflation197 // Assert that next year inflation is less than previous year inflation
183 assert!(block_inflation_year_before > block_inflation_year_after);198 assert!(block_inflation_year_before > block_inflation_year_after);
184 }199 }
modifiedpallets/nft-charge-transaction/Cargo.tomldiffbeforeafterboth
2020
21[dependencies]21[dependencies]
22serde = { version = "1.0.119", default-features = false }22serde = { version = "1.0.119", default-features = false }
23frame-support = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }23frame-support = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
24frame-system = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }24frame-system = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
25pallet-balances = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }25pallet-balances = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
26pallet-transaction-payment = { default-features = false, version = "3.0.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }26pallet-transaction-payment = { default-features = false, version = "3.0.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
27sp-std = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }27sp-std = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
28frame-benchmarking = { default-features = false, version = "3.0.0", optional = true, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }28frame-benchmarking = { default-features = false, version = "3.0.0", optional = true, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
29sp-core = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }29sp-core = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
30sp-io = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }30sp-io = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
31sp-runtime = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }31sp-runtime = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
3232
33pallet-nft-transaction-payment = { default-features = false, path="../nft-transaction-payment" }33pallet-nft-transaction-payment = { default-features = false, path="../nft-transaction-payment" }
3434
modifiedpallets/nft-charge-transaction/src/lib.rsdiffbeforeafterboth
76 where76 where
77 T::Call: Dispatchable<Info = DispatchInfo>,77 T::Call: Dispatchable<Info = DispatchInfo>,
78 {78 {
79 <pallet_transaction_payment::Module<T>>::compute_fee(len as u32, info, tip)79 <pallet_transaction_payment::Pallet<T>>::compute_fee(len as u32, info, tip)
80 }80 }
8181
82 fn get_priority(82 fn get_priority(
modifiedpallets/nft-transaction-payment/Cargo.tomldiffbeforeafterboth
2020
21[dependencies]21[dependencies]
22serde = { version = "1.0.119", default-features = false }22serde = { version = "1.0.119", default-features = false }
23frame-support = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }23frame-support = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
24frame-system = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }24frame-system = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
25pallet-transaction-payment = { default-features = false, version = "3.0.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }25pallet-transaction-payment = { default-features = false, version = "3.0.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
26sp-std = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }26sp-std = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
27frame-benchmarking = { default-features = false, version = "3.0.0", optional = true, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }27frame-benchmarking = { default-features = false, version = "3.0.0", optional = true, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
28sp-core = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }28sp-core = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
29sp-io = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }29sp-io = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
30sp-runtime = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }30sp-runtime = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
3131
32up-sponsorship = { default-features = false, path = "../../primitives/sponsorship", version = "0.1.0" }32up-sponsorship = { default-features = false, path = "../../primitives/sponsorship", version = "0.1.0" }
3333
deletedpallets/nft-transaction-payment/src/benchmarking.rsdiffbeforeafterboth

no changes

modifiedpallets/nft-transaction-payment/src/lib.rsdiffbeforeafterboth
11#[cfg(feature = "std")]11#[cfg(feature = "std")]
12pub use serde::*;12pub use serde::*;
13
14#[cfg(feature = "runtime-benchmarks")]
15mod benchmarking;
1613
17use frame_support::{decl_module, decl_storage};14use frame_support::{decl_module, decl_storage};
18use sp_std::prelude::*;15use sp_std::prelude::*;
modifiedpallets/nft/Cargo.tomldiffbeforeafterboth
37 'ethereum/std',37 'ethereum/std',
38 'rlp/std',38 'rlp/std',
3939
40 'ethereum-tx-sign',
41 'primitive-types/std',40 'primitive-types/std',
42 'evm-coder/std',41 'evm-coder/std',
42 'pallet-evm-coder-substrate/std',
43]43]
44limit-testing = ["nft-data-structs/limit-testing"]
4445
45################################################################################46################################################################################
46# Substrate Dependencies47# Substrate Dependencies
55default-features = false56default-features = false
56optional = true57optional = true
57git = 'https://github.com/paritytech/substrate.git'58git = 'https://github.com/paritytech/substrate.git'
58branch = 'polkadot-v0.9.7'59branch = 'polkadot-v0.9.8'
59version = '3.0.0'60version = '3.0.0'
6061
61[dependencies.frame-support]62[dependencies.frame-support]
62default-features = false63default-features = false
63git = 'https://github.com/paritytech/substrate.git'64git = 'https://github.com/paritytech/substrate.git'
64branch = 'polkadot-v0.9.7'65branch = 'polkadot-v0.9.8'
65version = '3.0.0'66version = '3.0.0'
6667
67[dependencies.frame-system]68[dependencies.frame-system]
68default-features = false69default-features = false
69git = 'https://github.com/paritytech/substrate.git'70git = 'https://github.com/paritytech/substrate.git'
70branch = 'polkadot-v0.9.7'71branch = 'polkadot-v0.9.8'
71version = '3.0.0'72version = '3.0.0'
7273
73[dependencies.pallet-balances]74[dependencies.pallet-balances]
74default-features = false75default-features = false
75git = 'https://github.com/paritytech/substrate.git'76git = 'https://github.com/paritytech/substrate.git'
76branch = 'polkadot-v0.9.7'77branch = 'polkadot-v0.9.8'
77version = '3.0.0'78version = '3.0.0'
7879
79[dependencies.pallet-timestamp]80[dependencies.pallet-timestamp]
80default-features = false81default-features = false
81git = 'https://github.com/paritytech/substrate.git'82git = 'https://github.com/paritytech/substrate.git'
82branch = 'polkadot-v0.9.7'83branch = 'polkadot-v0.9.8'
83version = '3.0.0'84version = '3.0.0'
8485
85[dependencies.pallet-randomness-collective-flip]86[dependencies.pallet-randomness-collective-flip]
86default-features = false87default-features = false
87git = 'https://github.com/paritytech/substrate.git'88git = 'https://github.com/paritytech/substrate.git'
88branch = 'polkadot-v0.9.7'89branch = 'polkadot-v0.9.8'
89version = '3.0.0'90version = '3.0.0'
9091
91[dependencies.sp-std]92[dependencies.sp-std]
92default-features = false93default-features = false
93git = 'https://github.com/paritytech/substrate.git'94git = 'https://github.com/paritytech/substrate.git'
94branch = 'polkadot-v0.9.7'95branch = 'polkadot-v0.9.8'
95version = '3.0.0'96version = '3.0.0'
9697
97[dependencies.pallet-transaction-payment]98[dependencies.pallet-transaction-payment]
98default-features = false99default-features = false
99git = 'https://github.com/paritytech/substrate.git'100git = 'https://github.com/paritytech/substrate.git'
100branch = 'polkadot-v0.9.7'101branch = 'polkadot-v0.9.8'
101version = '3.0.0'102version = '3.0.0'
102103
103[dependencies.serde]104[dependencies.serde]
108[dependencies.sp-runtime]109[dependencies.sp-runtime]
109default-features = false110default-features = false
110git = 'https://github.com/paritytech/substrate.git'111git = 'https://github.com/paritytech/substrate.git'
111branch = 'polkadot-v0.9.7'112branch = 'polkadot-v0.9.8'
112version = '3.0.0'113version = '3.0.0'
113114
114[dependencies.sp-core]115[dependencies.sp-core]
115default-features = false116default-features = false
116git = 'https://github.com/paritytech/substrate.git'117git = 'https://github.com/paritytech/substrate.git'
117branch = 'polkadot-v0.9.7'118branch = 'polkadot-v0.9.8'
118version = '3.0.0'119version = '3.0.0'
119120
120[dependencies.sp-io]121[dependencies.sp-io]
121default-features = false122default-features = false
122git = 'https://github.com/paritytech/substrate.git'123git = 'https://github.com/paritytech/substrate.git'
123branch = 'polkadot-v0.9.7'124branch = 'polkadot-v0.9.8'
124version = '3.0.0'125version = '3.0.0'
125126
126127
139140
140141
141[dependencies]142[dependencies]
142ethereum-tx-sign = { version = "3.0.4", optional = true }
143ethereum = { default-features = false, version = "0.7.1" }143ethereum = { default-features = false, version = "0.7.1" }
144rlp = { default-features = false, version = "0.5.0" }144rlp = { default-features = false, version = "0.5.0" }
145sp-api = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.7" }145sp-api = { default-features = false, version = '3.0.0', git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.8" }
146146
147evm-coder = { default-features = false, path = "../../crates/evm-coder" }147evm-coder = { default-features = false, path = "../../crates/evm-coder" }
148pallet-evm-coder-substrate = { default-features = false, path = "../../pallets/evm-coder-substrate" }
148primitive-types = { version = "0.9.0", default-features = false, features = ["serde_no_std"] }149primitive-types = { version = "0.9.0", default-features = false, features = [
150 "serde_no_std",
151] }
149152
150pallet-evm = { default-features = false, version = "5.0.0-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }153pallet-evm = { default-features = false, version = "5.0.0-dev", git = "https://github.com/uniquenetwork/frontier.git", branch = "injected-transactions-parachain" }
151pallet-ethereum = { default-features = false, version = "3.0.0-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }154pallet-ethereum = { default-features = false, version = "3.0.0-dev", git = "https://github.com/uniquenetwork/frontier.git", branch = "injected-transactions-parachain" }
152fp-evm = { default-features = false, version = '2.0.0', git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }155fp-evm = { default-features = false, version = '2.0.0', git = "https://github.com/uniquenetwork/frontier.git", branch = "injected-transactions-parachain" }
153hex-literal = "0.3.1"156hex-literal = "0.3.1"
157
modifiedpallets/nft/src/benchmarking.rsdiffbeforeafterboth
1#![cfg(feature = "runtime-benchmarks")]1#![cfg(feature = "runtime-benchmarks")]
22
3use super::*;3use super::*;
4use crate::Module as Nft;4use crate::Pallet;
5
6use sp_std::prelude::*;
7use frame_system::RawOrigin;5use frame_system::RawOrigin;
8use frame_benchmarking::{benchmarks, account, whitelisted_caller}; // , TrackedStorageKey,6use frame_benchmarking::{benchmarks, account};
7use nft_data_structs::*;
8use core::convert::TryInto;
9use sp_runtime::DispatchError;
910
10const SEED: u32 = 1;11const SEED: u32 = 1;
11/*12
12fn default_nft_data() -> CreateItemData {13fn create_data(size: usize) -> Vec<u8> {
13 CreateItemData::NFT(CreateNftData { const_data: vec![1, 2, 3], variable_data: vec![3, 2, 1] })14 (0..size).map(|v| (v & 0xff) as u8).collect()
14}15}
1516fn create_u16_data(size: usize) -> Vec<u16> {
16fn default_fungible_data () -> CreateItemData {17 (0..size).map(|v| (v & 0xffff) as u16).collect()
17 CreateItemData::Fungible(CreateFungibleData { })18}
18}19
1920fn default_nft_data() -> CreateItemData {
20fn default_re_fungible_data () -> CreateItemData {21 CreateItemData::NFT(CreateNftData {
21 CreateItemData::ReFungible(CreateReFungibleData { const_data: vec![1, 2, 3], variable_data: vec![3, 2, 1] })22 const_data: create_data(CUSTOM_DATA_LIMIT as usize).try_into().unwrap(),
22}23 variable_data: create_data(CUSTOM_DATA_LIMIT as usize).try_into().unwrap(),
23*/24 })
25}
26
27fn default_fungible_data() -> CreateItemData {
28 CreateItemData::Fungible(CreateFungibleData { value: 1000 })
29}
30
31fn default_re_fungible_data() -> CreateItemData {
32 CreateItemData::ReFungible(CreateReFungibleData {
33 const_data: create_data(CUSTOM_DATA_LIMIT as usize).try_into().unwrap(),
34 variable_data: create_data(CUSTOM_DATA_LIMIT as usize).try_into().unwrap(),
35 pieces: 1000,
36 })
37}
38
39fn create_collection_helper<T: Config>(
40 owner: T::AccountId,
41 mode: CollectionMode,
42) -> Result<CollectionId, DispatchError> {
43 T::Currency::deposit_creating(&owner, T::CollectionCreationPrice::get());
44 let col_name = create_u16_data(MAX_COLLECTION_NAME_LENGTH)
45 .try_into()
46 .unwrap();
47 let col_desc = create_u16_data(MAX_COLLECTION_DESCRIPTION_LENGTH)
48 .try_into()
49 .unwrap();
50 let token_prefix = create_data(MAX_TOKEN_PREFIX_LENGTH).try_into().unwrap();
51 <Pallet<T>>::create_collection(
52 RawOrigin::Signed(owner).into(),
53 col_name,
54 col_desc,
55 token_prefix,
56 mode,
57 )?;
58 Ok(CreatedCollectionCount::get())
59}
60fn create_nft_collection<T: Config>(owner: T::AccountId) -> Result<CollectionId, DispatchError> {
61 create_collection_helper::<T>(owner, CollectionMode::NFT)
62}
63fn create_fungible_collection<T: Config>(
64 owner: T::AccountId,
65) -> Result<CollectionId, DispatchError> {
66 create_collection_helper::<T>(owner, CollectionMode::Fungible(0))
67}
68fn create_refungible_collection<T: Config>(
69 owner: T::AccountId,
70) -> Result<CollectionId, DispatchError> {
71 create_collection_helper::<T>(owner, CollectionMode::ReFungible)
72}
2473
25benchmarks! {74benchmarks! {
2675
27 create_collection {76 create_collection {
28 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();77 let col_name: Vec<u16> = create_u16_data(MAX_COLLECTION_NAME_LENGTH);
78 let col_desc: Vec<u16> = create_u16_data(MAX_COLLECTION_DESCRIPTION_LENGTH);
79 let token_prefix: Vec<u8> = create_data(MAX_TOKEN_PREFIX_LENGTH);
80 let mode: CollectionMode = CollectionMode::NFT;
81 let caller: T::AccountId = account("caller", 0, SEED);
82 T::Currency::deposit_creating(&caller, T::CollectionCreationPrice::get());
83 }: _(RawOrigin::Signed(caller.clone()), col_name.clone(), col_desc.clone(), token_prefix.clone(), mode)
84 verify {
85 assert_eq!(<Pallet<T>>::collection_id(2).unwrap().owner, caller);
86 }
87
88 destroy_collection {
89 let caller: T::AccountId = account("caller", 0, SEED);
90 let collection = create_nft_collection::<T>(caller.clone())?;
91 }: _(RawOrigin::Signed(caller.clone()), collection)
92
93 add_to_white_list {
94 let caller: T::AccountId = account("caller", 0, SEED);
95 let whitelist_account: T::AccountId = account("admin", 0, SEED);
96 let collection = create_nft_collection::<T>(caller.clone())?;
97 }: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(whitelist_account))
98
99 remove_from_white_list {
100 let caller: T::AccountId = account("caller", 0, SEED);
101 let whitelist_account: T::AccountId = account("admin", 0, SEED);
102 let collection = create_nft_collection::<T>(caller.clone())?;
103 <Pallet<T>>::add_to_white_list(RawOrigin::Signed(caller.clone()).into(), collection, T::CrossAccountId::from_sub(whitelist_account.clone()))?;
104 }: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(whitelist_account))
105
106 set_public_access_mode {
107 let caller: T::AccountId = account("caller", 0, SEED);
108 let collection = create_nft_collection::<T>(caller.clone())?;
109 }: _(RawOrigin::Signed(caller.clone()), collection, AccessMode::WhiteList)
110
111 set_mint_permission {
112 let caller: T::AccountId = account("caller", 0, SEED);
113 let collection = create_nft_collection::<T>(caller.clone())?;
114 }: _(RawOrigin::Signed(caller.clone()), collection, true)
115
116 change_collection_owner {
117 let caller: T::AccountId = account("caller", 0, SEED);
118 let collection = create_nft_collection::<T>(caller.clone())?;
119 let new_owner: T::AccountId = account("admin", 0, SEED);
120 }: _(RawOrigin::Signed(caller.clone()), collection, new_owner)
121
122 add_collection_admin {
123 let caller: T::AccountId = account("caller", 0, SEED);
124 let collection = create_nft_collection::<T>(caller.clone())?;
125 let new_admin: T::AccountId = account("admin", 0, SEED);
126 }: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(new_admin))
127
128 remove_collection_admin {
129 let caller: T::AccountId = account("caller", 0, SEED);
130 let collection = create_nft_collection::<T>(caller.clone())?;
131 let new_admin: T::AccountId = account("admin", 0, SEED);
132 <Pallet<T>>::add_collection_admin(RawOrigin::Signed(caller.clone()).into(), 2, T::CrossAccountId::from_sub(new_admin.clone()))?;
133 }: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(new_admin))
134
135 set_collection_sponsor {
136 let caller: T::AccountId = account("caller", 0, SEED);
137 let collection = create_nft_collection::<T>(caller.clone())?;
138 }: _(RawOrigin::Signed(caller.clone()), collection, caller.clone())
139
140 confirm_sponsorship {
141 let caller: T::AccountId = account("caller", 0, SEED);
29 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();142 let collection = create_nft_collection::<T>(caller.clone())?;
143 <Pallet<T>>::set_collection_sponsor(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone())?;
144 }: _(RawOrigin::Signed(caller.clone()), collection)
145
146 remove_collection_sponsor {
147 let caller: T::AccountId = account("caller", 0, SEED);
148 let collection = create_nft_collection::<T>(caller.clone())?;
149 <Pallet<T>>::set_collection_sponsor(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone())?;
150 <Pallet<T>>::confirm_sponsorship(RawOrigin::Signed(caller.clone()).into(), 2)?;
151 }: _(RawOrigin::Signed(caller.clone()), collection)
152
153 // nft item
154 create_item_nft {
155 let b in 0..(CUSTOM_DATA_LIMIT * 2);
156
157 let caller: T::AccountId = account("caller", 0, SEED);
158 let collection = create_nft_collection::<T>(caller.clone())?;
159 let data = CreateItemData::NFT(CreateNftData {
160 const_data: create_data(b.min(CUSTOM_DATA_LIMIT) as usize).try_into().unwrap(),
161 variable_data: create_data(b.saturating_sub(CUSTOM_DATA_LIMIT) as usize).try_into().unwrap(),
162 });
163 }: create_item(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(caller.clone()), data)
164
165 create_multiple_items_nft {
166 // TODO: Take item data size into account. As create_item_nft bench shows, this parameter has no effect on execution time,
167 // but it may if we increase CUSTOM_DATA_LIMIT
168 let b in 1..1000;
169
170 let caller: T::AccountId = account("caller", 0, SEED);
171 let collection = create_nft_collection::<T>(caller.clone())?;
172 let data = (0..b).map(|_| default_nft_data()).collect();
173 }: create_multiple_items(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(caller.clone()), data)
174
175 // fungible item
176 create_item_fungible {
177 let caller: T::AccountId = account("caller", 0, SEED);
178 let collection = create_fungible_collection::<T>(caller.clone())?;
179 let data = CreateItemData::Fungible(CreateFungibleData {
180 value: 1000,
181 });
182 }: create_item(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(caller.clone()), data)
183
184 create_multiple_items_fungible {
185 let b in 1..1000;
186
187 let caller: T::AccountId = account("caller", 0, SEED);
188 let collection = create_fungible_collection::<T>(caller.clone())?;
189 let data = (0..b).map(|_| default_fungible_data()).collect();
190 }: create_multiple_items(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(caller.clone()), data)
191
192 // refungible item
193 create_item_refungible {
194 let b in 0..(CUSTOM_DATA_LIMIT * 2);
195
196 let caller: T::AccountId = account("caller", 0, SEED);
197 let collection = create_refungible_collection::<T>(caller.clone())?;
198 let data = CreateItemData::ReFungible(CreateReFungibleData {
199 const_data: create_data(b.min(CUSTOM_DATA_LIMIT) as usize).try_into().unwrap(),
200 variable_data: create_data(b.saturating_sub(CUSTOM_DATA_LIMIT) as usize).try_into().unwrap(),
201 pieces: 1000,
202 });
203 }: create_item(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(caller.clone()), data)
204
205 create_multiple_items_refungible {
206 // TODO: Take item data size into account. As create_item_nft bench shows, this parameter has no effect on execution time,
207 // but it may if we increase CUSTOM_DATA_LIMIT
208 let b in 1..1000;
209
210 let caller: T::AccountId = account("caller", 0, SEED);
211 let collection = create_refungible_collection::<T>(caller.clone())?;
212 let data = (0..b).map(|_| default_re_fungible_data()).collect();
213 }: create_multiple_items(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(caller.clone()), data)
214
215 burn_item_nft {
216 let caller: T::AccountId = account("caller", 0, SEED);
217 let collection = create_nft_collection::<T>(caller.clone())?;
218 let data = default_nft_data();
219 <Pallet<T>>::create_item(RawOrigin::Signed(caller.clone()).into(), collection, T::CrossAccountId::from_sub(caller.clone()), data)?;
220 }: burn_item(RawOrigin::Signed(caller.clone()), collection, 1, 1)
221
222 transfer_nft {
30 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();223 let caller: T::AccountId = account("caller", 0, SEED);
224 let collection = create_nft_collection::<T>(caller.clone())?;
225 let recipient: T::AccountId = account("recipient", 0, SEED);
226 let data = default_nft_data();
227 <Pallet<T>>::create_item(RawOrigin::Signed(caller.clone()).into(), collection, T::CrossAccountId::from_sub(caller.clone()), data)?;
228 }: transfer(RawOrigin::Signed(caller.clone()), T::CrossAccountId::from_sub(recipient.clone()), collection, 1, 1)
229
230 transfer_fungible {
231 let caller: T::AccountId = account("caller", 0, SEED);
232 let collection = create_fungible_collection::<T>(caller.clone())?;
233 let recipient: T::AccountId = account("recipient", 0, SEED);
234 let data = default_fungible_data();
235 <Pallet<T>>::create_item(RawOrigin::Signed(caller.clone()).into(), collection, T::CrossAccountId::from_sub(caller.clone()), data)?;
236 }: transfer(RawOrigin::Signed(caller.clone()), T::CrossAccountId::from_sub(recipient.clone()), collection, 1, 1)
237
238 transfer_refungible {
31 let mode: CollectionMode = CollectionMode::NFT;239 let caller: T::AccountId = account("caller", 0, SEED);
240 let collection = create_refungible_collection::<T>(caller.clone())?;
32 let caller: T::AccountId = account("caller", 0, SEED);241 let recipient: T::AccountId = account("recipient", 0, SEED);
242 let data = default_re_fungible_data();
243 <Pallet<T>>::create_item(RawOrigin::Signed(caller.clone()).into(), collection, T::CrossAccountId::from_sub(caller.clone()), data)?;
244 }: transfer(RawOrigin::Signed(caller.clone()), T::CrossAccountId::from_sub(recipient.clone()), collection, 1, 1)
245
246 set_transfers_enabled_flag {
247 let caller: T::AccountId = account("caller", 0, SEED);
248 let collection = create_nft_collection::<T>(caller.clone())?;
33 }: _(RawOrigin::Signed(caller.clone()), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode)249 }: _(RawOrigin::Signed(caller.clone()), collection, false)
34/*250
35 verify {251 approve_nft {
36 assert_eq!(Nft::<T>::collection_id(2).owner, caller);252 let caller: T::AccountId = account("caller", 0, SEED);
37 }253 let collection = create_nft_collection::<T>(caller.clone())?;
38 destroy_collection {254 let recipient: T::AccountId = account("recipient", 0, SEED);
39 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();255 let data = default_nft_data();
40 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();256 <Pallet<T>>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, T::CrossAccountId::from_sub(caller.clone()), data)?;
41 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();257 }: approve(RawOrigin::Signed(caller.clone()), T::CrossAccountId::from_sub(recipient.clone()), collection, 1, 1)
42 let mode: CollectionMode = CollectionMode::NFT;258
43 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());259 // Nft
44 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;260 transfer_from_nft {
45 }: _(RawOrigin::Signed(caller.clone()), 2)261 let caller: T::AccountId = account("caller", 0, SEED);
46262 let collection = create_nft_collection::<T>(caller.clone())?;
47 add_to_white_list {263 let recipient: T::AccountId = account("recipient", 0, SEED);
48 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();264 let data = default_nft_data();
49 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();265 <Pallet<T>>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, T::CrossAccountId::from_sub(caller.clone()), data)?;
50 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();266 <Pallet<T>>::approve(RawOrigin::Signed(caller.clone()).into(), T::CrossAccountId::from_sub(recipient.clone()), 2, 1, 1)?;
51 let mode: CollectionMode = CollectionMode::NFT;267 }: transfer_from(RawOrigin::Signed(caller.clone()), T::CrossAccountId::from_sub(caller.clone()), T::CrossAccountId::from_sub(recipient.clone()), 2, 1, 1)
52 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());268
53 let whitelist_account: T::AccountId = account("admin", 0, SEED);269 // Fungible
54 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;270 transfer_from_fungible {
55 }: add_to_white_list(RawOrigin::Signed(caller.clone()), 2, whitelist_account)271 let caller: T::AccountId = account("caller", 0, SEED);
56272 let collection = create_fungible_collection::<T>(caller.clone())?;
57 remove_from_white_list {273 let recipient: T::AccountId = account("recipient", 0, SEED);
58 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();274 let data = default_fungible_data();
59 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();275 <Pallet<T>>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, T::CrossAccountId::from_sub(caller.clone()), data)?;
60 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();276 <Pallet<T>>::approve(RawOrigin::Signed(caller.clone()).into(), T::CrossAccountId::from_sub(recipient.clone()), 2, 1, 1)?;
61 let mode: CollectionMode = CollectionMode::NFT;277 }: transfer_from(RawOrigin::Signed(caller.clone()), T::CrossAccountId::from_sub(caller.clone()), T::CrossAccountId::from_sub(recipient.clone()), 2, 1, 1)
62 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());278
63 let whitelist_account: T::AccountId = account("admin", 0, SEED);279 // ReFungible
64 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;280 transfer_from_refungible {
65 Nft::<T>::add_to_white_list(RawOrigin::Signed(caller.clone()).into(), 2, whitelist_account.clone())?;281 let caller: T::AccountId = account("caller", 0, SEED);
66 }: remove_from_white_list(RawOrigin::Signed(caller.clone()), 2, whitelist_account)282 let collection = create_refungible_collection::<T>(caller.clone())?;
67283 let recipient: T::AccountId = account("recipient", 0, SEED);
68 set_public_access_mode {284 let data = default_re_fungible_data();
69 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();285 <Pallet<T>>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, T::CrossAccountId::from_sub(caller.clone()), data)?;
70 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();286 <Pallet<T>>::approve(RawOrigin::Signed(caller.clone()).into(), T::CrossAccountId::from_sub(recipient.clone()), 2, 1, 1)?;
71 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();287 }: transfer_from(RawOrigin::Signed(caller.clone()), T::CrossAccountId::from_sub(caller.clone()), T::CrossAccountId::from_sub(recipient.clone()), 2, 1, 1)
72 let mode: CollectionMode = CollectionMode::NFT;288
73 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());289 set_offchain_schema {
74 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;290 let b in 0..OFFCHAIN_SCHEMA_LIMIT;
75 }: set_public_access_mode(RawOrigin::Signed(caller.clone()), 2, AccessMode::WhiteList)291
76292 let caller: T::AccountId = account("caller", 0, SEED);
77 set_mint_permission {293 let collection = create_nft_collection::<T>(caller.clone())?;
78 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();294 let data = create_data(b as usize);
79 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();295 }: set_offchain_schema(RawOrigin::Signed(caller.clone()), collection, data)
80 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();296
81 let mode: CollectionMode = CollectionMode::NFT;297 set_const_on_chain_schema {
82 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());298 let b in 0..CONST_ON_CHAIN_SCHEMA_LIMIT;
83 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;299
84 }: set_mint_permission(RawOrigin::Signed(caller.clone()), 2, true)300 let caller: T::AccountId = account("caller", 0, SEED);
85301 let collection = create_nft_collection::<T>(caller.clone())?;
86 change_collection_owner {302 let data = create_data(b as usize);
87 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();303 }: set_const_on_chain_schema(RawOrigin::Signed(caller.clone()), collection, data)
88 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();304
89 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();305 set_variable_on_chain_schema {
90 let mode: CollectionMode = CollectionMode::NFT;306 let b in 0..VARIABLE_ON_CHAIN_SCHEMA_LIMIT;
91 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());307
92 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;308 let caller: T::AccountId = account("caller", 0, SEED);
93 let new_owner: T::AccountId = account("admin", 0, SEED);309 let collection = create_nft_collection::<T>(caller.clone())?;
94 }: change_collection_owner(RawOrigin::Signed(caller.clone()), 2, new_owner)310 let data = create_data(b as usize);
95311 }: set_variable_on_chain_schema(RawOrigin::Signed(caller.clone()), 2, data)
96 add_collection_admin {312
97 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();313 set_variable_meta_data_nft {
98 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();314 let b in 0..CUSTOM_DATA_LIMIT;
99 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();315
100 let mode: CollectionMode = CollectionMode::NFT;316 let caller: T::AccountId = account("caller", 0, SEED);
101 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());317 let collection = create_nft_collection::<T>(caller.clone())?;
102 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;318 let data = default_nft_data();
103 let new_admin: T::AccountId = account("admin", 0, SEED);319 <Pallet<T>>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, T::CrossAccountId::from_sub(caller.clone()), data)?;
104 }: add_collection_admin(RawOrigin::Signed(caller.clone()), 2, new_admin)320 let data = create_data(b as usize);
105321 }: set_variable_meta_data(RawOrigin::Signed(caller.clone()), collection, 1, data)
106 remove_collection_admin {322
107 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();323 set_schema_version {
108 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();324 let caller: T::AccountId = account("caller", 0, SEED);
109 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();325 let collection = create_nft_collection::<T>(caller.clone())?;
110 let mode: CollectionMode = CollectionMode::NFT;326 }: set_schema_version(RawOrigin::Signed(caller.clone()), 2, SchemaVersion::Unique)
111 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());327
112 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;328 set_collection_limits{
113 let new_admin: T::AccountId = account("admin", 0, SEED);329 let caller: T::AccountId = account("caller", 0, SEED);
114 Nft::<T>::add_collection_admin(RawOrigin::Signed(caller.clone()).into(), 2, new_admin.clone())?;330 let collection = create_nft_collection::<T>(caller.clone())?;
115 }: remove_collection_admin(RawOrigin::Signed(caller.clone()), 2, new_admin)331
116332 let cl = CollectionLimits {
117 set_collection_sponsor {333 account_token_ownership_limit: 0,
118 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();334 sponsored_data_size: 0,
119 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();335 token_limit: 1,
120 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();336 sponsor_transfer_timeout: 0,
121 let mode: CollectionMode = CollectionMode::NFT;337 owner_can_destroy: true,
122 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());338 owner_can_transfer: true,
123 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;339 sponsored_data_rate_limit: None,
124 }: set_collection_sponsor(RawOrigin::Signed(caller.clone()), 2, caller.clone())340 };
125341 }: set_collection_limits(RawOrigin::Signed(caller.clone()), 2, cl)
126 confirm_sponsorship {
127 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
128 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
129 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
130 let mode: CollectionMode = CollectionMode::NFT;
131 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
132 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
133 Nft::<T>::set_collection_sponsor(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone())?;
134 }: confirm_sponsorship(RawOrigin::Signed(caller.clone()), 2)
135
136 remove_collection_sponsor {
137 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
138 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
139 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
140 let mode: CollectionMode = CollectionMode::NFT;
141 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
142 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
143 Nft::<T>::set_collection_sponsor(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone())?;
144 Nft::<T>::confirm_sponsorship(RawOrigin::Signed(caller.clone()).into(), 2)?;
145 }: remove_collection_sponsor(RawOrigin::Signed(caller.clone()), 2)
146
147 // nft item
148 create_item_nft {
149 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
150 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
151 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
152 let mode: CollectionMode = CollectionMode::NFT;
153 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
154 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
155 let data = default_nft_data();
156
157 }: create_item(RawOrigin::Signed(caller.clone()), 2, caller.clone(), data)
158
159 #[extra]
160 create_item_nft_large {
161 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
162 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
163 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
164 let mode: CollectionMode = CollectionMode::NFT;
165 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
166 let mut nft_data = CreateNftData {
167 const_data: vec![],
168 variable_data: vec![]
169 };
170 for i in 0..1998 {
171 nft_data.const_data.push(10);
172 nft_data.variable_data.push(10);
173 }
174 let data = CreateItemData::NFT(nft_data);
175 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
176
177 }: create_item(RawOrigin::Signed(caller.clone()), 2, caller.clone(), data)
178
179 // fungible item
180 create_item_fungible {
181 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
182 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
183 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
184 let mode: CollectionMode = CollectionMode::Fungible(3);
185 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
186 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
187 let data = default_fungible_data();
188
189 }: create_item(RawOrigin::Signed(caller.clone()), 2, caller.clone(), data)
190
191 // refungible item
192 create_item_refungible {
193 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
194 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
195 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
196 let mode: CollectionMode = CollectionMode::ReFungible(3);
197 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
198 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
199 let data = default_re_fungible_data();
200
201 }: create_item(RawOrigin::Signed(caller.clone()), 2, caller.clone(), data)
202
203 burn_item {
204 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
205 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
206 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
207 let mode: CollectionMode = CollectionMode::NFT;
208 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
209 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
210 let data = default_nft_data();
211 Nft::<T>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?;
212
213 }: burn_item(RawOrigin::Signed(caller.clone()), 2, 1)
214
215 transfer_nft {
216 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
217 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
218 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
219 let mode: CollectionMode = CollectionMode::NFT;
220 let recipient: T::AccountId = account("recipient", 0, SEED);
221 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
222 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
223 let data = default_nft_data();
224 Nft::<T>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?;
225
226 }: transfer(RawOrigin::Signed(caller.clone()), recipient.clone(), 2, 1, 1)
227
228 transfer_fungible {
229 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
230 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
231 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
232 let mode: CollectionMode = CollectionMode::Fungible(3);
233 let recipient: T::AccountId = account("recipient", 0, SEED);
234 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
235 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
236 let data = default_fungible_data();
237 Nft::<T>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?;
238
239 }: transfer(RawOrigin::Signed(caller.clone()), recipient.clone(), 2, 1, 1)
240
241 transfer_refungible {
242 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
243 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
244 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
245 let mode: CollectionMode = CollectionMode::ReFungible(3);
246 let recipient: T::AccountId = account("recipient", 0, SEED);
247 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
248 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
249 let data = default_re_fungible_data();
250 Nft::<T>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?;
251
252 }: transfer(RawOrigin::Signed(caller.clone()), recipient.clone(), 2, 1, 1)
253
254 approve {
255 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
256 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
257 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
258 let mode: CollectionMode = CollectionMode::ReFungible(3);
259 let recipient: T::AccountId = account("recipient", 0, SEED);
260 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
261 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
262 let data = default_re_fungible_data();
263 Nft::<T>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?;
264
265 }: approve(RawOrigin::Signed(caller.clone()), recipient.clone(), 2, 1)
266
267 // Nft
268 transfer_from_nft {
269 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
270 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
271 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
272 let mode: CollectionMode = CollectionMode::NFT;
273 let recipient: T::AccountId = account("recipient", 0, SEED);
274 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
275 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
276 let data = default_nft_data();
277 Nft::<T>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?;
278 Nft::<T>::approve(RawOrigin::Signed(caller.clone()).into(), recipient.clone(), 2, 1)?;
279
280 }: transfer_from(RawOrigin::Signed(caller.clone()), caller.clone(), recipient.clone(), 2, 1, 1)
281
282 // Fungible
283 transfer_from_fungible {
284 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
285 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
286 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
287 let mode: CollectionMode = CollectionMode::Fungible(3);
288 let recipient: T::AccountId = account("recipient", 0, SEED);
289 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
290 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
291 let data = default_fungible_data();
292 Nft::<T>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?;
293 Nft::<T>::approve(RawOrigin::Signed(caller.clone()).into(), recipient.clone(), 2, 1)?;
294
295 }: transfer_from(RawOrigin::Signed(caller.clone()), caller.clone(), recipient.clone(), 2, 1, 1)
296
297 // ReFungible
298 transfer_from_refungible {
299 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
300 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
301 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
302 let mode: CollectionMode = CollectionMode::ReFungible(3);
303 let recipient: T::AccountId = account("recipient", 0, SEED);
304 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
305 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
306 let data = default_re_fungible_data();
307 Nft::<T>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?;
308 Nft::<T>::approve(RawOrigin::Signed(caller.clone()).into(), recipient.clone(), 2, 1)?;
309
310 }: transfer_from(RawOrigin::Signed(caller.clone()), caller.clone(), recipient.clone(), 2, 1, 1)
311
312 enable_contract_sponsoring {
313 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
314
315 }: enable_contract_sponsoring(RawOrigin::Signed(caller.clone()), caller.clone(), true)
316
317 set_offchain_schema {
318 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
319 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
320 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
321 let mode: CollectionMode = CollectionMode::ReFungible(3);
322 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
323 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
324
325 }: set_offchain_schema(RawOrigin::Signed(caller.clone()), 2, [1,2,3].to_vec())
326
327 set_const_on_chain_schema {
328 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
329 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
330 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
331 let mode: CollectionMode = CollectionMode::ReFungible(3);
332 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
333 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
334 }: set_const_on_chain_schema(RawOrigin::Signed(caller.clone()), 2, [1,2,3].to_vec())
335
336 set_variable_on_chain_schema {
337 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
338 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
339 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
340 let mode: CollectionMode = CollectionMode::ReFungible(3);
341 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
342 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
343 }: set_variable_on_chain_schema(RawOrigin::Signed(caller.clone()), 2, [1,2,3].to_vec())
344
345 set_variable_meta_data {
346 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
347 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
348 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
349 let mode: CollectionMode = CollectionMode::NFT;
350 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
351 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
352 let data = default_nft_data();
353 Nft::<T>::create_item(RawOrigin::Signed(caller.clone()).into(), 2, caller.clone(), data)?;
354
355 }: set_variable_meta_data(RawOrigin::Signed(caller.clone()), 2, 1, [1, 2, 3].to_vec())
356
357 set_schema_version {
358 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
359 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
360 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
361 let mode: CollectionMode = CollectionMode::NFT;
362 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
363 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
364 }: set_schema_version(RawOrigin::Signed(caller.clone()), 2, SchemaVersion::Unique)
365
366 set_chain_limits {
367 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
368 let limits = ChainLimits {
369 collection_numbers_limit: 0,
370 account_token_ownership_limit: 0,
371 collections_admins_limit: 0,
372 custom_data_limit: 0,
373 nft_sponsor_transfer_timeout: 0,
374 fungible_sponsor_transfer_timeout: 0,
375 refungible_sponsor_transfer_timeout: 0
376 };
377 }: set_chain_limits(RawOrigin::Signed(caller.clone()), limits)
378
379 set_contract_sponsoring_rate_limit {
380 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
381 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
382 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
383 let mode: CollectionMode = CollectionMode::NFT;
384 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
385 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
386 let block_number: T::BlockNumber = 0.into();
387 }: set_contract_sponsoring_rate_limit(RawOrigin::Signed(caller.clone()), caller.clone(), block_number)
388
389 set_collection_limits{
390 let col_name1: Vec<u16> = "Test1".encode_utf16().collect::<Vec<u16>>();
391 let col_desc1: Vec<u16> = "TestDescription1".encode_utf16().collect::<Vec<u16>>();
392 let token_prefix1: Vec<u8> = b"token_prefix1".to_vec();
393 let mode: CollectionMode = CollectionMode::NFT;
394 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
395 Nft::<T>::create_collection(RawOrigin::Signed(caller.clone()).into(), col_name1.clone(), col_desc1.clone(), token_prefix1.clone(), mode.clone())?;
396
397 let cl = CollectionLimits {
398 account_token_ownership_limit: 0,
399 sponsored_data_size: 0,
400 token_limit: 0,
401 sponsor_transfer_timeout: 0
402 };
403
404 }: set_collection_limits(RawOrigin::Signed(caller.clone()), 2, cl)
405
406 add_to_contract_white_list{
407 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
408 }: add_to_contract_white_list(RawOrigin::Signed(caller.clone()), caller.clone(), caller.clone())
409
410 remove_from_contract_white_list{
411 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
412 Nft::<T>::add_to_contract_white_list(RawOrigin::Signed(caller.clone()).into(), caller.clone(), caller.clone())?;
413 }: remove_from_contract_white_list(RawOrigin::Signed(caller.clone()), caller.clone(), caller.clone())
414
415 toggle_contract_white_list{
416 let caller: T::AccountId = T::AccountId::from(whitelisted_caller());
417 }: toggle_contract_white_list(RawOrigin::Signed(caller.clone()), caller.clone(), true)
418*/
419}342}
420343
deletedpallets/nft/src/default_weights.rsdiffbeforeafterboth

no changes

modifiedpallets/nft/src/eth/erc.rsdiffbeforeafterboth
1use core::char::{decode_utf16, REPLACEMENT_CHARACTER};
1use evm_coder::{solidity_interface, solidity, types::*, ToLog};2use evm_coder::{ToLog, execution::Result, generate_stubgen, solidity, solidity_interface, types::*};
3use nft_data_structs::{CreateItemData, CreateNftData};
4use core::convert::TryInto;
5use crate::{
6 Allowances, Module, Balance, CollectionHandle, CollectionMode, Config, NftItemList,
7 ItemListIndex,
8};
9use frame_support::storage::{StorageMap, StorageDoubleMap};
10use pallet_evm::AddressMapping;
11use super::account::CrossAccountId;
2use sp_std::vec::Vec;12use sp_std::{vec, vec::Vec};
313
4#[solidity_interface]14#[solidity_interface(name = "ERC165")]
5pub trait InlineNameSymbol {
6 type Error;
7
8 fn name(&self) -> Result<string, Self::Error>;15impl<T: Config> CollectionHandle<T> {
9 fn symbol(&self) -> Result<string, Self::Error>;16 fn supports_interface(&self, interface_id: bytes4) -> Result<bool> {
10}17 Ok(match self.mode {
18 CollectionMode::Fungible(_) => UniqueFungibleCall::supports_interface(interface_id),
19 CollectionMode::NFT => UniqueNFTCall::supports_interface(interface_id),
20 _ => false,
21 })
22 }
23}
1124
12#[solidity_interface]25#[solidity_interface(name = "InlineNameSymbol")]
13pub trait InlineTotalSupply {26impl<T: Config> CollectionHandle<T> {
14 type Error;27 fn name(&self) -> Result<string> {
28 Ok(decode_utf16(self.name.iter().copied())
29 .map(|r| r.unwrap_or(REPLACEMENT_CHARACTER))
30 .collect::<string>())
31 }
1532
16 fn total_supply(&self) -> Result<uint256, Self::Error>;33 fn symbol(&self) -> Result<string> {
34 Ok(string::from_utf8_lossy(&self.token_prefix).into())
35 }
17}36}
1837
19#[solidity_interface]38#[solidity_interface(name = "InlineTotalSupply")]
20pub trait ERC165 {39impl<T: Config> CollectionHandle<T> {
21 type Error;
22
23 fn supports_interface(&self, interface_id: bytes4) -> Result<bool, Self::Error>;40 fn total_supply(&self) -> Result<uint256> {
24}41 // TODO: we do not track total amount of all tokens
42 Ok(0.into())
43 }
44}
2545
26#[solidity_interface(inline_is(InlineNameSymbol))]46#[solidity_interface(name = "ERC721Metadata", inline_is(InlineNameSymbol))]
27pub trait ERC721Metadata {47impl<T: Config> CollectionHandle<T> {
28 type Error;
29
30 #[solidity(rename_selector = "tokenURI")]48 #[solidity(rename_selector = "tokenURI")]
31 fn token_uri(&self, token_id: uint256) -> Result<string, Self::Error>;49 fn token_uri(&self, token_id: uint256) -> Result<string> {
32}50 let token_id: u32 = token_id.try_into().map_err(|_| "token id overflow")?;
51 Ok(string::from_utf8_lossy(
52 &<NftItemList<T>>::get(self.id, token_id)
53 .ok_or("token not found")?
54 .const_data,
55 )
56 .into())
57 }
58}
3359
34#[solidity_interface(inline_is(InlineTotalSupply))]60#[solidity_interface(name = "ERC721Enumerable", inline_is(InlineTotalSupply))]
35pub trait ERC721Enumerable {61impl<T: Config> CollectionHandle<T> {
36 type Error;
37
38 fn token_by_index(&self, index: uint256) -> Result<uint256, Self::Error>;62 fn token_by_index(&self, index: uint256) -> Result<uint256> {
63 Ok(index)
64 }
65
39 fn token_of_owner_by_index(66 fn token_of_owner_by_index(&self, _owner: address, _index: uint256) -> Result<uint256> {
40 &self,67 // TODO: Not implemetable
41 owner: address,68 Err("not implemented".into())
42 index: uint256,69 }
43 ) -> Result<uint256, Self::Error>;70}
44}
4571
46#[derive(ToLog)]72#[derive(ToLog)]
47pub enum ERC721Events {73pub enum ERC721Events {
71 },97 },
72}98}
7399
74#[solidity_interface(is(ERC165), events(ERC721Events))]100#[solidity_interface(name = "ERC721", is(ERC165), events(ERC721Events))]
75pub trait ERC721 {101impl<T: Config> CollectionHandle<T> {
76 type Error;102 #[solidity(rename_selector = "balanceOf")]
77
78 fn balance_of(&self, owner: address) -> Result<uint256, Self::Error>;103 fn balance_of_nft(&self, owner: address) -> Result<uint256> {
104 let owner = T::EvmAddressMapping::into_account_id(owner);
105 let balance = <Balance<T>>::get(self.id, owner);
106 Ok(balance.into())
107 }
79 fn owner_of(&self, token_id: uint256) -> Result<address, Self::Error>;108 fn owner_of(&self, token_id: uint256) -> Result<address> {
80109 let token_id: u32 = token_id.try_into().map_err(|_| "token id overflow")?;
81 #[solidity(rename_selector = "safeTransferFrom")]110 let token = <NftItemList<T>>::get(self.id, token_id).ok_or("unknown token")?;
111 Ok(*token.owner.as_eth())
112 }
82 fn safe_transfer_from_with_data(113 fn safe_transfer_from_with_data(
83 &mut self,114 &mut self,
84 from: address,115 _from: address,
85 to: address,116 _to: address,
86 token_id: uint256,117 _token_id: uint256,
87 data: bytes,118 _data: bytes,
88 value: value,119 _value: value,
89 ) -> Result<void, Self::Error>;120 ) -> Result<void> {
121 // TODO: Not implemetable
122 Err("not implemented".into())
123 }
90 fn safe_transfer_from(124 fn safe_transfer_from(
91 &mut self,125 &mut self,
92 from: address,126 _from: address,
93 to: address,127 _to: address,
94 token_id: uint256,128 _token_id: uint256,
95 value: value,129 _value: value,
96 ) -> Result<void, Self::Error>;130 ) -> Result<void> {
131 // TODO: Not implemetable
132 Err("not implemented".into())
133 }
97134
98 fn transfer_from(135 fn transfer_from(
99 &mut self,136 &mut self,
100 caller: caller,137 caller: caller,
101 from: address,138 from: address,
102 to: address,139 to: address,
103 token_id: uint256,140 token_id: uint256,
104 value: value,141 _value: value,
105 ) -> Result<void, Self::Error>;142 ) -> Result<void> {
143 let caller = T::CrossAccountId::from_eth(caller);
144 let from = T::CrossAccountId::from_eth(from);
145 let to = T::CrossAccountId::from_eth(to);
146 let token_id = token_id.try_into().map_err(|_| "token_id overflow")?;
147
148 <Module<T>>::transfer_from_internal(&caller, &from, &to, self, token_id, 1)
149 .map_err(|_| "transferFrom error")?;
150 Ok(())
151 }
152
106 fn approve(153 fn approve(
107 &mut self,154 &mut self,
108 caller: caller,155 caller: caller,
109 approved: address,156 approved: address,
110 token_id: uint256,157 token_id: uint256,
111 value: value,158 _value: value,
112 ) -> Result<void, Self::Error>;159 ) -> Result<void> {
160 let caller = T::CrossAccountId::from_eth(caller);
161 let approved = T::CrossAccountId::from_eth(approved);
162 let token_id = token_id.try_into().map_err(|_| "token_id overflow")?;
163
164 <Module<T>>::approve_internal(&caller, &approved, self, token_id, 1)
165 .map_err(|_| "approve internal")?;
166 Ok(())
167 }
168
113 fn set_approval_for_all(169 fn set_approval_for_all(
114 &mut self,170 &mut self,
115 caller: caller,171 _caller: caller,
116 operator: address,172 _operator: address,
117 approved: bool,173 _approved: bool,
118 ) -> Result<void, Self::Error>;174 ) -> Result<void> {
175 // TODO: Not implemetable
176 Err("not implemented".into())
177 }
119178
120 fn get_approved(&self, token_id: uint256) -> Result<address, Self::Error>;179 fn get_approved(&self, _token_id: uint256) -> Result<address> {
180 // TODO: Not implemetable
181 Err("not implemented".into())
182 }
183
121 fn is_approved_for_all(184 fn is_approved_for_all(&self, _owner: address, _operator: address) -> Result<address> {
122 &self,185 // TODO: Not implemetable
123 owner: address,186 Err("not implemented".into())
124 operator: address,187 }
125 ) -> Result<address, Self::Error>;
126}188}
189
190#[solidity_interface(name = "ERC721Burnable")]
191impl<T: Config> CollectionHandle<T> {
192 fn burn(&mut self, caller: caller, token_id: uint256) -> Result<void> {
193 let caller = T::CrossAccountId::from_eth(caller);
194 let token_id = token_id.try_into().map_err(|_| "amount overflow")?;
195
196 <Module<T>>::burn_item_internal(&caller, &self, token_id, 1).map_err(|_| "burn error")?;
197 Ok(())
198 }
199}
200
201#[derive(ToLog)]
202pub enum ERC721MintableEvents {
203 #[allow(dead_code)]
204 MintingFinished {},
205}
127206
128#[solidity_interface]207#[solidity_interface(name = "ERC721Mintable", events(ERC721MintableEvents))]
129pub trait ERC721UniqueExtensions {208impl<T: Config> CollectionHandle<T> {
209 fn minting_finished(&self) -> Result<bool> {
210 Ok(false)
211 }
212
213 fn mint(&mut self, caller: caller, to: address, token_id: uint256) -> Result<bool> {
130 type Error;214 let caller = T::CrossAccountId::from_eth(caller);
131215 let to = T::CrossAccountId::from_eth(to);
216 let token_id: u32 = token_id.try_into().map_err(|_| "amount overflow")?;
217 if <ItemListIndex>::get(self.id)
218 .checked_add(1)
219 .ok_or("item id overflow")?
220 != token_id
221 {
222 return Err("item id should be next".into());
223 }
224
225 <Module<T>>::create_item_internal(
226 &caller,
227 &self,
228 &to,
229 CreateItemData::NFT(CreateNftData {
230 const_data: vec![].try_into().unwrap(),
231 variable_data: vec![].try_into().unwrap(),
232 }),
233 )
234 .map_err(|_| "mint error")?;
235 Ok(true)
236 }
237
238 #[solidity(rename_selector = "mintWithTokenURI")]
132 fn transfer(239 fn mint_with_token_uri(
133 &mut self,240 &mut self,
134 caller: caller,241 caller: caller,
135 to: address,242 to: address,
136 token_id: uint256,243 token_id: uint256,
137 value: value,244 token_uri: string,
138 ) -> Result<void, Self::Error>;245 ) -> Result<bool> {
246 let caller = T::CrossAccountId::from_eth(caller);
247 let to = T::CrossAccountId::from_eth(to);
248 let token_id: u32 = token_id.try_into().map_err(|_| "amount overflow")?;
249 if <ItemListIndex>::get(self.id)
250 .checked_add(1)
251 .ok_or("item id overflow")?
252 != token_id
253 {
254 return Err("item id should be next".into());
255 }
256
257 <Module<T>>::create_item_internal(
258 &caller,
259 &self,
260 &to,
261 CreateItemData::NFT(CreateNftData {
262 const_data: Vec::<u8>::from(token_uri)
263 .try_into()
264 .map_err(|_| "token uri is too long")?,
265 variable_data: vec![].try_into().unwrap(),
266 }),
267 )
268 .map_err(|_| "mint error")?;
269 Ok(true)
270 }
271
272 fn finish_minting(&mut self, _caller: caller) -> Result<bool> {
273 Err("not implementable".into())
274 }
139}275}
276
277#[solidity_interface(name = "ERC721UniqueExtensions")]
278impl<T: Config> CollectionHandle<T> {
279 #[solidity(rename_selector = "transfer")]
280 fn transfer_nft(
281 &mut self,
282 caller: caller,
283 to: address,
284 token_id: uint256,
285 _value: value,
286 ) -> Result<void> {
287 let caller = T::CrossAccountId::from_eth(caller);
288 let to = T::CrossAccountId::from_eth(to);
289 let token_id = token_id.try_into().map_err(|_| "amount overflow")?;
290
291 <Module<T>>::transfer_internal(&caller, &to, self, token_id, 1)
292 .map_err(|_| "transfer error")?;
293 Ok(())
294 }
295
296 fn next_token_id(&self) -> Result<uint256> {
297 Ok(ItemListIndex::get(self.id)
298 .checked_add(1)
299 .ok_or("item id overflow")?
300 .into())
301 }
302}
140303
141#[solidity_interface(is(304#[solidity_interface(
305 name = "UniqueNFT",
306 is(
142 ERC165,307 ERC165,
143 ERC721,308 ERC721,
144 ERC721Metadata,309 ERC721Metadata,
145 ERC721Enumerable,310 ERC721Enumerable,
146 ERC721UniqueExtensions311 ERC721UniqueExtensions,
312 ERC721Mintable,
313 ERC721Burnable,
147))]314 )
148pub trait UniqueNFT {315)]
149 type Error;316impl<T: Config> CollectionHandle<T> {}
150}
151317
152#[derive(ToLog)]318#[derive(ToLog)]
153pub enum ERC20Events {319pub enum ERC20Events {
168}334}
169335
170#[solidity_interface(inline_is(InlineNameSymbol, InlineTotalSupply), events(ERC20Events))]336#[solidity_interface(
171pub trait ERC20 {337 name = "ERC20",
172 type Error;338 inline_is(InlineNameSymbol, InlineTotalSupply),
173339 events(ERC20Events)
340)]
341impl<T: Config> CollectionHandle<T> {
174 fn decimals(&self) -> Result<uint8, Self::Error>;342 fn decimals(&self) -> Result<uint8> {
343 Ok(if let CollectionMode::Fungible(decimals) = &self.mode {
344 *decimals
345 } else {
346 unreachable!()
347 })
348 }
175 fn balance_of(&self, owner: address) -> Result<uint256, Self::Error>;349 fn balance_of(&self, owner: address) -> Result<uint256> {
350 let owner = T::EvmAddressMapping::into_account_id(owner);
351 let balance = <Balance<T>>::get(self.id, owner);
352 Ok(balance.into())
353 }
176 fn transfer(354 fn transfer(&mut self, caller: caller, to: address, amount: uint256) -> Result<bool> {
177 &mut self,
178 caller: caller,
179 to: address,
180 value: uint256,
181 ) -> Result<bool, Self::Error>;355 let caller = T::CrossAccountId::from_eth(caller);
356 let to = T::CrossAccountId::from_eth(to);
357 let amount = amount.try_into().map_err(|_| "amount overflow")?;
358
359 <Module<T>>::transfer_internal(&caller, &to, self, 1, amount)
360 .map_err(|_| "transfer error")?;
361 Ok(true)
362 }
363 #[solidity(rename_selector = "transferFrom")]
182 fn transfer_from(364 fn transfer_from_fungible(
183 &mut self,365 &mut self,
184 caller: caller,366 caller: caller,
185 from: address,367 from: address,
186 to: address,368 to: address,
187 value: uint256,369 amount: uint256,
188 ) -> Result<bool, Self::Error>;370 ) -> Result<bool> {
371 let caller = T::CrossAccountId::from_eth(caller);
372 let from = T::CrossAccountId::from_eth(from);
373 let to = T::CrossAccountId::from_eth(to);
374 let amount = amount.try_into().map_err(|_| "amount overflow")?;
375
376 <Module<T>>::transfer_from_internal(&caller, &from, &to, self, 1, amount)
377 .map_err(|_| "transferFrom error")?;
378 Ok(true)
379 }
380 #[solidity(rename_selector = "approve")]
189 fn approve(381 fn approve_fungible(
190 &mut self,382 &mut self,
191 caller: caller,383 caller: caller,
192 spender: address,384 spender: address,
193 value: uint256,385 amount: uint256,
194 ) -> Result<bool, Self::Error>;386 ) -> Result<bool> {
387 let caller = T::CrossAccountId::from_eth(caller);
388 let spender = T::CrossAccountId::from_eth(spender);
389 let amount = amount.try_into().map_err(|_| "amount overflow")?;
390
391 <Module<T>>::approve_internal(&caller, &spender, self, 1, amount)
392 .map_err(|_| "approve internal")?;
393 Ok(true)
394 }
195 fn allowance(&self, owner: address, spender: address) -> Result<uint256, Self::Error>;395 fn allowance(&self, owner: address, spender: address) -> Result<uint256> {
196}396 let owner = T::CrossAccountId::from_eth(owner);
397 let spender = T::CrossAccountId::from_eth(spender);
398
399 Ok(<Allowances<T>>::get(self.id, (1, owner.as_sub(), spender.as_sub())).into())
400 }
401}
197402
198#[solidity_interface(is(ERC165, ERC20))]403#[solidity_interface(name = "UniqueFungible", is(ERC165, ERC20))]
199pub trait UniqueFungible {404impl<T: Config> CollectionHandle<T> {}
200 type Error;405
201}406// Not a tests, but code generators
407generate_stubgen!(nft_impl, UniqueNFTCall, true);
408generate_stubgen!(nft_iface, UniqueNFTCall, false);
409
410generate_stubgen!(fungible_impl, UniqueFungibleCall, true);
411generate_stubgen!(fungible_iface, UniqueFungibleCall, false);
202412
deletedpallets/nft/src/eth/erc_impl.rsdiffbeforeafterboth

no changes

deletedpallets/nft/src/eth/log.rsdiffbeforeafterboth

no changes

modifiedpallets/nft/src/eth/mod.rsdiffbeforeafterboth
1pub mod account;1pub mod account;
2pub mod erc;2pub mod erc;
3mod erc_impl;
4pub mod log;
5pub mod sponsoring;3pub mod sponsoring;
64
7use evm_coder::abi::AbiWriter;5use pallet_evm_coder_substrate::call_internal;
8use evm_coder::abi::StringError;
9use sp_std::prelude::*;
10use sp_std::borrow::ToOwned;6use sp_std::borrow::ToOwned;
11use sp_std::vec::Vec;7use sp_std::vec::Vec;
12
13use pallet_evm::{PrecompileOutput, ExitReason, ExitRevert, ExitSucceed};8use pallet_evm::{PrecompileOutput};
14use sp_core::{H160, U256};9use sp_core::{H160, U256};
15use frame_support::storage::StorageMap;10use frame_support::storage::StorageMap;
16
17use crate::{Config, CollectionById, CollectionHandle, CollectionId, CollectionMode};11use crate::{Config, CollectionById, CollectionHandle, CollectionId, CollectionMode};
18
19use erc::{UniqueFungible, UniqueFungibleCall, UniqueNFT, UniqueNFTCall};12use erc::{UniqueFungibleCall, UniqueNFTCall};
20use evm_coder::{types::*, abi::AbiReader};
2113
22pub struct NftErcSupport<T: Config>(core::marker::PhantomData<T>);14pub struct NftErcSupport<T: Config>(core::marker::PhantomData<T>);
2315
42 H160(out)34 H160(out)
43}35}
4436
45fn call_internal<T: Config>(37/*
46 collection: &mut CollectionHandle<T>,38fn call_internal<T: Config>(
47 caller: caller,39 collection: &mut CollectionHandle<T>,
48 method_id: u32,40 caller: caller,
49 mut input: AbiReader,41 method_id: u32,
50 value: U256,42 mut input: AbiReader,
51) -> Result<Option<AbiWriter>, evm_coder::abi::StringError> {43 value: U256,
52 match collection.mode.clone() {44) -> Result<Option<AbiWriter>> {
53 CollectionMode::Fungible(_) => {45 match collection.mode.clone() {
54 #[cfg(feature = "std")]46 CollectionMode::Fungible(_) => {
55 {47 call_internal();
56 println!("Parse fungible call {:x}", method_id);48 let call = match UniqueFungibleCall::parse(method_id, &mut input)? {
57 }49 Some(v) => v,
58 let call = match UniqueFungibleCall::parse(method_id, &mut input)? {50 None => {
59 Some(v) => v,51 #[cfg(feature = "std")]
60 None => {52 {
61 #[cfg(feature = "std")]53 println!("Method not found");
62 {54 }
63 println!("Method not found");55 return Ok(None);
64 }56 }
65 return Ok(None);57 };
66 }58 Ok(Some(<CollectionHandle<T> as UniqueFungible>::call(
67 };59 collection,
68 #[cfg(feature = "std")]60 Msg {
69 {61 call,
70 dbg!(&call);62 caller,
71 }63 value,
72 Ok(Some(<CollectionHandle<T> as UniqueFungible>::call(64 },
73 collection,65 )?))
74 Msg {66 }
75 call,67 CollectionMode::NFT => {
76 caller,68 let call = match UniqueNFTCall::parse(method_id, &mut input)? {
77 value,69 Some(v) => v,
78 },70 None => return Ok(None),
79 )?))71 };
80 }72 Ok(Some(<CollectionHandle<T> as UniqueNFT>::call(
81 CollectionMode::NFT => {73 collection,
82 let call = match UniqueNFTCall::parse(method_id, &mut input)? {74 Msg {
83 Some(v) => v,75 call,
84 None => return Ok(None),76 caller,
85 };77 value,
86 Ok(Some(<CollectionHandle<T> as UniqueNFT>::call(78 },
87 collection,79 )?))
88 Msg {80 }
89 call,81 _ => Err("erc calls only supported to fungible and nft collections for now".into()),
90 caller,82 }
91 value,83}*/
92 },
93 )?))
94 }
95 _ => Err(StringError::from(
96 "erc calls only supported to fungible and nft collections for now",
97 )),
98 }
99}
10084
101impl<T: Config> pallet_evm::OnMethodCall<T> for NftErcSupport<T> {85impl<T: Config> pallet_evm::OnMethodCall<T> for NftErcSupport<T> {
102 fn is_reserved(target: &H160) -> bool {86 fn is_reserved(target: &H160) -> bool {
112 .and_then(<CollectionById<T>>::get)96 .and_then(<CollectionById<T>>::get)
113 .map(|collection| {97 .map(|collection| {
114 match collection.mode {98 match collection.mode {
115 CollectionMode::NFT => include_bytes!("stubs/ERC721.bin") as &[u8],99 CollectionMode::NFT => include_bytes!("stubs/UniqueNFT.raw") as &[u8],
116 CollectionMode::Fungible(_) => include_bytes!("stubs/ERC20.bin") as &[u8],100 CollectionMode::Fungible(_) => {
101 include_bytes!("stubs/UniqueFungible.raw") as &[u8]
102 }
117 CollectionMode::ReFungible => include_bytes!("stubs/ERC1633.bin") as &[u8],103 CollectionMode::ReFungible => {
104 include_bytes!("stubs/UniqueRefungible.raw") as &[u8]
105 }
118 CollectionMode::Invalid => include_bytes!("stubs/Invalid.bin") as &[u8],106 CollectionMode::Invalid => include_bytes!("stubs/UniqueInvalid.raw") as &[u8],
119 }107 }
120 .to_owned()108 .to_owned()
121 })109 })
129 ) -> Option<PrecompileOutput> {117 ) -> Option<PrecompileOutput> {
130 let mut collection = map_eth_to_id(target)118 let mut collection = map_eth_to_id(target)
131 .and_then(|id| <CollectionHandle<T>>::get_with_gas_limit(id, gas_limit))?;119 .and_then(|id| <CollectionHandle<T>>::get_with_gas_limit(id, gas_limit))?;
132 let (method_id, input) = AbiReader::new_call(input).unwrap();
133 let result = call_internal(&mut collection, *source, method_id, input, value);120 let result = match collection.mode {
134 let cost = gas_limit - collection.gas_left();121 CollectionMode::NFT => {
122 call_internal::<UniqueNFTCall, _>(*source, &mut collection, value, input)
123 }
124 CollectionMode::Fungible(_) => {
125 call_internal::<UniqueFungibleCall, _>(*source, &mut collection, value, input)
126 }
127 _ => return None,
128 };
135 let logs = collection.logs.retrieve_logs();129 collection.recorder.evm_to_precompile_output(result)
136 match result {
137 Ok(Some(v)) => Some(PrecompileOutput {
138 exit_status: ExitReason::Succeed(ExitSucceed::Returned),
139 cost,
140 logs,
141 output: v.finish(),
142 }),
143 Ok(None) => None,
144 Err(e) => Some(PrecompileOutput {
145 exit_status: ExitReason::Revert(ExitRevert::Reverted),
146 cost: 0,
147 logs: Default::default(),
148 output: AbiWriter::from(e).finish(),
149 }),
150 }
151 }130 }
152}131}
153
154// TODO: This function is slow, and output can be memoized
155pub fn generate_transaction(collection_id: u32, chain_id: u64) -> ethereum::Transaction {
156 // FIXME: Can be done on wasm runtime with https://github.com/paritytech/substrate/pull/8728
157 #[cfg(feature = "std")]
158 {
159 let contract = collection_id_to_address(collection_id);
160 let signed = ethereum_tx_sign::RawTransaction {
161 nonce: 0.into(),
162 to: Some(contract.0.into()),
163 value: 0.into(),
164 gas_price: 0.into(),
165 gas: 0.into(),
166 // zero selector, this transaction always have same sender, so all data should be acquired from logs
167 data: Vec::from([0, 0, 0, 0]),
168 }
169 .sign(
170 // TODO: move to pallet config
171 // 0xF70631E55faff9f3FD3681545aa6c724226a3853
172 // 9dbaef9b3ebc00e53f67c6a77bcfbf2c4f2aebe4d70d94af4f2df01744b7a91a
173 &hex_literal::hex!("9dbaef9b3ebc00e53f67c6a77bcfbf2c4f2aebe4d70d94af4f2df01744b7a91a")
174 .into(),
175 &chain_id,
176 );
177 rlp::decode::<ethereum::Transaction>(&signed)
178 .expect("transaction is just created, it can't be broken")
179 }
180 #[cfg(not(feature = "std"))]
181 {
182 panic!("transaction generation not yet supported by wasm runtime while generating transaction for collection_id {}, chain_id {}", collection_id, chain_id)
183 }
184}
185132
modifiedpallets/nft/src/eth/sponsoring.rsdiffbeforeafterboth
1//! Implements EVM sponsoring logic via OnChargeEVMTransaction1//! Implements EVM sponsoring logic via OnChargeEVMTransaction
22
3use crate::{3use crate::{
4 Collection, ChainLimit, CollectionById, Config, NftTransferBasket, FungibleTransferBasket,4 Collection, CollectionById, Config, FungibleTransferBasket, NftTransferBasket,
5 eth::account::EvmBackwardsAddressMapping,5 eth::{account::EvmBackwardsAddressMapping, map_eth_to_id},
6};6};
7use evm_coder::abi::AbiReader;7use evm_coder::{Call, abi::AbiReader};
8use frame_support::{8use frame_support::{
9 storage::{StorageMap, StorageDoubleMap, StorageValue},9 storage::{StorageMap, StorageDoubleMap},
10 traits::Currency,
11};10};
12use pallet_evm::{EVMCurrencyAdapter, WithdrawReason};
13use sp_core::{H160, U256};11use sp_core::H160;
14use sp_std::prelude::*;12use sp_std::prelude::*;
13use up_sponsorship::SponsorshipHandler;
15use super::{14use super::{
16 account::CrossAccountId,15 account::CrossAccountId,
17 erc::{UniqueFungibleCall, UniqueNFTCall, ERC721Call, ERC20Call, ERC721UniqueExtensionsCall},16 erc::{UniqueFungibleCall, UniqueNFTCall, ERC721Call, ERC20Call, ERC721UniqueExtensionsCall},
18};17};
19use core::convert::TryInto;18use core::convert::TryInto;
20
21type NegativeImbalanceOf<C, T> =
22 <C as Currency<<T as frame_system::Config>::AccountId>>::NegativeImbalance;19use core::marker::PhantomData;
23
24pub struct ChargeEvmTransaction;
25pub struct ChargeEvmLiquidityInfo<T>
26where
27 T: Config,
28 T: pallet_evm::Config,20use nft_data_structs::{NFT_SPONSOR_TRANSFER_TIMEOUT, FUNGIBLE_SPONSOR_TRANSFER_TIMEOUT};
29{
30 who: H160,
31 negative_imbalance: NegativeImbalanceOf<<T as Config>::Currency, T>,
32}
3321
34struct AnyError;22struct AnyError;
3523
46 .map_err(|_| AnyError)?34 .map_err(|_| AnyError)?
47 .ok_or(AnyError)?;35 .ok_or(AnyError)?;
48 match call {36 match call {
49 UniqueNFTCall::ERC721UniqueExtensions(ERC721UniqueExtensionsCall::Transfer {37 UniqueNFTCall::ERC721UniqueExtensions(
50 token_id,38 ERC721UniqueExtensionsCall::TransferNft { token_id, .. },
51 ..
52 })39 )
53 | UniqueNFTCall::ERC721(ERC721Call::TransferFrom { token_id, .. }) => {40 | UniqueNFTCall::ERC721(ERC721Call::TransferFrom { token_id, .. }) => {
57 let limit: u32 = if collection_limits.sponsor_transfer_timeout > 0 {44 let limit: u32 = if collection_limits.sponsor_transfer_timeout > 0 {
58 collection_limits.sponsor_transfer_timeout45 collection_limits.sponsor_transfer_timeout
59 } else {46 } else {
60 ChainLimit::get().nft_sponsor_transfer_timeout47 NFT_SPONSOR_TRANSFER_TIMEOUT
61 };48 };
6249
63 let mut sponsor = true;50 let mut sponsor = true;
88 let limit: u32 = if collection_limits.sponsor_transfer_timeout > 0 {75 let limit: u32 = if collection_limits.sponsor_transfer_timeout > 0 {
89 collection_limits.sponsor_transfer_timeout76 collection_limits.sponsor_transfer_timeout
90 } else {77 } else {
91 ChainLimit::get().fungible_sponsor_transfer_timeout78 FUNGIBLE_SPONSOR_TRANSFER_TIMEOUT
92 };79 };
9380
94 let block_number = <frame_system::Pallet<T>>::block_number() as T::BlockNumber;81 let block_number = <frame_system::Pallet<T>>::block_number() as T::BlockNumber;
118 Err(AnyError)105 Err(AnyError)
119}106}
120107
108pub struct NftEthSponsorshipHandler<T: Config>(PhantomData<*const T>);
121impl<T> pallet_evm::OnChargeEVMTransaction<T> for ChargeEvmTransaction109impl<T: Config> SponsorshipHandler<H160, (H160, Vec<u8>)> for NftEthSponsorshipHandler<T> {
122where
123 T: Config,
124 T: pallet_evm::Config,
125{
126 type LiquidityInfo = Option<ChargeEvmLiquidityInfo<T>>;
127
128 fn withdraw_fee(110 fn get_sponsor(who: &H160, call: &(H160, Vec<u8>)) -> Option<H160> {
129 who: &H160,
130 reason: WithdrawReason,
131 fee: U256,
132 ) -> Result<Self::LiquidityInfo, pallet_evm::Error<T>> {
133 let mut who_pays_fee = *who;
134 if let WithdrawReason::Call { target, input } = &reason {111 if let Some(collection_id) = map_eth_to_id(&call.0) {
135 if let Some(collection_id) = crate::eth::map_eth_to_id(target) {
136 if let Some(collection) = <CollectionById<T>>::get(collection_id) {112 if let Some(collection) = <CollectionById<T>>::get(collection_id) {
137 if let Some(sponsor) = collection.sponsorship.sponsor() {113 if !collection.sponsorship.confirmed() {
114 return None;
115 }
138 if try_sponsor(who, collection_id, &collection, input).is_ok() {116 if try_sponsor(who, collection_id, &collection, &call.1).is_ok() {
139 who_pays_fee =117 return collection
118 .sponsorship
119 .sponsor()
120 .cloned()
140 T::EvmBackwardsAddressMapping::from_account_id(sponsor.clone());121 .map(T::EvmBackwardsAddressMapping::from_account_id);
141 }122 }
142 }
143 }123 }
144 }124 }
145 }125 None
146
147 // TODO: Pay fee from substrate address
148 let negative_imbalance = EVMCurrencyAdapter::<<T as Config>::Currency, ()>::withdraw_fee(
149 &who_pays_fee,
150 reason,
151 fee,
152 )?;
153 Ok(negative_imbalance.map(|i| ChargeEvmLiquidityInfo {
154 who: who_pays_fee,
155 negative_imbalance: i,
156 }))
157 }126 }
158127}
159 fn correct_and_deposit_fee(
160 who: &H160,
161 corrected_fee: U256,
162 already_withdrawn: Self::LiquidityInfo,
163 ) -> Result<(), pallet_evm::Error<T>> {
164 EVMCurrencyAdapter::<<T as Config>::Currency, ()>::correct_and_deposit_fee(
165 &already_withdrawn.as_ref().map(|e| e.who).unwrap_or(*who),
166 corrected_fee,
167 already_withdrawn.map(|e| e.negative_imbalance),
168 )
169 }
170}
171128
deletedpallets/nft/src/eth/stubs/ERC1633.bindiffbeforeafterboth

no changes

deletedpallets/nft/src/eth/stubs/ERC20.bindiffbeforeafterboth

binary blob — no preview

deletedpallets/nft/src/eth/stubs/ERC20.soldiffbeforeafterboth

no changes

deletedpallets/nft/src/eth/stubs/ERC721.bindiffbeforeafterboth

no changes

deletedpallets/nft/src/eth/stubs/ERC721.soldiffbeforeafterboth

no changes

deletedpallets/nft/src/eth/stubs/Invalid.bindiffbeforeafterboth

no changes

addedpallets/nft/src/eth/stubs/UniqueFungible.rawdiffbeforeafterboth

binary blob — no preview

addedpallets/nft/src/eth/stubs/UniqueFungible.soldiffbeforeafterboth

no changes

addedpallets/nft/src/eth/stubs/UniqueInvalid.rawdiffbeforeafterboth

no changes

addedpallets/nft/src/eth/stubs/UniqueNFT.rawdiffbeforeafterboth

binary blob — no preview

addedpallets/nft/src/eth/stubs/UniqueNFT.soldiffbeforeafterboth

no changes

addedpallets/nft/src/eth/stubs/UniqueRefungible.rawdiffbeforeafterboth

no changes

modifiedpallets/nft/src/lib.rsdiffbeforeafterboth
31 StorageValue, transactional,31 StorageValue, transactional,
32};32};
3333
34use frame_system::{self as system, ensure_signed, ensure_root};34use frame_system::{self as system, ensure_signed};
35use sp_core::H160;35use sp_core::H160;
36use sp_std::vec;36use sp_std::vec;
37use sp_runtime::sp_std::prelude::Vec;37use sp_runtime::{DispatchError, sp_std::prelude::Vec};
38use core::ops::{Deref, DerefMut};38use core::ops::{Deref, DerefMut};
39use core::cell::RefCell;
40use nft_data_structs::{39use nft_data_structs::{
41 MAX_DECIMAL_POINTS, MAX_SPONSOR_TIMEOUT, MAX_TOKEN_OWNERSHIP, MAX_REFUNGIBLE_PIECES,40 MAX_DECIMAL_POINTS, MAX_SPONSOR_TIMEOUT, MAX_TOKEN_OWNERSHIP, MAX_REFUNGIBLE_PIECES,
41 CUSTOM_DATA_LIMIT, COLLECTION_NUMBER_LIMIT, ACCOUNT_TOKEN_OWNERSHIP_LIMIT,
42 VARIABLE_ON_CHAIN_SCHEMA_LIMIT, CONST_ON_CHAIN_SCHEMA_LIMIT, COLLECTION_ADMINS_LIMIT,
43 OFFCHAIN_SCHEMA_LIMIT, MAX_TOKEN_PREFIX_LENGTH, MAX_COLLECTION_NAME_LENGTH,
42 AccessMode, ChainLimits, Collection, CreateItemData, CollectionLimits, CollectionId,44 MAX_COLLECTION_DESCRIPTION_LENGTH, AccessMode, Collection, CreateItemData, CollectionLimits,
43 CollectionMode, TokenId, SchemaVersion, SponsorshipState, Ownership, NftItemType,45 CollectionId, CollectionMode, TokenId, SchemaVersion, SponsorshipState, Ownership, NftItemType,
44 FungibleItemType, ReFungibleItemType, MetaUpdatePermission,46 FungibleItemType, ReFungibleItemType,
45};47};
46use pallet_ethereum::EthereumTransactionSender;
4748
48#[cfg(test)]49#[cfg(test)]
49mod mock;50mod mock;
5051
51#[cfg(test)]52#[cfg(test)]
52mod tests;53mod tests;
5354
54mod default_weights;
55mod eth;55mod eth;
56mod sponsorship;56mod sponsorship;
57pub use sponsorship::NftSponsorshipHandler;57pub use sponsorship::NftSponsorshipHandler;
58pub use eth::sponsoring::NftEthSponsorshipHandler;
5859
59pub use eth::NftErcSupport;60pub use eth::NftErcSupport;
60pub use eth::account::*;61pub use eth::account::*;
63#[cfg(feature = "runtime-benchmarks")]64#[cfg(feature = "runtime-benchmarks")]
64mod benchmarking;65mod benchmarking;
65
66pub trait WeightInfo {66pub mod weights;
67 fn create_collection() -> Weight;
68 fn destroy_collection() -> Weight;
69 fn add_to_white_list() -> Weight;
70 fn remove_from_white_list() -> Weight;
71 fn set_public_access_mode() -> Weight;
72 fn set_mint_permission() -> Weight;
73 fn change_collection_owner() -> Weight;
74 fn add_collection_admin() -> Weight;
75 fn remove_collection_admin() -> Weight;
76 fn set_collection_sponsor() -> Weight;
77 fn confirm_sponsorship() -> Weight;
78 fn remove_collection_sponsor() -> Weight;
79 fn create_item(s: usize) -> Weight;67use weights::WeightInfo;
80 fn burn_item() -> Weight;
81 fn transfer() -> Weight;
82 fn approve() -> Weight;
83 fn transfer_from() -> Weight;
84 fn set_offchain_schema() -> Weight;
85 fn set_const_on_chain_schema() -> Weight;
86 fn set_variable_on_chain_schema() -> Weight;
87 fn set_variable_meta_data() -> Weight;
88 fn enable_contract_sponsoring() -> Weight;
89 fn set_schema_version() -> Weight;
90 fn set_chain_limits() -> Weight;
91 fn set_contract_sponsoring_rate_limit() -> Weight;
92 fn set_variable_meta_data_sponsoring_rate_limit() -> Weight;
93 fn toggle_contract_white_list() -> Weight;
94 fn add_to_contract_white_list() -> Weight;
95 fn remove_from_contract_white_list() -> Weight;
96 fn set_collection_limits() -> Weight;
97}
9868
99decl_error! {69decl_error! {
100 /// Error for non-fungible-token module.70 /// Error for non-fungible-token module.
179 MetadataUpdateDenied,149 MetadataUpdateDenied,
180 /// Metadata update flag become unmutable with None option150 /// Metadata update flag become unmutable with None option
181 MetadataFlagFrozen,151 MetadataFlagFrozen,
152 /// Collection settings not allowing items transferring
153 TransferNotAllowed,
154 /// Can't transfer tokens to ethereum zero address
155 AddressIsZero,
182 }156 }
183}157}
184158
159#[must_use = "Should call submit_logs or save, otherwise some data will be lost for evm side"]
185pub struct CollectionHandle<T: Config> {160pub struct CollectionHandle<T: Config> {
186 pub id: CollectionId,161 pub id: CollectionId,
187 collection: Collection<T>,162 collection: Collection<T>,
188 logs: eth::log::LogRecorder,163 recorder: pallet_evm_coder_substrate::SubstrateRecorder<T>,
189 evm_address: H160,
190 gas_limit: RefCell<u64>,
191}164}
192impl<T: Config> CollectionHandle<T> {165impl<T: Config> CollectionHandle<T> {
193 pub fn get_with_gas_limit(id: CollectionId, gas_limit: u64) -> Option<Self> {166 pub fn get_with_gas_limit(id: CollectionId, gas_limit: u64) -> Option<Self> {
194 <CollectionById<T>>::get(id).map(|collection| Self {167 <CollectionById<T>>::get(id).map(|collection| Self {
195 id,168 id,
196 collection,169 collection,
197 logs: eth::log::LogRecorder::default(),
198 evm_address: eth::collection_id_to_address(id),170 recorder: pallet_evm_coder_substrate::SubstrateRecorder::new(
199 gas_limit: RefCell::new(gas_limit),171 eth::collection_id_to_address(id),
172 gas_limit,
173 ),
200 })174 })
201 }175 }
202 pub fn get(id: CollectionId) -> Option<Self> {176 pub fn get(id: CollectionId) -> Option<Self> {
203 Self::get_with_gas_limit(id, u64::MAX)177 Self::get_with_gas_limit(id, u64::MAX)
204 }178 }
205 pub fn gas_left(&self) -> u64 {179 pub fn log(&self, log: impl evm_coder::ToLog) -> DispatchResult {
206 *self.gas_limit.borrow()180 self.recorder.log_sub(log)
207 }181 }
182 #[allow(dead_code)]
208 pub fn consume_gas(&self, gas: u64) -> DispatchResult {183 fn consume_gas(&self, gas: u64) -> DispatchResult {
184 self.recorder.consume_gas_sub(gas)
185 }
209 let mut gas_limit = self.gas_limit.borrow_mut();186 fn consume_sload(&self) -> DispatchResult {
187 self.recorder.consume_sload_sub()
188 }
210 if *gas_limit < gas {189 fn consume_sstore(&self) -> DispatchResult {
211 fail!(Error::<T>::OutOfGas);190 self.recorder.consume_sstore_sub()
212 }191 }
213 *gas_limit -= gas;
214 Ok(())
215 }
216 pub fn log(&self, log: impl evm_coder::ToLog) {192 pub fn submit_logs(self) -> DispatchResult {
217 self.logs.log(log.to_log(self.evm_address))193 self.recorder.submit_logs()
218 }194 }
219 pub fn into_inner(self) -> Collection<T> {195 pub fn save(self) -> DispatchResult {
196 self.recorder.submit_logs()?;
220 self.collection197 <CollectionById<T>>::insert(self.id, self.collection);
221 }198 Ok(())
199 }
222}200}
223impl<T: Config> Deref for CollectionHandle<T> {201impl<T: Config> Deref for CollectionHandle<T> {
224 type Target = Collection<T>;202 type Target = Collection<T>;
234 }212 }
235}213}
236214
237pub trait Config: system::Config + Sized {215pub trait Config: system::Config + pallet_evm_coder_substrate::Config + Sized {
238 type Event: From<Event<Self>> + Into<<Self as system::Config>::Event>;216 type Event: From<Event<Self>> + Into<<Self as system::Config>::Event>;
239217
240 /// Weight information for extrinsics in this pallet.218 /// Weight information for extrinsics in this pallet.
249 <<Self as Config>::Currency as Currency<Self::AccountId>>::Balance,227 <<Self as Config>::Currency as Currency<Self::AccountId>>::Balance,
250 >;228 >;
251 type TreasuryAccountId: Get<Self::AccountId>;229 type TreasuryAccountId: Get<Self::AccountId>;
230}
252231
253 type EthereumChainId: Get<u64>;232type SelfWeightOf<T> = <T as Config>::WeightInfo;
233
234trait WeightInfoHelpers: WeightInfo {
235 fn transfer() -> Weight {
236 Self::transfer_nft()
237 .max(Self::transfer_fungible())
238 .max(Self::transfer_refungible())
239 }
240 fn transfer_from() -> Weight {
241 Self::transfer_from_nft()
242 .max(Self::transfer_from_fungible())
243 .max(Self::transfer_from_refungible())
244 }
245 fn approve() -> Weight {
246 // TODO: refungible, fungible
247 Self::approve_nft()
248 }
254 type EthereumTransactionSender: pallet_ethereum::EthereumTransactionSender;249 fn set_variable_meta_data(data: u32) -> Weight {
255}250 // TODO: refungible
251 Self::set_variable_meta_data_nft(data)
252 }
253 fn create_item(data: u32) -> Weight {
254 Self::create_item_nft(data)
255 .max(Self::create_item_fungible())
256 .max(Self::create_item_refungible(data))
257 }
258 fn burn_item() -> Weight {
259 // TODO: refungible, fungible
260 Self::burn_item_nft()
261 }
262}
263impl<T: WeightInfo> WeightInfoHelpers for T {}
256264
257// # Used definitions265// # Used definitions
258//266//
289 ItemListIndex: map hasher(blake2_128_concat) CollectionId => TokenId;297 ItemListIndex: map hasher(blake2_128_concat) CollectionId => TokenId;
290 //#endregion298 //#endregion
291
292 //#region Chain limits struct
293 pub ChainLimit get(fn chain_limit) config(): ChainLimits;
294 //#endregion
295299
296 //#region Bound counters300 //#region Bound counters
297 /// Amount of collections destroyed, used for total amount tracking with301 /// Amount of collections destroyed, used for total amount tracking with
444 origin: T::Origin448 origin: T::Origin
445 {449 {
446 fn deposit_event() = default;450 fn deposit_event() = default;
451 const CollectionAdminsLimit: u64 = COLLECTION_ADMINS_LIMIT;
447 type Error = Error<T>;452 type Error = Error<T>;
448453
449 fn on_initialize(_now: T::BlockNumber) -> Weight {454 fn on_initialize(_now: T::BlockNumber) -> Weight {
466 ///471 ///
467 /// * mode: [CollectionMode] collection type and type dependent data.472 /// * mode: [CollectionMode] collection type and type dependent data.
468 // returns collection ID473 // returns collection ID
469 #[weight = <T as Config>::WeightInfo::create_collection()]474 #[weight = <SelfWeightOf<T>>::create_collection()]
470 #[transactional]475 #[transactional]
471 pub fn create_collection(origin,476 pub fn create_collection(origin,
472 collection_name: Vec<u16>,477 collection_name: Vec<u16>,
495 _ => 0500 _ => 0
496 };501 };
497
498 let chain_limit = ChainLimit::get();
499502
500 let created_count = CreatedCollectionCount::get();503 let created_count = CreatedCollectionCount::get();
501 let destroyed_count = DestroyedCollectionCount::get();504 let destroyed_count = DestroyedCollectionCount::get();
502505
503 // bound Total number of collections506 // bound Total number of collections
504 ensure!(created_count - destroyed_count < chain_limit.collection_numbers_limit, Error::<T>::TotalCollectionsLimitExceeded);507 ensure!(created_count - destroyed_count < COLLECTION_NUMBER_LIMIT, Error::<T>::TotalCollectionsLimitExceeded);
505508
506 // check params509 // check params
507 ensure!(decimal_points <= MAX_DECIMAL_POINTS, Error::<T>::CollectionDecimalPointLimitExceeded);510 ensure!(decimal_points <= MAX_DECIMAL_POINTS, Error::<T>::CollectionDecimalPointLimitExceeded);
508 ensure!(collection_name.len() <= 64, Error::<T>::CollectionNameLimitExceeded);511 ensure!(collection_name.len() <= MAX_COLLECTION_NAME_LENGTH, Error::<T>::CollectionNameLimitExceeded);
509 ensure!(collection_description.len() <= 256, Error::<T>::CollectionDescriptionLimitExceeded);512 ensure!(collection_description.len() <= MAX_COLLECTION_DESCRIPTION_LENGTH, Error::<T>::CollectionDescriptionLimitExceeded);
510 ensure!(token_prefix.len() <= 16, Error::<T>::CollectionTokenPrefixLimitExceeded);513 ensure!(token_prefix.len() <= MAX_TOKEN_PREFIX_LENGTH, Error::<T>::CollectionTokenPrefixLimitExceeded);
511514
512 // Generate next collection ID515 // Generate next collection ID
513 let next_id = created_count516 let next_id = created_count
517 CreatedCollectionCount::put(next_id);520 CreatedCollectionCount::put(next_id);
518521
519 let limits = CollectionLimits {522 let limits = CollectionLimits {
520 sponsored_data_size: chain_limit.custom_data_limit,523 sponsored_data_size: CUSTOM_DATA_LIMIT,
521 ..Default::default()524 ..Default::default()
522 };525 };
523526
538 const_on_chain_schema: Vec::new(),541 const_on_chain_schema: Vec::new(),
539 limits,542 limits,
540 meta_update_permission: MetaUpdatePermission::default(),543 meta_update_permission: MetaUpdatePermission::default(),
544 transfers_enabled: true,
541 };545 };
542546
543 // Add new collection to map547 // Add new collection to map
558 /// # Arguments562 /// # Arguments
559 ///563 ///
560 /// * collection_id: collection to destroy.564 /// * collection_id: collection to destroy.
561 #[weight = <T as Config>::WeightInfo::destroy_collection()]565 #[weight = <SelfWeightOf<T>>::destroy_collection()]
562 #[transactional]566 #[transactional]
563 pub fn destroy_collection(origin, collection_id: CollectionId) -> DispatchResult {567 pub fn destroy_collection(origin, collection_id: CollectionId) -> DispatchResult {
564568
569 fail!(Error::<T>::NoPermission);573 fail!(Error::<T>::NoPermission);
570 }574 }
571575
572 <AddressTokens<T>>::remove_prefix(collection_id);576 <AddressTokens<T>>::remove_prefix(collection_id, None);
573 <Allowances<T>>::remove_prefix(collection_id);577 <Allowances<T>>::remove_prefix(collection_id, None);
574 <Balance<T>>::remove_prefix(collection_id);578 <Balance<T>>::remove_prefix(collection_id, None);
575 <ItemListIndex>::remove(collection_id);579 <ItemListIndex>::remove(collection_id);
576 <AdminList<T>>::remove(collection_id);580 <AdminList<T>>::remove(collection_id);
577 <CollectionById<T>>::remove(collection_id);581 <CollectionById<T>>::remove(collection_id);
578 <WhiteList<T>>::remove_prefix(collection_id);582 <WhiteList<T>>::remove_prefix(collection_id, None);
579583
580 <NftItemList<T>>::remove_prefix(collection_id);584 <NftItemList<T>>::remove_prefix(collection_id, None);
581 <FungibleItemList<T>>::remove_prefix(collection_id);585 <FungibleItemList<T>>::remove_prefix(collection_id, None);
582 <ReFungibleItemList<T>>::remove_prefix(collection_id);586 <ReFungibleItemList<T>>::remove_prefix(collection_id, None);
583587
584 <NftTransferBasket<T>>::remove_prefix(collection_id);588 <NftTransferBasket<T>>::remove_prefix(collection_id, None);
585 <FungibleTransferBasket<T>>::remove_prefix(collection_id);589 <FungibleTransferBasket<T>>::remove_prefix(collection_id, None);
586 <ReFungibleTransferBasket<T>>::remove_prefix(collection_id);590 <ReFungibleTransferBasket<T>>::remove_prefix(collection_id, None);
587591
588 <VariableMetaDataBasket<T>>::remove_prefix(collection_id);592 <VariableMetaDataBasket<T>>::remove_prefix(collection_id, None);
589593
590 DestroyedCollectionCount::put(DestroyedCollectionCount::get()594 DestroyedCollectionCount::put(DestroyedCollectionCount::get()
591 .checked_add(1)595 .checked_add(1)
606 /// * collection_id.610 /// * collection_id.
607 ///611 ///
608 /// * address.612 /// * address.
609 #[weight = <T as Config>::WeightInfo::add_to_white_list()]613 #[weight = <SelfWeightOf<T>>::add_to_white_list()]
610 #[transactional]614 #[transactional]
611 pub fn add_to_white_list(origin, collection_id: CollectionId, address: T::CrossAccountId) -> DispatchResult{615 pub fn add_to_white_list(origin, collection_id: CollectionId, address: T::CrossAccountId) -> DispatchResult{
612616
635 /// * collection_id.639 /// * collection_id.
636 ///640 ///
637 /// * address.641 /// * address.
638 #[weight = <T as Config>::WeightInfo::remove_from_white_list()]642 #[weight = <SelfWeightOf<T>>::remove_from_white_list()]
639 #[transactional]643 #[transactional]
640 pub fn remove_from_white_list(origin, collection_id: CollectionId, address: T::CrossAccountId) -> DispatchResult{644 pub fn remove_from_white_list(origin, collection_id: CollectionId, address: T::CrossAccountId) -> DispatchResult{
641645
663 /// * collection_id.667 /// * collection_id.
664 ///668 ///
665 /// * mode: [AccessMode]669 /// * mode: [AccessMode]
666 #[weight = <T as Config>::WeightInfo::set_public_access_mode()]670 #[weight = <SelfWeightOf<T>>::set_public_access_mode()]
667 #[transactional]671 #[transactional]
668 pub fn set_public_access_mode(origin, collection_id: CollectionId, mode: AccessMode) -> DispatchResult672 pub fn set_public_access_mode(origin, collection_id: CollectionId, mode: AccessMode) -> DispatchResult
669 {673 {
672 let mut target_collection = Self::get_collection(collection_id)?;676 let mut target_collection = Self::get_collection(collection_id)?;
673 Self::check_owner_permissions(&target_collection, &sender)?;677 Self::check_owner_permissions(&target_collection, &sender)?;
674 target_collection.access = mode;678 target_collection.access = mode;
675 Self::save_collection(target_collection);679 target_collection.save()
676
677 Ok(())
678 }680 }
679681
680 /// Allows Anyone to create tokens if:682 /// Allows Anyone to create tokens if:
690 /// * collection_id.692 /// * collection_id.
691 ///693 ///
692 /// * mint_permission: Boolean parameter. If True, allows minting to Anyone with conditions above.694 /// * mint_permission: Boolean parameter. If True, allows minting to Anyone with conditions above.
693 #[weight = <T as Config>::WeightInfo::set_mint_permission()]695 #[weight = <SelfWeightOf<T>>::set_mint_permission()]
694 #[transactional]696 #[transactional]
695 pub fn set_mint_permission(origin, collection_id: CollectionId, mint_permission: bool) -> DispatchResult697 pub fn set_mint_permission(origin, collection_id: CollectionId, mint_permission: bool) -> DispatchResult
696 {698 {
699 let mut target_collection = Self::get_collection(collection_id)?;701 let mut target_collection = Self::get_collection(collection_id)?;
700 Self::check_owner_permissions(&target_collection, &sender)?;702 Self::check_owner_permissions(&target_collection, &sender)?;
701 target_collection.mint_mode = mint_permission;703 target_collection.mint_mode = mint_permission;
702 Self::save_collection(target_collection);704 target_collection.save()
703
704 Ok(())
705 }705 }
706706
707 /// Change the owner of the collection.707 /// Change the owner of the collection.
715 /// * collection_id.715 /// * collection_id.
716 ///716 ///
717 /// * new_owner.717 /// * new_owner.
718 #[weight = <T as Config>::WeightInfo::change_collection_owner()]718 #[weight = <SelfWeightOf<T>>::change_collection_owner()]
719 #[transactional]719 #[transactional]
720 pub fn change_collection_owner(origin, collection_id: CollectionId, new_owner: T::AccountId) -> DispatchResult {720 pub fn change_collection_owner(origin, collection_id: CollectionId, new_owner: T::AccountId) -> DispatchResult {
721721
722 let sender = ensure_signed(origin)?;722 let sender = ensure_signed(origin)?;
723 let mut target_collection = Self::get_collection(collection_id)?;723 let mut target_collection = Self::get_collection(collection_id)?;
724 Self::check_owner_permissions(&target_collection, &sender)?;724 Self::check_owner_permissions(&target_collection, &sender)?;
725 target_collection.owner = new_owner;725 target_collection.owner = new_owner;
726 Self::save_collection(target_collection);726 target_collection.save()
727
728 Ok(())
729 }727 }
730728
731 /// Adds an admin of the Collection.729 /// Adds an admin of the Collection.
741 /// * collection_id: ID of the Collection to add admin for.739 /// * collection_id: ID of the Collection to add admin for.
742 ///740 ///
743 /// * new_admin_id: Address of new admin to add.741 /// * new_admin_id: Address of new admin to add.
744 #[weight = <T as Config>::WeightInfo::add_collection_admin()]742 #[weight = <SelfWeightOf<T>>::add_collection_admin()]
745 #[transactional]743 #[transactional]
746 pub fn add_collection_admin(origin, collection_id: CollectionId, new_admin_id: T::CrossAccountId) -> DispatchResult {744 pub fn add_collection_admin(origin, collection_id: CollectionId, new_admin_id: T::CrossAccountId) -> DispatchResult {
747 let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);745 let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
752 match admin_arr.binary_search(&new_admin_id) {750 match admin_arr.binary_search(&new_admin_id) {
753 Ok(_) => {},751 Ok(_) => {},
754 Err(idx) => {752 Err(idx) => {
755 let limits = ChainLimit::get();
756 ensure!(admin_arr.len() < limits.collections_admins_limit as usize, Error::<T>::CollectionAdminsLimitExceeded);753 ensure!(admin_arr.len() < COLLECTION_ADMINS_LIMIT as usize, Error::<T>::CollectionAdminsLimitExceeded);
757 admin_arr.insert(idx, new_admin_id);754 admin_arr.insert(idx, new_admin_id);
758 <AdminList<T>>::insert(collection_id, admin_arr);755 <AdminList<T>>::insert(collection_id, admin_arr);
759 }756 }
773 /// * collection_id: ID of the Collection to remove admin for.770 /// * collection_id: ID of the Collection to remove admin for.
774 ///771 ///
775 /// * account_id: Address of admin to remove.772 /// * account_id: Address of admin to remove.
776 #[weight = <T as Config>::WeightInfo::remove_collection_admin()]773 #[weight = <SelfWeightOf<T>>::remove_collection_admin()]
777 #[transactional]774 #[transactional]
778 pub fn remove_collection_admin(origin, collection_id: CollectionId, account_id: T::CrossAccountId) -> DispatchResult {775 pub fn remove_collection_admin(origin, collection_id: CollectionId, account_id: T::CrossAccountId) -> DispatchResult {
779 let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);776 let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
797 /// * collection_id.794 /// * collection_id.
798 ///795 ///
799 /// * new_sponsor.796 /// * new_sponsor.
800 #[weight = <T as Config>::WeightInfo::set_collection_sponsor()]797 #[weight = <SelfWeightOf<T>>::set_collection_sponsor()]
801 #[transactional]798 #[transactional]
802 pub fn set_collection_sponsor(origin, collection_id: CollectionId, new_sponsor: T::AccountId) -> DispatchResult {799 pub fn set_collection_sponsor(origin, collection_id: CollectionId, new_sponsor: T::AccountId) -> DispatchResult {
803 let sender = ensure_signed(origin)?;800 let sender = ensure_signed(origin)?;
804 let mut target_collection = Self::get_collection(collection_id)?;801 let mut target_collection = Self::get_collection(collection_id)?;
805 Self::check_owner_permissions(&target_collection, &sender)?;802 Self::check_owner_permissions(&target_collection, &sender)?;
806803
807 target_collection.sponsorship = SponsorshipState::Unconfirmed(new_sponsor);804 target_collection.sponsorship = SponsorshipState::Unconfirmed(new_sponsor);
808 Self::save_collection(target_collection);805 target_collection.save()
809
810 Ok(())
811 }806 }
812807
813 /// # Permissions808 /// # Permissions
817 /// # Arguments812 /// # Arguments
818 ///813 ///
819 /// * collection_id.814 /// * collection_id.
820 #[weight = <T as Config>::WeightInfo::confirm_sponsorship()]815 #[weight = <SelfWeightOf<T>>::confirm_sponsorship()]
821 #[transactional]816 #[transactional]
822 pub fn confirm_sponsorship(origin, collection_id: CollectionId) -> DispatchResult {817 pub fn confirm_sponsorship(origin, collection_id: CollectionId) -> DispatchResult {
823 let sender = ensure_signed(origin)?;818 let sender = ensure_signed(origin)?;
829 );824 );
830825
831 target_collection.sponsorship = SponsorshipState::Confirmed(sender);826 target_collection.sponsorship = SponsorshipState::Confirmed(sender);
832 Self::save_collection(target_collection);827 target_collection.save()
833
834 Ok(())
835 }828 }
836829
837 /// Switch back to pay-per-own-transaction model.830 /// Switch back to pay-per-own-transaction model.
843 /// # Arguments836 /// # Arguments
844 ///837 ///
845 /// * collection_id.838 /// * collection_id.
846 #[weight = <T as Config>::WeightInfo::remove_collection_sponsor()]839 #[weight = <SelfWeightOf<T>>::remove_collection_sponsor()]
847 #[transactional]840 #[transactional]
848 pub fn remove_collection_sponsor(origin, collection_id: CollectionId) -> DispatchResult {841 pub fn remove_collection_sponsor(origin, collection_id: CollectionId) -> DispatchResult {
849 let sender = ensure_signed(origin)?;842 let sender = ensure_signed(origin)?;
852 Self::check_owner_permissions(&target_collection, &sender)?;845 Self::check_owner_permissions(&target_collection, &sender)?;
853846
854 target_collection.sponsorship = SponsorshipState::Disabled;847 target_collection.sponsorship = SponsorshipState::Disabled;
855 Self::save_collection(target_collection);848 target_collection.save()
856
857 Ok(())
858 }849 }
859850
860 /// This method creates a concrete instance of NFT Collection created with CreateCollection method.851 /// This method creates a concrete instance of NFT Collection created with CreateCollection method.
881 // .saturating_add(RocksDbWeight::get().reads(10 as Weight))872 // .saturating_add(RocksDbWeight::get().reads(10 as Weight))
882 // .saturating_add(RocksDbWeight::get().writes(8 as Weight))]873 // .saturating_add(RocksDbWeight::get().writes(8 as Weight))]
883874
884 #[weight = <T as Config>::WeightInfo::create_item(data.data_size())]875 #[weight = <SelfWeightOf<T>>::create_item(data.data_size() as u32)]
885 #[transactional]876 #[transactional]
886 pub fn create_item(origin, collection_id: CollectionId, owner: T::CrossAccountId, data: CreateItemData) -> DispatchResult {877 pub fn create_item(origin, collection_id: CollectionId, owner: T::CrossAccountId, data: CreateItemData) -> DispatchResult {
887 let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);878 let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
888 let collection = Self::get_collection(collection_id)?;879 let collection = Self::get_collection(collection_id)?;
889880
890 Self::create_item_internal(&sender, &collection, &owner, data)?;881 Self::create_item_internal(&sender, &collection, &owner, data)?;
891882
892 // Self::submit_logs(collection)?;
893 Ok(())883 collection.submit_logs()
894 }884 }
895885
896 /// This method creates multiple items in a collection created with CreateCollection method.886 /// This method creates multiple items in a collection created with CreateCollection method.
911 /// * itemsData: Array items properties. Each property is an array of bytes itself, see [create_item].901 /// * itemsData: Array items properties. Each property is an array of bytes itself, see [create_item].
912 ///902 ///
913 /// * owner: Address, initial owner of the NFT.903 /// * owner: Address, initial owner of the NFT.
914 #[weight = <T as Config>::WeightInfo::create_item(items_data.iter()904 #[weight = <SelfWeightOf<T>>::create_item(items_data.iter()
915 .map(|data| { data.data_size() })905 .map(|data| { data.data_size() as u32 })
916 .sum())]906 .sum())]
917 #[transactional]907 #[transactional]
918 pub fn create_multiple_items(origin, collection_id: CollectionId, owner: T::CrossAccountId, items_data: Vec<CreateItemData>) -> DispatchResult {908 pub fn create_multiple_items(origin, collection_id: CollectionId, owner: T::CrossAccountId, items_data: Vec<CreateItemData>) -> DispatchResult {
923913
924 Self::create_multiple_items_internal(&sender, &collection, &owner, items_data)?;914 Self::create_multiple_items_internal(&sender, &collection, &owner, items_data)?;
925915
926 // Self::submit_logs(collection)?;
927 Ok(())916 collection.submit_logs()
928 }917 }
918
919 // TODO! transaction weight
920
921 /// Set transfers_enabled value for particular collection
922 ///
923 /// # Permissions
924 ///
925 /// * Collection Owner.
926 ///
927 /// # Arguments
928 ///
929 /// * collection_id: ID of the collection.
930 ///
931 /// * value: New flag value.
932 #[weight = <SelfWeightOf<T>>::burn_item()]
933 #[transactional]
934 pub fn set_transfers_enabled_flag(origin, collection_id: CollectionId, value: bool) -> DispatchResult {
935
936 let sender = ensure_signed(origin)?;
937 let mut target_collection = Self::get_collection(collection_id)?;
938
939 Self::check_owner_permissions(&target_collection, &sender)?;
940
941 target_collection.transfers_enabled = value;
942 target_collection.save()
943 }
929944
930 // TODO! transaction weight945 // TODO! transaction weight
931 /// Set meta_update_permission value for particular collection946 /// Set meta_update_permission value for particular collection
971 /// * collection_id: ID of the collection.986 /// * collection_id: ID of the collection.
972 ///987 ///
973 /// * item_id: ID of NFT to burn.988 /// * item_id: ID of NFT to burn.
974 #[weight = <T as Config>::WeightInfo::burn_item()]989 #[weight = <SelfWeightOf<T>>::burn_item()]
975 #[transactional]990 #[transactional]
976 pub fn burn_item(origin, collection_id: CollectionId, item_id: TokenId, value: u128) -> DispatchResult {991 pub fn burn_item(origin, collection_id: CollectionId, item_id: TokenId, value: u128) -> DispatchResult {
977992
980995
981 Self::burn_item_internal(&sender, &target_collection, item_id, value)?;996 Self::burn_item_internal(&sender, &target_collection, item_id, value)?;
982997
983 // Self::submit_logs(target_collection)?;
984 Ok(())998 target_collection.submit_logs()
985 }999 }
9861000
987 /// Change ownership of the token.1001 /// Change ownership of the token.
1007 /// * Non-Fungible Mode: Ignored1021 /// * Non-Fungible Mode: Ignored
1008 /// * Fungible Mode: Must specify transferred amount1022 /// * Fungible Mode: Must specify transferred amount
1009 /// * Re-Fungible Mode: Must specify transferred portion (between 0 and 1)1023 /// * Re-Fungible Mode: Must specify transferred portion (between 0 and 1)
1010 #[weight = <T as Config>::WeightInfo::transfer()]1024 #[weight = <SelfWeightOf<T>>::transfer()]
1011 #[transactional]1025 #[transactional]
1012 pub fn transfer(origin, recipient: T::CrossAccountId, collection_id: CollectionId, item_id: TokenId, value: u128) -> DispatchResult {1026 pub fn transfer(origin, recipient: T::CrossAccountId, collection_id: CollectionId, item_id: TokenId, value: u128) -> DispatchResult {
1013 let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);1027 let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
1014 let collection = Self::get_collection(collection_id)?;1028 let collection = Self::get_collection(collection_id)?;
10151029
1016 Self::transfer_internal(&sender, &recipient, &collection, item_id, value)?;1030 Self::transfer_internal(&sender, &recipient, &collection, item_id, value)?;
10171031
1018 // Self::submit_logs(collection)?;
1019 Ok(())1032 collection.submit_logs()
1020 }1033 }
10211034
1022 /// Set, change, or remove approved address to transfer the ownership of the NFT.1035 /// Set, change, or remove approved address to transfer the ownership of the NFT.
1034 /// * collection_id.1047 /// * collection_id.
1035 ///1048 ///
1036 /// * item_id: ID of the item.1049 /// * item_id: ID of the item.
1037 #[weight = <T as Config>::WeightInfo::approve()]1050 #[weight = <SelfWeightOf<T>>::approve()]
1038 #[transactional]1051 #[transactional]
1039 pub fn approve(origin, spender: T::CrossAccountId, collection_id: CollectionId, item_id: TokenId, amount: u128) -> DispatchResult {1052 pub fn approve(origin, spender: T::CrossAccountId, collection_id: CollectionId, item_id: TokenId, amount: u128) -> DispatchResult {
1040 let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);1053 let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
1041 let collection = Self::get_collection(collection_id)?;1054 let collection = Self::get_collection(collection_id)?;
10421055
1043 Self::approve_internal(&sender, &spender, &collection, item_id, amount)?;1056 Self::approve_internal(&sender, &spender, &collection, item_id, amount)?;
10441057
1045 // Self::submit_logs(collection)?;
1046 Ok(())1058 collection.submit_logs()
1047 }1059 }
10481060
1049 /// Change ownership of a NFT on behalf of the owner. See Approve method for additional information. After this method executes, the approval is removed so that the approved address will not be able to transfer this NFT again from this owner.1061 /// Change ownership of a NFT on behalf of the owner. See Approve method for additional information. After this method executes, the approval is removed so that the approved address will not be able to transfer this NFT again from this owner.
1065 /// * item_id: ID of the item.1077 /// * item_id: ID of the item.
1066 ///1078 ///
1067 /// * value: Amount to transfer.1079 /// * value: Amount to transfer.
1068 #[weight = <T as Config>::WeightInfo::transfer_from()]1080 #[weight = <SelfWeightOf<T>>::transfer_from()]
1069 #[transactional]1081 #[transactional]
1070 pub fn transfer_from(origin, from: T::CrossAccountId, recipient: T::CrossAccountId, collection_id: CollectionId, item_id: TokenId, value: u128 ) -> DispatchResult {1082 pub fn transfer_from(origin, from: T::CrossAccountId, recipient: T::CrossAccountId, collection_id: CollectionId, item_id: TokenId, value: u128 ) -> DispatchResult {
1071 let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);1083 let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
1072 let collection = Self::get_collection(collection_id)?;1084 let collection = Self::get_collection(collection_id)?;
10731085
1074 Self::transfer_from_internal(&sender, &from, &recipient, &collection, item_id, value)?;1086 Self::transfer_from_internal(&sender, &from, &recipient, &collection, item_id, value)?;
10751087
1076 // Self::submit_logs(collection)?;
1077 Ok(())1088 collection.submit_logs()
1078 }1089 }
1079 // #[weight = 0]1090 // #[weight = 0]
1080 // // let no_perm_mes = "You do not have permissions to modify this collection";1091 // // let no_perm_mes = "You do not have permissions to modify this collection";
1101 /// * collection_id.1112 /// * collection_id.
1102 ///1113 ///
1103 /// * schema: String representing the offchain data schema.1114 /// * schema: String representing the offchain data schema.
1104 #[weight = <T as Config>::WeightInfo::set_variable_meta_data()]1115 #[weight = <SelfWeightOf<T>>::set_variable_meta_data(data.len() as u32)]
1105 #[transactional]1116 #[transactional]
1106 pub fn set_variable_meta_data (1117 pub fn set_variable_meta_data (
1107 origin,1118 origin,
1132 /// * collection_id.1143 /// * collection_id.
1133 ///1144 ///
1134 /// * schema: SchemaVersion: enum1145 /// * schema: SchemaVersion: enum
1135 #[weight = <T as Config>::WeightInfo::set_schema_version()]1146 #[weight = <SelfWeightOf<T>>::set_schema_version()]
1136 #[transactional]1147 #[transactional]
1137 pub fn set_schema_version(1148 pub fn set_schema_version(
1138 origin,1149 origin,
1143 let mut target_collection = Self::get_collection(collection_id)?;1154 let mut target_collection = Self::get_collection(collection_id)?;
1144 Self::check_owner_or_admin_permissions(&target_collection, &sender)?;1155 Self::check_owner_or_admin_permissions(&target_collection, &sender)?;
1145 target_collection.schema_version = version;1156 target_collection.schema_version = version;
1146 Self::save_collection(target_collection);1157 target_collection.save()
1147
1148 Ok(())
1149 }1158 }
11501159
1151 /// Set off-chain data schema.1160 /// Set off-chain data schema.
1160 /// * collection_id.1169 /// * collection_id.
1161 ///1170 ///
1162 /// * schema: String representing the offchain data schema.1171 /// * schema: String representing the offchain data schema.
1163 #[weight = <T as Config>::WeightInfo::set_offchain_schema()]1172 #[weight = <SelfWeightOf<T>>::set_offchain_schema(schema.len() as u32)]
1164 #[transactional]1173 #[transactional]
1165 pub fn set_offchain_schema(1174 pub fn set_offchain_schema(
1166 origin,1175 origin,
1172 Self::check_owner_or_admin_permissions(&target_collection, &sender)?;1181 Self::check_owner_or_admin_permissions(&target_collection, &sender)?;
11731182
1174 // check schema limit1183 // check schema limit
1175 ensure!(schema.len() as u32 <= ChainLimit::get().offchain_schema_limit, "");1184 ensure!(schema.len() as u32 <= OFFCHAIN_SCHEMA_LIMIT, "");
11761185
1177 target_collection.offchain_schema = schema;1186 target_collection.offchain_schema = schema;
1178 Self::save_collection(target_collection);1187 target_collection.save()
1179
1180 Ok(())
1181 }1188 }
11821189
1183 /// Set const on-chain data schema.1190 /// Set const on-chain data schema.
1192 /// * collection_id.1199 /// * collection_id.
1193 ///1200 ///
1194 /// * schema: String representing the const on-chain data schema.1201 /// * schema: String representing the const on-chain data schema.
1195 #[weight = <T as Config>::WeightInfo::set_const_on_chain_schema()]1202 #[weight = <SelfWeightOf<T>>::set_const_on_chain_schema(schema.len() as u32)]
1196 #[transactional]1203 #[transactional]
1197 pub fn set_const_on_chain_schema (1204 pub fn set_const_on_chain_schema (
1198 origin,1205 origin,
1204 Self::check_owner_or_admin_permissions(&target_collection, &sender)?;1211 Self::check_owner_or_admin_permissions(&target_collection, &sender)?;
12051212
1206 // check schema limit1213 // check schema limit
1207 ensure!(schema.len() as u32 <= ChainLimit::get().const_on_chain_schema_limit, "");1214 ensure!(schema.len() as u32 <= CONST_ON_CHAIN_SCHEMA_LIMIT, "");
12081215
1209 target_collection.const_on_chain_schema = schema;1216 target_collection.const_on_chain_schema = schema;
1210 Self::save_collection(target_collection);1217 target_collection.save()
1211
1212 Ok(())
1213 }1218 }
12141219
1215 /// Set variable on-chain data schema.1220 /// Set variable on-chain data schema.
1224 /// * collection_id.1229 /// * collection_id.
1225 ///1230 ///
1226 /// * schema: String representing the variable on-chain data schema.1231 /// * schema: String representing the variable on-chain data schema.
1227 #[weight = <T as Config>::WeightInfo::set_const_on_chain_schema()]1232 #[weight = <SelfWeightOf<T>>::set_const_on_chain_schema(schema.len() as u32)]
1228 #[transactional]1233 #[transactional]
1229 pub fn set_variable_on_chain_schema (1234 pub fn set_variable_on_chain_schema (
1230 origin,1235 origin,
1236 Self::check_owner_or_admin_permissions(&target_collection, &sender)?;1241 Self::check_owner_or_admin_permissions(&target_collection, &sender)?;
12371242
1238 // check schema limit1243 // check schema limit
1239 ensure!(schema.len() as u32 <= ChainLimit::get().variable_on_chain_schema_limit, "");1244 ensure!(schema.len() as u32 <= VARIABLE_ON_CHAIN_SCHEMA_LIMIT, "");
12401245
1241 target_collection.variable_on_chain_schema = schema;1246 target_collection.variable_on_chain_schema = schema;
1242 Self::save_collection(target_collection);1247 target_collection.save()
1243
1244 Ok(())
1245 }1248 }
12461249
1247 // Sudo permissions function
1248 #[weight = <T as Config>::WeightInfo::set_chain_limits()]1250 #[weight = <SelfWeightOf<T>>::set_collection_limits()]
1249 #[transactional]
1250 pub fn set_chain_limits(
1251 origin,
1252 limits: ChainLimits
1253 ) -> DispatchResult {
1254
1255 #[cfg(not(feature = "runtime-benchmarks"))]
1256 ensure_root(origin)?;
1257
1258 <ChainLimit>::put(limits);
1259 Ok(())
1260 }
1261
1262 #[weight = <T as Config>::WeightInfo::set_collection_limits()]
1263 #[transactional]1251 #[transactional]
1264 pub fn set_collection_limits(1252 pub fn set_collection_limits(
1265 origin,1253 origin,
1270 let mut target_collection = Self::get_collection(collection_id)?;1258 let mut target_collection = Self::get_collection(collection_id)?;
1271 Self::check_owner_permissions(&target_collection, sender.as_sub())?;1259 Self::check_owner_permissions(&target_collection, sender.as_sub())?;
1272 let old_limits = &target_collection.limits;1260 let old_limits = &target_collection.limits;
1273 let chain_limits = ChainLimit::get();
12741261
1275 // collection bounds1262 // collection bounds
1276 ensure!(new_limits.sponsor_transfer_timeout <= MAX_SPONSOR_TIMEOUT &&1263 ensure!(new_limits.sponsor_transfer_timeout <= MAX_SPONSOR_TIMEOUT &&
1277 new_limits.account_token_ownership_limit <= MAX_TOKEN_OWNERSHIP &&1264 new_limits.account_token_ownership_limit <= MAX_TOKEN_OWNERSHIP &&
1278 new_limits.sponsored_data_size <= chain_limits.custom_data_limit,1265 new_limits.sponsored_data_size <= CUSTOM_DATA_LIMIT,
1279 Error::<T>::CollectionLimitBoundsExceeded);1266 Error::<T>::CollectionLimitBoundsExceeded);
12801267
1281 // token_limit check prev1268 // token_limit check prev
12901277
1291 target_collection.limits = new_limits;1278 target_collection.limits = new_limits;
1279
1292 Self::save_collection(target_collection);1280 target_collection.save()
1293
1294 Ok(())
1295 }1281 }
1296 }1282 }
1297}1283}
1303 owner: &T::CrossAccountId,1289 owner: &T::CrossAccountId,
1304 data: CreateItemData,1290 data: CreateItemData,
1305 ) -> DispatchResult {1291 ) -> DispatchResult {
1292 ensure!(
1293 owner != &T::CrossAccountId::from_eth(H160([0; 20])),
1294 Error::<T>::AddressIsZero
1295 );
1296
1306 Self::can_create_items_in_collection(collection, sender, owner, 1)?;1297 Self::can_create_items_in_collection(collection, sender, owner, 1)?;
1307 Self::validate_create_item_args(collection, &data)?;1298 Self::validate_create_item_args(collection, &data)?;
1318 value: u128,1309 value: u128,
1319 ) -> DispatchResult {1310 ) -> DispatchResult {
1311 ensure!(
1320 target_collection.consume_gas(2000000)?;1312 recipient != &T::CrossAccountId::from_eth(H160([0; 20])),
1313 Error::<T>::AddressIsZero
1314 );
1315
1321 // Limits check1316 // Limits check
1322 Self::is_correct_transfer(target_collection, recipient)?;1317 Self::is_correct_transfer(target_collection, recipient)?;
13231318
1324 // Transfer permissions check1319 // Transfer permissions check
1325 ensure!(1320 ensure!(
1326 Self::is_item_owner(sender, target_collection, item_id)1321 Self::is_item_owner(sender, target_collection, item_id)?
1327 || Self::is_owner_or_admin_permissions(target_collection, sender),1322 || Self::is_owner_or_admin_permissions(target_collection, sender)?,
1328 Error::<T>::NoPermission1323 Error::<T>::NoPermission
1329 );1324 );
13301325
1371 item_id: TokenId,1366 item_id: TokenId,
1372 amount: u128,1367 amount: u128,
1373 ) -> DispatchResult {1368 ) -> DispatchResult {
1374 collection.consume_gas(2000000)?;
1375 Self::token_exists(collection, item_id)?;1369 Self::token_exists(collection, item_id)?;
13761370
1377 // Transfer permissions check1371 // Transfer permissions check
1378 let bypasses_limits = collection.limits.owner_can_transfer1372 let bypasses_limits = collection.limits.owner_can_transfer
1379 && Self::is_owner_or_admin_permissions(collection, sender);1373 && Self::is_owner_or_admin_permissions(collection, sender)?;
13801374
1381 let allowance_limit = if bypasses_limits {1375 let allowance_limit = if bypasses_limits {
1382 None1376 None
1383 } else if let Some(amount) = Self::owned_amount(sender, collection, item_id) {1377 } else if let Some(amount) = Self::owned_amount(sender, collection, item_id)? {
1384 Some(amount)1378 Some(amount)
1385 } else {1379 } else {
1386 fail!(Error::<T>::NoPermission);1380 fail!(Error::<T>::NoPermission);
1391 Self::check_white_list(collection, spender)?;1385 Self::check_white_list(collection, spender)?;
1392 }1386 }
13931387
1388 collection.consume_sload()?;
1394 let allowance: u128 = amount1389 let allowance: u128 = amount
1395 .checked_add(<Allowances<T>>::get(1390 .checked_add(<Allowances<T>>::get(
1396 collection.id,1391 collection.id,
1400 if let Some(limit) = allowance_limit {1395 if let Some(limit) = allowance_limit {
1401 ensure!(limit >= allowance, Error::<T>::TokenValueTooLow);1396 ensure!(limit >= allowance, Error::<T>::TokenValueTooLow);
1402 }1397 }
1398 collection.consume_sstore()?;
1403 <Allowances<T>>::insert(1399 <Allowances<T>>::insert(
1404 collection.id,1400 collection.id,
1405 (item_id, sender.as_sub(), spender.as_sub()),1401 (item_id, sender.as_sub(), spender.as_sub()),
1412 owner: *sender.as_eth(),1408 owner: *sender.as_eth(),
1413 approved: *spender.as_eth(),1409 approved: *spender.as_eth(),
1414 token_id: item_id.into(),1410 token_id: item_id.into(),
1415 });1411 })?;
1416 }1412 }
14171413
1418 if matches!(collection.mode, CollectionMode::Fungible(_)) {1414 if matches!(collection.mode, CollectionMode::Fungible(_)) {
1421 owner: *sender.as_eth(),1417 owner: *sender.as_eth(),
1422 spender: *spender.as_eth(),1418 spender: *spender.as_eth(),
1423 value: allowance.into(),1419 value: allowance.into(),
1424 });1420 })?;
1425 }1421 }
14261422
1427 Self::deposit_event(RawEvent::Approved(1423 Self::deposit_event(RawEvent::Approved(
1442 item_id: TokenId,1438 item_id: TokenId,
1443 amount: u128,1439 amount: u128,
1444 ) -> DispatchResult {1440 ) -> DispatchResult {
1441 if sender == from {
1442 // Transfer by `from`, because it is either equal to sender, or derived from him
1443 return Self::transfer_internal(from, recipient, collection, item_id, amount);
1444 }
1445
1446 // Check approval
1445 collection.consume_gas(2000000)?;1447 collection.consume_sload()?;
1446 // Check approval
1447 let approval: u128 =1448 let approval: u128 =
1448 <Allowances<T>>::get(collection.id, (item_id, from.as_sub(), sender.as_sub()));1449 <Allowances<T>>::get(collection.id, (item_id, from.as_sub(), sender.as_sub()));
14491450
1454 ensure!(1455 ensure!(
1455 approval >= amount1456 approval >= amount
1456 || (collection.limits.owner_can_transfer1457 || (collection.limits.owner_can_transfer
1457 && Self::is_owner_or_admin_permissions(collection, sender)),1458 && Self::is_owner_or_admin_permissions(collection, sender)?),
1458 Error::<T>::NoPermission1459 Error::<T>::NoPermission
1459 );1460 );
14601461
14651466
1466 // Reduce approval by transferred amount or remove if remaining approval drops to 01467 // Reduce approval by transferred amount or remove if remaining approval drops to 0
1467 let allowance = approval.saturating_sub(amount);1468 let allowance = approval.saturating_sub(amount);
1469 collection.consume_sstore()?;
1468 if allowance > 0 {1470 if allowance > 0 {
1469 <Allowances<T>>::insert(1471 <Allowances<T>>::insert(
1470 collection.id,1472 collection.id,
1497 owner: *from.as_eth(),1499 owner: *from.as_eth(),
1498 spender: *sender.as_eth(),1500 spender: *sender.as_eth(),
1499 value: allowance.into(),1501 value: allowance.into(),
1500 });1502 })?;
1501 }1503 }
15021504
1503 Ok(())1505 Ok(())
1512 Self::token_exists(collection, item_id)?;1514 Self::token_exists(collection, item_id)?;
15131515
1514 ensure!(1516 ensure!(
1515 ChainLimit::get().custom_data_limit >= data.len() as u32,1517 CUSTOM_DATA_LIMIT >= data.len() as u32,
1516 Error::<T>::TokenVariableDataLimitExceeded1518 Error::<T>::TokenVariableDataLimitExceeded
1517 );1519 );
15181520
1519 // Modify permissions check1521 // Modify permissions check
1522 ensure!(
1520 Self::meta_update_check(sender, collection, item_id)?;1523 Self::is_item_owner(sender, collection, item_id)?
1524 || Self::is_owner_or_admin_permissions(collection, sender)?,
1525 Error::<T>::NoPermission
1526 );
15211527
1522 match collection.mode {1528 match collection.mode {
1523 CollectionMode::NFT => Self::set_nft_variable_data(collection, item_id, data)?,1529 CollectionMode::NFT => Self::set_nft_variable_data(collection, item_id, data)?,
1582 value: u128,1588 value: u128,
1583 ) -> DispatchResult {1589 ) -> DispatchResult {
1584 ensure!(1590 ensure!(
1585 Self::is_item_owner(sender, collection, item_id)1591 Self::is_item_owner(sender, collection, item_id)?
1586 || (collection.limits.owner_can_transfer1592 || (collection.limits.owner_can_transfer
1587 && Self::is_owner_or_admin_permissions(collection, sender)),1593 && Self::is_owner_or_admin_permissions(collection, sender)?),
1588 Error::<T>::NoPermission1594 Error::<T>::NoPermission
1589 );1595 );
15901596
1626 let collection_id = collection.id;1632 let collection_id = collection.id;
16271633
1628 // check token limit and account token limit1634 // check token limit and account token limit
1635 collection.consume_sload()?;
1629 let account_items: u32 =1636 let account_items: u32 =
1630 <AddressTokens<T>>::get(collection_id, recipient.as_sub()).len() as u32;1637 <AddressTokens<T>>::get(collection_id, recipient.as_sub()).len() as u32;
1631 ensure!(1638 ensure!(
1632 collection.limits.account_token_ownership_limit > account_items,1639 collection.limits.account_token_ownership_limit > account_items,
1633 Error::<T>::AccountTokenLimitExceeded1640 Error::<T>::AccountTokenLimitExceeded
1634 );1641 );
1642
1643 // preliminary transfer check
1644 ensure!(collection.transfers_enabled, Error::<T>::TransferNotAllowed);
16351645
1636 Ok(())1646 Ok(())
1637 }1647 }
1661 Error::<T>::AccountTokenLimitExceeded1671 Error::<T>::AccountTokenLimitExceeded
1662 );1672 );
16631673
1664 if !Self::is_owner_or_admin_permissions(collection, sender) {1674 if !Self::is_owner_or_admin_permissions(collection, sender)? {
1665 ensure!(collection.mint_mode, Error::<T>::PublicMintingNotAllowed);1675 ensure!(collection.mint_mode, Error::<T>::PublicMintingNotAllowed);
1666 Self::check_white_list(collection, owner)?;1676 Self::check_white_list(collection, owner)?;
1667 Self::check_white_list(collection, sender)?;1677 Self::check_white_list(collection, sender)?;
1676 ) -> DispatchResult {1686 ) -> DispatchResult {
1677 match target_collection.mode {1687 match target_collection.mode {
1678 CollectionMode::NFT => {1688 CollectionMode::NFT => {
1679 if let CreateItemData::NFT(data) = data {1689 if !matches!(data, CreateItemData::NFT(_)) {
1680 // check sizes
1681 ensure!(
1682 ChainLimit::get().custom_data_limit >= data.const_data.len() as u32,
1683 Error::<T>::TokenConstDataLimitExceeded
1684 );
1685 ensure!(
1686 ChainLimit::get().custom_data_limit >= data.variable_data.len() as u32,
1687 Error::<T>::TokenVariableDataLimitExceeded
1688 );
1689 } else {
1690 fail!(Error::<T>::NotNftDataUsedToMintNftCollectionToken);1690 fail!(Error::<T>::NotNftDataUsedToMintNftCollectionToken);
1691 }1691 }
1692 }1692 }
1693 CollectionMode::Fungible(_) => {1693 CollectionMode::Fungible(_) => {
1694 if let CreateItemData::Fungible(_) = data {1694 if !matches!(data, CreateItemData::Fungible(_)) {
1695 } else {
1696 fail!(Error::<T>::NotFungibleDataUsedToMintFungibleCollectionToken);1695 fail!(Error::<T>::NotFungibleDataUsedToMintFungibleCollectionToken);
1697 }1696 }
1698 }1697 }
1699 CollectionMode::ReFungible => {1698 CollectionMode::ReFungible => {
1700 if let CreateItemData::ReFungible(data) = data {1699 if let CreateItemData::ReFungible(data) = data {
1701 // check sizes
1702 ensure!(
1703 ChainLimit::get().custom_data_limit >= data.const_data.len() as u32,
1704 Error::<T>::TokenConstDataLimitExceeded
1705 );
1706 ensure!(
1707 ChainLimit::get().custom_data_limit >= data.variable_data.len() as u32,
1708 Error::<T>::TokenVariableDataLimitExceeded
1709 );
1710
1711 // Check refungibility limits1700 // Check refungibility limits
1712 ensure!(1701 ensure!(
1735 CreateItemData::NFT(data) => {1724 CreateItemData::NFT(data) => {
1736 let item = NftItemType {1725 let item = NftItemType {
1737 owner: owner.clone(),1726 owner: owner.clone(),
1738 const_data: data.const_data,1727 const_data: data.const_data.into_inner(),
1739 variable_data: data.variable_data,1728 variable_data: data.variable_data.into_inner(),
1740 };1729 };
17411730
1742 Self::add_nft_item(collection, item)?;1731 Self::add_nft_item(collection, item)?;
17521741
1753 let item = ReFungibleItemType {1742 let item = ReFungibleItemType {
1754 owner: owner_list,1743 owner: owner_list,
1755 const_data: data.const_data,1744 const_data: data.const_data.into_inner(),
1756 variable_data: data.variable_data,1745 variable_data: data.variable_data.into_inner(),
1757 };1746 };
17581747
1759 Self::add_refungible_item(collection, item)?;1748 Self::add_refungible_item(collection, item)?;
1771 let collection_id = collection.id;1760 let collection_id = collection.id;
17721761
1773 // Does new owner already have an account?1762 // Does new owner already have an account?
1763 collection.consume_sload()?;
1774 let balance: u128 = <FungibleItemList<T>>::get(collection_id, owner.as_sub()).value;1764 let balance: u128 = <FungibleItemList<T>>::get(collection_id, owner.as_sub()).value;
17751765
1776 // Mint1766 // Mint
1777 let item = FungibleItemType {1767 let item = FungibleItemType {
1778 value: balance.checked_add(value).ok_or(Error::<T>::NumOverflow)?,1768 value: balance.checked_add(value).ok_or(Error::<T>::NumOverflow)?,
1779 };1769 };
1770 collection.consume_sstore()?;
1780 <FungibleItemList<T>>::insert(collection_id, owner.as_sub(), item);1771 <FungibleItemList<T>>::insert(collection_id, owner.as_sub(), item);
17811772
1782 // Update balance1773 // Update balance
1774 collection.consume_sload()?;
1783 let new_balance = <Balance<T>>::get(collection_id, owner.as_sub())1775 let new_balance = <Balance<T>>::get(collection_id, owner.as_sub())
1784 .checked_add(value)1776 .checked_add(value)
1785 .ok_or(Error::<T>::NumOverflow)?;1777 .ok_or(Error::<T>::NumOverflow)?;
1778 collection.consume_sstore()?;
1786 <Balance<T>>::insert(collection_id, owner.as_sub(), new_balance);1779 <Balance<T>>::insert(collection_id, owner.as_sub(), new_balance);
17871780
1781 collection.log(ERC20Events::Transfer {
1782 from: H160::default(),
1783 to: *owner.as_eth(),
1784 value: value.into(),
1785 })?;
1788 Self::deposit_event(RawEvent::ItemCreated(collection_id, 0, owner.clone()));1786 Self::deposit_event(RawEvent::ItemCreated(collection_id, 0, owner.clone()));
1789 Ok(())1787 Ok(())
1790 }1788 }
1806 let value = item_owner.fraction;1804 let value = item_owner.fraction;
1807 let owner = item_owner.owner.clone();1805 let owner = item_owner.owner.clone();
18081806
1809 Self::add_token_index(collection_id, current_index, &owner)?;1807 Self::add_token_index(collection, current_index, &owner)?;
18101808
1811 <ItemListIndex>::insert(collection_id, current_index);1809 <ItemListIndex>::insert(collection_id, current_index);
1812 <ReFungibleItemList<T>>::insert(collection_id, current_index, itemcopy);1810 <ReFungibleItemList<T>>::insert(collection_id, current_index, itemcopy);
1832 .ok_or(Error::<T>::NumOverflow)?;1830 .ok_or(Error::<T>::NumOverflow)?;
18331831
1834 let item_owner = item.owner.clone();1832 let item_owner = item.owner.clone();
1835 Self::add_token_index(collection_id, current_index, &item.owner)?;1833 Self::add_token_index(collection, current_index, &item.owner)?;
18361834
1837 <ItemListIndex>::insert(collection_id, current_index);1835 <ItemListIndex>::insert(collection_id, current_index);
1838 <NftItemList<T>>::insert(collection_id, current_index, item);1836 <NftItemList<T>>::insert(collection_id, current_index, item);
1847 from: H160::default(),1845 from: H160::default(),
1848 to: *item_owner.as_eth(),1846 to: *item_owner.as_eth(),
1849 token_id: current_index.into(),1847 token_id: current_index.into(),
1850 });1848 })?;
1851 Self::deposit_event(RawEvent::ItemCreated(1849 Self::deposit_event(RawEvent::ItemCreated(
1852 collection_id,1850 collection_id,
1853 current_index,1851 current_index,
1870 .iter()1868 .iter()
1871 .find(|&i| i.owner == *owner)1869 .find(|&i| i.owner == *owner)
1872 .ok_or(Error::<T>::TokenNotFound)?;1870 .ok_or(Error::<T>::TokenNotFound)?;
1873 Self::remove_token_index(collection_id, item_id, owner)?;1871 Self::remove_token_index(collection, item_id, owner)?;
18741872
1875 // update balance1873 // update balance
1876 let new_balance = <Balance<T>>::get(collection_id, rft_balance.owner.as_sub())1874 let new_balance = <Balance<T>>::get(collection_id, rft_balance.owner.as_sub())
19031901
1904 let item =1902 let item =
1905 <NftItemList<T>>::get(collection_id, item_id).ok_or(Error::<T>::TokenNotFound)?;1903 <NftItemList<T>>::get(collection_id, item_id).ok_or(Error::<T>::TokenNotFound)?;
1906 Self::remove_token_index(collection_id, item_id, &item.owner)?;1904 Self::remove_token_index(collection, item_id, &item.owner)?;
19071905
1908 // update balance1906 // update balance
1909 let new_balance = <Balance<T>>::get(collection_id, item.owner.as_sub())1907 let new_balance = <Balance<T>>::get(collection_id, item.owner.as_sub())
1913 <NftItemList<T>>::remove(collection_id, item_id);1911 <NftItemList<T>>::remove(collection_id, item_id);
1914 <VariableMetaDataBasket<T>>::remove(collection_id, item_id);1912 <VariableMetaDataBasket<T>>::remove(collection_id, item_id);
19151913
1914 collection.log(ERC721Events::Transfer {
1915 from: *item.owner.as_eth(),
1916 to: H160::default(),
1917 token_id: item_id.into(),
1918 })?;
1916 Self::deposit_event(RawEvent::ItemDestroyed(collection.id, item_id));1919 Self::deposit_event(RawEvent::ItemDestroyed(collection.id, item_id));
1917 Ok(())1920 Ok(())
1918 }1921 }
1944 from: *owner.as_eth(),1947 from: *owner.as_eth(),
1945 to: H160::default(),1948 to: H160::default(),
1946 value: value.into(),1949 value: value.into(),
1947 });1950 })?;
1948 Ok(())1951 Ok(())
1949 }1952 }
19501953
1954 Ok(<CollectionHandle<T>>::get(collection_id).ok_or(Error::<T>::CollectionNotFound)?)1957 Ok(<CollectionHandle<T>>::get(collection_id).ok_or(Error::<T>::CollectionNotFound)?)
1955 }1958 }
1956
1957 fn save_collection(collection: CollectionHandle<T>) {
1958 <CollectionById<T>>::insert(collection.id, collection.into_inner());
1959 }
1960
1961 pub fn submit_logs(collection: CollectionHandle<T>) -> DispatchResult {
1962 if collection.logs.is_empty() {
1963 return Ok(());
1964 }
1965 T::EthereumTransactionSender::submit_logs_transaction(
1966 eth::generate_transaction(collection.id, T::EthereumChainId::get()),
1967 collection.logs.retrieve_logs(),
1968 )
1969 }
19701959
1971 fn check_owner_permissions(1960 fn check_owner_permissions(
1972 target_collection: &CollectionHandle<T>,1961 target_collection: &CollectionHandle<T>,
1983 fn is_owner_or_admin_permissions(1972 fn is_owner_or_admin_permissions(
1984 collection: &CollectionHandle<T>,1973 collection: &CollectionHandle<T>,
1985 subject: &T::CrossAccountId,1974 subject: &T::CrossAccountId,
1986 ) -> bool {1975 ) -> Result<bool, DispatchError> {
1976 collection.consume_sload()?;
1987 *subject.as_sub() == collection.owner1977 Ok(*subject.as_sub() == collection.owner
1988 || <AdminList<T>>::get(collection.id).contains(subject)1978 || <AdminList<T>>::get(collection.id).contains(subject))
1989 }1979 }
19901980
1991 fn check_owner_or_admin_permissions(1981 fn check_owner_or_admin_permissions(
1992 collection: &CollectionHandle<T>,1982 collection: &CollectionHandle<T>,
1993 subject: &T::CrossAccountId,1983 subject: &T::CrossAccountId,
1994 ) -> DispatchResult {1984 ) -> DispatchResult {
1995 ensure!(1985 ensure!(
1996 Self::is_owner_or_admin_permissions(collection, subject),1986 Self::is_owner_or_admin_permissions(collection, subject)?,
1997 Error::<T>::NoPermission1987 Error::<T>::NoPermission
1998 );1988 );
19991989
2000 Ok(())1990 Ok(())
2001 }1991 }
20021992
2003 fn owned_amount(1993 fn owned_amount(
1994 subject: &T::CrossAccountId,
1995 collection: &CollectionHandle<T>,
1996 item_id: TokenId,
1997 ) -> Result<Option<u128>, DispatchError> {
1998 collection.consume_sload()?;
1999 Ok(Self::owned_amount_unchecked(subject, collection, item_id))
2000 }
2001
2002 fn owned_amount_unchecked(
2004 subject: &T::CrossAccountId,2003 subject: &T::CrossAccountId,
2005 target_collection: &CollectionHandle<T>,2004 target_collection: &CollectionHandle<T>,
2006 item_id: TokenId,2005 item_id: TokenId,
2027 subject: &T::CrossAccountId,2026 subject: &T::CrossAccountId,
2028 target_collection: &CollectionHandle<T>,2027 target_collection: &CollectionHandle<T>,
2029 item_id: TokenId,2028 item_id: TokenId,
2030 ) -> bool {2029 ) -> Result<bool, DispatchError> {
2031 match target_collection.mode {2030 Ok(match target_collection.mode {
2032 CollectionMode::Fungible(_) => true,2031 CollectionMode::Fungible(_) => true,
2033 _ => Self::owned_amount(subject, target_collection, item_id).is_some(),2032 _ => Self::owned_amount(subject, target_collection, item_id)?.is_some(),
2034 }2033 })
2035 }2034 }
20362035
2037 fn check_white_list(2036 fn check_white_list(
2038 collection: &CollectionHandle<T>,2037 collection: &CollectionHandle<T>,
2039 address: &T::CrossAccountId,2038 address: &T::CrossAccountId,
2040 ) -> DispatchResult {2039 ) -> DispatchResult {
2041 let collection_id = collection.id;2040 collection.consume_sload()?;
2042
2043 let mes = Error::<T>::AddresNotInWhiteList;
2044 ensure!(2041 ensure!(
2045 <WhiteList<T>>::contains_key(collection_id, address.as_sub()),2042 <WhiteList<T>>::contains_key(collection.id, address.as_sub()),
2046 mes2043 Error::<T>::AddresNotInWhiteList,
2047 );2044 );
2048
2049 Ok(())2045 Ok(())
2074 ) -> DispatchResult {2070 ) -> DispatchResult {
2075 let collection_id = collection.id;2071 let collection_id = collection.id;
20762072
2073 collection.consume_sload()?;
2074 collection.consume_sload()?;
2075 let mut recipient_balance = <FungibleItemList<T>>::get(collection_id, recipient.as_sub());
2077 let mut balance = <FungibleItemList<T>>::get(collection_id, owner.as_sub());2076 let mut balance = <FungibleItemList<T>>::get(collection_id, owner.as_sub());
2077
2078 recipient_balance.value = recipient_balance
2079 .value
2080 .checked_add(value)
2081 .ok_or(Error::<T>::NumOverflow)?;
2078 ensure!(balance.value >= value, Error::<T>::TokenValueTooLow);2082 balance.value = balance
20792083 .value
2080 // Send balance to recipient (updates balanceOf of recipient)2084 .checked_sub(value)
2085 .ok_or(Error::<T>::TokenValueTooLow)?;
2086
2087 // update balanceOf
2081 Self::add_fungible_item(collection, recipient, value)?;2088 collection.consume_sstore()?;
20822089 collection.consume_sstore()?;
2083 // update balanceOf of sender2090 if balance.value != 0 {
2084 <Balance<T>>::insert(collection_id, owner.as_sub(), balance.value - value);2091 <Balance<T>>::insert(collection_id, owner.as_sub(), balance.value);
2092 } else {
2093 <Balance<T>>::remove(collection_id, owner.as_sub());
2094 }
2095 <Balance<T>>::insert(collection_id, recipient.as_sub(), recipient_balance.value);
20852096
2086 // Reduce or remove sender2097 // Reduce or remove sender
2098 collection.consume_sstore()?;
2099 collection.consume_sstore()?;
2087 if balance.value == value {2100 if balance.value != 0 {
2088 <FungibleItemList<T>>::remove(collection_id, owner.as_sub());2101 <FungibleItemList<T>>::insert(collection_id, owner.as_sub(), balance);
2089 } else {2102 } else {
2090 balance.value -= value;
2091 <FungibleItemList<T>>::insert(collection_id, owner.as_sub(), balance);2103 <FungibleItemList<T>>::remove(collection_id, owner.as_sub());
2092 }2104 }
2105 <FungibleItemList<T>>::insert(collection_id, recipient.as_sub(), recipient_balance);
20932106
2094 collection.log(ERC20Events::Transfer {2107 collection.log(ERC20Events::Transfer {
2095 from: *owner.as_eth(),2108 from: *owner.as_eth(),
2096 to: *recipient.as_eth(),2109 to: *recipient.as_eth(),
2097 value: value.into(),2110 value: value.into(),
2098 });2111 })?;
2099 Self::deposit_event(RawEvent::Transfer(2112 Self::deposit_event(RawEvent::Transfer(
2100 collection.id,2113 collection.id,
2101 1,2114 1,
2115 new_owner: T::CrossAccountId,2128 new_owner: T::CrossAccountId,
2116 ) -> DispatchResult {2129 ) -> DispatchResult {
2117 let collection_id = collection.id;2130 let collection_id = collection.id;
2131 collection.consume_sload()?;
2118 let full_item = <ReFungibleItemList<T>>::get(collection_id, item_id)2132 let full_item = <ReFungibleItemList<T>>::get(collection_id, item_id)
2119 .ok_or(Error::<T>::TokenNotFound)?;2133 .ok_or(Error::<T>::TokenNotFound)?;
21202134
21272141
2128 ensure!(amount >= value, Error::<T>::TokenValueTooLow);2142 ensure!(amount >= value, Error::<T>::TokenValueTooLow);
21292143
2144 collection.consume_sload()?;
2130 // update balance2145 // update balance
2131 let balance_old_owner = <Balance<T>>::get(collection_id, item.owner.as_sub())2146 let balance_old_owner = <Balance<T>>::get(collection_id, item.owner.as_sub())
2132 .checked_sub(value)2147 .checked_sub(value)
2133 .ok_or(Error::<T>::NumOverflow)?;2148 .ok_or(Error::<T>::NumOverflow)?;
2149 collection.consume_sstore()?;
2134 <Balance<T>>::insert(collection_id, item.owner.as_sub(), balance_old_owner);2150 <Balance<T>>::insert(collection_id, item.owner.as_sub(), balance_old_owner);
21352151
2152 collection.consume_sload()?;
2136 let balance_new_owner = <Balance<T>>::get(collection_id, new_owner.as_sub())2153 let balance_new_owner = <Balance<T>>::get(collection_id, new_owner.as_sub())
2137 .checked_add(value)2154 .checked_add(value)
2138 .ok_or(Error::<T>::NumOverflow)?;2155 .ok_or(Error::<T>::NumOverflow)?;
2156 collection.consume_sstore()?;
2139 <Balance<T>>::insert(collection_id, new_owner.as_sub(), balance_new_owner);2157 <Balance<T>>::insert(collection_id, new_owner.as_sub(), balance_new_owner);
21402158
2141 let old_owner = item.owner.clone();2159 let old_owner = item.owner.clone();
2152 .find(|i| i.owner == owner)2170 .find(|i| i.owner == owner)
2153 .expect("old owner does present in refungible")2171 .expect("old owner does present in refungible")
2154 .owner = new_owner.clone();2172 .owner = new_owner.clone();
2173 collection.consume_sstore()?;
2155 <ReFungibleItemList<T>>::insert(collection_id, item_id, new_full_item);2174 <ReFungibleItemList<T>>::insert(collection_id, item_id, new_full_item);
21562175
2157 // update index collection2176 // update index collection
2158 Self::move_token_index(collection_id, item_id, &old_owner, &new_owner)?;2177 Self::move_token_index(collection, item_id, &old_owner, &new_owner)?;
2159 } else {2178 } else {
2160 new_full_item2179 new_full_item
2161 .owner2180 .owner
2179 owner: new_owner.clone(),2198 owner: new_owner.clone(),
2180 fraction: value,2199 fraction: value,
2181 });2200 });
2182 Self::add_token_index(collection_id, item_id, &new_owner)?;2201 Self::add_token_index(collection, item_id, &new_owner)?;
2183 }2202 }
21842203
2204 collection.consume_sstore()?;
2185 <ReFungibleItemList<T>>::insert(collection_id, item_id, new_full_item);2205 <ReFungibleItemList<T>>::insert(collection_id, item_id, new_full_item);
2186 }2206 }
21872207
2203 new_owner: T::CrossAccountId,2223 new_owner: T::CrossAccountId,
2204 ) -> DispatchResult {2224 ) -> DispatchResult {
2205 let collection_id = collection.id;2225 let collection_id = collection.id;
2226 collection.consume_sload()?;
2206 let mut item =2227 let mut item =
2207 <NftItemList<T>>::get(collection_id, item_id).ok_or(Error::<T>::TokenNotFound)?;2228 <NftItemList<T>>::get(collection_id, item_id).ok_or(Error::<T>::TokenNotFound)?;
22082229
2209 ensure!(sender == item.owner, Error::<T>::MustBeTokenOwner);2230 ensure!(sender == item.owner, Error::<T>::MustBeTokenOwner);
22102231
2232 collection.consume_sload()?;
2211 // update balance2233 // update balance
2212 let balance_old_owner = <Balance<T>>::get(collection_id, item.owner.as_sub())2234 let balance_old_owner = <Balance<T>>::get(collection_id, item.owner.as_sub())
2213 .checked_sub(1)2235 .checked_sub(1)
2214 .ok_or(Error::<T>::NumOverflow)?;2236 .ok_or(Error::<T>::NumOverflow)?;
2237 collection.consume_sstore()?;
2215 <Balance<T>>::insert(collection_id, item.owner.as_sub(), balance_old_owner);2238 <Balance<T>>::insert(collection_id, item.owner.as_sub(), balance_old_owner);
22162239
2240 collection.consume_sload()?;
2217 let balance_new_owner = <Balance<T>>::get(collection_id, new_owner.as_sub())2241 let balance_new_owner = <Balance<T>>::get(collection_id, new_owner.as_sub())
2218 .checked_add(1)2242 .checked_add(1)
2219 .ok_or(Error::<T>::NumOverflow)?;2243 .ok_or(Error::<T>::NumOverflow)?;
2244 collection.consume_sstore()?;
2220 <Balance<T>>::insert(collection_id, new_owner.as_sub(), balance_new_owner);2245 <Balance<T>>::insert(collection_id, new_owner.as_sub(), balance_new_owner);
22212246
2222 // change owner2247 // change owner
2223 let old_owner = item.owner.clone();2248 let old_owner = item.owner.clone();
2224 item.owner = new_owner.clone();2249 item.owner = new_owner.clone();
2250 collection.consume_sstore()?;
2225 <NftItemList<T>>::insert(collection_id, item_id, item);2251 <NftItemList<T>>::insert(collection_id, item_id, item);
22262252
2227 // update index collection2253 // update index collection
2228 Self::move_token_index(collection_id, item_id, &old_owner, &new_owner)?;2254 Self::move_token_index(collection, item_id, &old_owner, &new_owner)?;
22292255
2230 collection.log(ERC721Events::Transfer {2256 collection.log(ERC721Events::Transfer {
2231 from: *sender.as_eth(),2257 from: *sender.as_eth(),
2232 to: *new_owner.as_eth(),2258 to: *new_owner.as_eth(),
2233 token_id: item_id.into(),2259 token_id: item_id.into(),
2234 });2260 })?;
2235 Self::deposit_event(RawEvent::Transfer(2261 Self::deposit_event(RawEvent::Transfer(
2236 collection.id,2262 collection.id,
2237 item_id,2263 item_id,
2306 let current_index = <ItemListIndex>::get(collection_id).checked_add(1).unwrap();2332 let current_index = <ItemListIndex>::get(collection_id).checked_add(1).unwrap();
23072333
2308 Self::add_token_index(collection_id, current_index, &item.owner).unwrap();2334 Self::add_token_index(
2335 &CollectionHandle::get(collection_id).unwrap(),
2336 current_index,
2337 &item.owner,
2338 )
2339 .unwrap();
23092340
2325 let current_index = <ItemListIndex>::get(collection_id).checked_add(1).unwrap();2356 let current_index = <ItemListIndex>::get(collection_id).checked_add(1).unwrap();
23262357
2327 Self::add_token_index(collection_id, current_index, owner).unwrap();2358 Self::add_token_index(
2359 &CollectionHandle::get(collection_id).unwrap(),
2360 current_index,
2361 owner,
2362 )
2363 .unwrap();
23282364
2346 let owner = item.owner.first().unwrap().owner.clone();2382 let owner = item.owner.first().unwrap().owner.clone();
23472383
2348 Self::add_token_index(collection_id, current_index, &owner).unwrap();2384 Self::add_token_index(
2385 &CollectionHandle::get(collection_id).unwrap(),
2386 current_index,
2387 &owner,
2388 )
2389 .unwrap();
23492390
2357 }2398 }
23582399
2359 fn add_token_index(2400 fn add_token_index(
2360 collection_id: CollectionId,2401 collection: &CollectionHandle<T>,
2361 item_index: TokenId,2402 item_index: TokenId,
2362 owner: &T::CrossAccountId,2403 owner: &T::CrossAccountId,
2363 ) -> DispatchResult {2404 ) -> DispatchResult {
2364 // add to account limit2405 // add to account limit
2406 collection.consume_sload()?;
2365 if <AccountItemCount<T>>::contains_key(owner.as_sub()) {2407 if <AccountItemCount<T>>::contains_key(owner.as_sub()) {
2366 // bound Owned tokens by a single address2408 // bound Owned tokens by a single address
2409 collection.consume_sload()?;
2367 let count = <AccountItemCount<T>>::get(owner.as_sub());2410 let count = <AccountItemCount<T>>::get(owner.as_sub());
2368 ensure!(2411 ensure!(
2369 count < ChainLimit::get().account_token_ownership_limit,2412 count < ACCOUNT_TOKEN_OWNERSHIP_LIMIT,
2370 Error::<T>::AddressOwnershipLimitExceeded2413 Error::<T>::AddressOwnershipLimitExceeded
2371 );2414 );
23722415
2416 collection.consume_sstore()?;
2373 <AccountItemCount<T>>::insert(2417 <AccountItemCount<T>>::insert(
2374 owner.as_sub(),2418 owner.as_sub(),
2375 count.checked_add(1).ok_or(Error::<T>::NumOverflow)?,2419 count.checked_add(1).ok_or(Error::<T>::NumOverflow)?,
2376 );2420 );
2377 } else {2421 } else {
2422 collection.consume_sstore()?;
2378 <AccountItemCount<T>>::insert(owner.as_sub(), 1);2423 <AccountItemCount<T>>::insert(owner.as_sub(), 1);
2379 }2424 }
23802425
2426 collection.consume_sload()?;
2381 let list_exists = <AddressTokens<T>>::contains_key(collection_id, owner.as_sub());2427 let list_exists = <AddressTokens<T>>::contains_key(collection.id, owner.as_sub());
2382 if list_exists {2428 if list_exists {
2429 collection.consume_sload()?;
2383 let mut list = <AddressTokens<T>>::get(collection_id, owner.as_sub());2430 let mut list = <AddressTokens<T>>::get(collection.id, owner.as_sub());
2384 let item_contains = list.contains(&item_index.clone());2431 let item_contains = list.contains(&item_index.clone());
23852432
2386 if !item_contains {2433 if !item_contains {
2387 list.push(item_index);2434 list.push(item_index);
2388 }2435 }
23892436
2437 collection.consume_sstore()?;
2390 <AddressTokens<T>>::insert(collection_id, owner.as_sub(), list);2438 <AddressTokens<T>>::insert(collection.id, owner.as_sub(), list);
2391 } else {2439 } else {
2392 let itm = vec![item_index];2440 let itm = vec![item_index];
2441 collection.consume_sstore()?;
2393 <AddressTokens<T>>::insert(collection_id, owner.as_sub(), itm);2442 <AddressTokens<T>>::insert(collection.id, owner.as_sub(), itm);
2394 }2443 }
23952444
2396 Ok(())2445 Ok(())
2397 }2446 }
23982447
2399 fn remove_token_index(2448 fn remove_token_index(
2400 collection_id: CollectionId,2449 collection: &CollectionHandle<T>,
2401 item_index: TokenId,2450 item_index: TokenId,
2402 owner: &T::CrossAccountId,2451 owner: &T::CrossAccountId,
2403 ) -> DispatchResult {2452 ) -> DispatchResult {
2404 // update counter2453 // update counter
2454 collection.consume_sload()?;
2455 collection.consume_sstore()?;
2405 <AccountItemCount<T>>::insert(2456 <AccountItemCount<T>>::insert(
2406 owner.as_sub(),2457 owner.as_sub(),
2407 <AccountItemCount<T>>::get(owner.as_sub())2458 <AccountItemCount<T>>::get(owner.as_sub())
2408 .checked_sub(1)2459 .checked_sub(1)
2409 .ok_or(Error::<T>::NumOverflow)?,2460 .ok_or(Error::<T>::NumOverflow)?,
2410 );2461 );
24112462
2463 collection.consume_sload()?;
2412 let list_exists = <AddressTokens<T>>::contains_key(collection_id, owner.as_sub());2464 let list_exists = <AddressTokens<T>>::contains_key(collection.id, owner.as_sub());
2413 if list_exists {2465 if list_exists {
2466 collection.consume_sload()?;
2414 let mut list = <AddressTokens<T>>::get(collection_id, owner.as_sub());2467 let mut list = <AddressTokens<T>>::get(collection.id, owner.as_sub());
2415 let item_contains = list.contains(&item_index.clone());2468 let item_contains = list.contains(&item_index.clone());
24162469
2417 if item_contains {2470 if item_contains {
2418 list.retain(|&item| item != item_index);2471 list.retain(|&item| item != item_index);
2472 collection.consume_sstore()?;
2419 <AddressTokens<T>>::insert(collection_id, owner.as_sub(), list);2473 <AddressTokens<T>>::insert(collection.id, owner.as_sub(), list);
2420 }2474 }
2421 }2475 }
24222476
2423 Ok(())2477 Ok(())
2424 }2478 }
24252479
2426 fn move_token_index(2480 fn move_token_index(
2427 collection_id: CollectionId,2481 collection: &CollectionHandle<T>,
2428 item_index: TokenId,2482 item_index: TokenId,
2429 old_owner: &T::CrossAccountId,2483 old_owner: &T::CrossAccountId,
2430 new_owner: &T::CrossAccountId,2484 new_owner: &T::CrossAccountId,
2431 ) -> DispatchResult {2485 ) -> DispatchResult {
2432 Self::remove_token_index(collection_id, item_index, old_owner)?;2486 Self::remove_token_index(collection, item_index, old_owner)?;
2433 Self::add_token_index(collection_id, item_index, new_owner)?;2487 Self::add_token_index(collection, item_index, new_owner)?;
24342488
2435 Ok(())2489 Ok(())
2436 }2490 }
modifiedpallets/nft/src/mock.rsdiffbeforeafterboth
6use sp_runtime::{6use sp_runtime::{
7 traits::{BlakeTwo256, IdentityLookup},7 traits::{BlakeTwo256, IdentityLookup},
8 testing::Header,8 testing::Header,
9 Perbill,
10};9};
11use pallet_transaction_payment::{CurrencyAdapter};10use pallet_transaction_payment::{CurrencyAdapter};
12use frame_system as system;11use frame_system as system;
99 type WeightInfo = ();98 type WeightInfo = ();
100}99}
101100
101<<<<<<< HEAD
102type Timestamp = pallet_timestamp::Pallet<Test>;102type Timestamp = pallet_timestamp::Pallet<Test>;
103type Randomness = pallet_randomness_collective_flip::Pallet<Test>;103type Randomness = pallet_randomness_collective_flip::Pallet<Test>;
104104
105=======
106>>>>>>> origin/develop
105parameter_types! {107parameter_types! {
106 pub const CollectionCreationPrice: u32 = 0;108 pub const CollectionCreationPrice: u32 = 0;
107 pub TreasuryAccountId: u64 = 1234;109 pub TreasuryAccountId: u64 = 1234;
133 fn as_sub(&self) -> &u64 {135 fn as_sub(&self) -> &u64 {
134 &self.0136 &self.0
135 }137 }
136 fn from_eth(_eth: sp_core::H160) -> Self {138 fn from_eth(eth: sp_core::H160) -> Self {
137 unimplemented!()139 let mut sub_raw = [0; 8];
140 sub_raw.copy_from_slice(&eth.0[0..8]);
141 let sub = u64::from_be_bytes(sub_raw);
142 Self(sub, eth)
138 }143 }
139 fn as_eth(&self) -> &sp_core::H160 {144 fn as_eth(&self) -> &sp_core::H160 {
140 &self.1145 &self.1
151 }156 }
152}157}
153158
159impl pallet_evm_coder_substrate::Config for Test {
160 type EthereumTransactionSender = TestEtheremTransactionSender;
161}
162
154impl pallet_template::Config for Test {163impl pallet_template::Config for Test {
155 type Event = ();164 type Event = ();
156 type WeightInfo = ();165 type WeightInfo = ();
160 type EvmAddressMapping = TestEvmAddressMapping;169 type EvmAddressMapping = TestEvmAddressMapping;
161 type EvmBackwardsAddressMapping = TestEvmBackwardsAddressMapping;170 type EvmBackwardsAddressMapping = TestEvmBackwardsAddressMapping;
162 type CrossAccountId = TestCrossAccountId;171 type CrossAccountId = TestCrossAccountId;
163 type EthereumChainId = EthereumChainId;
164 type EthereumTransactionSender = TestEtheremTransactionSender;
165}172}
166173
167// Build genesis storage according to the mock runtime.174// Build genesis storage according to the mock runtime.
modifiedpallets/nft/src/sponsorship.rsdiffbeforeafterboth
1use crate::{1use crate::{
2 Config, Call, CollectionById, CreateItemBasket, VariableMetaDataBasket,2 Config, Call, CollectionById, CreateItemBasket, VariableMetaDataBasket,
3 ReFungibleTransferBasket, FungibleTransferBasket, NftTransferBasket, ChainLimit,3 ReFungibleTransferBasket, FungibleTransferBasket, NftTransferBasket, CreateItemData,
4 CreateItemData, CollectionMode,4 CollectionMode,
5};5};
6use core::marker::PhantomData;6use core::marker::PhantomData;
7use up_sponsorship::SponsorshipHandler;7use up_sponsorship::SponsorshipHandler;
8use frame_support::{8use frame_support::{
9 traits::IsSubType,9 traits::{IsSubType},
10 storage::{StorageMap, StorageDoubleMap, StorageValue},10 storage::{StorageMap, StorageDoubleMap},
11};11};
12use nft_data_structs::{TokenId, CollectionId};12use nft_data_structs::{
13 TokenId, CollectionId, NFT_SPONSOR_TRANSFER_TIMEOUT, REFUNGIBLE_SPONSOR_TRANSFER_TIMEOUT,
14 FUNGIBLE_SPONSOR_TRANSFER_TIMEOUT,
15};
1316
14pub struct NftSponsorshipHandler<T>(PhantomData<T>);17pub struct NftSponsorshipHandler<T>(PhantomData<T>);
47 item_id: &TokenId,50 item_id: &TokenId,
48 ) -> Option<T::AccountId> {51 ) -> Option<T::AccountId> {
49 let collection = CollectionById::<T>::get(collection_id)?;52 let collection = CollectionById::<T>::get(collection_id)?;
50 let limits = ChainLimit::get();
5153
52 let mut sponsor_transfer = false;54 let mut sponsor_transfer = false;
53 if collection.sponsorship.confirmed() {55 if collection.sponsorship.confirmed() {
62 let limit: u32 = if collection_limits.sponsor_transfer_timeout > 0 {64 let limit: u32 = if collection_limits.sponsor_transfer_timeout > 0 {
63 collection_limits.sponsor_transfer_timeout65 collection_limits.sponsor_transfer_timeout
64 } else {66 } else {
65 limits.nft_sponsor_transfer_timeout67 NFT_SPONSOR_TRANSFER_TIMEOUT
66 };68 };
6769
68 let mut sponsored = true;70 let mut sponsored = true;
84 let limit: u32 = if collection_limits.sponsor_transfer_timeout > 0 {86 let limit: u32 = if collection_limits.sponsor_transfer_timeout > 0 {
85 collection_limits.sponsor_transfer_timeout87 collection_limits.sponsor_transfer_timeout
86 } else {88 } else {
87 limits.fungible_sponsor_transfer_timeout89 FUNGIBLE_SPONSOR_TRANSFER_TIMEOUT
88 };90 };
8991
90 let block_number = <frame_system::Pallet<T>>::block_number() as T::BlockNumber;92 let block_number = <frame_system::Pallet<T>>::block_number() as T::BlockNumber;
107 let limit: u32 = if collection_limits.sponsor_transfer_timeout > 0 {109 let limit: u32 = if collection_limits.sponsor_transfer_timeout > 0 {
108 collection_limits.sponsor_transfer_timeout110 collection_limits.sponsor_transfer_timeout
109 } else {111 } else {
110 limits.refungible_sponsor_transfer_timeout112 REFUNGIBLE_SPONSOR_TRANSFER_TIMEOUT
111 };113 };
112114
113 let mut sponsored = true;115 let mut sponsored = true;
modifiedpallets/nft/src/tests.rsdiffbeforeafterboth
1// Tests to be written here1// Tests to be written here
2use super::*;2use super::*;
3use crate::mock::*;3use crate::mock::*;
4use crate::{AccessMode, CollectionMode, Ownership, ChainLimits, CreateItemData};4use crate::{AccessMode, CollectionMode, Ownership, CreateItemData};
5use nft_data_structs::{5use nft_data_structs::{
6 CreateNftData, CreateFungibleData, CreateReFungibleData, CollectionId, TokenId,6 CreateNftData, CreateFungibleData, CreateReFungibleData, CollectionId, TokenId,
7 MAX_DECIMAL_POINTS,7 MAX_DECIMAL_POINTS,
8};8};
9use frame_support::{assert_noop, assert_ok};9use frame_support::{assert_noop, assert_ok};
10use frame_system::{RawOrigin};10use sp_std::convert::TryInto;
1111
12fn default_collection_numbers_limit() -> u32 {
13 10
14}
15
16fn default_limits() {
17 assert_ok!(TemplateModule::set_chain_limits(
18 RawOrigin::Root.into(),
19 ChainLimits {
20 collection_numbers_limit: default_collection_numbers_limit(),
21 account_token_ownership_limit: 10,
22 collections_admins_limit: 5,
23 custom_data_limit: 2048,
24 nft_sponsor_transfer_timeout: 15,
25 fungible_sponsor_transfer_timeout: 15,
26 refungible_sponsor_transfer_timeout: 15,
27 const_on_chain_schema_limit: 1024,
28 offchain_schema_limit: 1024,
29 variable_on_chain_schema_limit: 1024,
30 }
31 ));
32}
33
34fn default_nft_data() -> CreateNftData {12fn default_nft_data() -> CreateNftData {
35 CreateNftData {13 CreateNftData {
36 const_data: vec![1, 2, 3],14 const_data: vec![1, 2, 3].try_into().unwrap(),
37 variable_data: vec![3, 2, 1],15 variable_data: vec![3, 2, 1].try_into().unwrap(),
38 }16 }
39}17}
4018
4422
45fn default_re_fungible_data() -> CreateReFungibleData {23fn default_re_fungible_data() -> CreateReFungibleData {
46 CreateReFungibleData {24 CreateReFungibleData {
47 const_data: vec![1, 2, 3],25 const_data: vec![1, 2, 3].try_into().unwrap(),
48 variable_data: vec![3, 2, 1],26 variable_data: vec![3, 2, 1].try_into().unwrap(),
49 pieces: 1023,27 pieces: 1023,
50 }28 }
51}29}
112#[test]90#[test]
113fn set_version_schema() {91fn set_version_schema() {
114 new_test_ext().execute_with(|| {92 new_test_ext().execute_with(|| {
115 default_limits();
116 let origin1 = Origin::signed(1);93 let origin1 = Origin::signed(1);
117 let collection_id = create_test_collection(&CollectionMode::NFT, 1);94 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
11895
133#[test]110#[test]
134fn create_fungible_collection_fails_with_large_decimal_numbers() {111fn create_fungible_collection_fails_with_large_decimal_numbers() {
135 new_test_ext().execute_with(|| {112 new_test_ext().execute_with(|| {
136 default_limits();
137
138 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();113 let col_name1: Vec<u16> = "Test1\0".encode_utf16().collect::<Vec<u16>>();
139 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();114 let col_desc1: Vec<u16> = "TestDescription1\0".encode_utf16().collect::<Vec<u16>>();
140 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();115 let token_prefix1: Vec<u8> = b"token_prefix1\0".to_vec();
156#[test]131#[test]
157fn create_nft_item() {132fn create_nft_item() {
158 new_test_ext().execute_with(|| {133 new_test_ext().execute_with(|| {
159 default_limits();
160 let collection_id = create_test_collection(&CollectionMode::NFT, 1);134 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
161135
162 let data = default_nft_data();136 let data = default_nft_data();
163 create_test_item(collection_id, &data.clone().into());137 create_test_item(collection_id, &data.clone().into());
164 let item = TemplateModule::nft_item_id(collection_id, 1).unwrap();138 let item = TemplateModule::nft_item_id(collection_id, 1).unwrap();
165 assert_eq!(item.const_data, data.const_data);139 assert_eq!(item.const_data, data.const_data.into_inner());
166 assert_eq!(item.variable_data, data.variable_data);140 assert_eq!(item.variable_data, data.variable_data.into_inner());
167 });141 });
168}142}
169143
172#[test]146#[test]
173fn create_nft_multiple_items() {147fn create_nft_multiple_items() {
174 new_test_ext().execute_with(|| {148 new_test_ext().execute_with(|| {
175 default_limits();
176
177 create_test_collection(&CollectionMode::NFT, 1);149 create_test_collection(&CollectionMode::NFT, 1);
178150
179 let origin1 = Origin::signed(1);151 let origin1 = Origin::signed(1);
190 .map(|d| { d.into() })162 .map(|d| { d.into() })
191 .collect()163 .collect()
192 ));164 ));
193 for (index, data) in items_data.iter().enumerate() {165 for (index, data) in items_data.into_iter().enumerate() {
194 let item = TemplateModule::nft_item_id(1, (index + 1) as TokenId).unwrap();166 let item = TemplateModule::nft_item_id(1, (index + 1) as TokenId).unwrap();
195 assert_eq!(item.const_data.to_vec(), data.const_data);167 assert_eq!(item.const_data.to_vec(), data.const_data.into_inner());
196 assert_eq!(item.variable_data.to_vec(), data.variable_data);168 assert_eq!(item.variable_data.to_vec(), data.variable_data.into_inner());
197 }169 }
198 });170 });
199}171}
200172
201#[test]173#[test]
202fn create_refungible_item() {174fn create_refungible_item() {
203 new_test_ext().execute_with(|| {175 new_test_ext().execute_with(|| {
204 default_limits();
205 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);176 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);
206177
207 let data = default_re_fungible_data();178 let data = default_re_fungible_data();
208 create_test_item(collection_id, &data.clone().into());179 create_test_item(collection_id, &data.clone().into());
209 let item = TemplateModule::refungible_item_id(collection_id, 1).unwrap();180 let item = TemplateModule::refungible_item_id(collection_id, 1).unwrap();
210 assert_eq!(item.const_data, data.const_data);181 assert_eq!(item.const_data, data.const_data.into_inner());
211 assert_eq!(item.variable_data, data.variable_data);182 assert_eq!(item.variable_data, data.variable_data.into_inner());
212 assert_eq!(183 assert_eq!(
213 item.owner[0],184 item.owner[0],
214 Ownership {185 Ownership {
222#[test]193#[test]
223fn create_multiple_refungible_items() {194fn create_multiple_refungible_items() {
224 new_test_ext().execute_with(|| {195 new_test_ext().execute_with(|| {
225 default_limits();
226
227 create_test_collection(&CollectionMode::ReFungible, 1);196 create_test_collection(&CollectionMode::ReFungible, 1);
228197
229 let origin1 = Origin::signed(1);198 let origin1 = Origin::signed(1);
244 .map(|d| { d.into() })213 .map(|d| { d.into() })
245 .collect()214 .collect()
246 ));215 ));
247 for (index, data) in items_data.iter().enumerate() {216 for (index, data) in items_data.into_iter().enumerate() {
248 let item = TemplateModule::refungible_item_id(1, (index + 1) as TokenId).unwrap();217 let item = TemplateModule::refungible_item_id(1, (index + 1) as TokenId).unwrap();
249 assert_eq!(item.const_data.to_vec(), data.const_data);218 assert_eq!(item.const_data.to_vec(), data.const_data.into_inner());
250 assert_eq!(item.variable_data.to_vec(), data.variable_data);219 assert_eq!(item.variable_data.to_vec(), data.variable_data.into_inner());
251 assert_eq!(220 assert_eq!(
252 item.owner[0],221 item.owner[0],
253 Ownership {222 Ownership {
262#[test]231#[test]
263fn create_fungible_item() {232fn create_fungible_item() {
264 new_test_ext().execute_with(|| {233 new_test_ext().execute_with(|| {
265 default_limits();
266
267 let collection_id = create_test_collection(&CollectionMode::Fungible(3), 1);234 let collection_id = create_test_collection(&CollectionMode::Fungible(3), 1);
268235
269 let data = default_fungible_data();236 let data = default_fungible_data();
302#[test]269#[test]
303fn transfer_fungible_item() {270fn transfer_fungible_item() {
304 new_test_ext().execute_with(|| {271 new_test_ext().execute_with(|| {
305 default_limits();
306
307 let collection_id = create_test_collection(&CollectionMode::Fungible(3), 1);272 let collection_id = create_test_collection(&CollectionMode::Fungible(3), 1);
308273
309 let origin1 = Origin::signed(1);274 let origin1 = Origin::signed(1);
344#[test]309#[test]
345fn transfer_refungible_item() {310fn transfer_refungible_item() {
346 new_test_ext().execute_with(|| {311 new_test_ext().execute_with(|| {
347 default_limits();
348
349 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);312 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);
350313
351 let data = default_re_fungible_data();314 let data = default_re_fungible_data();
355 let origin2 = Origin::signed(2);318 let origin2 = Origin::signed(2);
356 {319 {
357 let item = TemplateModule::refungible_item_id(collection_id, 1).unwrap();320 let item = TemplateModule::refungible_item_id(collection_id, 1).unwrap();
358 assert_eq!(item.const_data, data.const_data);321 assert_eq!(item.const_data, data.const_data.into_inner());
359 assert_eq!(item.variable_data, data.variable_data);322 assert_eq!(item.variable_data, data.variable_data.into_inner());
360 assert_eq!(323 assert_eq!(
361 item.owner[0],324 item.owner[0],
362 Ownership {325 Ownership {
441#[test]404#[test]
442fn transfer_nft_item() {405fn transfer_nft_item() {
443 new_test_ext().execute_with(|| {406 new_test_ext().execute_with(|| {
444 default_limits();
445
446 let collection_id = create_test_collection(&CollectionMode::NFT, 1);407 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
447408
448 let data = default_nft_data();409 let data = default_nft_data();
464#[test]425#[test]
465fn nft_approve_and_transfer_from() {426fn nft_approve_and_transfer_from() {
466 new_test_ext().execute_with(|| {427 new_test_ext().execute_with(|| {
467 default_limits();
468
469 let collection_id = create_test_collection(&CollectionMode::NFT, 1);428 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
470429
471 let data = default_nft_data();430 let data = default_nft_data();
503#[test]462#[test]
504fn nft_approve_and_transfer_from_white_list() {463fn nft_approve_and_transfer_from_white_list() {
505 new_test_ext().execute_with(|| {464 new_test_ext().execute_with(|| {
506 default_limits();
507
508 let collection_id = create_test_collection(&CollectionMode::NFT, 1);465 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
509466
510 let origin1 = Origin::signed(1);467 let origin1 = Origin::signed(1);
514 create_test_item(collection_id, &data.clone().into());471 create_test_item(collection_id, &data.clone().into());
515472
516 assert_eq!(473 assert_eq!(
517 TemplateModule::nft_item_id(1, 1).unwrap().const_data,474 &TemplateModule::nft_item_id(1, 1).unwrap().const_data,
518 data.const_data475 &data.const_data.into_inner()
519 );476 );
520 assert_eq!(TemplateModule::balance_count(1, 1), 1);477 assert_eq!(TemplateModule::balance_count(1, 1), 1);
521 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);478 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);
573#[test]530#[test]
574fn refungible_approve_and_transfer_from() {531fn refungible_approve_and_transfer_from() {
575 new_test_ext().execute_with(|| {532 new_test_ext().execute_with(|| {
576 default_limits();
577
578 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);533 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);
579534
580 let origin1 = Origin::signed(1);535 let origin1 = Origin::signed(1);
636#[test]591#[test]
637fn fungible_approve_and_transfer_from() {592fn fungible_approve_and_transfer_from() {
638 new_test_ext().execute_with(|| {593 new_test_ext().execute_with(|| {
639 default_limits();
640
641 let collection_id = create_test_collection(&CollectionMode::Fungible(3), 1);594 let collection_id = create_test_collection(&CollectionMode::Fungible(3), 1);
642595
643 let data = default_fungible_data();596 let data = default_fungible_data();
710#[test]663#[test]
711fn change_collection_owner() {664fn change_collection_owner() {
712 new_test_ext().execute_with(|| {665 new_test_ext().execute_with(|| {
713 default_limits();
714
715 let collection_id = create_test_collection(&CollectionMode::NFT, 1);666 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
716667
717 let origin1 = Origin::signed(1);668 let origin1 = Origin::signed(1);
730#[test]681#[test]
731fn destroy_collection() {682fn destroy_collection() {
732 new_test_ext().execute_with(|| {683 new_test_ext().execute_with(|| {
733 default_limits();
734
735 let collection_id = create_test_collection(&CollectionMode::NFT, 1);684 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
736685
737 let origin1 = Origin::signed(1);686 let origin1 = Origin::signed(1);
742#[test]691#[test]
743fn burn_nft_item() {692fn burn_nft_item() {
744 new_test_ext().execute_with(|| {693 new_test_ext().execute_with(|| {
745 default_limits();
746
747 let collection_id = create_test_collection(&CollectionMode::NFT, 1);694 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
748695
749 let origin1 = Origin::signed(1);696 let origin1 = Origin::signed(1);
773#[test]720#[test]
774fn burn_fungible_item() {721fn burn_fungible_item() {
775 new_test_ext().execute_with(|| {722 new_test_ext().execute_with(|| {
776 default_limits();
777
778 let collection_id = create_test_collection(&CollectionMode::Fungible(3), 1);723 let collection_id = create_test_collection(&CollectionMode::Fungible(3), 1);
779724
780 let origin1 = Origin::signed(1);725 let origin1 = Origin::signed(1);
804#[test]749#[test]
805fn burn_refungible_item() {750fn burn_refungible_item() {
806 new_test_ext().execute_with(|| {751 new_test_ext().execute_with(|| {
807 default_limits();
808
809 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);752 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);
810 let origin1 = Origin::signed(1);753 let origin1 = Origin::signed(1);
811754
851#[test]794#[test]
852fn add_collection_admin() {795fn add_collection_admin() {
853 new_test_ext().execute_with(|| {796 new_test_ext().execute_with(|| {
854 default_limits();
855
856 let collection1_id = create_test_collection_for_owner(&CollectionMode::NFT, 1, 1);797 let collection1_id = create_test_collection_for_owner(&CollectionMode::NFT, 1, 1);
857 create_test_collection_for_owner(&CollectionMode::NFT, 2, 2);798 create_test_collection_for_owner(&CollectionMode::NFT, 2, 2);
858 create_test_collection_for_owner(&CollectionMode::NFT, 3, 3);799 create_test_collection_for_owner(&CollectionMode::NFT, 3, 3);
879#[test]820#[test]
880fn remove_collection_admin() {821fn remove_collection_admin() {
881 new_test_ext().execute_with(|| {822 new_test_ext().execute_with(|| {
882 default_limits();
883
884 let collection1_id = create_test_collection_for_owner(&CollectionMode::NFT, 1, 1);823 let collection1_id = create_test_collection_for_owner(&CollectionMode::NFT, 1, 1);
885 create_test_collection_for_owner(&CollectionMode::NFT, 2, 2);824 create_test_collection_for_owner(&CollectionMode::NFT, 2, 2);
886 create_test_collection_for_owner(&CollectionMode::NFT, 3, 3);825 create_test_collection_for_owner(&CollectionMode::NFT, 3, 3);
916#[test]855#[test]
917fn balance_of() {856fn balance_of() {
918 new_test_ext().execute_with(|| {857 new_test_ext().execute_with(|| {
919 default_limits();
920
921 let nft_collection_id = create_test_collection(&CollectionMode::NFT, 1);858 let nft_collection_id = create_test_collection(&CollectionMode::NFT, 1);
922 let fungible_collection_id = create_test_collection(&CollectionMode::Fungible(3), 2);859 let fungible_collection_id = create_test_collection(&CollectionMode::Fungible(3), 2);
923 let re_fungible_collection_id = create_test_collection(&CollectionMode::ReFungible, 3);860 let re_fungible_collection_id = create_test_collection(&CollectionMode::ReFungible, 3);
969#[test]906#[test]
970fn approve() {907fn approve() {
971 new_test_ext().execute_with(|| {908 new_test_ext().execute_with(|| {
972 default_limits();
973
974 let collection_id = create_test_collection(&CollectionMode::NFT, 1);909 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
975910
976 let data = default_nft_data();911 let data = default_nft_data();
987#[test]922#[test]
988fn transfer_from() {923fn transfer_from() {
989 new_test_ext().execute_with(|| {924 new_test_ext().execute_with(|| {
990 default_limits();
991
992 let collection_id = create_test_collection(&CollectionMode::NFT, 1);925 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
993 let origin1 = Origin::signed(1);926 let origin1 = Origin::signed(1);
994 let origin2 = Origin::signed(2);927 let origin2 = Origin::signed(2);
1051#[test]984#[test]
1052fn owner_can_add_address_to_white_list() {985fn owner_can_add_address_to_white_list() {
1053 new_test_ext().execute_with(|| {986 new_test_ext().execute_with(|| {
1054 default_limits();
1055
1056 let collection_id = create_test_collection(&CollectionMode::NFT, 1);987 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
1057988
1058 let origin1 = Origin::signed(1);989 let origin1 = Origin::signed(1);
1068#[test]999#[test]
1069fn admin_can_add_address_to_white_list() {1000fn admin_can_add_address_to_white_list() {
1070 new_test_ext().execute_with(|| {1001 new_test_ext().execute_with(|| {
1071 default_limits();
1072
1073 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1002 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
1074 let origin1 = Origin::signed(1);1003 let origin1 = Origin::signed(1);
1075 let origin2 = Origin::signed(2);1004 let origin2 = Origin::signed(2);
1091#[test]1020#[test]
1092fn nonprivileged_user_cannot_add_address_to_white_list() {1021fn nonprivileged_user_cannot_add_address_to_white_list() {
1093 new_test_ext().execute_with(|| {1022 new_test_ext().execute_with(|| {
1094 default_limits();
1095
1096 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1023 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
10971024
1098 let origin2 = Origin::signed(2);1025 let origin2 = Origin::signed(2);
1106#[test]1033#[test]
1107fn nobody_can_add_address_to_white_list_of_nonexisting_collection() {1034fn nobody_can_add_address_to_white_list_of_nonexisting_collection() {
1108 new_test_ext().execute_with(|| {1035 new_test_ext().execute_with(|| {
1109 default_limits();
1110
1111 let origin1 = Origin::signed(1);1036 let origin1 = Origin::signed(1);
11121037
1113 assert_noop!(1038 assert_noop!(
1120#[test]1045#[test]
1121fn nobody_can_add_address_to_white_list_of_deleted_collection() {1046fn nobody_can_add_address_to_white_list_of_deleted_collection() {
1122 new_test_ext().execute_with(|| {1047 new_test_ext().execute_with(|| {
1123 default_limits();
1124
1125 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1048 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
11261049
1127 let origin1 = Origin::signed(1);1050 let origin1 = Origin::signed(1);
1140#[test]1063#[test]
1141fn address_is_already_added_to_white_list() {1064fn address_is_already_added_to_white_list() {
1142 new_test_ext().execute_with(|| {1065 new_test_ext().execute_with(|| {
1143 default_limits();
1144
1145 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1066 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
1146 let origin1 = Origin::signed(1);1067 let origin1 = Origin::signed(1);
11471068
1162#[test]1083#[test]
1163fn owner_can_remove_address_from_white_list() {1084fn owner_can_remove_address_from_white_list() {
1164 new_test_ext().execute_with(|| {1085 new_test_ext().execute_with(|| {
1165 default_limits();
1166
1167 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1086 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
11681087
1169 let origin1 = Origin::signed(1);1088 let origin1 = Origin::signed(1);
1184#[test]1103#[test]
1185fn admin_can_remove_address_from_white_list() {1104fn admin_can_remove_address_from_white_list() {
1186 new_test_ext().execute_with(|| {1105 new_test_ext().execute_with(|| {
1187 default_limits();
1188
1189 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1106 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
1190 let origin1 = Origin::signed(1);1107 let origin1 = Origin::signed(1);
1191 let origin2 = Origin::signed(2);1108 let origin2 = Origin::signed(2);
1213#[test]1130#[test]
1214fn nonprivileged_user_cannot_remove_address_from_white_list() {1131fn nonprivileged_user_cannot_remove_address_from_white_list() {
1215 new_test_ext().execute_with(|| {1132 new_test_ext().execute_with(|| {
1216 default_limits();
1217
1218 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1133 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
1219 let origin1 = Origin::signed(1);1134 let origin1 = Origin::signed(1);
1220 let origin2 = Origin::signed(2);1135 let origin2 = Origin::signed(2);
1235#[test]1150#[test]
1236fn nobody_can_remove_address_from_white_list_of_nonexisting_collection() {1151fn nobody_can_remove_address_from_white_list_of_nonexisting_collection() {
1237 new_test_ext().execute_with(|| {1152 new_test_ext().execute_with(|| {
1238 default_limits();
1239 let origin1 = Origin::signed(1);1153 let origin1 = Origin::signed(1);
12401154
1241 assert_noop!(1155 assert_noop!(
1248#[test]1162#[test]
1249fn nobody_can_remove_address_from_white_list_of_deleted_collection() {1163fn nobody_can_remove_address_from_white_list_of_deleted_collection() {
1250 new_test_ext().execute_with(|| {1164 new_test_ext().execute_with(|| {
1251 default_limits();
1252
1253 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1165 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
1254 let origin1 = Origin::signed(1);1166 let origin1 = Origin::signed(1);
1255 let origin2 = Origin::signed(2);1167 let origin2 = Origin::signed(2);
1272#[test]1184#[test]
1273fn address_is_already_removed_from_white_list() {1185fn address_is_already_removed_from_white_list() {
1274 new_test_ext().execute_with(|| {1186 new_test_ext().execute_with(|| {
1275 default_limits();
1276
1277 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1187 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
1278 let origin1 = Origin::signed(1);1188 let origin1 = Origin::signed(1);
12791189
1300#[test]1210#[test]
1301fn white_list_test_1() {1211fn white_list_test_1() {
1302 new_test_ext().execute_with(|| {1212 new_test_ext().execute_with(|| {
1303 default_limits();
1304
1305 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1213 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
13061214
1307 let origin1 = Origin::signed(1);1215 let origin1 = Origin::signed(1);
1330#[test]1238#[test]
1331fn white_list_test_2() {1239fn white_list_test_2() {
1332 new_test_ext().execute_with(|| {1240 new_test_ext().execute_with(|| {
1333 default_limits();
1334
1335 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1241 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
1336 let origin1 = Origin::signed(1);1242 let origin1 = Origin::signed(1);
13371243
1381#[test]1287#[test]
1382fn white_list_test_3() {1288fn white_list_test_3() {
1383 new_test_ext().execute_with(|| {1289 new_test_ext().execute_with(|| {
1384 default_limits();
1385
1386 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1290 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
13871291
1388 let origin1 = Origin::signed(1);1292 let origin1 = Origin::signed(1);
1411#[test]1315#[test]
1412fn white_list_test_4() {1316fn white_list_test_4() {
1413 new_test_ext().execute_with(|| {1317 new_test_ext().execute_with(|| {
1414 default_limits();
1415
1416 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1318 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
14171319
1418 let origin1 = Origin::signed(1);1320 let origin1 = Origin::signed(1);
1463#[test]1365#[test]
1464fn white_list_test_5() {1366fn white_list_test_5() {
1465 new_test_ext().execute_with(|| {1367 new_test_ext().execute_with(|| {
1466 default_limits();
1467
1468 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1368 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
14691369
1470 let origin1 = Origin::signed(1);1370 let origin1 = Origin::signed(1);
1488#[test]1388#[test]
1489fn white_list_test_6() {1389fn white_list_test_6() {
1490 new_test_ext().execute_with(|| {1390 new_test_ext().execute_with(|| {
1491 default_limits();
1492
1493 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1391 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
14941392
1495 let origin1 = Origin::signed(1);1393 let origin1 = Origin::signed(1);
1516#[test]1414#[test]
1517fn white_list_test_7() {1415fn white_list_test_7() {
1518 new_test_ext().execute_with(|| {1416 new_test_ext().execute_with(|| {
1519 default_limits();
1520
1521 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1417 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
15221418
1523 let data = default_nft_data();1419 let data = default_nft_data();
1548#[test]1444#[test]
1549fn white_list_test_8() {1445fn white_list_test_8() {
1550 new_test_ext().execute_with(|| {1446 new_test_ext().execute_with(|| {
1551 default_limits();
1552
1553 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1447 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
15541448
1555 let data = default_nft_data();1449 let data = default_nft_data();
1598#[test]1492#[test]
1599fn white_list_test_9() {1493fn white_list_test_9() {
1600 new_test_ext().execute_with(|| {1494 new_test_ext().execute_with(|| {
1601 default_limits();
1602
1603 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1495 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
1604 let origin1 = Origin::signed(1);1496 let origin1 = Origin::signed(1);
16051497
1623#[test]1515#[test]
1624fn white_list_test_10() {1516fn white_list_test_10() {
1625 new_test_ext().execute_with(|| {1517 new_test_ext().execute_with(|| {
1626 default_limits();
1627
1628 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1518 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
16291519
1630 let origin1 = Origin::signed(1);1520 let origin1 = Origin::signed(1);
1660#[test]1550#[test]
1661fn white_list_test_11() {1551fn white_list_test_11() {
1662 new_test_ext().execute_with(|| {1552 new_test_ext().execute_with(|| {
1663 default_limits();
1664
1665 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1553 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
16661554
1667 let origin1 = Origin::signed(1);1555 let origin1 = Origin::signed(1);
1694#[test]1582#[test]
1695fn white_list_test_12() {1583fn white_list_test_12() {
1696 new_test_ext().execute_with(|| {1584 new_test_ext().execute_with(|| {
1697 default_limits();
1698
1699 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1585 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
17001586
1701 let origin1 = Origin::signed(1);1587 let origin1 = Origin::signed(1);
1723#[test]1609#[test]
1724fn white_list_test_13() {1610fn white_list_test_13() {
1725 new_test_ext().execute_with(|| {1611 new_test_ext().execute_with(|| {
1726 default_limits();
1727
1728 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1612 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
17291613
1730 let origin1 = Origin::signed(1);1614 let origin1 = Origin::signed(1);
1749#[test]1633#[test]
1750fn white_list_test_14() {1634fn white_list_test_14() {
1751 new_test_ext().execute_with(|| {1635 new_test_ext().execute_with(|| {
1752 default_limits();
1753
1754 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1636 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
17551637
1756 let origin1 = Origin::signed(1);1638 let origin1 = Origin::signed(1);
1786#[test]1668#[test]
1787fn white_list_test_15() {1669fn white_list_test_15() {
1788 new_test_ext().execute_with(|| {1670 new_test_ext().execute_with(|| {
1789 default_limits();
1790
1791 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1671 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
17921672
1793 let origin1 = Origin::signed(1);1673 let origin1 = Origin::signed(1);
1815#[test]1695#[test]
1816fn white_list_test_16() {1696fn white_list_test_16() {
1817 new_test_ext().execute_with(|| {1697 new_test_ext().execute_with(|| {
1818 default_limits();
1819
1820 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1698 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
18211699
1822 let origin1 = Origin::signed(1);1700 let origin1 = Origin::signed(1);
1851#[test]1729#[test]
1852fn total_number_collections_bound() {1730fn total_number_collections_bound() {
1853 new_test_ext().execute_with(|| {1731 new_test_ext().execute_with(|| {
1854 default_limits();
1855
1856 create_test_collection(&CollectionMode::NFT, 1);1732 create_test_collection(&CollectionMode::NFT, 1);
1857 });1733 });
1858}1734}
1861#[test]1737#[test]
1862fn total_number_collections_bound_neg() {1738fn total_number_collections_bound_neg() {
1863 new_test_ext().execute_with(|| {1739 new_test_ext().execute_with(|| {
1864 default_limits();
1865
1866 let origin1 = Origin::signed(1);1740 let origin1 = Origin::signed(1);
18671741
1868 for i in 0..default_collection_numbers_limit() {1742 for i in 0..COLLECTION_NUMBER_LIMIT {
1869 create_test_collection(&CollectionMode::NFT, i + 1);1743 create_test_collection(&CollectionMode::NFT, i + 1);
1870 }1744 }
18711745
1891#[test]1765#[test]
1892fn owned_tokens_bound() {1766fn owned_tokens_bound() {
1893 new_test_ext().execute_with(|| {1767 new_test_ext().execute_with(|| {
1894 default_limits();
1895
1896 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1768 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
18971769
1898 let data = default_nft_data();1770 let data = default_nft_data();
1905#[test]1777#[test]
1906fn owned_tokens_bound_neg() {1778fn owned_tokens_bound_neg() {
1907 new_test_ext().execute_with(|| {1779 new_test_ext().execute_with(|| {
1908 assert_ok!(TemplateModule::set_chain_limits(
1909 RawOrigin::Root.into(),
1910 ChainLimits {
1911 collection_numbers_limit: 10,
1912 account_token_ownership_limit: 1,
1913 collections_admins_limit: 5,
1914 custom_data_limit: 2048,
1915 nft_sponsor_transfer_timeout: 15,
1916 fungible_sponsor_transfer_timeout: 15,
1917 refungible_sponsor_transfer_timeout: 15,
1918 const_on_chain_schema_limit: 1024,
1919 offchain_schema_limit: 1024,
1920 variable_on_chain_schema_limit: 1024,
1921 }
1922 ));
1923
1924 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1780 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
19251781
1926 let origin1 = Origin::signed(1);1782 let origin1 = Origin::signed(1);
1927 let data = default_nft_data();
1928 create_test_item(collection_id, &data.clone().into());
19291783
1784 for _ in 0..ACCOUNT_TOKEN_OWNERSHIP_LIMIT {
1785 let data = default_nft_data();
1786 create_test_item(collection_id, &data.clone().into());
1787 }
1788
1789 let data = default_nft_data();
1930 assert_noop!(1790 assert_noop!(
1931 TemplateModule::create_item(origin1, 1, account(1), data.into()),1791 TemplateModule::create_item(origin1, 1, account(1), data.into()),
1932 Error::<Test>::AddressOwnershipLimitExceeded1792 Error::<Test>::AddressOwnershipLimitExceeded
1938#[test]1798#[test]
1939fn collection_admins_bound() {1799fn collection_admins_bound() {
1940 new_test_ext().execute_with(|| {1800 new_test_ext().execute_with(|| {
1941 assert_ok!(TemplateModule::set_chain_limits(
1942 RawOrigin::Root.into(),
1943 ChainLimits {
1944 collection_numbers_limit: 10,
1945 account_token_ownership_limit: 10,
1946 collections_admins_limit: 2,
1947 custom_data_limit: 2048,
1948 nft_sponsor_transfer_timeout: 15,
1949 fungible_sponsor_transfer_timeout: 15,
1950 refungible_sponsor_transfer_timeout: 15,
1951 const_on_chain_schema_limit: 1024,
1952 offchain_schema_limit: 1024,
1953 variable_on_chain_schema_limit: 1024,
1954 }
1955 ));
1956
1957 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1801 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
19581802
1959 let origin1 = Origin::signed(1);1803 let origin1 = Origin::signed(1);
1975#[test]1819#[test]
1976fn collection_admins_bound_neg() {1820fn collection_admins_bound_neg() {
1977 new_test_ext().execute_with(|| {1821 new_test_ext().execute_with(|| {
1978 assert_ok!(TemplateModule::set_chain_limits(
1979 RawOrigin::Root.into(),
1980 ChainLimits {
1981 collection_numbers_limit: 10,
1982 account_token_ownership_limit: 1,
1983 collections_admins_limit: 1,
1984 custom_data_limit: 2048,
1985 nft_sponsor_transfer_timeout: 15,
1986 fungible_sponsor_transfer_timeout: 15,
1987 refungible_sponsor_transfer_timeout: 15,
1988 const_on_chain_schema_limit: 1024,
1989 offchain_schema_limit: 1024,
1990 variable_on_chain_schema_limit: 1024,
1991 }
1992 ));
1993
1994 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1822 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
19951823
1996 let origin1 = Origin::signed(1);1824 let origin1 = Origin::signed(1);
19971825
1998 assert_ok!(TemplateModule::add_collection_admin(1826 for i in 0..COLLECTION_ADMINS_LIMIT {
1827 assert_ok!(TemplateModule::add_collection_admin(
1999 origin1.clone(),1828 origin1.clone(),
2000 collection_id,1829 collection_id,
2001 account(2)1830 account(2 + i)
2002 ));1831 ));
1832 }
2003 assert_noop!(1833 assert_noop!(
2004 TemplateModule::add_collection_admin(origin1, collection_id, account(3)),1834 TemplateModule::add_collection_admin(
1835 origin1,
1836 collection_id,
1837 account(3 + COLLECTION_ADMINS_LIMIT)
1838 ),
2005 Error::<Test>::CollectionAdminsLimitExceeded1839 Error::<Test>::CollectionAdminsLimitExceeded
2006 );1840 );
2007 });1841 });
2008}1842}
2009
2010// NFT custom data size. Negative test const_data.
2011#[test]
2012fn custom_data_size_nft_const_data_bound_neg() {
2013 new_test_ext().execute_with(|| {
2014 assert_ok!(TemplateModule::set_chain_limits(
2015 RawOrigin::Root.into(),
2016 ChainLimits {
2017 collection_numbers_limit: 10,
2018 account_token_ownership_limit: 10,
2019 collections_admins_limit: 5,
2020 custom_data_limit: 2,
2021 nft_sponsor_transfer_timeout: 15,
2022 fungible_sponsor_transfer_timeout: 15,
2023 refungible_sponsor_transfer_timeout: 15,
2024 const_on_chain_schema_limit: 1024,
2025 offchain_schema_limit: 1024,
2026 variable_on_chain_schema_limit: 1024,
2027 }
2028 ));
2029
2030 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
2031
2032 let origin1 = Origin::signed(1);
2033 let too_big_const_data = CreateItemData::NFT(CreateNftData {
2034 const_data: vec![1, 2, 3, 4],
2035 variable_data: vec![],
2036 });
2037
2038 assert_noop!(
2039 TemplateModule::create_item(origin1, collection_id, account(1), too_big_const_data),
2040 Error::<Test>::TokenConstDataLimitExceeded
2041 );
2042 });
2043}
2044
2045// NFT custom data size. Negative test variable_data.
2046#[test]
2047fn custom_data_size_nft_variable_data_bound_neg() {
2048 new_test_ext().execute_with(|| {
2049 assert_ok!(TemplateModule::set_chain_limits(
2050 RawOrigin::Root.into(),
2051 ChainLimits {
2052 collection_numbers_limit: 10,
2053 account_token_ownership_limit: 10,
2054 collections_admins_limit: 5,
2055 custom_data_limit: 2,
2056 nft_sponsor_transfer_timeout: 15,
2057 fungible_sponsor_transfer_timeout: 15,
2058 refungible_sponsor_transfer_timeout: 15,
2059 const_on_chain_schema_limit: 1024,
2060 offchain_schema_limit: 1024,
2061 variable_on_chain_schema_limit: 1024,
2062 }
2063 ));
2064
2065 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
2066
2067 let origin1 = Origin::signed(1);
2068 let too_big_const_data = CreateItemData::NFT(CreateNftData {
2069 const_data: vec![],
2070 variable_data: vec![1, 2, 3, 4],
2071 });
2072
2073 assert_noop!(
2074 TemplateModule::create_item(origin1, collection_id, account(1), too_big_const_data),
2075 Error::<Test>::TokenVariableDataLimitExceeded
2076 );
2077 });
2078}
2079
2080// Re fungible custom data size. Negative test const_data.
2081#[test]
2082fn custom_data_size_re_fungible_const_data_bound_neg() {
2083 new_test_ext().execute_with(|| {
2084 assert_ok!(TemplateModule::set_chain_limits(
2085 RawOrigin::Root.into(),
2086 ChainLimits {
2087 collection_numbers_limit: 10,
2088 account_token_ownership_limit: 10,
2089 collections_admins_limit: 5,
2090 custom_data_limit: 2,
2091 nft_sponsor_transfer_timeout: 15,
2092 fungible_sponsor_transfer_timeout: 15,
2093 refungible_sponsor_transfer_timeout: 15,
2094 const_on_chain_schema_limit: 1024,
2095 offchain_schema_limit: 1024,
2096 variable_on_chain_schema_limit: 1024,
2097 }
2098 ));
2099
2100 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
2101
2102 let origin1 = Origin::signed(1);
2103 let too_big_const_data = CreateItemData::NFT(CreateNftData {
2104 const_data: vec![1, 2, 3, 4],
2105 variable_data: vec![],
2106 });
2107
2108 assert_noop!(
2109 TemplateModule::create_item(origin1, collection_id, account(1), too_big_const_data),
2110 Error::<Test>::TokenConstDataLimitExceeded
2111 );
2112 });
2113}
2114
2115// Re fungible custom data size. Negative test variable_data.
2116#[test]
2117fn custom_data_size_re_fungible_variable_data_bound_neg() {
2118 new_test_ext().execute_with(|| {
2119 assert_ok!(TemplateModule::set_chain_limits(
2120 RawOrigin::Root.into(),
2121 ChainLimits {
2122 collection_numbers_limit: 10,
2123 account_token_ownership_limit: 10,
2124 collections_admins_limit: 5,
2125 custom_data_limit: 2,
2126 nft_sponsor_transfer_timeout: 15,
2127 fungible_sponsor_transfer_timeout: 15,
2128 refungible_sponsor_transfer_timeout: 15,
2129 const_on_chain_schema_limit: 1024,
2130 offchain_schema_limit: 1024,
2131 variable_on_chain_schema_limit: 1024,
2132 }
2133 ));
2134
2135 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
2136
2137 let origin1 = Origin::signed(1);
2138 let too_big_const_data = CreateItemData::NFT(CreateNftData {
2139 const_data: vec![],
2140 variable_data: vec![1, 2, 3, 4],
2141 });
2142
2143 assert_noop!(
2144 TemplateModule::create_item(origin1, collection_id, account(1), too_big_const_data),
2145 Error::<Test>::TokenVariableDataLimitExceeded
2146 );
2147 });
2148}
2149// #endregion1843// #endregion
21501844
2151#[test]1845#[test]
2152fn set_const_on_chain_schema() {1846fn set_const_on_chain_schema() {
2153 new_test_ext().execute_with(|| {1847 new_test_ext().execute_with(|| {
2154 default_limits();
2155
2156 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1848 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
21571849
2158 let origin1 = Origin::signed(1);1850 let origin1 = Origin::signed(1);
2180#[test]1872#[test]
2181fn set_variable_on_chain_schema() {1873fn set_variable_on_chain_schema() {
2182 new_test_ext().execute_with(|| {1874 new_test_ext().execute_with(|| {
2183 default_limits();
2184
2185 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1875 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
21861876
2187 let origin1 = Origin::signed(1);1877 let origin1 = Origin::signed(1);
2209#[test]1899#[test]
2210fn set_variable_meta_data_on_nft_token_stores_variable_meta_data() {1900fn set_variable_meta_data_on_nft_token_stores_variable_meta_data() {
2211 new_test_ext().execute_with(|| {1901 new_test_ext().execute_with(|| {
2212 default_limits();
2213
2214 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1902 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
22151903
2216 let origin1 = Origin::signed(1);1904 let origin1 = Origin::signed(1);
22171905
2218 let data = default_nft_data();1906 let data = default_nft_data();
2219 create_test_item(1, &data.into());1907 create_test_item(1, &data.into());
22201908
2221 let variable_data = b"test set_variable_meta_data method.".to_vec();1909 let variable_data = b"test data".to_vec();
2222 assert_ok!(TemplateModule::set_variable_meta_data(1910 assert_ok!(TemplateModule::set_variable_meta_data(
2223 origin1,1911 origin1,
2224 collection_id,1912 collection_id,
2238#[test]1926#[test]
2239fn set_variable_meta_data_on_re_fungible_token_stores_variable_meta_data() {1927fn set_variable_meta_data_on_re_fungible_token_stores_variable_meta_data() {
2240 new_test_ext().execute_with(|| {1928 new_test_ext().execute_with(|| {
2241 default_limits();
2242
2243 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);1929 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);
22441930
2245 let origin1 = Origin::signed(1);1931 let origin1 = Origin::signed(1);
22461932
2247 let data = default_re_fungible_data();1933 let data = default_re_fungible_data();
2248 create_test_item(1, &data.into());1934 create_test_item(1, &data.into());
22491935
2250 let variable_data = b"test set_variable_meta_data method.".to_vec();1936 let variable_data = b"test data".to_vec();
2251 assert_ok!(TemplateModule::set_variable_meta_data(1937 assert_ok!(TemplateModule::set_variable_meta_data(
2252 origin1,1938 origin1,
2253 collection_id,1939 collection_id,
2267#[test]1953#[test]
2268fn set_variable_meta_data_on_fungible_token_fails() {1954fn set_variable_meta_data_on_fungible_token_fails() {
2269 new_test_ext().execute_with(|| {1955 new_test_ext().execute_with(|| {
2270 default_limits();
2271
2272 let collection_id = create_test_collection(&CollectionMode::Fungible(3), 1);1956 let collection_id = create_test_collection(&CollectionMode::Fungible(3), 1);
22731957
2274 let origin1 = Origin::signed(1);1958 let origin1 = Origin::signed(1);
22751959
2276 let data = default_fungible_data();1960 let data = default_fungible_data();
2277 create_test_item(1, &data.into());1961 create_test_item(1, &data.into());
22781962
2279 let variable_data = b"test set_variable_meta_data method.".to_vec();1963 let variable_data = b"test data".to_vec();
2280 assert_noop!(1964 assert_noop!(
2281 TemplateModule::set_variable_meta_data(origin1, collection_id, 1, variable_data),1965 TemplateModule::set_variable_meta_data(origin1, collection_id, 1, variable_data),
2282 Error::<Test>::CantStoreMetadataInFungibleTokens1966 Error::<Test>::CantStoreMetadataInFungibleTokens
2287#[test]1971#[test]
2288fn set_variable_meta_data_on_nft_token_fails_for_big_data() {1972fn set_variable_meta_data_on_nft_token_fails_for_big_data() {
2289 new_test_ext().execute_with(|| {1973 new_test_ext().execute_with(|| {
2290 assert_ok!(TemplateModule::set_chain_limits(
2291 RawOrigin::Root.into(),
2292 ChainLimits {
2293 collection_numbers_limit: default_collection_numbers_limit(),
2294 account_token_ownership_limit: 10,
2295 collections_admins_limit: 5,
2296 custom_data_limit: 10,
2297 nft_sponsor_transfer_timeout: 15,
2298 fungible_sponsor_transfer_timeout: 15,
2299 refungible_sponsor_transfer_timeout: 15,
2300 const_on_chain_schema_limit: 1024,
2301 offchain_schema_limit: 1024,
2302 variable_on_chain_schema_limit: 1024,
2303 }
2304 ));
2305
2306 let collection_id = create_test_collection(&CollectionMode::NFT, 1);1974 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
23071975
2308 let origin1 = Origin::signed(1);1976 let origin1 = Origin::signed(1);
2321#[test]1989#[test]
2322fn set_variable_meta_data_on_re_fungible_token_fails_for_big_data() {1990fn set_variable_meta_data_on_re_fungible_token_fails_for_big_data() {
2323 new_test_ext().execute_with(|| {1991 new_test_ext().execute_with(|| {
2324 assert_ok!(TemplateModule::set_chain_limits(
2325 RawOrigin::Root.into(),
2326 ChainLimits {
2327 collection_numbers_limit: default_collection_numbers_limit(),
2328 account_token_ownership_limit: 10,
2329 collections_admins_limit: 5,
2330 custom_data_limit: 10,
2331 nft_sponsor_transfer_timeout: 15,
2332 fungible_sponsor_transfer_timeout: 15,
2333 refungible_sponsor_transfer_timeout: 15,
2334 const_on_chain_schema_limit: 1024,
2335 offchain_schema_limit: 1024,
2336 variable_on_chain_schema_limit: 1024,
2337 }
2338 ));
2339
2340 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);1992 let collection_id = create_test_collection(&CollectionMode::ReFungible, 1);
23411993
2342 let origin1 = Origin::signed(1);1994 let origin1 = Origin::signed(1);
2427 ),2079 ),
2428 Error::<Test>::NoPermission2080 Error::<Test>::NoPermission
2429 );2081 );
2082
2083#[test]
2084fn collection_transfer_flag_works() {
2085 new_test_ext().execute_with(|| {
2086 let origin1 = Origin::signed(1);
2087
2088 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
2089 assert_ok!(TemplateModule::set_transfers_enabled_flag(origin1, 1, true));
2090
2091 let data = default_nft_data();
2092 create_test_item(collection_id, &data.into());
2093 assert_eq!(TemplateModule::balance_count(1, 1), 1);
2094 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);
2095
2096 let origin1 = Origin::signed(1);
2097
2098 // default scenario
2099 assert_ok!(TemplateModule::transfer(origin1, account(2), 1, 1, 1000));
2100 assert_eq!(TemplateModule::nft_item_id(1, 1).unwrap().owner, account(2));
2101 assert_eq!(TemplateModule::balance_count(1, 1), 0);
2102 assert_eq!(TemplateModule::balance_count(1, 2), 1);
2103
2104 assert_eq!(TemplateModule::address_tokens(1, 2), [1]);
2430 });2105 });
2431}2106}
24322107
2578 ),2253 ),
2579 Error::<Test>::MetadataUpdateDenied2254 Error::<Test>::MetadataUpdateDenied
2580 );2255 );
2256
2257#[test]
2258fn collection_transfer_flag_works_neg() {
2259 new_test_ext().execute_with(|| {
2260 let origin1 = Origin::signed(1);
2261
2262 let collection_id = create_test_collection(&CollectionMode::NFT, 1);
2263 assert_ok!(TemplateModule::set_transfers_enabled_flag(
2264 origin1, 1, false
2265 ));
2266
2267 let data = default_nft_data();
2268 create_test_item(collection_id, &data.into());
2269 assert_eq!(TemplateModule::balance_count(1, 1), 1);
2270 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);
2271
2272 let origin1 = Origin::signed(1);
2273
2274 // default scenario
2275 assert_noop!(
2276 TemplateModule::transfer(origin1, account(2), 1, 1, 1000),
2277 Error::<Test>::TransferNotAllowed
2278 );
2279 assert_eq!(TemplateModule::nft_item_id(1, 1).unwrap().owner, account(1));
2280 assert_eq!(TemplateModule::balance_count(1, 1), 1);
2281 assert_eq!(TemplateModule::balance_count(1, 2), 0);
2282
2283 assert_eq!(TemplateModule::address_tokens(1, 1), [1]);
2581 });2284 });
2582}2285}
25832286
addedpallets/nft/src/weights.rsdiffbeforeafterboth

no changes

modifiedpallets/scheduler/Cargo.tomldiffbeforeafterboth
12[dependencies]12[dependencies]
13serde = { version = "1.0.119", default-features = false }13serde = { version = "1.0.119", default-features = false }
14codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false }14codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false }
15frame-support = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }15frame-support = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
16frame-system = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }16frame-system = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
17sp-runtime = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }17sp-runtime = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
18sp-std = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }18sp-std = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
19sp-io = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }19sp-io = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
20frame-benchmarking = { default-features = false, version = '3.0.0', optional = true, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }20frame-benchmarking = { default-features = false, version = '3.0.0', optional = true, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
2121
22up-sponsorship = { default-features = false, path = "../../primitives/sponsorship", version = "0.1.0" }22up-sponsorship = { default-features = false, path = "../../primitives/sponsorship", version = "0.1.0" }
23log = { version = "0.4.14", default-features = false }23log = { version = "0.4.14", default-features = false }
2424
25[dev-dependencies]25[dev-dependencies]
26sp-core = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }26sp-core = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
27substrate-test-utils = { version = "3.0.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }27substrate-test-utils = { version = "3.0.0", git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
2828
29[features]29[features]
30default = ["std"]30default = ["std"]
modifiedprimitives/nft/Cargo.tomldiffbeforeafterboth
9version = '0.9.0'9version = '0.9.0'
1010
11[dependencies]11[dependencies]
12codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false, features = ['derive'] }12codec = { package = "parity-scale-codec", version = "2.2.0", default-features = false, features = ['derive'] }
13serde = { version = "1.0.119", features = ['derive'], default-features = false }13serde = { version = "1.0.119", features = ['derive'], default-features = false, optional = true }
14max-encoded-len = { default-features = false, features = ['derive'], version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
14frame-support = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }15frame-support = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
15frame-system = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }16frame-system = { default-features = false, version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
16sp-core = { version = "3.0.0", default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }17sp-core = { version = "3.0.0", default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
18sp-std = { version = "3.0.0", default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
17sp-runtime = { version = "3.0.0", default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.7' }19sp-runtime = { version = "3.0.0", default-features = false, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
20derivative = "2.2.0"
1821
19[features]22[features]
20default = ["std"]23default = ["std"]
21std = [24std = [
25 "serde1",
22 "serde/std",26 "serde/std",
23 "codec/std",27 "codec/std",
28 "max-encoded-len/std",
24 "frame-system/std",29 "frame-system/std",
25 "frame-support/std",30 "frame-support/std",
26 "sp-runtime/std",31 "sp-runtime/std",
27 "sp-core/std",32 "sp-core/std",
33 "sp-std/std",
28]34]
35serde1 = ["serde"]
36limit-testing = []
modifiedprimitives/nft/src/lib.rsdiffbeforeafterboth
1#![cfg_attr(not(feature = "std"), no_std)]1#![cfg_attr(not(feature = "std"), no_std)]
22
3#[cfg(feature = "serde")]
3pub use serde::{Serialize, Deserialize};4pub use serde::{Serialize, Deserialize};
45
5use sp_runtime::sp_std::prelude::Vec;6use sp_runtime::sp_std::prelude::Vec;
6use codec::{Decode, Encode};7use codec::{Decode, Encode};
8use max_encoded_len::MaxEncodedLen;
7pub use frame_support::{9pub use frame_support::{
8 construct_runtime, decl_event, decl_module, decl_storage, decl_error,10 BoundedVec, construct_runtime, decl_event, decl_module, decl_storage, decl_error,
9 dispatch::DispatchResult,11 dispatch::DispatchResult,
10 ensure, fail, parameter_types,12 ensure, fail, parameter_types,
11 traits::{13 traits::{
19 },21 },
20 StorageValue, transactional,22 StorageValue, transactional,
21};23};
24use derivative::Derivative;
2225
23pub const MAX_DECIMAL_POINTS: DecimalPoints = 30;26pub const MAX_DECIMAL_POINTS: DecimalPoints = 30;
24pub const MAX_REFUNGIBLE_PIECES: u128 = 1_000_000_000_000_000_000_000;27pub const MAX_REFUNGIBLE_PIECES: u128 = 1_000_000_000_000_000_000_000;
25pub const MAX_SPONSOR_TIMEOUT: u32 = 10_368_000;28pub const MAX_SPONSOR_TIMEOUT: u32 = 10_368_000;
26pub const MAX_TOKEN_OWNERSHIP: u32 = 10_000_000;29pub const MAX_TOKEN_OWNERSHIP: u32 = 10_000_000;
30
31pub const COLLECTION_NUMBER_LIMIT: u32 = if cfg!(not(feature = "limit-testing")) {
32 100000
33} else {
34 10
35};
36pub const CUSTOM_DATA_LIMIT: u32 = if cfg!(not(feature = "limit-testing")) {
37 2048
38} else {
39 10
40};
41pub const COLLECTION_ADMINS_LIMIT: u64 = 5;
42pub const ACCOUNT_TOKEN_OWNERSHIP_LIMIT: u32 = if cfg!(not(feature = "limit-testing")) {
43 1000000
44} else {
45 10
46};
47
48// Timeouts for item types in passed blocks
49pub const NFT_SPONSOR_TRANSFER_TIMEOUT: u32 = 5;
50pub const FUNGIBLE_SPONSOR_TRANSFER_TIMEOUT: u32 = 5;
51pub const REFUNGIBLE_SPONSOR_TRANSFER_TIMEOUT: u32 = 5;
52
53// Schema limits
54pub const OFFCHAIN_SCHEMA_LIMIT: u32 = 1024;
55pub const VARIABLE_ON_CHAIN_SCHEMA_LIMIT: u32 = 1024;
56pub const CONST_ON_CHAIN_SCHEMA_LIMIT: u32 = 1024;
57
58pub const MAX_COLLECTION_NAME_LENGTH: usize = 64;
59pub const MAX_COLLECTION_DESCRIPTION_LENGTH: usize = 256;
60pub const MAX_TOKEN_PREFIX_LENGTH: usize = 16;
61
62/// How much items can be created per single
63/// create_many call
64pub const MAX_ITEMS_PER_BATCH: u32 = 200;
65
66parameter_types! {
67 pub const CustomDataLimit: u32 = CUSTOM_DATA_LIMIT;
68}
2769
28pub type CollectionId = u32;70pub type CollectionId = u32;
29pub type TokenId = u32;71pub type TokenId = u32;
30pub type DecimalPoints = u8;72pub type DecimalPoints = u8;
3173
32#[derive(Encode, Decode, Eq, Debug, Clone, PartialEq)]74#[derive(Encode, Decode, Eq, Debug, Clone, PartialEq)]
33#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]75#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))]
34pub enum CollectionMode {76pub enum CollectionMode {
35 Invalid,77 Invalid,
36 NFT,78 NFT,
61}103}
62104
63#[derive(Encode, Decode, Eq, Debug, Clone, PartialEq)]105#[derive(Encode, Decode, Eq, Debug, Clone, PartialEq)]
64#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]106#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))]
65pub enum AccessMode {107pub enum AccessMode {
66 Normal,108 Normal,
67 WhiteList,109 WhiteList,
73}115}
74116
75#[derive(Encode, Decode, Eq, Debug, Clone, PartialEq)]117#[derive(Encode, Decode, Eq, Debug, Clone, PartialEq)]
76#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]118#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))]
77pub enum SchemaVersion {119pub enum SchemaVersion {
78 ImageURL,120 ImageURL,
79 Unique,121 Unique,
85}127}
86128
87#[derive(Encode, Decode, Default, Debug, Clone, PartialEq)]129#[derive(Encode, Decode, Default, Debug, Clone, PartialEq)]
88#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]130#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))]
89pub struct Ownership<AccountId> {131pub struct Ownership<AccountId> {
90 pub owner: AccountId,132 pub owner: AccountId,
91 pub fraction: u128,133 pub fraction: u128,
92}134}
93135
94#[derive(Encode, Decode, Debug, Clone, PartialEq)]136#[derive(Encode, Decode, Debug, Clone, PartialEq)]
95#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]137#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))]
96pub enum SponsorshipState<AccountId> {138pub enum SponsorshipState<AccountId> {
97 /// The fees are applied to the transaction sender139 /// The fees are applied to the transaction sender
98 Disabled,140 Disabled,
128}170}
129171
130#[derive(Encode, Decode, Clone, PartialEq)]172#[derive(Encode, Decode, Clone, PartialEq)]
131#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]173#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))]
132pub struct Collection<T: frame_system::Config> {174pub struct Collection<T: frame_system::Config> {
133 pub owner: T::AccountId,175 pub owner: T::AccountId,
134 pub mode: CollectionMode,176 pub mode: CollectionMode,
145 pub variable_on_chain_schema: Vec<u8>, //187 pub variable_on_chain_schema: Vec<u8>, //
146 pub const_on_chain_schema: Vec<u8>, //188 pub const_on_chain_schema: Vec<u8>, //
147 pub meta_update_permission: MetaUpdatePermission,189 pub meta_update_permission: MetaUpdatePermission,
190 pub transfers_enabled: bool,
148}191}
149192
150#[derive(Encode, Decode, Debug, Clone, PartialEq)]193#[derive(Encode, Decode, Debug, Clone, PartialEq)]
151#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]194#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))]
152pub struct NftItemType<AccountId> {195pub struct NftItemType<AccountId> {
153 pub owner: AccountId,196 pub owner: AccountId,
154 pub const_data: Vec<u8>,197 pub const_data: Vec<u8>,
155 pub variable_data: Vec<u8>,198 pub variable_data: Vec<u8>,
156}199}
157200
158#[derive(Encode, Decode, Default, Debug, Clone, PartialEq)]201#[derive(Encode, Decode, Default, Debug, Clone, PartialEq)]
159#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]202#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))]
160pub struct FungibleItemType {203pub struct FungibleItemType {
161 pub value: u128,204 pub value: u128,
162}205}
163206
164#[derive(Encode, Decode, Debug, Clone, PartialEq)]207#[derive(Encode, Decode, Debug, Clone, PartialEq)]
165#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]208#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))]
166pub struct ReFungibleItemType<AccountId> {209pub struct ReFungibleItemType<AccountId> {
167 pub owner: Vec<Ownership<AccountId>>,210 pub owner: Vec<Ownership<AccountId>>,
168 pub const_data: Vec<u8>,211 pub const_data: Vec<u8>,
169 pub variable_data: Vec<u8>,212 pub variable_data: Vec<u8>,
170}213}
171214
172#[derive(Encode, Decode, Debug, Clone, PartialEq)]215#[derive(Encode, Decode, Debug, Clone, PartialEq)]
173#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]216#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))]
174pub struct CollectionLimits<BlockNumber: Encode + Decode> {217pub struct CollectionLimits<BlockNumber: Encode + Decode> {
175 pub account_token_ownership_limit: u32,218 pub account_token_ownership_limit: u32,
176 pub sponsored_data_size: u32,219 pub sponsored_data_size: u32,
200 }243 }
201}244}
202245
203#[derive(Encode, Decode, Default, Debug, Clone, PartialEq)]246/// BoundedVec doesn't supports serde
204#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]247#[cfg(feature = "serde1")]
205pub struct ChainLimits {248mod bounded_serde {
249 use core::convert::TryFrom;
206 pub collection_numbers_limit: u32,250 use frame_support::{BoundedVec, traits::Get};
251 use serde::{
252 ser::{self, Serialize},
253 de::{self, Deserialize, Error},
254 };
255 use sp_std::vec::Vec;
256
207 pub account_token_ownership_limit: u32,257 pub fn serialize<D, V, S>(value: &BoundedVec<V, S>, serializer: D) -> Result<D::Ok, D::Error>
208 pub collections_admins_limit: u64,258 where
209 pub custom_data_limit: u32,259 D: ser::Serializer,
210
211 // Timeouts for item types in passed blocks
212 pub nft_sponsor_transfer_timeout: u32,260 V: Serialize,
261 {
213 pub fungible_sponsor_transfer_timeout: u32,262 let vec: &Vec<_> = &value;
263 vec.serialize(serializer)
264 }
265
214 pub refungible_sponsor_transfer_timeout: u32,266 pub fn deserialize<'de, D, V, S>(deserializer: D) -> Result<BoundedVec<V, S>, D::Error>
215267 where
216 // Schema limits
217 pub offchain_schema_limit: u32,268 D: de::Deserializer<'de>,
218 pub variable_on_chain_schema_limit: u32,269 V: de::Deserialize<'de>,
219 pub const_on_chain_schema_limit: u32,270 S: Get<u32>,
271 {
272 // TODO: Implement custom visitor, which will limit vec size at parse time? Will serde only be used by chainspec?
273 let vec = <Vec<V>>::deserialize(deserializer)?;
274 let len = vec.len();
275 TryFrom::try_from(vec).map_err(|_| D::Error::invalid_length(len, &"lesser size"))
276 }
220}277}
221278
222#[derive(Encode, Decode, Default, Debug, Clone, PartialEq)]279#[derive(Encode, Decode, MaxEncodedLen, Default, PartialEq, Clone, Derivative)]
223#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]280#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))]
281#[derivative(Debug)]
224pub struct CreateNftData {282pub struct CreateNftData {
283 #[cfg_attr(feature = "serde1", serde(with = "bounded_serde"))]
284 #[derivative(Debug = "ignore")]
225 pub const_data: Vec<u8>,285 pub const_data: BoundedVec<u8, CustomDataLimit>,
286 #[cfg_attr(feature = "serde1", serde(with = "bounded_serde"))]
287 #[derivative(Debug = "ignore")]
226 pub variable_data: Vec<u8>,288 pub variable_data: BoundedVec<u8, CustomDataLimit>,
227}289}
228290
229#[derive(Encode, Decode, Default, Debug, Clone, PartialEq)]291#[derive(Encode, Decode, MaxEncodedLen, Default, Debug, Clone, PartialEq)]
230#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]292#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))]
231pub struct CreateFungibleData {293pub struct CreateFungibleData {
232 pub value: u128,294 pub value: u128,
233}295}
234296
235#[derive(Encode, Decode, Default, Debug, Clone, PartialEq)]297#[derive(Encode, Decode, MaxEncodedLen, Default, PartialEq, Clone, Derivative)]
236#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]298#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))]
299#[derivative(Debug)]
237pub struct CreateReFungibleData {300pub struct CreateReFungibleData {
301 #[cfg_attr(feature = "serde1", serde(with = "bounded_serde"))]
302 #[derivative(Debug = "ignore")]
238 pub const_data: Vec<u8>,303 pub const_data: BoundedVec<u8, CustomDataLimit>,
304 #[cfg_attr(feature = "serde1", serde(with = "bounded_serde"))]
305 #[derivative(Debug = "ignore")]
239 pub variable_data: Vec<u8>,306 pub variable_data: BoundedVec<u8, CustomDataLimit>,
240 pub pieces: u128,307 pub pieces: u128,
241}308}
242309
254 }321 }
255}322}
256323
257#[derive(Encode, Decode, Debug, Clone, PartialEq)]324#[derive(Encode, Decode, MaxEncodedLen, PartialEq, Clone, Debug)]
258#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]325#[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))]
259pub enum CreateItemData {326pub enum CreateItemData {
260 NFT(CreateNftData),327 NFT(CreateNftData),
261 Fungible(CreateFungibleData),328 Fungible(CreateFungibleData),
modifiedruntime/Cargo.tomldiffbeforeafterboth
23 'frame-support/runtime-benchmarks',23 'frame-support/runtime-benchmarks',
24 'frame-system-benchmarking',24 'frame-system-benchmarking',
25 'frame-system/runtime-benchmarks',25 'frame-system/runtime-benchmarks',
26 'pallet-evm-migration/runtime-benchmarks',
26 'pallet-balances/runtime-benchmarks',27 'pallet-balances/runtime-benchmarks',
27 'pallet-timestamp/runtime-benchmarks',28 'pallet-timestamp/runtime-benchmarks',
28 'pallet-nft/runtime-benchmarks',29 'pallet-nft/runtime-benchmarks',
29 'pallet-inflation/runtime-benchmarks',30 'pallet-inflation/runtime-benchmarks',
31 'pallet-xcm/runtime-benchmarks',
30 'sp-runtime/runtime-benchmarks',32 'sp-runtime/runtime-benchmarks',
33 'xcm-builder/runtime-benchmarks',
31]34]
32std = [35std = [
33 'codec/std',36 'codec/std',
37 'max-encoded-len/std',
34 'cumulus-pallet-aura-ext/std',38 'cumulus-pallet-aura-ext/std',
35 'cumulus-pallet-parachain-system/std',39 'cumulus-pallet-parachain-system/std',
36 'cumulus-pallet-xcm/std',40 'cumulus-pallet-xcm/std',
55 'pallet-treasury/std',59 'pallet-treasury/std',
56 'pallet-vesting/std',60 'pallet-vesting/std',
57 'pallet-evm/std',61 'pallet-evm/std',
62 'pallet-evm-migration/std',
63 'pallet-evm-contract-helpers/std',
64 'pallet-evm-transaction-payment/std',
65 'pallet-evm-coder-substrate/std',
58 'pallet-ethereum/std',66 'pallet-ethereum/std',
59 'fp-rpc/std',67 'fp-rpc/std',
60 'parachain-info/std',68 'parachain-info/std',
81 'xcm-builder/std',89 'xcm-builder/std',
82 'xcm-executor/std',90 'xcm-executor/std',
83]91]
92limit-testing = [
93 'pallet-nft/limit-testing',
94 'nft-data-structs/limit-testing',
95]
8496
85################################################################################97################################################################################
86# Substrate Dependencies98# Substrate Dependencies
95default-features = false107default-features = false
96git = 'https://github.com/paritytech/substrate.git'108git = 'https://github.com/paritytech/substrate.git'
97optional = true109optional = true
98branch = 'polkadot-v0.9.7'110branch = 'polkadot-v0.9.8'
99version = '3.0.0'111version = '3.0.0'
100112
101[dependencies.frame-executive]113[dependencies.frame-executive]
102default-features = false114default-features = false
103git = 'https://github.com/paritytech/substrate.git'115git = 'https://github.com/paritytech/substrate.git'
104branch = 'polkadot-v0.9.7'116branch = 'polkadot-v0.9.8'
105version = '3.0.0'117version = '3.0.0'
106118
107[dependencies.frame-support]119[dependencies.frame-support]
108default-features = false120default-features = false
109git = 'https://github.com/paritytech/substrate.git'121git = 'https://github.com/paritytech/substrate.git'
110branch = 'polkadot-v0.9.7'122branch = 'polkadot-v0.9.8'
111version = '3.0.0'123version = '3.0.0'
112124
113[dependencies.frame-system]125[dependencies.frame-system]
114default-features = false126default-features = false
115git = 'https://github.com/paritytech/substrate.git'127git = 'https://github.com/paritytech/substrate.git'
116branch = 'polkadot-v0.9.7'128branch = 'polkadot-v0.9.8'
117version = '3.0.0'129version = '3.0.0'
118130
119[dependencies.frame-system-benchmarking]131[dependencies.frame-system-benchmarking]
120default-features = false132default-features = false
121git = 'https://github.com/paritytech/substrate.git'133git = 'https://github.com/paritytech/substrate.git'
122optional = true134optional = true
123branch = 'polkadot-v0.9.7'135branch = 'polkadot-v0.9.8'
124version = '3.0.0'136version = '3.0.0'
125137
126[dependencies.frame-system-rpc-runtime-api]138[dependencies.frame-system-rpc-runtime-api]
127default-features = false139default-features = false
128git = 'https://github.com/paritytech/substrate.git'140git = 'https://github.com/paritytech/substrate.git'
129branch = 'polkadot-v0.9.7'141branch = 'polkadot-v0.9.8'
130version = '3.0.0'142version = '3.0.0'
131143
132[dependencies.hex-literal]144[dependencies.hex-literal]
142[dependencies.pallet-aura]154[dependencies.pallet-aura]
143default-features = false155default-features = false
144git = 'https://github.com/paritytech/substrate.git'156git = 'https://github.com/paritytech/substrate.git'
145branch = 'polkadot-v0.9.7'157branch = 'polkadot-v0.9.8'
146version = '3.0.0'158version = '3.0.0'
147159
148[dependencies.pallet-balances]160[dependencies.pallet-balances]
149default-features = false161default-features = false
150git = 'https://github.com/paritytech/substrate.git'162git = 'https://github.com/paritytech/substrate.git'
151branch = 'polkadot-v0.9.7'163branch = 'polkadot-v0.9.8'
152version = '3.0.0'164version = '3.0.0'
153165
154# Contracts specific packages166# Contracts specific packages
155# [dependencies.pallet-contracts]167# [dependencies.pallet-contracts]
156# git = 'https://github.com/paritytech/substrate.git'168# git = 'https://github.com/paritytech/substrate.git'
157# default-features = false169# default-features = false
158# branch = 'polkadot-v0.9.7'170# branch = 'polkadot-v0.9.8'
159# version = '3.0.0'171# version = '3.0.0'
160172
161# [dependencies.pallet-contracts-primitives]173# [dependencies.pallet-contracts-primitives]
162# git = 'https://github.com/paritytech/substrate.git'174# git = 'https://github.com/paritytech/substrate.git'
163# default-features = false175# default-features = false
164# branch = 'polkadot-v0.9.7'176# branch = 'polkadot-v0.9.8'
165# version = '3.0.0'177# version = '3.0.0'
166178
167# [dependencies.pallet-contracts-rpc-runtime-api]179# [dependencies.pallet-contracts-rpc-runtime-api]
168# git = 'https://github.com/paritytech/substrate.git'180# git = 'https://github.com/paritytech/substrate.git'
169# default-features = false181# default-features = false
170# branch = 'polkadot-v0.9.7'182# branch = 'polkadot-v0.9.8'
171# version = '3.0.0'183# version = '3.0.0'
172184
173[dependencies.pallet-randomness-collective-flip]185[dependencies.pallet-randomness-collective-flip]
174default-features = false186default-features = false
175git = 'https://github.com/paritytech/substrate.git'187git = 'https://github.com/paritytech/substrate.git'
176branch = 'polkadot-v0.9.7'188branch = 'polkadot-v0.9.8'
177version = '3.0.0'189version = '3.0.0'
178190
179[dependencies.pallet-sudo]191[dependencies.pallet-sudo]
180default-features = false192default-features = false
181git = 'https://github.com/paritytech/substrate.git'193git = 'https://github.com/paritytech/substrate.git'
182branch = 'polkadot-v0.9.7'194branch = 'polkadot-v0.9.8'
183version = '3.0.0'195version = '3.0.0'
184196
185[dependencies.pallet-timestamp]197[dependencies.pallet-timestamp]
186default-features = false198default-features = false
187git = 'https://github.com/paritytech/substrate.git'199git = 'https://github.com/paritytech/substrate.git'
188branch = 'polkadot-v0.9.7'200branch = 'polkadot-v0.9.8'
189version = '3.0.0'201version = '3.0.0'
190202
191[dependencies.pallet-transaction-payment]203[dependencies.pallet-transaction-payment]
192default-features = false204default-features = false
193git = 'https://github.com/paritytech/substrate.git'205git = 'https://github.com/paritytech/substrate.git'
194branch = 'polkadot-v0.9.7'206branch = 'polkadot-v0.9.8'
195version = '3.0.0'207version = '3.0.0'
196208
197[dependencies.pallet-transaction-payment-rpc-runtime-api]209[dependencies.pallet-transaction-payment-rpc-runtime-api]
198default-features = false210default-features = false
199git = 'https://github.com/paritytech/substrate.git'211git = 'https://github.com/paritytech/substrate.git'
200branch = 'polkadot-v0.9.7'212branch = 'polkadot-v0.9.8'
201version = '3.0.0'213version = '3.0.0'
202214
203[dependencies.pallet-treasury]215[dependencies.pallet-treasury]
204default-features = false216default-features = false
205git = 'https://github.com/paritytech/substrate.git'217git = 'https://github.com/paritytech/substrate.git'
206branch = 'polkadot-v0.9.7'218branch = 'polkadot-v0.9.8'
207version = '3.0.0'219version = '3.0.0'
208220
209[dependencies.pallet-vesting]221[dependencies.pallet-vesting]
210default-features = false222default-features = false
211git = 'https://github.com/paritytech/substrate.git'223git = 'https://github.com/paritytech/substrate.git'
212branch = 'polkadot-v0.9.7'224branch = 'polkadot-v0.9.8'
213version = '3.0.0'225version = '3.0.0'
214226
215[dependencies.sp-arithmetic]227[dependencies.sp-arithmetic]
216default-features = false228default-features = false
217git = 'https://github.com/paritytech/substrate.git'229git = 'https://github.com/paritytech/substrate.git'
218branch = 'polkadot-v0.9.7'230branch = 'polkadot-v0.9.8'
219version = '3.0.0'231version = '3.0.0'
220232
221[dependencies.sp-api]233[dependencies.sp-api]
222default-features = false234default-features = false
223git = 'https://github.com/paritytech/substrate.git'235git = 'https://github.com/paritytech/substrate.git'
224branch = 'polkadot-v0.9.7'236branch = 'polkadot-v0.9.8'
225version = '3.0.0'237version = '3.0.0'
226238
227[dependencies.sp-block-builder]239[dependencies.sp-block-builder]
228default-features = false240default-features = false
229git = 'https://github.com/paritytech/substrate.git'241git = 'https://github.com/paritytech/substrate.git'
230branch = 'polkadot-v0.9.7'242branch = 'polkadot-v0.9.8'
231version = '3.0.0'243version = '3.0.0'
232244
233[dependencies.sp-core]245[dependencies.sp-core]
234default-features = false246default-features = false
235git = 'https://github.com/paritytech/substrate.git'247git = 'https://github.com/paritytech/substrate.git'
236branch = 'polkadot-v0.9.7'248branch = 'polkadot-v0.9.8'
237version = '3.0.0'249version = '3.0.0'
238250
239[dependencies.sp-consensus-aura]251[dependencies.sp-consensus-aura]
240default-features = false252default-features = false
241git = 'https://github.com/paritytech/substrate.git'253git = 'https://github.com/paritytech/substrate.git'
242branch = 'polkadot-v0.9.7'254branch = 'polkadot-v0.9.8'
243version = '0.9.0'255version = '0.9.0'
244256
245[dependencies.sp-inherents]257[dependencies.sp-inherents]
246default-features = false258default-features = false
247git = 'https://github.com/paritytech/substrate.git'259git = 'https://github.com/paritytech/substrate.git'
248branch = 'polkadot-v0.9.7'260branch = 'polkadot-v0.9.8'
249version = '3.0.0'261version = '3.0.0'
250262
251[dependencies.sp-io]263[dependencies.sp-io]
252default-features = false264default-features = false
253git = 'https://github.com/paritytech/substrate.git'265git = 'https://github.com/paritytech/substrate.git'
254branch = 'polkadot-v0.9.7'266branch = 'polkadot-v0.9.8'
255version = '3.0.0'267version = '3.0.0'
256268
257[dependencies.sp-offchain]269[dependencies.sp-offchain]
258default-features = false270default-features = false
259git = 'https://github.com/paritytech/substrate.git'271git = 'https://github.com/paritytech/substrate.git'
260branch = 'polkadot-v0.9.7'272branch = 'polkadot-v0.9.8'
261version = '3.0.0'273version = '3.0.0'
262274
263[dependencies.sp-runtime]275[dependencies.sp-runtime]
264default-features = false276default-features = false
265git = 'https://github.com/paritytech/substrate.git'277git = 'https://github.com/paritytech/substrate.git'
266branch = 'polkadot-v0.9.7'278branch = 'polkadot-v0.9.8'
267version = '3.0.0'279version = '3.0.0'
268280
269[dependencies.sp-session]281[dependencies.sp-session]
270default-features = false282default-features = false
271git = 'https://github.com/paritytech/substrate.git'283git = 'https://github.com/paritytech/substrate.git'
272branch = 'polkadot-v0.9.7'284branch = 'polkadot-v0.9.8'
273version = '3.0.0'285version = '3.0.0'
274286
275[dependencies.sp-std]287[dependencies.sp-std]
276default-features = false288default-features = false
277git = 'https://github.com/paritytech/substrate.git'289git = 'https://github.com/paritytech/substrate.git'
278branch = 'polkadot-v0.9.7'290branch = 'polkadot-v0.9.8'
279version = '3.0.0'291version = '3.0.0'
280292
281[dependencies.sp-transaction-pool]293[dependencies.sp-transaction-pool]
282default-features = false294default-features = false
283git = 'https://github.com/paritytech/substrate.git'295git = 'https://github.com/paritytech/substrate.git'
284branch = 'polkadot-v0.9.7'296branch = 'polkadot-v0.9.8'
285version = '3.0.0'297version = '3.0.0'
286298
287[dependencies.sp-version]299[dependencies.sp-version]
288default-features = false300default-features = false
289git = 'https://github.com/paritytech/substrate.git'301git = 'https://github.com/paritytech/substrate.git'
290branch = 'polkadot-v0.9.7'302branch = 'polkadot-v0.9.8'
291version = '3.0.0'303version = '3.0.0'
292304
293[dependencies.smallvec]305[dependencies.smallvec]
299[dependencies.parachain-info]311[dependencies.parachain-info]
300default-features = false312default-features = false
301git = 'https://github.com/paritytech/cumulus.git'313git = 'https://github.com/paritytech/cumulus.git'
302branch = 'polkadot-v0.9.7'314branch = 'polkadot-v0.9.8'
303version = '0.1.0'315version = '0.1.0'
304316
305[dependencies.cumulus-pallet-aura-ext]317[dependencies.cumulus-pallet-aura-ext]
306git = 'https://github.com/paritytech/cumulus.git'318git = 'https://github.com/paritytech/cumulus.git'
307branch = 'polkadot-v0.9.7'319branch = 'polkadot-v0.9.8'
308default-features = false320default-features = false
309321
310[dependencies.cumulus-pallet-parachain-system]322[dependencies.cumulus-pallet-parachain-system]
311git = 'https://github.com/paritytech/cumulus.git'323git = 'https://github.com/paritytech/cumulus.git'
312branch = 'polkadot-v0.9.7'324branch = 'polkadot-v0.9.8'
313default-features = false325default-features = false
314326
315[dependencies.cumulus-primitives-core]327[dependencies.cumulus-primitives-core]
316git = 'https://github.com/paritytech/cumulus.git'328git = 'https://github.com/paritytech/cumulus.git'
317branch = 'polkadot-v0.9.7'329branch = 'polkadot-v0.9.8'
318default-features = false330default-features = false
319331
320[dependencies.cumulus-pallet-xcm]332[dependencies.cumulus-pallet-xcm]
321git = 'https://github.com/paritytech/cumulus.git'333git = 'https://github.com/paritytech/cumulus.git'
322branch = 'polkadot-v0.9.7'334branch = 'polkadot-v0.9.8'
323default-features = false335default-features = false
324336
325[dependencies.cumulus-pallet-dmp-queue]337[dependencies.cumulus-pallet-dmp-queue]
326git = 'https://github.com/paritytech/cumulus.git'338git = 'https://github.com/paritytech/cumulus.git'
327branch = 'polkadot-v0.9.7'339branch = 'polkadot-v0.9.8'
328default-features = false340default-features = false
329341
330[dependencies.cumulus-pallet-xcmp-queue]342[dependencies.cumulus-pallet-xcmp-queue]
331git = 'https://github.com/paritytech/cumulus.git'343git = 'https://github.com/paritytech/cumulus.git'
332branch = 'polkadot-v0.9.7'344branch = 'polkadot-v0.9.8'
333default-features = false345default-features = false
334346
335[dependencies.cumulus-primitives-utility]347[dependencies.cumulus-primitives-utility]
336git = 'https://github.com/paritytech/cumulus.git'348git = 'https://github.com/paritytech/cumulus.git'
337branch = 'polkadot-v0.9.7'349branch = 'polkadot-v0.9.8'
338default-features = false350default-features = false
339351
340[dependencies.cumulus-primitives-timestamp]352[dependencies.cumulus-primitives-timestamp]
341git = 'https://github.com/paritytech/cumulus.git'353git = 'https://github.com/paritytech/cumulus.git'
342branch = 'polkadot-v0.9.7'354branch = 'polkadot-v0.9.8'
343default-features = false355default-features = false
344356
345################################################################################357################################################################################
346# Polkadot dependencies358# Polkadot dependencies
347359
348[dependencies.polkadot-parachain]360[dependencies.polkadot-parachain]
349git = 'https://github.com/paritytech/polkadot'361git = 'https://github.com/paritytech/polkadot'
350branch = 'release-v0.9.7'362branch = 'release-v0.9.8'
351default-features = false363default-features = false
352364
353[dependencies.xcm]365[dependencies.xcm]
354git = 'https://github.com/paritytech/polkadot'366git = 'https://github.com/paritytech/polkadot'
355branch = 'release-v0.9.7'367branch = 'release-v0.9.8'
356default-features = false368default-features = false
357369
358[dependencies.xcm-builder]370[dependencies.xcm-builder]
359git = 'https://github.com/paritytech/polkadot'371git = 'https://github.com/paritytech/polkadot'
360branch = 'release-v0.9.7'372branch = 'release-v0.9.8'
361default-features = false373default-features = false
362374
363[dependencies.xcm-executor]375[dependencies.xcm-executor]
364git = 'https://github.com/paritytech/polkadot'376git = 'https://github.com/paritytech/polkadot'
365branch = 'release-v0.9.7'377branch = 'release-v0.9.8'
366default-features = false378default-features = false
367379
368[dependencies.pallet-xcm]380[dependencies.pallet-xcm]
369git = 'https://github.com/paritytech/polkadot'381git = 'https://github.com/paritytech/polkadot'
370branch = 'release-v0.9.7'382branch = 'release-v0.9.8'
371default-features = false383default-features = false
372
373384
374385
375################################################################################386################################################################################
376# local dependencies387# local dependencies
377388
378[dependencies]389[dependencies]
390max-encoded-len = { default-features = false, features = ['derive'], version = '3.0.0', git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.8' }
391derivative = "2.2.0"
379pallet-nft = { path = '../pallets/nft', default-features = false, version = '3.0.0' }392pallet-nft = { path = '../pallets/nft', default-features = false, version = '3.0.0' }
380pallet-inflation = { path = '../pallets/inflation', default-features = false, version = '3.0.0' }393pallet-inflation = { path = '../pallets/inflation', default-features = false, version = '3.0.0' }
381nft-data-structs = { path = '../primitives/nft', default-features = false, version = '0.9.0' }394nft-data-structs = { path = '../primitives/nft', default-features = false, version = '0.9.0' }
382pallet-scheduler = { path = '../pallets/scheduler', default-features = false, version = '3.0.0' }395pallet-scheduler = { path = '../pallets/scheduler', default-features = false, version = '3.0.0' }
383# pallet-contract-helpers = { path = '../pallets/contract-helpers', default-features = false, version = '0.1.0' }396# pallet-contract-helpers = { path = '../pallets/contract-helpers', default-features = false, version = '0.1.0' }
384pallet-nft-transaction-payment = { path = '../pallets/nft-transaction-payment', default-features = false, version = '3.0.0' }397pallet-nft-transaction-payment = { path = '../pallets/nft-transaction-payment', default-features = false, version = '3.0.0' }
385pallet-nft-charge-transaction = { path = '../pallets/nft-charge-transaction', default-features = false, version = '3.0.0' }398pallet-nft-charge-transaction = { path = '../pallets/nft-charge-transaction', default-features = false, version = '3.0.0' }
399pallet-evm-migration = { path = '../pallets/evm-migration', default-features = false }
400pallet-evm-contract-helpers = { path = '../pallets/evm-contract-helpers', default-features = false }
401pallet-evm-transaction-payment = { path = '../pallets/evm-transaction-payment', default-features = false }
402pallet-evm-coder-substrate = { default-features = false, path = "../pallets/evm-coder-substrate" }
386403
387pallet-evm = { default-features = false, version = "5.0.0-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }404pallet-evm = { default-features = false, version = "5.0.0-dev", git = "https://github.com/uniquenetwork/frontier.git", branch = "injected-transactions-parachain" }
388pallet-ethereum = { default-features = false, version = "3.0.0-dev", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }405pallet-ethereum = { default-features = false, version = "3.0.0-dev", git = "https://github.com/uniquenetwork/frontier.git", branch = "injected-transactions-parachain" }
389fp-rpc = { default-features = false, version = "2.0.0", git = "https://github.com/usetech-llc/frontier.git", branch = "injected-transactions-parachain" }406fp-rpc = { default-features = false, version = "2.0.0", git = "https://github.com/uniquenetwork/frontier.git", branch = "injected-transactions-parachain" }
390407
391################################################################################408################################################################################
392# Build Dependencies409# Build Dependencies
modifiedruntime/src/chain_extension.rsdiffbeforeafterboth
6//6//
77
8use codec::{Decode, Encode};8use codec::{Decode, Encode};
9use max_encoded_len::MaxEncodedLen;
10use derivative::Derivative;
911
10pub use pallet_contracts::chain_extension::RetVal;12pub use pallet_contracts::chain_extension::RetVal;
11use pallet_contracts::chain_extension::{13use pallet_contracts::chain_extension::{
20use pallet_nft::CrossAccountId;22use pallet_nft::CrossAccountId;
21use nft_data_structs::*;23use nft_data_structs::*;
22
23use crate::Vec;
2424
25/// Create item parameters25/// Create item parameters
26#[derive(Debug, PartialEq, Encode, Decode)]26#[derive(Debug, PartialEq, Encode, Decode, MaxEncodedLen)]
27pub struct NFTExtCreateItem<E: Ext> {27pub struct NFTExtCreateItem<AccountId> {
28 pub owner: <E::T as SysConfig>::AccountId,28 pub owner: AccountId,
29 pub collection_id: u32,29 pub collection_id: u32,
30 pub data: CreateItemData,30 pub data: CreateItemData,
31}31}
3232
33/// Transfer parameters33/// Transfer parameters
34#[derive(Debug, PartialEq, Encode, Decode)]34#[derive(Debug, PartialEq, Encode, Decode, MaxEncodedLen)]
35pub struct NFTExtTransfer<E: Ext> {35pub struct NFTExtTransfer<AccountId> {
36 pub recipient: <E::T as SysConfig>::AccountId,36 pub recipient: AccountId,
37 pub collection_id: u32,37 pub collection_id: u32,
38 pub token_id: u32,38 pub token_id: u32,
39 pub amount: u128,39 pub amount: u128,
40}40}
4141
42#[derive(Debug, PartialEq, Encode, Decode)]42#[derive(Derivative, PartialEq, Encode, Decode, MaxEncodedLen)]
43#[derivative(Debug)]
43pub struct NFTExtCreateMultipleItems<E: Ext> {44pub struct NFTExtCreateMultipleItems<AccountId> {
44 pub owner: <E::T as SysConfig>::AccountId,45 pub owner: AccountId,
45 pub collection_id: u32,46 pub collection_id: u32,
47 #[derivative(Debug = "ignore")]
46 pub data: Vec<CreateItemData>,48 pub data: BoundedVec<CreateItemData, MaxItemsPerBatch>,
47}49}
4850
49#[derive(Debug, PartialEq, Encode, Decode)]51#[derive(Debug, PartialEq, Encode, Decode, MaxEncodedLen)]
50pub struct NFTExtApprove<E: Ext> {52pub struct NFTExtApprove<AccountId> {
51 pub spender: <E::T as SysConfig>::AccountId,53 pub spender: AccountId,
52 pub collection_id: u32,54 pub collection_id: u32,
53 pub item_id: u32,55 pub item_id: u32,
54 pub amount: u128,56 pub amount: u128,
55}57}
5658
57#[derive(Debug, PartialEq, Encode, Decode)]59#[derive(Debug, PartialEq, Encode, Decode, MaxEncodedLen)]
58pub struct NFTExtTransferFrom<E: Ext> {60pub struct NFTExtTransferFrom<AccountId> {
59 pub owner: <E::T as SysConfig>::AccountId,61 pub owner: AccountId,
60 pub recipient: <E::T as SysConfig>::AccountId,62 pub recipient: AccountId,
61 pub collection_id: u32,63 pub collection_id: u32,
62 pub item_id: u32,64 pub item_id: u32,
63 pub amount: u128,65 pub amount: u128,
64}66}
6567
66#[derive(Debug, PartialEq, Encode, Decode)]68#[derive(Derivative, PartialEq, Encode, Decode, MaxEncodedLen)]
69#[derivative(Debug)]
67pub struct NFTExtSetVariableMetaData {70pub struct NFTExtSetVariableMetaData {
68 pub collection_id: u32,71 pub collection_id: u32,
69 pub item_id: u32,72 pub item_id: u32,
73 #[derivative(Debug = "ignore")]
70 pub data: Vec<u8>,74 pub data: BoundedVec<u8, MaxDataSize>,
71}75}
7276
73#[derive(Debug, PartialEq, Encode, Decode)]77#[derive(Debug, PartialEq, Encode, Decode, MaxEncodedLen)]
74pub struct NFTExtToggleWhiteList<E: Ext> {78pub struct NFTExtToggleWhiteList<AccountId> {
75 pub collection_id: u32,79 pub collection_id: u32,
76 pub address: <E::T as SysConfig>::AccountId,80 pub address: AccountId,
77 pub whitelisted: bool,81 pub whitelisted: bool,
78}82}
7983
8286
83pub type NftWeightInfoOf<C> = <C as pallet_nft::Config>::WeightInfo;87pub type NftWeightInfoOf<C> = <C as pallet_nft::Config>::WeightInfo;
88
89pub type AccountIdOf<C> = <C as SysConfig>::AccountId;
8490
85impl<C: Config + pallet_contracts::Config> ChainExtension<C> for NFTExtension {91impl<C: Config + pallet_contracts::Config> ChainExtension<C> for NFTExtension {
86 fn call<E: Ext>(func_id: u32, env: Environment<E, InitState>) -> Result<RetVal, DispatchError>92 fn call<E: Ext>(func_id: u32, env: Environment<E, InitState>) -> Result<RetVal, DispatchError>
93 match func_id {99 match func_id {
94 0 => {100 0 => {
95 let mut env = env.buf_in_buf_out();101 let mut env = env.buf_in_buf_out();
96 let input: NFTExtTransfer<E> = env.read_as()?;102 let input: NFTExtTransfer<AccountIdOf<C>> = env.read_as()?;
97 env.charge_weight(NftWeightInfoOf::<C>::transfer())?;103 env.charge_weight(NftWeightInfoOf::<C>::transfer())?;
98104
99 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;105 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;
106 input.amount,112 input.amount,
107 )?;113 )?;
108114
109 pallet_nft::Module::<C>::submit_logs(collection)?;115 collection.submit_logs()?;
110 Ok(RetVal::Converging(0))116 Ok(RetVal::Converging(0))
111 }117 }
112 1 => {118 1 => {
113 // Create Item119 // Create Item
114 let mut env = env.buf_in_buf_out();120 let mut env = env.buf_in_buf_out();
115 let input: NFTExtCreateItem<E> = env.read_as()?;121 let input: NFTExtCreateItem<AccountIdOf<C>> = env.read_as()?;
116 env.charge_weight(NftWeightInfoOf::<C>::create_item(input.data.data_size()))?;122 env.charge_weight(NftWeightInfoOf::<C>::create_item(input.data.data_size()))?;
117123
118 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;124 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;
124 input.data,130 input.data,
125 )?;131 )?;
126132
127 pallet_nft::Module::<C>::submit_logs(collection)?;133 collection.submit_logs()?;
128 Ok(RetVal::Converging(0))134 Ok(RetVal::Converging(0))
129 }135 }
130 2 => {136 2 => {
131 // Create multiple items137 // Create multiple items
132 let mut env = env.buf_in_buf_out();138 let mut env = env.buf_in_buf_out();
133 let input: NFTExtCreateMultipleItems<E> = env.read_as()?;139 let input: NFTExtCreateMultipleItems<AccountIdOf<C>> = env.read_as()?;
134 env.charge_weight(NftWeightInfoOf::<C>::create_item(140 env.charge_weight(NftWeightInfoOf::<C>::create_item(
135 input.data.iter().map(|i| i.data_size()).sum(),141 input.data.iter().map(|i| i.data_size()).sum(),
136 ))?;142 ))?;
141 &C::CrossAccountId::from_sub(env.ext().address().clone()),147 &C::CrossAccountId::from_sub(env.ext().address().clone()),
142 &collection,148 &collection,
143 &C::CrossAccountId::from_sub(input.owner),149 &C::CrossAccountId::from_sub(input.owner),
144 input.data,150 input.data.into_inner(),
145 )?;151 )?;
146152
147 pallet_nft::Module::<C>::submit_logs(collection)?;153 collection.submit_logs()?;
148 Ok(RetVal::Converging(0))154 Ok(RetVal::Converging(0))
149 }155 }
150 3 => {156 3 => {
151 // Approve157 // Approve
152 let mut env = env.buf_in_buf_out();158 let mut env = env.buf_in_buf_out();
153 let input: NFTExtApprove<E> = env.read_as()?;159 let input: NFTExtApprove<AccountIdOf<C>> = env.read_as()?;
154 env.charge_weight(NftWeightInfoOf::<C>::approve())?;160 env.charge_weight(NftWeightInfoOf::<C>::approve())?;
155161
156 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;162 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;
163 input.amount,169 input.amount,
164 )?;170 )?;
165171
166 pallet_nft::Module::<C>::submit_logs(collection)?;172 collection.submit_logs()?;
167 Ok(RetVal::Converging(0))173 Ok(RetVal::Converging(0))
168 }174 }
169 4 => {175 4 => {
170 // Transfer from176 // Transfer from
171 let mut env = env.buf_in_buf_out();177 let mut env = env.buf_in_buf_out();
172 let input: NFTExtTransferFrom<E> = env.read_as()?;178 let input: NFTExtTransferFrom<AccountIdOf<C>> = env.read_as()?;
173 env.charge_weight(NftWeightInfoOf::<C>::transfer_from())?;179 env.charge_weight(NftWeightInfoOf::<C>::transfer_from())?;
174180
175 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;181 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;
183 input.amount,189 input.amount,
184 )?;190 )?;
185191
186 pallet_nft::Module::<C>::submit_logs(collection)?;192 collection.submit_logs()?;
187 Ok(RetVal::Converging(0))193 Ok(RetVal::Converging(0))
188 }194 }
189 5 => {195 5 => {
198 &C::CrossAccountId::from_sub(env.ext().address().clone()),204 &C::CrossAccountId::from_sub(env.ext().address().clone()),
199 &collection,205 &collection,
200 input.item_id,206 input.item_id,
201 input.data,207 input.data.into_inner(),
202 )?;208 )?;
203209
204 pallet_nft::Module::<C>::submit_logs(collection)?;210 collection.submit_logs()?;
205 Ok(RetVal::Converging(0))211 Ok(RetVal::Converging(0))
206 }212 }
207 6 => {213 6 => {
208 // Toggle whitelist214 // Toggle whitelist
209 let mut env = env.buf_in_buf_out();215 let mut env = env.buf_in_buf_out();
210 let input: NFTExtToggleWhiteList<E> = env.read_as()?;216 let input: NFTExtToggleWhiteList<AccountIdOf<C>> = env.read_as()?;
211 env.charge_weight(NftWeightInfoOf::<C>::add_to_white_list())?;217 env.charge_weight(NftWeightInfoOf::<C>::add_to_white_list())?;
212218
213 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;219 let collection = pallet_nft::Module::<C>::get_collection(input.collection_id)?;
219 input.whitelisted,225 input.whitelisted,
220 )?;226 )?;
221227
222 pallet_nft::Module::<C>::submit_logs(collection)?;228 collection.submit_logs()?;
223 Ok(RetVal::Converging(0))229 Ok(RetVal::Converging(0))
224 }230 }
225 _ => Err(DispatchError::Other("unknown chain_extension func_id")),231 _ => Err(DispatchError::Other("unknown chain_extension func_id")),
modifiedruntime/src/lib.rsdiffbeforeafterboth
72use sp_runtime::{72use sp_runtime::{
73 traits::{Dispatchable},73 traits::{Dispatchable},
74};74};
75// use pallet_contracts::chain_extension::UncheckedFrom;
7675
77// pub use pallet_timestamp::Call as TimestampCall;76// pub use pallet_timestamp::Call as TimestampCall;
78pub use sp_consensus_aura::sr25519::AuthorityId as AuraId;77pub use sp_consensus_aura::sr25519::AuthorityId as AuraId;
120/// Digest item type.119/// Digest item type.
121pub type DigestItem = generic::DigestItem<Hash>;120pub type DigestItem = generic::DigestItem<Hash>;
122
123mod nft_weights;
124121
125/// Opaque types. These are used by the CLI to instantiate machinery that don't need to know122/// Opaque types. These are used by the CLI to instantiate machinery that don't need to know
126/// the specifics of the runtime. They can then be made to be agnostic over specific formats123/// the specifics of the runtime. They can then be made to be agnostic over specific formats
163pub const HOURS: BlockNumber = MINUTES * 60;160pub const HOURS: BlockNumber = MINUTES * 60;
164pub const DAYS: BlockNumber = HOURS * 24;161pub const DAYS: BlockNumber = HOURS * 24;
162
163parameter_types! {
164 pub const DefaultSponsoringRateLimit: BlockNumber = 1 * DAYS;
165}
165166
166#[derive(codec::Encode, codec::Decode)]167#[derive(codec::Encode, codec::Decode)]
167pub enum XCMPMessage<XAccountId, XBalance> {168pub enum XCMPMessage<XAccountId, XBalance> {
248 type Precompiles = ();249 type Precompiles = ();
249 type Currency = Balances;250 type Currency = Balances;
250 type Event = Event;251 type Event = Event;
251 type OnMethodCall = pallet_nft::NftErcSupport<Self>;252 type OnMethodCall = (
253 pallet_evm_migration::OnMethodCall<Self>,
254 pallet_nft::NftErcSupport<Self>,
255 pallet_evm_contract_helpers::HelpersOnMethodCall<Self>,
256 );
257 type OnCreate = pallet_evm_contract_helpers::HelpersOnCreate<Self>;
252 type ChainId = ChainId;258 type ChainId = ChainId;
253 type Runner = pallet_evm::runner::stack::Runner<Self>;259 type Runner = pallet_evm::runner::stack::Runner<Self>;
254 type OnChargeTransaction = ();260 type OnChargeTransaction = pallet_evm_transaction_payment::OnChargeTransaction<Self>;
261 type TransactionValidityHack = pallet_evm_transaction_payment::TransactionValidityHack<Self>;
262 type FindAuthor = EthereumFindAuthor<Aura>;
255}263}
264
265impl pallet_evm_migration::Config for Runtime {
266 type WeightInfo = pallet_evm_migration::weights::SubstrateWeight<Self>;
267}
256268
257pub struct EthereumFindAuthor<F>(core::marker::PhantomData<F>);269pub struct EthereumFindAuthor<F>(core::marker::PhantomData<F>);
258impl<F: FindAuthor<u32>> FindAuthor<H160> for EthereumFindAuthor<F> {270impl<F: FindAuthor<u32>> FindAuthor<H160> for EthereumFindAuthor<F> {
274286
275impl pallet_ethereum::Config for Runtime {287impl pallet_ethereum::Config for Runtime {
276 type Event = Event;288 type Event = Event;
277 type FindAuthor = EthereumFindAuthor<Aura>;
278 type StateRoot = pallet_ethereum::IntermediateStateRoot;289 type StateRoot = pallet_ethereum::IntermediateStateRoot;
279 type EvmSubmitLog = pallet_evm::Pallet<Runtime>;290 type EvmSubmitLog = pallet_evm::Pallet<Self>;
280}291}
281292
282impl pallet_randomness_collective_flip::Config for Runtime {}293impl pallet_randomness_collective_flip::Config for Runtime {}
324 /// This is used as an identifier of the chain. 42 is the generic substrate prefix.335 /// This is used as an identifier of the chain. 42 is the generic substrate prefix.
325 type SS58Prefix = SS58Prefix;336 type SS58Prefix = SS58Prefix;
326 /// Weight information for the extrinsics of this pallet.337 /// Weight information for the extrinsics of this pallet.
327 type SystemWeightInfo = system::weights::SubstrateWeight<Runtime>;338 type SystemWeightInfo = system::weights::SubstrateWeight<Self>;
328 /// Version of the runtime.339 /// Version of the runtime.
329 type Version = Version;340 type Version = Version;
330}341}
358 type DustRemoval = Treasury;369 type DustRemoval = Treasury;
359 type ExistentialDeposit = ExistentialDeposit;370 type ExistentialDeposit = ExistentialDeposit;
360 type AccountStore = System;371 type AccountStore = System;
361 type WeightInfo = pallet_balances::weights::SubstrateWeight<Runtime>;372 type WeightInfo = pallet_balances::weights::SubstrateWeight<Self>;
362}373}
363374
364pub const MICROUNIQUE: Balance = 1_000_000_000;375pub const MICROUNIQUE: Balance = 1_000_000_000;
370 items as Balance * 15 * CENTIUNIQUE + (bytes as Balance) * 6 * CENTIUNIQUE381 items as Balance * 15 * CENTIUNIQUE + (bytes as Balance) * 6 * CENTIUNIQUE
371}382}
372383
373/*384/*
374parameter_types! {385parameter_types! {
375 pub TombstoneDeposit: Balance = deposit(386 pub TombstoneDeposit: Balance = deposit(
376 1,387 1,
377 sp_std::mem::size_of::<pallet_contracts::Pallet<Runtime>> as u32,388 sp_std::mem::size_of::<pallet_contracts::Pallet<Runtime>> as u32,
378 );389 );
379 pub DepositPerContract: Balance = TombstoneDeposit::get();390 pub DepositPerContract: Balance = TombstoneDeposit::get();
380 pub const DepositPerStorageByte: Balance = deposit(0, 1);391 pub const DepositPerStorageByte: Balance = deposit(0, 1);
381 pub const DepositPerStorageItem: Balance = deposit(1, 0);392 pub const DepositPerStorageItem: Balance = deposit(1, 0);
382 pub RentFraction: Perbill = Perbill::from_rational(1u32, 30 * DAYS);393 pub RentFraction: Perbill = Perbill::from_rational(1u32, 30 * DAYS);
383 pub const SurchargeReward: Balance = 150 * MILLIUNIQUE;394 pub const SurchargeReward: Balance = 150 * MILLIUNIQUE;
384 pub const SignedClaimHandicap: u32 = 2;395 pub const SignedClaimHandicap: u32 = 2;
385 pub const MaxDepth: u32 = 32;396 pub const MaxDepth: u32 = 32;
386 pub const MaxValueSize: u32 = 16 * 1024;397 pub const MaxValueSize: u32 = 16 * 1024;
387 pub const MaxCodeSize: u32 = 1024 * 1024 * 25; // 25 Mb398 pub const MaxCodeSize: u32 = 1024 * 1024 * 25; // 25 Mb
388 // The lazy deletion runs inside on_initialize.399 // The lazy deletion runs inside on_initialize.
389 pub DeletionWeightLimit: Weight = AVERAGE_ON_INITIALIZE_RATIO *400 pub DeletionWeightLimit: Weight = AVERAGE_ON_INITIALIZE_RATIO *
390 RuntimeBlockWeights::get().max_block;401 RuntimeBlockWeights::get().max_block;
391 // The weight needed for decoding the queue should be less or equal than a fifth402 // The weight needed for decoding the queue should be less or equal than a fifth
392 // of the overall weight dedicated to the lazy deletion.403 // of the overall weight dedicated to the lazy deletion.
393 pub DeletionQueueDepth: u32 = ((DeletionWeightLimit::get() / (404 pub DeletionQueueDepth: u32 = ((DeletionWeightLimit::get() / (
394 <Runtime as pallet_contracts::Config>::WeightInfo::on_initialize_per_queue_item(1) -405 <Runtime as pallet_contracts::Config>::WeightInfo::on_initialize_per_queue_item(1) -
395 <Runtime as pallet_contracts::Config>::WeightInfo::on_initialize_per_queue_item(0)406 <Runtime as pallet_contracts::Config>::WeightInfo::on_initialize_per_queue_item(0)
396 )) / 5) as u32;407 )) / 5) as u32;
397 pub Schedule: pallet_contracts::Schedule<Runtime> = Default::default();408 pub Schedule: pallet_contracts::Schedule<Runtime> = Default::default();
398}409}
399410
400impl pallet_contracts::Config for Runtime {411impl pallet_contracts::Config for Runtime {
401 type Time = Timestamp;412 type Time = Timestamp;
402 type Randomness = RandomnessCollectiveFlip;413 type Randomness = RandomnessCollectiveFlip;
403 type Currency = Balances;414 type Currency = Balances;
404 type Event = Event;415 type Event = Event;
405 type RentPayment = ();416 type RentPayment = ();
406 type SignedClaimHandicap = SignedClaimHandicap;417 type SignedClaimHandicap = SignedClaimHandicap;
407 type TombstoneDeposit = TombstoneDeposit;418 type TombstoneDeposit = TombstoneDeposit;
408 type DepositPerContract = DepositPerContract;419 type DepositPerContract = DepositPerContract;
409 type DepositPerStorageByte = DepositPerStorageByte;420 type DepositPerStorageByte = DepositPerStorageByte;
410 type DepositPerStorageItem = DepositPerStorageItem;421 type DepositPerStorageItem = DepositPerStorageItem;
411 type RentFraction = RentFraction;422 type RentFraction = RentFraction;
412 type SurchargeReward = SurchargeReward;423 type SurchargeReward = SurchargeReward;
413 type WeightPrice = pallet_transaction_payment::Module<Self>;424 type WeightPrice = pallet_transaction_payment::Pallet<Self>;
414 type WeightInfo = pallet_contracts::weights::SubstrateWeight<Self>;425 type WeightInfo = pallet_contracts::weights::SubstrateWeight<Self>;
415 type ChainExtension = NFTExtension;426 type ChainExtension = NFTExtension;
416 type DeletionQueueDepth = DeletionQueueDepth;427 type DeletionQueueDepth = DeletionQueueDepth;
417 type DeletionWeightLimit = DeletionWeightLimit;428 type DeletionWeightLimit = DeletionWeightLimit;
418 type Schedule = Schedule;429 type Schedule = Schedule;
419 type CallStack = [pallet_contracts::Frame<Self>; 31];430 type CallStack = [pallet_contracts::Frame<Self>; 31];
420}431}
421*/432*/
422433
423parameter_types! {434parameter_types! {
424 pub const TransactionByteFee: Balance = 501 * MICROUNIQUE; // Targeting 0.1 Unique per NFT transfer435 pub const TransactionByteFee: Balance = 501 * MICROUNIQUE; // Targeting 0.1 Unique per NFT transfer
482 type Burn = Burn;493 type Burn = Burn;
483 type BurnDestination = ();494 type BurnDestination = ();
484 type SpendFunds = ();495 type SpendFunds = ();
485 type WeightInfo = pallet_treasury::weights::SubstrateWeight<Runtime>;496 type WeightInfo = pallet_treasury::weights::SubstrateWeight<Self>;
486 type MaxApprovals = MaxApprovals;497 type MaxApprovals = MaxApprovals;
487}498}
488499
511impl cumulus_pallet_parachain_system::Config for Runtime {522impl cumulus_pallet_parachain_system::Config for Runtime {
512 type Event = Event;523 type Event = Event;
513 type OnValidationData = ();524 type OnValidationData = ();
514 type SelfParaId = parachain_info::Pallet<Runtime>;525 type SelfParaId = parachain_info::Pallet<Self>;
515 // type DownwardMessageHandlers = cumulus_primitives_utility::UnqueuedDmpAsParent<526 // type DownwardMessageHandlers = cumulus_primitives_utility::UnqueuedDmpAsParent<
516 // MaxDownwardMessageWeight,527 // MaxDownwardMessageWeight,
517 // XcmExecutor<XcmConfig>,528 // XcmExecutor<XcmConfig>,
637 XcmpQueue,648 XcmpQueue,
638);649);
650
651impl pallet_evm_coder_substrate::Config for Runtime {
652 type EthereumTransactionSender = pallet_ethereum::Module<Self>;
653}
639654
640impl pallet_xcm::Config for Runtime {655impl pallet_xcm::Config for Runtime {
641 type Event = Event;656 type Event = Event;
678/// Used for the pallet nft in `./nft.rs`693/// Used for the pallet nft in `./nft.rs`
679impl pallet_nft::Config for Runtime {694impl pallet_nft::Config for Runtime {
680 type Event = Event;695 type Event = Event;
681 type WeightInfo = nft_weights::WeightInfo;696 type WeightInfo = pallet_nft::weights::SubstrateWeight<Self>;
682697
683 type EvmBackwardsAddressMapping = pallet_nft::MapBackwardsAddressTruncated;698 type EvmBackwardsAddressMapping = pallet_nft::MapBackwardsAddressTruncated;
684 type EvmAddressMapping = HashedAddressMapping<Self::Hashing>;699 type EvmAddressMapping = HashedAddressMapping<Self::Hashing>;
688 type CollectionCreationPrice = CollectionCreationPrice;703 type CollectionCreationPrice = CollectionCreationPrice;
689 type TreasuryAccountId = TreasuryAccountId;704 type TreasuryAccountId = TreasuryAccountId;
690
691 type EthereumChainId = ChainId;
692 type EthereumTransactionSender = pallet_ethereum::Module<Runtime>;
693}705}
694706
695parameter_types! {707parameter_types! {
741 type SponsorshipHandler = SponsorshipHandler;753 type SponsorshipHandler = SponsorshipHandler;
742}754}
755
756impl pallet_evm_transaction_payment::Config for Runtime {
757 type SponsorshipHandler = (
758 pallet_nft::NftEthSponsorshipHandler<Self>,
759 pallet_evm_contract_helpers::HelpersContractSponsoring<Self>,
760 );
761 type Currency = Balances;
762}
743763
744impl pallet_nft_charge_transaction::Config for Runtime {}764impl pallet_nft_charge_transaction::Config for Runtime {}
745765
746// impl pallet_contract_helpers::Config for Runtime {}766// impl pallet_contract_helpers::Config for Runtime {
767// type DefaultSponsoringRateLimit = DefaultSponsoringRateLimit;
768// }
769
770parameter_types! {
771 // 0x842899ECF380553E8a4de75bF534cdf6fBF64049
772 pub const HelpersContractAddress: H160 = H160([
773 0x84, 0x28, 0x99, 0xec, 0xf3, 0x80, 0x55, 0x3e, 0x8a, 0x4d, 0xe7, 0x5b, 0xf5, 0x34, 0xcd, 0xf6, 0xfb, 0xf6, 0x40, 0x49,
774 ]);
775}
776
777impl pallet_evm_contract_helpers::Config for Runtime {
778 type ContractAddress = HelpersContractAddress;
779 type DefaultSponsoringRateLimit = DefaultSponsoringRateLimit;
780}
747781
748construct_runtime!(782construct_runtime!(
749 pub enum Runtime where783 pub enum Runtime where
750 Block = Block,784 Block = Block,
751 NodeBlock = opaque::Block,785 NodeBlock = opaque::Block,
752 UncheckedExtrinsic = UncheckedExtrinsic786 UncheckedExtrinsic = UncheckedExtrinsic
753 {787 {
788 ParachainSystem: cumulus_pallet_parachain_system::{Pallet, Call, Storage, Inherent, Event<T>} = 20,
789 ParachainInfo: parachain_info::{Pallet, Storage, Config} = 21,
790
791 Aura: pallet_aura::{Pallet, Config<T>} = 22,
792 AuraExt: cumulus_pallet_aura_ext::{Pallet, Config} = 23,
793
754 Balances: pallet_balances::{Pallet, Call, Storage, Config<T>, Event<T>} = 30,794 Balances: pallet_balances::{Pallet, Call, Storage, Config<T>, Event<T>} = 30,
755 // Contracts: pallet_contracts::{Pallet, Call, Storage, Event<T>},
756 RandomnessCollectiveFlip: pallet_randomness_collective_flip::{Pallet, Call, Storage},795 RandomnessCollectiveFlip: pallet_randomness_collective_flip::{Pallet, Storage} = 31,
757 Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent},796 Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 32,
758 TransactionPayment: pallet_transaction_payment::{Pallet, Storage},797 TransactionPayment: pallet_transaction_payment::{Pallet, Storage} = 33,
759 Treasury: pallet_treasury::{Pallet, Call, Storage, Config, Event<T>},798 Treasury: pallet_treasury::{Pallet, Call, Storage, Config, Event<T>} = 34,
760 Sudo: pallet_sudo::{Pallet, Call, Storage, Config<T>, Event<T>},799 Sudo: pallet_sudo::{Pallet, Call, Storage, Config<T>, Event<T>} = 35,
761 System: system::{Pallet, Call, Storage, Config, Event<T>},800 System: system::{Pallet, Call, Storage, Config, Event<T>} = 36,
762 Vesting: pallet_vesting::{Pallet, Call, Config<T>, Storage, Event<T>},801 Vesting: pallet_vesting::{Pallet, Call, Config<T>, Storage, Event<T>} = 37,
763802 // Contracts: pallet_contracts::{Pallet, Call, Storage, Event<T>} = 38,
764 ParachainSystem: cumulus_pallet_parachain_system::{Pallet, Call, Storage, Inherent, Event<T>, ValidateUnsigned} = 20,
765 ParachainInfo: parachain_info::{Pallet, Storage, Config} = 21,
766
767 Aura: pallet_aura::{Pallet, Config<T>},
768 AuraExt: cumulus_pallet_aura_ext::{Pallet, Config},
769
770 // Frontier
771 EVM: pallet_evm::{Pallet, Config, Call, Storage, Event<T>},
772 Ethereum: pallet_ethereum::{Pallet, Config, Call, Storage, Event, ValidateUnsigned},
773803
774 // XCM helpers.804 // XCM helpers.
775 XcmpQueue: cumulus_pallet_xcmp_queue::{Pallet, Call, Storage, Event<T>} = 50,805 XcmpQueue: cumulus_pallet_xcmp_queue::{Pallet, Call, Storage, Event<T>} = 50,
779
780809
781 // Unique Pallets810 // Unique Pallets
782 Inflation: pallet_inflation::{Pallet, Call, Storage},811 Inflation: pallet_inflation::{Pallet, Call, Storage} = 60,
783 Nft: pallet_nft::{Pallet, Call, Config<T>, Storage, Event<T>},812 Nft: pallet_nft::{Pallet, Call, Config<T>, Storage, Event<T>} = 61,
784 Scheduler: pallet_scheduler::{Pallet, Call, Storage, Event<T>},813 Scheduler: pallet_scheduler::{Pallet, Call, Storage, Event<T>} = 62,
785 NftPayment: pallet_nft_transaction_payment::{Pallet, Call, Storage},814 NftPayment: pallet_nft_transaction_payment::{Pallet, Call, Storage} = 63,
786 Charging: pallet_nft_charge_transaction::{Pallet, Call, Storage },815 Charging: pallet_nft_charge_transaction::{Pallet, Call, Storage } = 64,
787 // ContractHelpers: pallet_contract_helpers::{Pallet, Call, Storage},816 // ContractHelpers: pallet_contract_helpers::{Pallet, Call, Storage} = 65,
817
818 // Frontier
819 EVM: pallet_evm::{Pallet, Config, Call, Storage, Event<T>} = 100,
820 Ethereum: pallet_ethereum::{Pallet, Config, Call, Storage, Event, ValidateUnsigned} = 101,
821
822 EvmCoderSubstrate: pallet_evm_coder_substrate::{Pallet, Storage} = 150,
823 EvmContractHelpers: pallet_evm_contract_helpers::{Pallet, Storage} = 151,
824 EvmTransactionPayment: pallet_evm_transaction_payment::{Pallet} = 152,
825 EvmMigration: pallet_evm_migration::{Pallet, Call, Storage} = 153,
788 }826 }
789);827);
790828
910 fn validate_transaction(948 fn validate_transaction(
911 source: TransactionSource,949 source: TransactionSource,
912 tx: <Block as BlockT>::Extrinsic,950 tx: <Block as BlockT>::Extrinsic,
951 hash: <Block as BlockT>::Hash,
913 ) -> TransactionValidity {952 ) -> TransactionValidity {
914 Executive::validate_transaction(source, tx)953 Executive::validate_transaction(source, tx, hash)
915 }954 }
916 }955 }
917956
939 }978 }
940979
941 fn author() -> H160 {980 fn author() -> H160 {
942 <pallet_ethereum::Module<Runtime>>::find_author()981 <pallet_evm::Module<Runtime>>::find_author()
943 }982 }
944983
945 fn storage_at(address: H160, index: U256) -> H256 {984 fn storage_at(address: H160, index: U256) -> H256 {
1030 )1069 )
1031 }1070 }
1071
1072 fn extrinsic_filter(xts: Vec<<Block as sp_api::BlockT>::Extrinsic>) -> Vec<pallet_ethereum::Transaction> {
1073 xts.into_iter().filter_map(|xt| match xt.function {
1074 Call::Ethereum(pallet_ethereum::Call::transact(t)) => Some(t),
1075 _ => None
1076 }).collect()
1077 }
1032 }1078 }
10331079
1034 impl sp_session::SessionKeys<Block> for Runtime {1080 impl sp_session::SessionKeys<Block> for Runtime {
1138 let mut batches = Vec::<BenchmarkBatch>::new();1184 let mut batches = Vec::<BenchmarkBatch>::new();
1139 let params = (&config, &whitelist);1185 let params = (&config, &whitelist);
11401186
1187 add_benchmark!(params, batches, pallet_evm_migration, EvmMigration);
1141 add_benchmark!(params, batches, pallet_nft, Nft);1188 add_benchmark!(params, batches, pallet_nft, Nft);
1142 add_benchmark!(params, batches, pallet_inflation, Inflation);1189 add_benchmark!(params, batches, pallet_inflation, Inflation);
11431190
deletedruntime/src/nft_weights.rsdiffbeforeafterboth

no changes

modifiedruntime_types.jsondiffbeforeafterboth
63 "Limits": "CollectionLimits",63 "Limits": "CollectionLimits",
64 "VariableOnChainSchema": "Vec<u8>",64 "VariableOnChainSchema": "Vec<u8>",
65 "ConstOnChainSchema": "Vec<u8>",65 "ConstOnChainSchema": "Vec<u8>",
66 "MetaUpdatePermission": "MetaUpdatePermission"66 "MetaUpdatePermission": "MetaUpdatePermission",
67 "TransfersEnabled": "bool"
67 },68 },
68 "RawData": "Vec<u8>",69 "RawData": "Vec<u8>",
69 "Address": "MultiAddress",70 "Address": "MultiAddress",
modifiedtests/package.jsondiffbeforeafterboth
4 "description": "Substrate Nft tests",4 "description": "Substrate Nft tests",
5 "main": "",5 "main": "",
6 "devDependencies": {6 "devDependencies": {
7 "@polkadot/dev": "0.62.43",7 "@polkadot/dev": "0.62.60",
8 "@polkadot/ts": "0.3.89",8 "@polkadot/ts": "0.4.4",
9 "@polkadot/typegen": "5.0.1",9 "@polkadot/typegen": "5.5.1",
10 "@types/chai": "^4.2.17",10 "@types/chai": "^4.2.17",
11 "@types/chai-as-promised": "^7.1.3",11 "@types/chai-as-promised": "^7.1.3",
12 "@types/mocha": "^8.2.2",12 "@types/mocha": "^8.2.2",
13 "chai": "^4.3.4",13 "@types/node": "^14.14.12",
14 "mocha": "^8.3.2",14 "@typescript-eslint/eslint-plugin": "^4.28.5",
15 "ts-node": "^9.1.1",15 "@typescript-eslint/parser": "^4.28.5",
16 "tslint": "^6.1.3",16 "chai": "^4.3.4",
17 "typescript": "^4.2.4",17 "eslint": "^7.31.0",
18 "eslint": "^7.28.0",18 "mocha": "^8.3.2",
19 "@types/node": "^14.14.12",19 "ts-node": "^9.1.1",
20 "@typescript-eslint/eslint-plugin": "^3.4.0",20 "tslint": "^6.1.3",
21 "@typescript-eslint/parser": "^3.4.0"21 "typescript": "^4.2.4"
22 },22 },
23 "scripts": {23 "scripts": {
24 "lint": "eslint --ext .ts,.js src/",24 "lint": "eslint --ext .ts,.js src/",
25 "fix": "eslint --ext .ts,.js src/ --fix",25 "fix": "eslint --ext .ts,.js src/ --fix",
26 "test": "mocha --timeout 9999999 -r ts-node/register ./**/*.test.ts",26 "test": "mocha --timeout 9999999 -r ts-node/register './**/*.test.ts'",
27 "testEth": "mocha --timeout 9999999 -r ts-node/register ./**/eth/**/*.test.ts",27 "testEth": "mocha --timeout 9999999 -r ts-node/register './**/eth/**/*.test.ts'",
28 "load": "mocha --timeout 9999999 -r ts-node/register ./**/*.load.ts",28 "load": "mocha --timeout 9999999 -r ts-node/register './**/*.load.ts'",
29 "loadTransfer": "ts-node src/transfer.nload.ts",29 "loadTransfer": "ts-node src/transfer.nload.ts",
30 "testCollision": "mocha --timeout 9999999 -r ts-node/register ./src/collision-tests/*.test.ts",30 "testCollision": "mocha --timeout 9999999 -r ts-node/register ./src/collision-tests/*.test.ts",
31 "testAddCollectionAdmin": "mocha --timeout 9999999 -r ts-node/register ./**/addCollectionAdmin.test.ts",31 "testAddCollectionAdmin": "mocha --timeout 9999999 -r ts-node/register ./**/addCollectionAdmin.test.ts",
59 "testSetVariableMetadataSponsoringRateLimit": "mocha --timeout 9999999 -r ts-node/register ./**/setVariableMetadataSponsoringRateLimit.test.ts",59 "testSetVariableMetadataSponsoringRateLimit": "mocha --timeout 9999999 -r ts-node/register ./**/setVariableMetadataSponsoringRateLimit.test.ts",
60 "testInflation": "mocha --timeout 9999999 -r ts-node/register ./**/inflation.test.ts",60 "testInflation": "mocha --timeout 9999999 -r ts-node/register ./**/inflation.test.ts",
61 "testPalletPresence": "mocha --timeout 9999999 -r ts-node/register ./**/pallet-presence.test.ts",61 "testPalletPresence": "mocha --timeout 9999999 -r ts-node/register ./**/pallet-presence.test.ts",
62 "testBlockProduction": "mocha --timeout 9999999 -r ts-node/register ./**/block-production.test.ts"62 "testBlockProduction": "mocha --timeout 9999999 -r ts-node/register ./**/block-production.test.ts",
63 "testEnableDisableTransfers": "mocha --timeout 9999999 -r ts-node/register ./**/enableDisableTransfer.test.ts"
63 },64 },
64 "author": "",65 "author": "",
65 "license": "SEE LICENSE IN ../LICENSE",66 "license": "SEE LICENSE IN ../LICENSE",
66 "homepage": "",67 "homepage": "",
67 "dependencies": {68 "dependencies": {
68 "@polkadot/api": "5.0.1",69 "@polkadot/api": "5.5.1",
69 "@polkadot/api-contract": "5.0.1",70 "@polkadot/api-contract": "5.5.1",
71 "@polkadot/util-crypto": "^7.2.1",
70 "bignumber.js": "^9.0.1",72 "bignumber.js": "^9.0.1",
71 "chai-as-promised": "^7.1.1",73 "chai-as-promised": "^7.1.1",
74 "solc": "^0.8.6",
72 "web3": "^1.3.5"75 "web3": "^1.3.5"
73 },76 },
74 "standard": {77 "standard": {
modifiedtests/src/addCollectionAdmin.test.tsdiffbeforeafterboth
117 ];117 ];
118 const collectionId = await createCollectionExpectSuccess();118 const collectionId = await createCollectionExpectSuccess();
119119
120 const chainLimit = await api.query.nft.chainLimit() as unknown as { CollectionAdminsLimit: BN };120 const chainAdminLimit = (api.consts.nft.collectionAdminsLimit as any).toNumber();
121 const chainAdminLimit = chainLimit.CollectionAdminsLimit.toNumber();
122 expect(chainAdminLimit).to.be.equal(5);121 expect(chainAdminLimit).to.be.equal(5);
123122
124 for (let i = 0; i < chainAdminLimit; i++) {123 for (let i = 0; i < chainAdminLimit; i++) {
modifiedtests/src/addToWhiteList.test.tsdiffbeforeafterboth
16 enablePublicMintingExpectSuccess,16 enablePublicMintingExpectSuccess,
17 enableWhiteListExpectSuccess,17 enableWhiteListExpectSuccess,
18 normalizeAccountId,18 normalizeAccountId,
19 addCollectionAdminExpectSuccess,
20 addToWhiteListExpectFail,
19} from './util/helpers';21} from './util/helpers';
2022
21chai.use(chaiAsPromised);23chai.use(chaiAsPromised);
22const expect = chai.expect;24const expect = chai.expect;
2325
24let Alice: IKeyringPair;26let Alice: IKeyringPair;
25let Bob: IKeyringPair;27let Bob: IKeyringPair;
28let Charlie: IKeyringPair;
2629
27describe('Integration Test ext. addToWhiteList()', () => {30describe('Integration Test ext. addToWhiteList()', () => {
2831
8689
87});90});
8891
92describe('Integration Test ext. addToWhiteList() with collection admin permissions:', () => {
93
94 before(async () => {
95 await usingApi(async () => {
96 Alice = privateKey('//Alice');
97 Bob = privateKey('//Bob');
98 Charlie = privateKey('//Charlie');
99 });
100 });
101
102 it('Negative. Add to the white list by regular user', async () => {
103 const collectionId = await createCollectionExpectSuccess();
104 await addToWhiteListExpectFail(Bob, collectionId, Charlie.address);
105 });
106
107 it('Execute the extrinsic with parameters: Collection ID and address to add to the white list', async () => {
108 const collectionId = await createCollectionExpectSuccess();
109 await addCollectionAdminExpectSuccess(Alice, collectionId, Bob);
110 await addToWhiteListExpectSuccess(Bob, collectionId, Charlie.address);
111 });
112
113 it('Whitelisted minting: list restrictions', async () => {
114 const collectionId = await createCollectionExpectSuccess();
115 await addCollectionAdminExpectSuccess(Alice, collectionId, Bob);
116 await addToWhiteListExpectSuccess(Bob, collectionId, Charlie.address);
117
118 // allowed only for collection owner
119 await enableWhiteListExpectSuccess(Alice, collectionId);
120 await enablePublicMintingExpectSuccess(Alice, collectionId);
121
122 await createItemExpectSuccess(Charlie, collectionId, 'NFT', Charlie.address);
123 });
124});
modifiedtests/src/approve.test.tsdiffbeforeafterboth
16 destroyCollectionExpectSuccess,16 destroyCollectionExpectSuccess,
17 setCollectionLimitsExpectSuccess,17 setCollectionLimitsExpectSuccess,
18 transferExpectSuccess,18 transferExpectSuccess,
19 addCollectionAdminExpectSuccess,
19} from './util/helpers';20} from './util/helpers';
2021
21chai.use(chaiAsPromised);22chai.use(chaiAsPromised);
178 });179 });
179});180});
181
182describe('Integration Test approve(spender, collection_id, item_id, amount) with collection admin permissions:', () => {
183 let Alice: IKeyringPair;
184 let Bob: IKeyringPair;
185 let Charlie: IKeyringPair;
186
187 before(async () => {
188 await usingApi(async () => {
189 Alice = privateKey('//Alice');
190 Bob = privateKey('//Bob');
191 Charlie = privateKey('//Charlie');
192 });
193 });
194
195 it('can be called by collection admin on non-owned item', async () => {
196 const collectionId = await createCollectionExpectSuccess();
197 const itemId = await createItemExpectSuccess(Alice, collectionId, 'NFT', Alice.address);
198
199 await addCollectionAdminExpectSuccess(Alice, collectionId, Bob);
200 await approveExpectSuccess(collectionId, itemId, Bob, Charlie);
201 });
202});
180203
modifiedtests/src/burnItem.test.tsdiffbeforeafterboth
12 getGenericResult,12 getGenericResult,
13 destroyCollectionExpectSuccess,13 destroyCollectionExpectSuccess,
14 normalizeAccountId,14 normalizeAccountId,
15 addCollectionAdminExpectSuccess,
15} from './util/helpers';16} from './util/helpers';
1617
17import chai from 'chai';18import chai from 'chai';
136136
137});137});
138
139describe('integration test: ext. burnItem() with admin permissions:', () => {
140 before(async () => {
141 await usingApi(async () => {
142 const keyring = new Keyring({ type: 'sr25519' });
143 alice = keyring.addFromUri('//Alice');
144 bob = keyring.addFromUri('//Bob');
145 });
146 });
147
148 it('Burn item in NFT collection', async () => {
149 const createMode = 'NFT';
150 const collectionId = await createCollectionExpectSuccess({mode: {type: createMode}});
151 const tokenId = await createItemExpectSuccess(alice, collectionId, createMode);
152 await addCollectionAdminExpectSuccess(alice, collectionId, bob);
153
154 await usingApi(async (api) => {
155 const tx = api.tx.nft.burnItem(collectionId, tokenId, 0);
156 const events = await submitTransactionAsync(bob, tx);
157 const result = getGenericResult(events);
158 // Get the item
159 const item: any = (await api.query.nft.nftItemList(collectionId, tokenId)).toJSON();
160 // What to expect
161 // tslint:disable-next-line:no-unused-expression
162 expect(result.success).to.be.true;
163 // tslint:disable-next-line:no-unused-expression
164 expect(item).to.be.null;
165 });
166 });
167});
138168
139describe('Negative integration test: ext. burnItem():', () => {169describe('Negative integration test: ext. burnItem():', () => {
140 before(async () => {170 before(async () => {
modifiedtests/src/change-collection-owner.test.tsdiffbeforeafterboth
7import chaiAsPromised from 'chai-as-promised';7import chaiAsPromised from 'chai-as-promised';
8import privateKey from './substrate/privateKey';8import privateKey from './substrate/privateKey';
9import { default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync } from './substrate/substrate-api';9import { default as usingApi, submitTransactionAsync, submitTransactionExpectFailAsync } from './substrate/substrate-api';
10import { createCollectionExpectSuccess } from './util/helpers';10import { createCollectionExpectSuccess,
11 addCollectionAdminExpectSuccess,
12 setCollectionSponsorExpectSuccess,
13 confirmSponsorshipExpectSuccess,
14 removeCollectionSponsorExpectSuccess,
15 enableWhiteListExpectSuccess,
16 setMintPermissionExpectSuccess,
17 destroyCollectionExpectSuccess,
18 setCollectionSponsorExpectFailure,
19 confirmSponsorshipExpectFailure,
20 removeCollectionSponsorExpectFailure,
21 enableWhiteListExpectFail,
22 setMintPermissionExpectFailure,
23 destroyCollectionExpectFailure,
24 setPublicAccessModeExpectSuccess,
25} from './util/helpers';
1126
12chai.use(chaiAsPromised);27chai.use(chaiAsPromised);
31 });46 });
32});47});
48
49describe('Integration Test changeCollectionOwner(collection_id, new_owner) special checks for exOwner:', () => {
50 it('Changing the owner of the collection is not allowed for the former owner', async () => {
51 await usingApi(async api => {
52 const collectionId = await createCollectionExpectSuccess();
53 const alice = privateKey('//Alice');
54 const bob = privateKey('//Bob');
55
56 const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
57 expect(collection.Owner).to.be.deep.eq(alice.address);
58
59 const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address);
60 await submitTransactionAsync(alice, changeOwnerTx);
61
62 const badChangeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, alice.address);
63 await expect(submitTransactionExpectFailAsync(alice, badChangeOwnerTx)).to.be.rejected;
64
65 const collectionAfterOwnerChange: any = (await api.query.nft.collectionById(collectionId)).toJSON();
66 expect(collectionAfterOwnerChange.Owner).to.be.deep.eq(bob.address);
67 });
68 });
69
70 it('New collectionOwner has access to sponsorship management operations in the collection', async () => {
71 await usingApi(async api => {
72 const collectionId = await createCollectionExpectSuccess();
73 const alice = privateKey('//Alice');
74 const bob = privateKey('//Bob');
75 const charlie = privateKey('//Charlie');
76
77 const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
78 expect(collection.Owner).to.be.deep.eq(alice.address);
79
80 const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address);
81 await submitTransactionAsync(alice, changeOwnerTx);
82
83 const collectionAfterOwnerChange: any = (await api.query.nft.collectionById(collectionId)).toJSON();
84 expect(collectionAfterOwnerChange.Owner).to.be.deep.eq(bob.address);
85
86 // After changing the owner of the collection, all privileged methods are available to the new owner
87 // The new owner of the collection has access to sponsorship management operations in the collection
88 await setCollectionSponsorExpectSuccess(collectionId, charlie.address, '//Bob');
89 await confirmSponsorshipExpectSuccess(collectionId, '//Charlie');
90 await removeCollectionSponsorExpectSuccess(collectionId, '//Bob');
91
92 // The new owner of the collection has access to operations for managing the collection parameters
93 const collectionLimits = {
94 AccountTokenOwnershipLimit: 1,
95 SponsoredMintSize: 1,
96 TokenLimit: 1,
97 SponsorTimeout: 1,
98 OwnerCanTransfer: true,
99 OwnerCanDestroy: true,
100 };
101 const tx1 = api.tx.nft.setCollectionLimits(
102 collectionId,
103 collectionLimits,
104 );
105 await submitTransactionAsync(bob, tx1);
106
107 await setPublicAccessModeExpectSuccess(bob, collectionId, 'WhiteList');
108 await enableWhiteListExpectSuccess(bob, collectionId);
109 await setMintPermissionExpectSuccess(bob, collectionId, true);
110 await destroyCollectionExpectSuccess(collectionId, '//Bob');
111 });
112 });
113
114 it('New collectionOwner has access to changeCollectionOwner', async () => {
115 await usingApi(async api => {
116 const collectionId = await createCollectionExpectSuccess();
117 const alice = privateKey('//Alice');
118 const bob = privateKey('//Bob');
119 const charlie = privateKey('//Charlie');
120
121 const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
122 expect(collection.Owner).to.be.deep.eq(alice.address);
123
124 const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address);
125 await submitTransactionAsync(alice, changeOwnerTx);
126
127 const collectionAfterOwnerChange: any = (await api.query.nft.collectionById(collectionId)).toJSON();
128 expect(collectionAfterOwnerChange.Owner).to.be.deep.eq(bob.address);
129
130 const changeOwnerTx2 = api.tx.nft.changeCollectionOwner(collectionId, charlie.address);
131 await submitTransactionAsync(bob, changeOwnerTx2);
132
133 // ownership lost
134 const collectionAfterOwnerChange2: any = (await api.query.nft.collectionById(collectionId)).toJSON();
135 expect(collectionAfterOwnerChange2.Owner).to.be.deep.eq(charlie.address);
136 });
137 });
138});
33139
34describe('Negative Integration Test changeCollectionOwner(collection_id, new_owner):', () => {140describe('Negative Integration Test changeCollectionOwner(collection_id, new_owner):', () => {
35 it('Not owner can\'t change owner.', async () => {141 it('Not owner can\'t change owner.', async () => {
49 });155 });
50 });156 });
157
158 it('Collection admin can\'t change owner.', async () => {
159 await usingApi(async api => {
160 const collectionId = await createCollectionExpectSuccess();
161 const alice = privateKey('//Alice');
162 const bob = privateKey('//Bob');
163
164 await addCollectionAdminExpectSuccess(alice, collectionId, bob);
165
166 const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address);
167 await expect(submitTransactionExpectFailAsync(bob, changeOwnerTx)).to.be.rejected;
168
169 const collectionAfterOwnerChange: any = (await api.query.nft.collectionById(collectionId)).toJSON();
170 expect(collectionAfterOwnerChange.Owner).to.be.deep.eq(alice.address);
171
172 // Verifying that nothing bad happened (network is live, new collections can be created, etc.)
173 await createCollectionExpectSuccess();
174 });
175 });
176
51 it('Can\'t change owner of a non-existing collection.', async () => {177 it('Can\'t change owner of a non-existing collection.', async () => {
52 await usingApi(async api => {178 await usingApi(async api => {
62 });188 });
63 });189 });
190
191 it('Former collectionOwner not allowed to sponsorship management operations in the collection', async () => {
192 await usingApi(async api => {
193 const collectionId = await createCollectionExpectSuccess();
194 const alice = privateKey('//Alice');
195 const bob = privateKey('//Bob');
196 const charlie = privateKey('//Charlie');
197
198 const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
199 expect(collection.Owner).to.be.deep.eq(alice.address);
200
201 const changeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, bob.address);
202 await submitTransactionAsync(alice, changeOwnerTx);
203
204 const badChangeOwnerTx = api.tx.nft.changeCollectionOwner(collectionId, alice.address);
205 await expect(submitTransactionExpectFailAsync(alice, badChangeOwnerTx)).to.be.rejected;
206
207 const collectionAfterOwnerChange: any = (await api.query.nft.collectionById(collectionId)).toJSON();
208 expect(collectionAfterOwnerChange.Owner).to.be.deep.eq(bob.address);
209
210 await setCollectionSponsorExpectFailure(collectionId, charlie.address, '//Alice');
211 await confirmSponsorshipExpectFailure(collectionId, '//Alice');
212 await removeCollectionSponsorExpectFailure(collectionId, '//Alice');
213
214 const collectionLimits = {
215 AccountTokenOwnershipLimit: 1,
216 SponsoredMintSize: 1,
217 TokenLimit: 1,
218 SponsorTimeout: 1,
219 OwnerCanTransfer: true,
220 OwnerCanDestroy: true,
221 };
222 const tx1 = api.tx.nft.setCollectionLimits(
223 collectionId,
224 collectionLimits,
225 );
226 await expect(submitTransactionExpectFailAsync(alice, tx1)).to.be.rejected;
227
228 await enableWhiteListExpectFail(alice, collectionId);
229 await setMintPermissionExpectFailure(alice, collectionId, true);
230 await destroyCollectionExpectFailure(collectionId, '//Alice');
231 });
232 });
64});233});
65234
modifiedtests/src/collision-tests/adminLimitsOff.test.tsdiffbeforeafterboth
34 await usingApi(async (api) => {34 await usingApi(async (api) => {
35 const collectionId = await createCollectionExpectSuccess();35 const collectionId = await createCollectionExpectSuccess();
3636
37 const chainLimit = await api.query.nft.chainLimit() as unknown as { CollectionAdminsLimit: BN };37 const chainAdminLimit = (api.consts.nft.collectionAdminsLimit as any).toNumber();
38 const chainAdminLimit = chainLimit.CollectionAdminsLimit.toNumber();
39 expect(chainAdminLimit).to.be.equal(5);38 expect(chainAdminLimit).to.be.equal(5);
4039
41 const changeAdminTx1 = api.tx.nft.addCollectionAdmin(collectionId, Eve.address);40 const changeAdminTx1 = api.tx.nft.addCollectionAdmin(collectionId, Eve.address);
modifiedtests/src/config.tsdiffbeforeafterboth
77
8const config = {8const config = {
9 substrateUrl: process.env.substrateUrl || 'ws://127.0.0.1:9944',9 substrateUrl: process.env.substrateUrl || 'ws://127.0.0.1:9944',
10 frontierUrl: process.env.frontierUrl || 'http://127.0.0.1:9933',
10};11};
1112
12export default config;13export default config;
modifiedtests/src/confirmSponsorship.test.tsdiffbeforeafterboth
19 enablePublicMintingExpectSuccess,19 enablePublicMintingExpectSuccess,
20 addToWhiteListExpectSuccess,20 addToWhiteListExpectSuccess,
21 normalizeAccountId,21 normalizeAccountId,
22 addCollectionAdminExpectSuccess,
22} from './util/helpers';23} from './util/helpers';
23import { Keyring } from '@polkadot/api';24import { Keyring } from '@polkadot/api';
24import { IKeyringPair } from '@polkadot/types/types';25import { IKeyringPair } from '@polkadot/types/types';
365 await confirmSponsorshipExpectFailure(collectionId, '//Alice');366 await confirmSponsorshipExpectFailure(collectionId, '//Alice');
366 });367 });
368
369 it('(!negative test!) Confirm sponsorship by collection admin', async () => {
370 const collectionId = await createCollectionExpectSuccess();
371 await setCollectionSponsorExpectSuccess(collectionId, bob.address);
372 await addCollectionAdminExpectSuccess(alice, collectionId, charlie);
373 await confirmSponsorshipExpectFailure(collectionId, '//Charlie');
374 });
367375
368 it('(!negative test!) Confirm sponsorship without sponsor being set with setCollectionSponsor', async () => {376 it('(!negative test!) Confirm sponsorship without sponsor being set with setCollectionSponsor', async () => {
369 const collectionId = await createCollectionExpectSuccess();377 const collectionId = await createCollectionExpectSuccess();
modifiedtests/src/createItem.test.tsdiffbeforeafterboth
4//4//
55
6import { default as usingApi } from './substrate/substrate-api';6import { default as usingApi } from './substrate/substrate-api';
7import chai from 'chai';
7import { Keyring } from '@polkadot/api';8import { Keyring } from '@polkadot/api';
8import { IKeyringPair } from '@polkadot/types/types';9import { IKeyringPair } from '@polkadot/types/types';
9import { 10import {
10 createCollectionExpectSuccess, 11 createCollectionExpectSuccess,
11 createItemExpectSuccess,12 createItemExpectSuccess,
13 addCollectionAdminExpectSuccess,
12} from './util/helpers';14} from './util/helpers';
1315
16const expect = chai.expect;
14let alice: IKeyringPair;17let alice: IKeyringPair;
18let bob: IKeyringPair;
1519
16describe('integration test: ext. createItem():', () => {20describe('integration test: ext. createItem():', () => {
17 before(async () => {21 before(async () => {
18 await usingApi(async () => {22 await usingApi(async () => {
19 const keyring = new Keyring({ type: 'sr25519' });23 const keyring = new Keyring({ type: 'sr25519' });
20 alice = keyring.addFromUri('//Alice');24 alice = keyring.addFromUri('//Alice');
25 bob = keyring.addFromUri('//Bob');
21 });26 });
22 });27 });
2328
36 const newCollectionID = await createCollectionExpectSuccess({mode: {type: createMode}});41 const newCollectionID = await createCollectionExpectSuccess({mode: {type: createMode}});
37 await createItemExpectSuccess(alice, newCollectionID, createMode);42 await createItemExpectSuccess(alice, newCollectionID, createMode);
38 });43 });
44 it('Create new item in NFT collection with collection admin permissions', async () => {
45 const createMode = 'NFT';
46 const newCollectionID = await createCollectionExpectSuccess({mode: {type: createMode}});
47 await addCollectionAdminExpectSuccess(alice, newCollectionID, bob);
48 await createItemExpectSuccess(bob, newCollectionID, createMode);
49 });
50 it('Create new item in Fungible collection with collection admin permissions', async () => {
51 const createMode = 'Fungible';
52 const newCollectionID = await createCollectionExpectSuccess({mode: {type: createMode, decimalPoints: 0}});
53 await addCollectionAdminExpectSuccess(alice, newCollectionID, bob);
54 await createItemExpectSuccess(bob, newCollectionID, createMode);
55 });
56 it('Create new item in ReFungible collection with collection admin permissions', async () => {
57 const createMode = 'ReFungible';
58 const newCollectionID = await createCollectionExpectSuccess({mode: {type: createMode}});
59 await addCollectionAdminExpectSuccess(alice, newCollectionID, bob);
60 await createItemExpectSuccess(bob, newCollectionID, createMode);
61 });
39});62});
63
64describe('Negative integration test: ext. createItem():', () => {
65 before(async () => {
66 await usingApi(async () => {
67 const keyring = new Keyring({ type: 'sr25519' });
68 alice = keyring.addFromUri('//Alice');
69 bob = keyring.addFromUri('//Bob');
70 });
71 });
72
73 it('Regular user cannot create new item in NFT collection', async () => {
74 const createMode = 'NFT';
75 const newCollectionID = await createCollectionExpectSuccess({mode: {type: createMode}});
76 await expect(createItemExpectSuccess(bob, newCollectionID, createMode)).to.be.rejected;
77 });
78 it('Regular user cannot create new item in Fungible collection', async () => {
79 const createMode = 'Fungible';
80 const newCollectionID = await createCollectionExpectSuccess({mode: {type: createMode, decimalPoints: 0}});
81 await expect(createItemExpectSuccess(bob, newCollectionID, createMode)).to.be.rejected;
82 });
83 it('Regular user cannot create new item in ReFungible collection', async () => {
84 const createMode = 'ReFungible';
85 const newCollectionID = await createCollectionExpectSuccess({mode: {type: createMode}});
86 await expect(createItemExpectSuccess(bob, newCollectionID, createMode)).to.be.rejected;
87 });
88});
4089
modifiedtests/src/createMultipleItems.test.tsdiffbeforeafterboth
3// file 'LICENSE', which is part of this source code package.3// file 'LICENSE', which is part of this source code package.
4//4//
5import { ApiPromise } from '@polkadot/api';5import { ApiPromise } from '@polkadot/api';
6import { IKeyringPair } from '@polkadot/types/types';
6import BN from 'bn.js';7import BN from 'bn.js';
7import chai from 'chai';8import chai from 'chai';
8import chaiAsPromised from 'chai-as-promised';9import chaiAsPromised from 'chai-as-promised';
12 createCollectionExpectSuccess,13 createCollectionExpectSuccess,
13 destroyCollectionExpectSuccess,14 destroyCollectionExpectSuccess,
14 getGenericResult,15 getGenericResult,
16 IFungibleTokenDataType,
15 IReFungibleTokenDataType,17 IReFungibleTokenDataType,
16 normalizeAccountId,18 normalizeAccountId,
17 setCollectionLimitsExpectSuccess,19 setCollectionLimitsExpectSuccess,
20 addCollectionAdminExpectSuccess,
18} from './util/helpers';21} from './util/helpers';
1922
20chai.use(chaiAsPromised);23chai.use(chaiAsPromised);
57 });60 });
58 });61 });
5962
63 it('Create 0x01, 0x02, 0x03 items in active Fungible collection and verify tokens data in chain', async () => {
64 await usingApi(async (api: ApiPromise) => {
65 const collectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
66 const itemsListIndexBefore = await api.query.nft.itemListIndex(collectionId) as unknown as BN;
67 expect(itemsListIndexBefore.toNumber()).to.be.equal(0);
68 const Alice = privateKey('//Alice');
69 const args = [
70 {fungible: { value: 1 }},
71 {fungible: { value: 2 }},
72 {fungible: { value: 3 }},
73 ];
74 const createMultipleItemsTx = api.tx.nft
75 .createMultipleItems(collectionId, normalizeAccountId(Alice.address), args);
76 await submitTransactionAsync(Alice, createMultipleItemsTx);
77 const token1Data = (await api.query.nft.fungibleItemList(collectionId, Alice.address) as any).toJSON() as unknown as IFungibleTokenDataType;
78
79 expect(token1Data.Value).to.be.equal(6); // 1 + 2 + 3
80 });
81 });
82
60 it('Create 0x31, 0x32, 0x33 items in active ReFungible collection and verify tokens data in chain', async () => {83 it('Create 0x31, 0x32, 0x33 items in active ReFungible collection and verify tokens data in chain', async () => {
61 await usingApi(async (api: ApiPromise) => {84 await usingApi(async (api: ApiPromise) => {
62 const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});85 const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
116 });139 });
117});140});
118141
142describe('Integration Test createMultipleItems(collection_id, owner, items_data) with collection admin permissions:', () => {
143
144 let Alice: IKeyringPair;
145 let Bob: IKeyringPair;
146
147 before(async () => {
148 await usingApi(async () => {
149 Alice = privateKey('//Alice');
150 Bob = privateKey('//Bob');
151 });
152 });
153
154 it('Create 0x31, 0x32, 0x33 items in active NFT collection and verify tokens data in chain', async () => {
155 await usingApi(async (api: ApiPromise) => {
156 const collectionId = await createCollectionExpectSuccess();
157 const itemsListIndexBefore = await api.query.nft.itemListIndex(collectionId) as unknown as BN;
158 expect(itemsListIndexBefore.toNumber()).to.be.equal(0);
159 await addCollectionAdminExpectSuccess(Alice, collectionId, Bob);
160 const args = [{ nft: ['0x31', '0x31'] }, { nft: ['0x32', '0x32'] }, { nft: ['0x33', '0x33'] }];
161 const createMultipleItemsTx = api.tx.nft
162 .createMultipleItems(collectionId, normalizeAccountId(Bob.address), args);
163 await submitTransactionAsync(Bob, createMultipleItemsTx);
164 const itemsListIndexAfter = await api.query.nft.itemListIndex(collectionId) as unknown as BN;
165 expect(itemsListIndexAfter.toNumber()).to.be.equal(3);
166 const token1Data = (await api.query.nft.nftItemList(collectionId, 1)).toJSON() as unknown as ITokenDataType;
167 const token2Data = (await api.query.nft.nftItemList(collectionId, 2)).toJSON() as unknown as ITokenDataType;
168 const token3Data = (await api.query.nft.nftItemList(collectionId, 3)).toJSON() as unknown as ITokenDataType;
169
170 expect(token1Data.Owner).to.be.deep.equal(normalizeAccountId(Bob.address));
171 expect(token2Data.Owner).to.be.deep.equal(normalizeAccountId(Bob.address));
172 expect(token3Data.Owner).to.be.deep.equal(normalizeAccountId(Bob.address));
173
174 expect(token1Data.ConstData.toString()).to.be.equal('0x31');
175 expect(token2Data.ConstData.toString()).to.be.equal('0x32');
176 expect(token3Data.ConstData.toString()).to.be.equal('0x33');
177
178 expect(token1Data.VariableData.toString()).to.be.equal('0x31');
179 expect(token2Data.VariableData.toString()).to.be.equal('0x32');
180 expect(token3Data.VariableData.toString()).to.be.equal('0x33');
181 });
182 });
183
184 it('Create 0x01, 0x02, 0x03 items in active Fungible collection and verify tokens data in chain', async () => {
185 await usingApi(async (api: ApiPromise) => {
186 const collectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
187 const itemsListIndexBefore = await api.query.nft.itemListIndex(collectionId) as unknown as BN;
188 expect(itemsListIndexBefore.toNumber()).to.be.equal(0);
189 await addCollectionAdminExpectSuccess(Alice, collectionId, Bob);
190 const args = [
191 {fungible: { value: 1 }},
192 {fungible: { value: 2 }},
193 {fungible: { value: 3 }},
194 ];
195 const createMultipleItemsTx = api.tx.nft
196 .createMultipleItems(collectionId, normalizeAccountId(Bob.address), args);
197 await submitTransactionAsync(Bob, createMultipleItemsTx);
198 const token1Data = (await api.query.nft.fungibleItemList(collectionId, Bob.address) as any).toJSON() as unknown as IFungibleTokenDataType;
199
200 expect(token1Data.Value).to.be.equal(6); // 1 + 2 + 3
201 });
202 });
203
204 it('Create 0x31, 0x32, 0x33 items in active ReFungible collection and verify tokens data in chain', async () => {
205 await usingApi(async (api: ApiPromise) => {
206 const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
207 const itemsListIndexBefore = await api.query.nft.itemListIndex(collectionId) as unknown as BN;
208 expect(itemsListIndexBefore.toNumber()).to.be.equal(0);
209 await addCollectionAdminExpectSuccess(Alice, collectionId, Bob);
210 const args = [
211 {refungible: {const_data: [0x31], variable_data: [0x31], pieces: 1}},
212 {refungible: {const_data: [0x32], variable_data: [0x32], pieces: 1}},
213 {refungible: {const_data: [0x33], variable_data: [0x33], pieces: 1}},
214 ];
215 const createMultipleItemsTx = api.tx.nft
216 .createMultipleItems(collectionId, normalizeAccountId(Bob.address), args);
217 await submitTransactionAsync(Bob, createMultipleItemsTx);
218 const itemsListIndexAfter = await api.query.nft.itemListIndex(collectionId) as unknown as BN;
219 expect(itemsListIndexAfter.toNumber()).to.be.equal(3);
220 const token1Data = (await api.query.nft.reFungibleItemList(collectionId, 1) as any).toJSON() as unknown as IReFungibleTokenDataType;
221 const token2Data = (await api.query.nft.reFungibleItemList(collectionId, 2) as any).toJSON() as unknown as IReFungibleTokenDataType;
222 const token3Data = (await api.query.nft.reFungibleItemList(collectionId, 3) as any).toJSON() as unknown as IReFungibleTokenDataType;
223
224 expect(token1Data.Owner[0].Owner).to.be.deep.equal(normalizeAccountId(Bob.address));
225 expect(token1Data.Owner[0].Fraction).to.be.equal(1);
226
227 expect(token2Data.Owner[0].Owner).to.be.deep.equal(normalizeAccountId(Bob.address));
228 expect(token2Data.Owner[0].Fraction).to.be.equal(1);
229
230 expect(token3Data.Owner[0].Owner).to.be.deep.equal(normalizeAccountId(Bob.address));
231 expect(token3Data.Owner[0].Fraction).to.be.equal(1);
232
233 expect(token1Data.ConstData.toString()).to.be.equal('0x31');
234 expect(token2Data.ConstData.toString()).to.be.equal('0x32');
235 expect(token3Data.ConstData.toString()).to.be.equal('0x33');
236
237 expect(token1Data.VariableData.toString()).to.be.equal('0x31');
238 expect(token2Data.VariableData.toString()).to.be.equal('0x32');
239 expect(token3Data.VariableData.toString()).to.be.equal('0x33');
240 });
241 });
242});
243
119describe('Negative Integration Test createMultipleItems(collection_id, owner, items_data):', () => {244describe('Negative Integration Test createMultipleItems(collection_id, owner, items_data):', () => {
245
246 let Alice: IKeyringPair;
247 let Bob: IKeyringPair;
248
249 before(async () => {
250 await usingApi(async () => {
251 Alice = privateKey('//Alice');
252 Bob = privateKey('//Bob');
253 });
254 });
255
256 it('Regular user cannot create items in active NFT collection', async () => {
257 await usingApi(async (api: ApiPromise) => {
258 const collectionId = await createCollectionExpectSuccess();
259 const itemsListIndexBefore = await api.query.nft.itemListIndex(collectionId) as unknown as BN;
260 expect(itemsListIndexBefore.toNumber()).to.be.equal(0);
261 const args = [{ nft: ['0x31', '0x31'] }, { nft: ['0x32', '0x32'] }, { nft: ['0x33', '0x33'] }];
262 const createMultipleItemsTx = api.tx.nft
263 .createMultipleItems(collectionId, normalizeAccountId(Alice.address), args);
264 await expect(submitTransactionAsync(Bob, createMultipleItemsTx)).to.be.rejected;
265 });
266 });
267
268 it('Regular user cannot create items in active Fungible collection', async () => {
269 await usingApi(async (api: ApiPromise) => {
270 const collectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
271 const itemsListIndexBefore = await api.query.nft.itemListIndex(collectionId) as unknown as BN;
272 expect(itemsListIndexBefore.toNumber()).to.be.equal(0);
273 const args = [
274 {fungible: { value: 1 }},
275 {fungible: { value: 2 }},
276 {fungible: { value: 3 }},
277 ];
278 const createMultipleItemsTx = api.tx.nft
279 .createMultipleItems(collectionId, normalizeAccountId(Alice.address), args);
280 await expect(submitTransactionAsync(Bob, createMultipleItemsTx)).to.be.rejected;
281 });
282 });
283
284 it('Regular user cannot create items in active ReFungible collection', async () => {
285 await usingApi(async (api: ApiPromise) => {
286 const collectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
287 const itemsListIndexBefore = await api.query.nft.itemListIndex(collectionId) as unknown as BN;
288 expect(itemsListIndexBefore.toNumber()).to.be.equal(0);
289 const args = [
290 {refungible: {const_data: [0x31], variable_data: [0x31], pieces: 1}},
291 {refungible: {const_data: [0x32], variable_data: [0x32], pieces: 1}},
292 {refungible: {const_data: [0x33], variable_data: [0x33], pieces: 1}},
293 ];
294 const createMultipleItemsTx = api.tx.nft
295 .createMultipleItems(collectionId, normalizeAccountId(Alice.address), args);
296 await expect(submitTransactionAsync(Bob, createMultipleItemsTx)).to.be.rejected;
297 });
298 });
299
120 it('Create token with not existing type', async () => {300 it('Create token with not existing type', async () => {
121 await usingApi(async (api: ApiPromise) => {301 await usingApi(async (api: ApiPromise) => {
122 const collectionId = await createCollectionExpectSuccess();302 const collectionId = await createCollectionExpectSuccess();
123 const Alice = privateKey('//Alice');
124 try {303 try {
125 const args = [{ invalid: null }, { invalid: null }, { invalid: null }];304 const args = [{ invalid: null }, { invalid: null }, { invalid: null }];
126 const createMultipleItemsTx = await api.tx.nft305 const createMultipleItemsTx = await api.tx.nft
136 it('Create token in not existing collection', async () => {315 it('Create token in not existing collection', async () => {
137 await usingApi(async (api: ApiPromise) => {316 await usingApi(async (api: ApiPromise) => {
138 const collectionId = parseInt((await api.query.nft.createdCollectionCount()).toString()) + 1;317 const collectionId = parseInt((await api.query.nft.createdCollectionCount()).toString()) + 1;
139 const Alice = privateKey('//Alice');
140 const createMultipleItemsTx = api.tx.nft318 const createMultipleItemsTx = api.tx.nft
141 .createMultipleItems(collectionId, normalizeAccountId(Alice.address), ['NFT', 'NFT', 'NFT']);319 .createMultipleItems(collectionId, normalizeAccountId(Alice.address), ['NFT', 'NFT', 'NFT']);
142 await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTx)).to.be.rejected;320 await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTx)).to.be.rejected;
174 it('Create tokens with different types', async () => {352 it('Create tokens with different types', async () => {
175 await usingApi(async (api: ApiPromise) => {353 await usingApi(async (api: ApiPromise) => {
176 const collectionId = await createCollectionExpectSuccess();354 const collectionId = await createCollectionExpectSuccess();
177 const Alice = privateKey('//Alice');
178 const createMultipleItemsTx = api.tx.nft355 const createMultipleItemsTx = api.tx.nft
179 .createMultipleItems(collectionId, normalizeAccountId(Alice.address), ['NFT', 'Fungible', 'ReFungible']);356 .createMultipleItems(collectionId, normalizeAccountId(Alice.address), ['NFT', 'Fungible', 'ReFungible']);
180 await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTx)).to.be.rejected;357 await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTx)).to.be.rejected;
186 it('Create tokens with different data limits <> maximum data limit', async () => {363 it('Create tokens with different data limits <> maximum data limit', async () => {
187 await usingApi(async (api: ApiPromise) => {364 await usingApi(async (api: ApiPromise) => {
188 const collectionId = await createCollectionExpectSuccess();365 const collectionId = await createCollectionExpectSuccess();
189 const Alice = privateKey('//Alice');
190 const args = [366 const args = [
191 { nft: ['A', 'A'] },367 { nft: ['A', 'A'] },
192 { nft: ['B', 'B'.repeat(2049)] },368 { nft: ['B', 'B'.repeat(2049)] },
200376
201 it('Fails when minting tokens exceeds collectionLimits amount', async () => {377 it('Fails when minting tokens exceeds collectionLimits amount', async () => {
202 await usingApi(async (api) => {378 await usingApi(async (api) => {
203 const alice = privateKey('//Alice');
204379
205 const collectionId = await createCollectionExpectSuccess();380 const collectionId = await createCollectionExpectSuccess();
206 await setCollectionLimitsExpectSuccess(alice, collectionId, {381 await setCollectionLimitsExpectSuccess(Alice, collectionId, {
207 TokenLimit: 1,382 TokenLimit: 1,
208 });383 });
209 const args = [384 const args = [
210 { nft: ['A', 'A'] },385 { nft: ['A', 'A'] },
211 { nft: ['B', 'B'] },386 { nft: ['B', 'B'] },
212 ];387 ];
213 const createMultipleItemsTx = api.tx.nft.createMultipleItems(collectionId, normalizeAccountId(alice.address), args);388 const createMultipleItemsTx = api.tx.nft.createMultipleItems(collectionId, normalizeAccountId(Alice.address), args);
214 await expect(submitTransactionExpectFailAsync(alice, createMultipleItemsTx)).to.be.rejected;389 await expect(submitTransactionExpectFailAsync(Alice, createMultipleItemsTx)).to.be.rejected;
215 });390 });
216 });391 });
217});392});
modifiedtests/src/destroyCollection.test.tsdiffbeforeafterboth
11import { createCollectionExpectSuccess, destroyCollectionExpectSuccess, destroyCollectionExpectFailure, setCollectionLimitsExpectSuccess } from './util/helpers';11import { createCollectionExpectSuccess,
12 destroyCollectionExpectSuccess,
13 destroyCollectionExpectFailure,
14 setCollectionLimitsExpectSuccess,
15 addCollectionAdminExpectSuccess,
16} from './util/helpers';
1217
13chai.use(chaiAsPromised);18chai.use(chaiAsPromised);
2934
30describe('(!negative test!) integration test: ext. destroyCollection():', () => {35describe('(!negative test!) integration test: ext. destroyCollection():', () => {
31 let alice: IKeyringPair;36 let alice: IKeyringPair;
37 let bob: IKeyringPair;
3238
33 before(async () => {39 before(async () => {
34 await usingApi(async () => {40 await usingApi(async () => {
35 alice = privateKey('//Alice');41 alice = privateKey('//Alice');
42 bob = privateKey('//Bob');
36 });43 });
37 });44 });
3845
53 await destroyCollectionExpectFailure(collectionId, '//Bob');60 await destroyCollectionExpectFailure(collectionId, '//Bob');
54 await destroyCollectionExpectSuccess(collectionId, '//Alice');61 await destroyCollectionExpectSuccess(collectionId, '//Alice');
55 });62 });
63 it('(!negative test!) Destroy a collection using collection admin account', async () => {
64 const collectionId = await createCollectionExpectSuccess();
65 await addCollectionAdminExpectSuccess(alice, collectionId, bob);
66 await destroyCollectionExpectFailure(collectionId, '//Bob');
67 });
56 it('fails when OwnerCanDestroy == false', async () => {68 it('fails when OwnerCanDestroy == false', async () => {
57 const collectionId = await createCollectionExpectSuccess();69 const collectionId = await createCollectionExpectSuccess();
58 await setCollectionLimitsExpectSuccess(alice, collectionId, { OwnerCanDestroy: false });70 await setCollectionLimitsExpectSuccess(alice, collectionId, { OwnerCanDestroy: false });
addedtests/src/enableDisableTransfer.test.tsdiffbeforeafterboth

no changes

addedtests/src/eth/allowlist.test.tsdiffbeforeafterboth

no changes

addedtests/src/eth/api/ContractHelpers.soldiffbeforeafterboth

no changes

addedtests/src/eth/api/UniqueFungible.soldiffbeforeafterboth

no changes

addedtests/src/eth/api/UniqueNFT.soldiffbeforeafterboth

no changes

addedtests/src/eth/base.test.tsdiffbeforeafterboth

no changes

addedtests/src/eth/crossTransfer.test.tsdiffbeforeafterboth

no changes

modifiedtests/src/eth/fungible.test.tsdiffbeforeafterboth
4//4//
55
6import privateKey from '../substrate/privateKey';6import privateKey from '../substrate/privateKey';
7import { approveExpectSuccess, createCollectionExpectSuccess, createFungibleItemExpectSuccess, transferExpectSuccess, transferFromExpectSuccess } from '../util/helpers';7import { approveExpectSuccess, createCollectionExpectSuccess, createFungibleItemExpectSuccess, transferExpectSuccess, transferFromExpectSuccess, UNIQUE } from '../util/helpers';
8import { collectionIdToAddress, createEthAccount, itWeb3, normalizeEvents, recordEvents, subToEth, transferBalanceToEth } from './util/helpers';8import { collectionIdToAddress, createEthAccount, createEthAccountWithBalance, GAS_ARGS, itWeb3, normalizeEvents, recordEthFee, recordEvents, subToEth, transferBalanceToEth } from './util/helpers';
9import fungibleAbi from './fungibleAbi.json';9import fungibleAbi from './fungibleAbi.json';
10import { expect } from 'chai';10import { expect } from 'chai';
1111
12describe('Information getting', () => {12describe('Fungible: Information getting', () => {
13 itWeb3('totalSupply', async ({ web3 }) => {13 itWeb3('totalSupply', async ({ api, web3 }) => {
14 const collection = await createCollectionExpectSuccess({14 const collection = await createCollectionExpectSuccess({
15 name: 'token name',15 name: 'token name',
16 mode: { type: 'Fungible', decimalPoints: 0 },16 mode: { type: 'Fungible', decimalPoints: 0 },
17 });17 });
18 const alice = privateKey('//Alice');18 const alice = privateKey('//Alice');
1919
20 const caller = await createEthAccountWithBalance(api, web3);
21
20 await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { substrate: alice.address });22 await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { substrate: alice.address });
2123
22 const address = collectionIdToAddress(collection);24 const address = collectionIdToAddress(collection);
23 const contract = new web3.eth.Contract(fungibleAbi as any, address);25 const contract = new web3.eth.Contract(fungibleAbi as any, address, {from: caller, ...GAS_ARGS});
24 const totalSupply = await contract.methods.totalSupply().call();26 const totalSupply = await contract.methods.totalSupply().call();
2527
26 // FIXME: always equals to 0, because this method is not implemented28 // FIXME: always equals to 0, because this method is not implemented
27 expect(totalSupply).to.equal('0');29 expect(totalSupply).to.equal('0');
28 });30 });
2931
30 itWeb3('balanceOf', async ({ web3 }) => {32 itWeb3('balanceOf', async ({ api, web3 }) => {
31 const collection = await createCollectionExpectSuccess({33 const collection = await createCollectionExpectSuccess({
32 name: 'token name',34 name: 'token name',
33 mode: { type: 'Fungible', decimalPoints: 0 },35 mode: { type: 'Fungible', decimalPoints: 0 },
34 });36 });
35 const alice = privateKey('//Alice');37 const alice = privateKey('//Alice');
3638
37 const caller = createEthAccount(web3);39 const caller = await createEthAccountWithBalance(api, web3);
40
38 await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: caller });41 await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: caller });
3942
40 const address = collectionIdToAddress(collection);43 const address = collectionIdToAddress(collection);
41 const contract = new web3.eth.Contract(fungibleAbi as any, address);44 const contract = new web3.eth.Contract(fungibleAbi as any, address, {from: caller, ...GAS_ARGS});
42 const balance = await contract.methods.balanceOf(caller).call();45 const balance = await contract.methods.balanceOf(caller).call();
4346
44 expect(balance).to.equal('200');47 expect(balance).to.equal('200');
45 });48 });
46});49});
4750
48describe('Plain calls', () => {51describe('Fungible: Plain calls', () => {
49 itWeb3('Can perform approve()', async ({ web3, api }) => {52 itWeb3('Can perform approve()', async ({ web3, api }) => {
50 const collection = await createCollectionExpectSuccess({53 const collection = await createCollectionExpectSuccess({
51 name: 'token name',54 name: 'token name',
52 mode: { type: 'Fungible', decimalPoints: 0 },55 mode: { type: 'Fungible', decimalPoints: 0 },
53 });56 });
54 const alice = privateKey('//Alice');57 const alice = privateKey('//Alice');
5558
56 const owner = createEthAccount(web3);59 const owner = await createEthAccountWithBalance(api, web3);
57 await transferBalanceToEth(api, alice, owner, 999999999999999);
5860
59 await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: owner });61 await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: owner });
6062
61 const spender = createEthAccount(web3);63 const spender = createEthAccount(web3);
6264
63 const address = collectionIdToAddress(collection);65 const address = collectionIdToAddress(collection);
64 const contract = new web3.eth.Contract(fungibleAbi as any, address);66 const contract = new web3.eth.Contract(fungibleAbi as any, address, {from: owner, ...GAS_ARGS});
6567
66 {68 {
67 const result = await contract.methods.approve(spender, 100).send({ from: owner, gas: '0x1000000', gasPrice: '0x01' });69 const result = await contract.methods.approve(spender, 100).send({from: owner});
68 const events = normalizeEvents(result.events);70 const events = normalizeEvents(result.events);
6971
70 expect(events).to.be.deep.equal([72 expect(events).to.be.deep.equal([
104 const receiver = createEthAccount(web3);106 const receiver = createEthAccount(web3);
105107
106 const address = collectionIdToAddress(collection);108 const address = collectionIdToAddress(collection);
107 const contract = new web3.eth.Contract(fungibleAbi as any, address);109 const contract = new web3.eth.Contract(fungibleAbi as any, address, {from: owner, ...GAS_ARGS});
108110
109 await contract.methods.approve(spender, 100).send({ from: owner, gas: '0x1000000', gasPrice: '0x01' });111 await contract.methods.approve(spender, 100).send();
110112
111 {113 {
112 const result = await contract.methods.transferFrom(owner, receiver, 49).send({ from: spender, gas: '0x1000000', gasPrice: '0x01' });114 const result = await contract.methods.transferFrom(owner, receiver, 49).send({from: spender});
113 const events = normalizeEvents(result.events);115 const events = normalizeEvents(result.events);
114 expect(events).to.be.deep.equal([116 expect(events).to.be.deep.equal([
115 {117 {
160 await transferBalanceToEth(api, alice, receiver, 999999999999999);162 await transferBalanceToEth(api, alice, receiver, 999999999999999);
161163
162 const address = collectionIdToAddress(collection);164 const address = collectionIdToAddress(collection);
163 const contract = new web3.eth.Contract(fungibleAbi as any, address);165 const contract = new web3.eth.Contract(fungibleAbi as any, address, {from: owner, ...GAS_ARGS});
164166
165 {167 {
166 const result = await contract.methods.transfer(receiver, 50).send({ from: owner, gas: '0x1000000', gasPrice: '0x01' });168 const result = await contract.methods.transfer(receiver, 50).send({ from: owner});
167 const events = normalizeEvents(result.events);169 const events = normalizeEvents(result.events);
168 expect(events).to.be.deep.equal([170 expect(events).to.be.deep.equal([
169 {171 {
187 const balance = await contract.methods.balanceOf(receiver).call();189 const balance = await contract.methods.balanceOf(receiver).call();
188 expect(+balance).to.equal(50);190 expect(+balance).to.equal(50);
189 }191 }
192 });
193});
194
195describe('Fungible: Fees', () => {
196 itWeb3('approve() call fee is less than 0.2UNQ', async ({ web3, api }) => {
197 const collection = await createCollectionExpectSuccess({
198 mode: { type: 'Fungible', decimalPoints: 0 },
199 });
200 const alice = privateKey('//Alice');
201
202 const owner = await createEthAccountWithBalance(api, web3);
203 const spender = createEthAccount(web3);
204
205 await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: owner });
206
207 const address = collectionIdToAddress(collection);
208 const contract = new web3.eth.Contract(fungibleAbi as any, address, { from: owner, ...GAS_ARGS });
209
210 const cost = await recordEthFee(api, owner, () => contract.methods.approve(spender, 100).send({ from: owner }));
211 expect(cost < BigInt(0.2 * Number(UNIQUE)));
212 });
213
214 itWeb3('transferFrom() call fee is less than 0.2UNQ', async ({ web3, api }) => {
215 const collection = await createCollectionExpectSuccess({
216 mode: {type: 'Fungible', decimalPoints: 0},
217 });
218 const alice = privateKey('//Alice');
219
220 const owner = await createEthAccountWithBalance(api, web3);
221 const spender = await createEthAccountWithBalance(api, web3);
222
223 await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: owner });
224
225 const address = collectionIdToAddress(collection);
226 const contract = new web3.eth.Contract(fungibleAbi as any, address, { from: owner, ...GAS_ARGS });
227
228 await contract.methods.approve(spender, 100).send({ from: owner });
229
230 const cost = await recordEthFee(api, spender, () => contract.methods.transferFrom(owner, spender, 100).send({ from: spender }));
231 expect(cost < BigInt(0.2 * Number(UNIQUE)));
232 });
233
234 itWeb3('transfer() call fee is less than 0.2UNQ', async ({ web3, api }) => {
235 const collection = await createCollectionExpectSuccess({
236 mode: { type: 'Fungible', decimalPoints: 0 },
237 });
238 const alice = privateKey('//Alice');
239
240 const owner = await createEthAccountWithBalance(api, web3);
241 const receiver = createEthAccount(web3);
242
243 await createFungibleItemExpectSuccess(alice, collection, { Value: 200n }, { ethereum: owner });
244
245 const address = collectionIdToAddress(collection);
246 const contract = new web3.eth.Contract(fungibleAbi as any, address, { from: owner, ...GAS_ARGS });
247
248 const cost = await recordEthFee(api, owner, () => contract.methods.transfer(receiver, 100).send({ from: owner }));
249 expect(cost < BigInt(0.2 * Number(UNIQUE)));
190 });250 });
191});251});
192252
193describe('Substrate calls', () => {253describe('Fungible: Substrate calls', () => {
194 itWeb3('Events emitted for approve()', async ({ web3 }) => {254 itWeb3('Events emitted for approve()', async ({ web3 }) => {
195 const collection = await createCollectionExpectSuccess({255 const collection = await createCollectionExpectSuccess({
196 mode: { type: 'Fungible', decimalPoints: 0 },256 mode: { type: 'Fungible', decimalPoints: 0 },
addedtests/src/eth/helpersSmoke.test.tsdiffbeforeafterboth

no changes

addedtests/src/eth/marketplace/MarketPlaceKSM.abidiffbeforeafterboth

no changes

addedtests/src/eth/marketplace/MarketPlaceKSM.bindiffbeforeafterboth

no changes

addedtests/src/eth/marketplace/MarketPlaceKSM.soldiffbeforeafterboth

no changes

addedtests/src/eth/marketplace/MarketPlaceUNQ.abidiffbeforeafterboth

no changes

addedtests/src/eth/marketplace/MarketPlaceUNQ.bindiffbeforeafterboth

no changes

addedtests/src/eth/marketplace/MarketPlaceUNQ.soldiffbeforeafterboth

no changes

addedtests/src/eth/marketplace/marketplace.test.tsdiffbeforeafterboth

no changes

modifiedtests/src/eth/metadata.test.tsdiffbeforeafterboth
4//4//
55
6import { expect } from 'chai';6import { expect } from 'chai';
7import privateKey from '../substrate/privateKey';
8import { createCollectionExpectSuccess } from '../util/helpers';7import { createCollectionExpectSuccess } from '../util/helpers';
9import { collectionIdToAddress, createEthAccount, itWeb3, transferBalanceToEth } from './util/helpers';8import { collectionIdToAddress, createEthAccountWithBalance, GAS_ARGS, itWeb3 } from './util/helpers';
10import fungibleMetadataAbi from './fungibleMetadataAbi.json';9import fungibleMetadataAbi from './fungibleMetadataAbi.json';
1110
12describe('Common metadata', () => {11describe('Common metadata', () => {
15 name: 'token name',14 name: 'token name',
16 mode: { type: 'NFT' },15 mode: { type: 'NFT' },
17 });16 });
18 const caller = createEthAccount(web3);17 const caller = await createEthAccountWithBalance(api, web3);
19 await transferBalanceToEth(api, privateKey('//Alice'), caller, 999999);
2018
21 const address = collectionIdToAddress(collection);19 const address = collectionIdToAddress(collection);
22 const contract = new web3.eth.Contract(fungibleMetadataAbi as any, address);20 const contract = new web3.eth.Contract(fungibleMetadataAbi as any, address, { from: caller, ...GAS_ARGS });
23 const name = await contract.methods.name().call({ from: caller });21 const name = await contract.methods.name().call();
2422
25 expect(name).to.equal('token name');23 expect(name).to.equal('token name');
26 });24 });
30 tokenPrefix: 'TOK',28 tokenPrefix: 'TOK',
31 mode: { type: 'NFT' },29 mode: { type: 'NFT' },
32 });30 });
33 const caller = createEthAccount(web3);31 const caller = await createEthAccountWithBalance(api, web3);
34 await transferBalanceToEth(api, privateKey('//Alice'), caller, 999999);
3532
36 const address = collectionIdToAddress(collection);33 const address = collectionIdToAddress(collection);
37 const contract = new web3.eth.Contract(fungibleMetadataAbi as any, address);34 const contract = new web3.eth.Contract(fungibleMetadataAbi as any, address, { from: caller, ...GAS_ARGS });
38 const symbol = await contract.methods.symbol().call({ from: caller });35 const symbol = await contract.methods.symbol().call();
3936
40 expect(symbol).to.equal('TOK');37 expect(symbol).to.equal('TOK');
41 });38 });
46 const collection = await createCollectionExpectSuccess({43 const collection = await createCollectionExpectSuccess({
47 mode: { type: 'Fungible', decimalPoints: 6 },44 mode: { type: 'Fungible', decimalPoints: 6 },
48 });45 });
49 const caller = createEthAccount(web3);46 const caller = await createEthAccountWithBalance(api, web3);
50 await transferBalanceToEth(api, privateKey('//Alice'), caller, 999999);
5147
52 const address = collectionIdToAddress(collection);48 const address = collectionIdToAddress(collection);
53 const contract = new web3.eth.Contract(fungibleMetadataAbi as any, address);49 const contract = new web3.eth.Contract(fungibleMetadataAbi as any, address, { from: caller, ...GAS_ARGS });
54 const decimals = await contract.methods.decimals().call({ from: caller });50 const decimals = await contract.methods.decimals().call();
5551
56 expect(+decimals).to.equal(6);52 expect(+decimals).to.equal(6);
57 });53 });
addedtests/src/eth/migration.test.tsdiffbeforeafterboth

no changes

modifiedtests/src/eth/nonFungible.test.tsdiffbeforeafterboth
4//4//
55
6import privateKey from '../substrate/privateKey';6import privateKey from '../substrate/privateKey';
7import { approveExpectSuccess, createCollectionExpectSuccess, createItemExpectSuccess, transferExpectSuccess, transferFromExpectSuccess } from '../util/helpers';7import { approveExpectSuccess, burnItemExpectSuccess, createCollectionExpectSuccess, createItemExpectSuccess, transferExpectSuccess, transferFromExpectSuccess, UNIQUE } from '../util/helpers';
8import { collectionIdToAddress, createEthAccount, itWeb3, normalizeEvents, recordEvents, subToEth, transferBalanceToEth } from './util/helpers';8import { collectionIdToAddress, createEthAccount, createEthAccountWithBalance, GAS_ARGS, itWeb3, normalizeEvents, recordEthFee, recordEvents, subToEth, transferBalanceToEth } from './util/helpers';
9import { evmToAddress } from '@polkadot/util-crypto';
9import nonFungibleAbi from './nonFungibleAbi.json';10import nonFungibleAbi from './nonFungibleAbi.json';
10import { expect } from 'chai';11import { expect } from 'chai';
12import waitNewBlocks from '../substrate/wait-new-blocks';
13import { submitTransactionAsync } from '../substrate/substrate-api';
1114
12describe('Information getting', () => {15describe('NFT: Information getting', () => {
13 itWeb3('totalSupply', async ({ web3 }) => {16 itWeb3('totalSupply', async ({ api, web3 }) => {
14 const collection = await createCollectionExpectSuccess({17 const collection = await createCollectionExpectSuccess({
15 mode: { type: 'NFT' },18 mode: { type: 'NFT' },
16 });19 });
17 const alice = privateKey('//Alice');20 const alice = privateKey('//Alice');
21 const caller = await createEthAccountWithBalance(api, web3);
1822
19 await createItemExpectSuccess(alice, collection, 'NFT', { substrate: alice.address });23 await createItemExpectSuccess(alice, collection, 'NFT', { substrate: alice.address });
2024
21 const address = collectionIdToAddress(collection);25 const address = collectionIdToAddress(collection);
22 const contract = new web3.eth.Contract(nonFungibleAbi as any, address);26 const contract = new web3.eth.Contract(nonFungibleAbi as any, address, {from: caller, ...GAS_ARGS});
23 const totalSupply = await contract.methods.totalSupply().call();27 const totalSupply = await contract.methods.totalSupply().call();
2428
25 // FIXME: always equals to 0, because this method is not implemented29 // FIXME: always equals to 0, because this method is not implemented
26 expect(totalSupply).to.equal('0');30 expect(totalSupply).to.equal('0');
27 });31 });
2832
29 itWeb3('balanceOf', async ({ web3 }) => {33 itWeb3('balanceOf', async ({ api, web3 }) => {
30 const collection = await createCollectionExpectSuccess({34 const collection = await createCollectionExpectSuccess({
31 mode: { type: 'NFT' },35 mode: { type: 'NFT' },
32 });36 });
33 const alice = privateKey('//Alice');37 const alice = privateKey('//Alice');
3438
35 const caller = createEthAccount(web3);39 const caller = await createEthAccountWithBalance(api, web3);
36 await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: caller });40 await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: caller });
37 await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: caller });41 await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: caller });
38 await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: caller });42 await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: caller });
3943
40 const address = collectionIdToAddress(collection);44 const address = collectionIdToAddress(collection);
41 const contract = new web3.eth.Contract(nonFungibleAbi as any, address);45 const contract = new web3.eth.Contract(nonFungibleAbi as any, address, {from: caller, ...GAS_ARGS});
42 const balance = await contract.methods.balanceOf(caller).call();46 const balance = await contract.methods.balanceOf(caller).call();
4347
44 expect(balance).to.equal('3');48 expect(balance).to.equal('3');
45 });49 });
4650
47 itWeb3('ownerOf', async ({ web3 }) => {51 itWeb3('ownerOf', async ({ api, web3 }) => {
48 const collection = await createCollectionExpectSuccess({52 const collection = await createCollectionExpectSuccess({
49 mode: { type: 'NFT' },53 mode: { type: 'NFT' },
50 });54 });
51 const alice = privateKey('//Alice');55 const alice = privateKey('//Alice');
5256
53 const caller = createEthAccount(web3);57 const caller = await createEthAccountWithBalance(api, web3);
54 const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: caller });58 const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: caller });
5559
56 const address = collectionIdToAddress(collection);60 const address = collectionIdToAddress(collection);
57 const contract = new web3.eth.Contract(nonFungibleAbi as any, address);61 const contract = new web3.eth.Contract(nonFungibleAbi as any, address, {from: caller, ...GAS_ARGS});
58 const owner = await contract.methods.ownerOf(tokenId).call();62 const owner = await contract.methods.ownerOf(tokenId).call();
5963
60 expect(owner).to.equal(caller);64 expect(owner).to.equal(caller);
61 });65 });
62});66});
6367
64describe('Plain calls', () => {68describe('NFT: Plain calls', () => {
69 itWeb3('Can perform mint()', async ({ web3, api }) => {
70 const collection = await createCollectionExpectSuccess({
71 mode: { type: 'NFT' },
72 });
73 const alice = privateKey('//Alice');
74
75 const caller = await createEthAccountWithBalance(api, web3);
76 const changeAdminTx = api.tx.nft.addCollectionAdmin(collection, { ethereum: caller });
77 await submitTransactionAsync(alice, changeAdminTx);
78 const receiver = createEthAccount(web3);
79
80 const address = collectionIdToAddress(collection);
81 const contract = new web3.eth.Contract(nonFungibleAbi as any, address, {from: caller, ...GAS_ARGS});
82
83 {
84 const nextTokenId = await contract.methods.nextTokenId().call();
85 expect(nextTokenId).to.be.equal('1');
86 const result = await contract.methods.mintWithTokenURI(
87 receiver,
88 nextTokenId,
89 'Test URI',
90 ).send({from: caller});
91 const events = normalizeEvents(result.events);
92
93 expect(events).to.be.deep.equal([
94 {
95 address,
96 event: 'Transfer',
97 args: {
98 from: '0x0000000000000000000000000000000000000000',
99 to: receiver,
100 tokenId: nextTokenId,
101 },
102 },
103 ]);
104
105 await waitNewBlocks(api, 1);
106 expect(await contract.methods.tokenURI(nextTokenId).call()).to.be.equal('Test URI');
107 }
108 });
109
110 itWeb3('Can perform burn()', async ({ web3, api }) => {
111 const collection = await createCollectionExpectSuccess({
112 mode: {type: 'NFT'},
113 });
114 const alice = privateKey('//Alice');
115
116 const owner = await createEthAccountWithBalance(api, web3);
117
118 const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: owner });
119
120 const address = collectionIdToAddress(collection);
121 const contract = new web3.eth.Contract(nonFungibleAbi as any, address, {from: owner, ...GAS_ARGS});
122
123 {
124 const result = await contract.methods.burn(tokenId).send({ from: owner });
125 const events = normalizeEvents(result.events);
126
127 expect(events).to.be.deep.equal([
128 {
129 address,
130 event: 'Transfer',
131 args: {
132 from: owner,
133 to: '0x0000000000000000000000000000000000000000',
134 tokenId: tokenId.toString(),
135 },
136 },
137 ]);
138 }
139 });
140
65 itWeb3('Can perform approve()', async ({ web3, api }) => {141 itWeb3('Can perform approve()', async ({ web3, api }) => {
66 const collection = await createCollectionExpectSuccess({142 const collection = await createCollectionExpectSuccess({
113 const receiver = createEthAccount(web3);189 const receiver = createEthAccount(web3);
114190
115 const address = collectionIdToAddress(collection);191 const address = collectionIdToAddress(collection);
116 const contract = new web3.eth.Contract(nonFungibleAbi as any, address);192 const contract = new web3.eth.Contract(nonFungibleAbi as any, address, {from: owner, ...GAS_ARGS});
117193
118 await contract.methods.approve(spender, tokenId).send({ from: owner, gas: '0x1000000', gasPrice: '0x01' });194 await contract.methods.approve(spender, tokenId).send({ from: owner });
119195
120 {196 {
121 const result = await contract.methods.transferFrom(owner, receiver, tokenId).send({ from: spender, gas: '0x1000000', gasPrice: '0x01' });197 const result = await contract.methods.transferFrom(owner, receiver, tokenId).send({ from: spender });
122 const events = normalizeEvents(result.events);198 const events = normalizeEvents(result.events);
123 expect(events).to.be.deep.equal([199 expect(events).to.be.deep.equal([
124 {200 {
159 await transferBalanceToEth(api, alice, receiver, 999999999999999);235 await transferBalanceToEth(api, alice, receiver, 999999999999999);
160236
161 const address = collectionIdToAddress(collection);237 const address = collectionIdToAddress(collection);
162 const contract = new web3.eth.Contract(nonFungibleAbi as any, address);238 const contract = new web3.eth.Contract(nonFungibleAbi as any, address, {from: owner, ...GAS_ARGS});
163239
164 {240 {
165 const result = await contract.methods.transfer(receiver, tokenId).send({ from: owner, gas: '0x1000000', gasPrice: '0x01' });241 const result = await contract.methods.transfer(receiver, tokenId).send({ from: owner });
166 console.log(result);242 await waitNewBlocks(api, 1);
167 const events = normalizeEvents(result.events);243 const events = normalizeEvents(result.events);
168 expect(events).to.be.deep.equal([244 expect(events).to.be.deep.equal([
169 {245 {
190 });266 });
191});267});
192268
193describe('Substrate calls', () => {269describe('NFT: Fees', () => {
270 itWeb3('approve() call fee is less than 0.2UNQ', async ({ web3, api }) => {
271 const collection = await createCollectionExpectSuccess({
272 mode: { type: 'NFT' },
273 });
274 const alice = privateKey('//Alice');
275
276 const owner = await createEthAccountWithBalance(api, web3);
277 const spender = createEthAccount(web3);
278
279 const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: owner });
280
281 const address = collectionIdToAddress(collection);
282 const contract = new web3.eth.Contract(nonFungibleAbi as any, address, { from: owner, ...GAS_ARGS });
283
284 const cost = await recordEthFee(api, owner, () => contract.methods.approve(spender, tokenId).send({ from: owner }));
285 expect(cost < BigInt(0.2 * Number(UNIQUE)));
286 });
287
288 itWeb3('transferFrom() call fee is less than 0.2UNQ', async ({ web3, api }) => {
289 const collection = await createCollectionExpectSuccess({
290 mode: { type: 'NFT' },
291 });
292 const alice = privateKey('//Alice');
293
294 const owner = await createEthAccountWithBalance(api, web3);
295 const spender = await createEthAccountWithBalance(api, web3);
296
297 const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: owner });
298
299 const address = collectionIdToAddress(collection);
300 const contract = new web3.eth.Contract(nonFungibleAbi as any, address, { from: owner, ...GAS_ARGS });
301
302 await contract.methods.approve(spender, tokenId).send({ from: owner });
303
304 const cost = await recordEthFee(api, spender, () => contract.methods.transferFrom(owner, spender, tokenId).send({ from: spender }));
305 expect(cost < BigInt(0.2 * Number(UNIQUE)));
306 });
307
308 itWeb3('transfer() call fee is less than 0.2UNQ', async ({ web3, api }) => {
309 const collection = await createCollectionExpectSuccess({
310 mode: { type: 'NFT' },
311 });
312 const alice = privateKey('//Alice');
313
314 const owner = await createEthAccountWithBalance(api, web3);
315 const receiver = createEthAccount(web3);
316
317 const tokenId = await createItemExpectSuccess(alice, collection, 'NFT', { ethereum: owner });
318
319 const address = collectionIdToAddress(collection);
320 const contract = new web3.eth.Contract(nonFungibleAbi as any, address, { from: owner, ...GAS_ARGS });
321
322 const cost = await recordEthFee(api, owner, () => contract.methods.transfer(receiver, tokenId).send({ from: owner }));
323 expect(cost < BigInt(0.2 * Number(UNIQUE)));
324 });
325});
326
327describe('NFT: Substrate calls', () => {
328 itWeb3('Events emitted for mint()', async ({ web3 }) => {
329 const collection = await createCollectionExpectSuccess({
330 mode: { type: 'NFT' },
331 });
332 const alice = privateKey('//Alice');
333
334 const address = collectionIdToAddress(collection);
335 const contract = new web3.eth.Contract(nonFungibleAbi as any, address);
336
337 let tokenId: number;
338 const events = await recordEvents(contract, async () => {
339 tokenId = await createItemExpectSuccess(alice, collection, 'NFT');
340 });
341
342 expect(events).to.be.deep.equal([
343 {
344 address,
345 event: 'Transfer',
346 args: {
347 from: '0x0000000000000000000000000000000000000000',
348 to: subToEth(alice.address),
349 tokenId: tokenId!.toString(),
350 },
351 },
352 ]);
353 });
354
355 itWeb3('Events emitted for burn()', async ({ web3 }) => {
356 const collection = await createCollectionExpectSuccess({
357 mode: { type: 'NFT' },
358 });
359 const alice = privateKey('//Alice');
360
361 const address = collectionIdToAddress(collection);
362 const contract = new web3.eth.Contract(nonFungibleAbi as any, address);
363
364 const tokenId = await createItemExpectSuccess(alice, collection, 'NFT');
365 const events = await recordEvents(contract, async () => {
366 await burnItemExpectSuccess(alice, collection, tokenId);
367 });
368
369 expect(events).to.be.deep.equal([
370 {
371 address,
372 event: 'Transfer',
373 args: {
374 from: subToEth(alice.address),
375 to: '0x0000000000000000000000000000000000000000',
376 tokenId: tokenId.toString(),
377 },
378 },
379 ]);
380 });
381
194 itWeb3('Events emitted for approve()', async ({ web3 }) => {382 itWeb3('Events emitted for approve()', async ({ web3 }) => {
195 const collection = await createCollectionExpectSuccess({383 const collection = await createCollectionExpectSuccess({
282 },470 },
283 ]);471 ]);
284 });472 });
285});473});
474
modifiedtests/src/eth/nonFungibleAbi.jsondiffbeforeafterboth
49 "name": "ApprovalForAll",49 "name": "ApprovalForAll",
50 "type": "event"50 "type": "event"
51 },51 },
52 {
53 "anonymous": true,
54 "inputs": [],
55 "name": "MintingFinished",
56 "type": "event"
57 },
52 {58 {
53 "anonymous": false,59 "anonymous": false,
54 "inputs": [60 "inputs": [
89 ],95 ],
90 "name": "approve",96 "name": "approve",
91 "outputs": [],97 "outputs": [],
92 "stateMutability": "payable",98 "stateMutability": "nonpayable",
93 "type": "function"99 "type": "function"
94 },100 },
95 {101 {
111 "stateMutability": "view",117 "stateMutability": "view",
112 "type": "function"118 "type": "function"
113 },119 },
120 {
121 "inputs": [
122 {
123 "internalType": "uint256",
124 "name": "tokenId",
125 "type": "uint256"
126 }
127 ],
128 "name": "burn",
129 "outputs": [],
130 "stateMutability": "nonpayable",
131 "type": "function"
132 },
133 {
134 "inputs": [],
135 "name": "finishMinting",
136 "outputs": [
137 {
138 "internalType": "bool",
139 "name": "",
140 "type": "bool"
141 }
142 ],
143 "stateMutability": "nonpayable",
144 "type": "function"
145 },
114 {146 {
115 "inputs": [147 "inputs": [
116 {148 {
130 "stateMutability": "view",162 "stateMutability": "view",
131 "type": "function"163 "type": "function"
132 },164 },
133 {165 {
134 "inputs": [166 "inputs": [
135 {167 {
136 "internalType": "address",168 "internalType": "address",
144 }176 }
145 ],177 ],
146 "name": "isApprovedForAll",178 "name": "isApprovedForAll",
179 "outputs": [
180 {
181 "internalType": "address",
182 "name": "",
183 "type": "address"
184 }
185 ],
186 "stateMutability": "view",
187 "type": "function"
188 },
189 {
190 "inputs": [
191 {
192 "internalType": "address",
193 "name": "to",
194 "type": "address"
195 },
196 {
197 "internalType": "uint256",
198 "name": "tokenId",
199 "type": "uint256"
200 }
201 ],
202 "name": "mint",
147 "outputs": [203 "outputs": [
148 {204 {
149 "internalType": "bool",205 "internalType": "bool",
150 "name": "",206 "name": "",
151 "type": "bool"207 "type": "bool"
152 }208 }
153 ],209 ],
210 "stateMutability": "nonpayable",
211 "type": "function"
212 },
213 {
214 "inputs": [
215 {
216 "internalType": "address",
217 "name": "to",
218 "type": "address"
219 },
220 {
221 "internalType": "uint256",
222 "name": "tokenId",
223 "type": "uint256"
224 },
225 {
226 "internalType": "string",
227 "name": "tokenURI",
228 "type": "string"
229 }
230 ],
231 "name": "mintWithTokenURI",
232 "outputs": [
233 {
234 "internalType": "bool",
235 "name": "",
236 "type": "bool"
237 }
238 ],
239 "stateMutability": "nonpayable",
240 "type": "function"
241 },
242 {
243 "inputs": [],
244 "name": "mintingFinished",
245 "outputs": [
246 {
247 "internalType": "bool",
248 "name": "",
249 "type": "bool"
250 }
251 ],
154 "stateMutability": "view",252 "stateMutability": "view",
155 "type": "function"253 "type": "function"
156 },254 },
157 {255 {
158 "inputs": [],256 "inputs": [],
159 "name": "name",257 "name": "name",
160 "outputs": [258 "outputs": [
161 {259 {
162 "internalType": "string",260 "internalType": "string",
163 "name": "res_name",261 "name": "",
164 "type": "string"262 "type": "string"
165 }263 }
166 ],264 ],
167 "stateMutability": "view",265 "stateMutability": "view",
168 "type": "function"266 "type": "function"
169 },267 },
268 {
269 "inputs": [],
270 "name": "nextTokenId",
271 "outputs": [
272 {
273 "internalType": "uint256",
274 "name": "",
275 "type": "uint256"
276 }
277 ],
278 "stateMutability": "view",
279 "type": "function"
280 },
170 {281 {
171 "inputs": [282 "inputs": [
172 {283 {
206 ],317 ],
207 "name": "safeTransferFrom",318 "name": "safeTransferFrom",
208 "outputs": [],319 "outputs": [],
209 "stateMutability": "payable",320 "stateMutability": "nonpayable",
210 "type": "function"321 "type": "function"
211 },322 },
212 {323 {
232 "type": "bytes"343 "type": "bytes"
233 }344 }
234 ],345 ],
235 "name": "safeTransferFrom",346 "name": "safeTransferFromWithData",
236 "outputs": [],347 "outputs": [],
237 "stateMutability": "payable",348 "stateMutability": "nonpayable",
238 "type": "function"349 "type": "function"
239 },350 },
240 {351 {
258 {369 {
259 "inputs": [370 "inputs": [
260 {371 {
261 "internalType": "bytes4",372 "internalType": "uint32",
262 "name": "interfaceID",373 "name": "interfaceId",
263 "type": "bytes4"374 "type": "uint32"
264 }375 }
265 ],376 ],
266 "name": "supportsInterface",377 "name": "supportsInterface",
271 "type": "bool"382 "type": "bool"
272 }383 }
273 ],384 ],
274 "stateMutability": "pure",385 "stateMutability": "view",
275 "type": "function"386 "type": "function"
276 },387 },
277 {388 {
280 "outputs": [391 "outputs": [
281 {392 {
282 "internalType": "string",393 "internalType": "string",
283 "name": "res_symbol",394 "name": "",
284 "type": "string"395 "type": "string"
285 }396 }
286 ],397 ],
364 },475 },
365 {476 {
366 "inputs": [477 "inputs": [
367 {
368 "internalType": "address",
369 "name": "from",
370 "type": "address"
371 },
372 {478 {
373 "internalType": "address",479 "internalType": "address",
374 "name": "to",480 "name": "to",
380 "type": "uint256"486 "type": "uint256"
381 }487 }
382 ],488 ],
383 "name": "transferFrom",489 "name": "transfer",
384 "outputs": [],490 "outputs": [],
385 "stateMutability": "payable",491 "stateMutability": "nonpayable",
386 "type": "function"492 "type": "function"
387 },493 },
388 {494 {
389 "inputs": [495 "inputs": [
496 {
497 "internalType": "address",
498 "name": "from",
499 "type": "address"
500 },
390 {501 {
391 "internalType": "address",502 "internalType": "address",
392 "name": "to",503 "name": "to",
398 "type": "uint256"509 "type": "uint256"
399 }510 }
400 ],511 ],
401 "name": "transfer",512 "name": "transferFrom",
402 "outputs": [],513 "outputs": [],
403 "stateMutability": "payable",514 "stateMutability": "nonpayable",
404 "type": "function"515 "type": "function"
405 }516 }
406]517]
addedtests/src/eth/payable.test.tsdiffbeforeafterboth

no changes

addedtests/src/eth/proxy/UniqueFungibleProxy.abidiffbeforeafterboth

no changes

addedtests/src/eth/proxy/UniqueFungibleProxy.bindiffbeforeafterboth

no changes

addedtests/src/eth/proxy/UniqueFungibleProxy.soldiffbeforeafterboth

no changes

addedtests/src/eth/proxy/UniqueNFTProxy.abidiffbeforeafterboth

no changes

addedtests/src/eth/proxy/UniqueNFTProxy.bindiffbeforeafterboth

no changes

addedtests/src/eth/proxy/UniqueNFTProxy.soldiffbeforeafterboth

no changes

addedtests/src/eth/proxy/fungibleProxy.test.tsdiffbeforeafterboth

no changes

addedtests/src/eth/proxy/nonFungibleProxy.test.tsdiffbeforeafterboth

no changes

addedtests/src/eth/sponsoring.test.tsdiffbeforeafterboth

no changes

addedtests/src/eth/util/contractHelpersAbi.jsondiffbeforeafterboth

no changes

addedtests/src/eth/util/helpers.d.tsdiffbeforeafterboth

no changes

modifiedtests/src/eth/util/helpers.tsdiffbeforeafterboth
3// file 'LICENSE', which is part of this source code package.3// file 'LICENSE', which is part of this source code package.
4//4//
5
6// eslint-disable-next-line @typescript-eslint/triple-slash-reference
7/// <reference path="helpers.d.ts" />
58
6import { ApiPromise } from '@polkadot/api';9import { ApiPromise } from '@polkadot/api';
7import { addressToEvm, evmToAddress } from '@polkadot/util-crypto';10import { addressToEvm, evmToAddress } from '@polkadot/util-crypto';
10import { IKeyringPair } from '@polkadot/types/types';13import { IKeyringPair } from '@polkadot/types/types';
11import { expect } from 'chai';14import { expect } from 'chai';
12import { getGenericResult } from '../../util/helpers';15import { getGenericResult } from '../../util/helpers';
16import * as solc from 'solc';
17import config from '../../config';
18import privateKey from '../../substrate/privateKey';
19import contractHelpersAbi from './contractHelpersAbi.json';
20import getBalance from '../../substrate/get-balance';
21import waitNewBlocks from '../../substrate/wait-new-blocks';
22
23export const GAS_ARGS = { gas: 0x1000000, gasPrice: '0x01' };
1324
14let web3Connected = false;25let web3Connected = false;
15export async function usingWeb3<T>(cb: (web3: Web3) => Promise<T> | T): Promise<T> {26export async function usingWeb3<T>(cb: (web3: Web3) => Promise<T> | T): Promise<T> {
16 if (web3Connected) throw new Error('do not nest usingWeb3 calls');27 if (web3Connected) throw new Error('do not nest usingWeb3 calls');
17 web3Connected = true;28 web3Connected = true;
1829
19 const provider = new Web3.providers.WebsocketProvider('http://localhost:9944');30 const provider = new Web3.providers.WebsocketProvider(config.substrateUrl);
20 const web3 = new Web3(provider);31 const web3 = new Web3(provider);
2132
22 try {33 try {
28 }39 }
29}40}
41
42/**
43 * @deprecated Web3 update solved issue with deployment over ws provider
44 */
45export async function usingWeb3Http<T>(cb: (web3: Web3) => Promise<T> | T): Promise<T> {
46 const provider = new Web3.providers.HttpProvider(config.frontierUrl);
47 const web3: Web3 = new Web3(provider);
48
49 return await cb(web3);
50}
3051
31export function collectionIdToAddress(address: number): string {52export function collectionIdToAddress(address: number): string {
32 if (address >= 0xffffffff || address < 0) throw new Error('id overflow');53 if (address >= 0xffffffff || address < 0) throw new Error('id overflow');
45 return account.address;66 return account.address;
46}67}
68
69export async function createEthAccountWithBalance(api: ApiPromise, web3: Web3) {
70 const alice = privateKey('//Alice');
71 const account = createEthAccount(web3);
72 await transferBalanceToEth(api, alice, account);
73
74 return account;
75}
4776
48export async function transferBalanceToEth(api: ApiPromise, source: IKeyringPair, target: string, amount: number) {77export async function transferBalanceToEth(api: ApiPromise, source: IKeyringPair, target: string, amount = 999999999999999) {
49 const tx = api.tx.balances.transfer(evmToAddress(target), amount);78 const tx = api.tx.balances.transfer(evmToAddress(target), amount);
50 const events = await submitTransactionAsync(source, tx);79 const events = await submitTransactionAsync(source, tx);
51 const result = getGenericResult(events);80 const result = getGenericResult(events);
114 return normalizeEvents(out);143 return normalizeEvents(out);
115}144}
116145
117export function subToEth(eth: string): string {146export function subToEthLowercase(eth: string): string {
118 const bytes = addressToEvm(eth);147 const bytes = addressToEvm(eth);
119 const string = '0x' + Buffer.from(bytes).toString('hex');148 return '0x' + Buffer.from(bytes).toString('hex');
120 return Web3.utils.toChecksumAddress(string);
121}149}
150
151export function subToEth(eth: string): string {
152 return Web3.utils.toChecksumAddress(subToEthLowercase(eth));
153}
154
155export function compileContract(name: string, src: string) {
156 const out = JSON.parse(solc.compile(JSON.stringify({
157 language: 'Solidity',
158 sources: {
159 [`${name}.sol`]: {
160 content: `
161 // SPDX-License-Identifier: UNLICENSED
162 pragma solidity ^0.8.6;
163
164 ${src}
165 `,
166 },
167 },
168 settings: {
169 outputSelection: {
170 '*': {
171 '*': ['*'],
172 },
173 },
174 },
175 }))).contracts[`${name}.sol`][name];
176
177 return {
178 abi: out.abi,
179 object: '0x' + out.evm.bytecode.object,
180 };
181}
182
183export async function deployFlipper(web3: Web3, deployer: string) {
184 const compiled = compileContract('Flipper', `
185 contract Flipper {
186 bool value = false;
187 function flip() public {
188 value = !value;
189 }
190 function getValue() public view returns (bool) {
191 return value;
192 }
193 }
194 `);
195 const Flipper = new web3.eth.Contract(compiled.abi, undefined, {
196 data: compiled.object,
197 from: deployer,
198 ...GAS_ARGS,
199 });
200 const flipper = await Flipper.deploy({ data: compiled.object }).send({from: deployer});
201
202 return flipper;
203}
204
205export async function deployCollector(web3: Web3, deployer: string) {
206 const compiled = compileContract('Collector', `
207 contract Collector {
208 uint256 collected;
209 fallback() external payable {
210 giveMoney();
211 }
212 function giveMoney() public payable {
213 collected += msg.value;
214 }
215 function getCollected() public view returns (uint256) {
216 return collected;
217 }
218 function getUnaccounted() public view returns (uint256) {
219 return address(this).balance - collected;
220 }
221
222 function withdraw(address payable target) public {
223 target.transfer(collected);
224 collected = 0;
225 }
226 }
227 `);
228 const Collector = new web3.eth.Contract(compiled.abi, undefined, {
229 data: compiled.object,
230 from: deployer,
231 ...GAS_ARGS,
232 });
233 const collector = await Collector.deploy({ data: compiled.object }).send({ from: deployer });
234
235 return collector;
236}
237
238export function contractHelpers(web3: Web3, caller: string) {
239 return new web3.eth.Contract(contractHelpersAbi as any, '0x842899ECF380553E8a4de75bF534cdf6fBF64049', {from: caller, ...GAS_ARGS});
240}
241
242export async function executeEthTxOnSub(api: ApiPromise, from: IKeyringPair, to: any, mkTx: (methods: any) => any, { value = 0 }: {value?: bigint | number} = { }) {
243 const tx = api.tx.evm.call(
244 subToEth(from.address),
245 to.options.address,
246 mkTx(to.methods).encodeABI(),
247 value,
248 GAS_ARGS.gas,
249 GAS_ARGS.gasPrice,
250 null,
251 );
252 const events = await submitTransactionAsync(from, tx);
253 expect(events.find(({ event: {section, method}})=>section === 'evm' && method === 'Executed')).to.be.not.undefined;
254}
255
256export async function ethBalanceViaSub(api: ApiPromise, address: string): Promise<bigint> {
257 return (await getBalance(api, [evmToAddress(address)]))[0];
258}
259
260export async function recordEthFee(api: ApiPromise, user: string, call: () => Promise<any>): Promise<bigint> {
261 const before = await ethBalanceViaSub(api, user);
262
263 await call();
264 await waitNewBlocks(api, 1);
265
266 const after = await ethBalanceViaSub(api, user);
267
268 // Can't use .to.be.less, because chai doesn't supports bigint
269 expect(after < before).to.be.true;
270
271 return before - after;
272}
modifiedtests/src/pallet-presence.test.tsdiffbeforeafterboth
23 'parachainsystem',23 'parachainsystem',
24 'parachaininfo',24 'parachaininfo',
25 'evm',25 'evm',
26 'evmcodersubstrate',
27 'evmcontracthelpers',
28 'evmtransactionpayment',
26 'ethereum',29 'ethereum',
27 'xcmpqueue',30 'xcmpqueue',
28 'polkadotxcm',31 'polkadotxcm',
59 });62 });
60 it('No extra pallets are included', async () => {63 it('No extra pallets are included', async () => {
61 await usingApi(async api => {64 await usingApi(async api => {
62 expect(getModuleNames(api).length).to.be.equal(requiredPallets.length + consensusPallets.length);65 expect(getModuleNames(api).sort()).to.be.deep.equal([...requiredPallets, ...consensusPallets].sort());
63 });66 });
64 });67 });
65});68});
modifiedtests/src/removeCollectionAdmin.test.tsdiffbeforeafterboth
37 });37 });
38 });38 });
39
40 it('Remove collection admin by admin.', async () => {
41 await usingApi(async (api: ApiPromise) => {
42 const collectionId = await createCollectionExpectSuccess();
43 const Alice = privateKey('//Alice');
44 const Bob = privateKey('//Bob');
45 const Charlie = privateKey('//Charlie');
46 const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
47 expect(collection.Owner).to.be.deep.eq(Alice.address);
48 // first - add collection admin Bob
49 const addAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Bob.address));
50 await submitTransactionAsync(Alice, addAdminTx);
51
52 const addAdminTx2 = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Charlie.address));
53 await submitTransactionAsync(Alice, addAdminTx2);
54
55 const adminListAfterAddAdmin: any = (await api.query.nft.adminList(collectionId)).toJSON();
56 expect(adminListAfterAddAdmin).to.be.deep.contains(normalizeAccountId(Bob.address));
57
58 // then remove bob from admins of collection
59 const removeAdminTx = api.tx.nft.removeCollectionAdmin(collectionId, normalizeAccountId(Bob.address));
60 await submitTransactionAsync(Charlie, removeAdminTx);
61
62 const adminListAfterRemoveAdmin: any = (await api.query.nft.adminList(collectionId)).toJSON;
63 expect(adminListAfterRemoveAdmin).not.to.be.deep.contains(normalizeAccountId(Bob.address));
64 });
65 });
3966
40 it('Remove admin from collection that has no admins', async () => {67 it('Remove admin from collection that has no admins', async () => {
41 await usingApi(async (api: ApiPromise) => {68 await usingApi(async (api: ApiPromise) => {
84 });111 });
85 });112 });
113
114 it('Regular user Can\'t remove collection admin', async () => {
115 await usingApi(async (api: ApiPromise) => {
116 const collectionId = await createCollectionExpectSuccess();
117 const Alice = privateKey('//Alice');
118 const Bob = privateKey('//Bob');
119 const Charlie = privateKey('//Charlie');
120
121 const addAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(Bob.address));
122 await submitTransactionAsync(Alice, addAdminTx);
123
124 const changeOwnerTx = api.tx.nft.removeCollectionAdmin(collectionId, normalizeAccountId(Bob.address));
125 await expect(submitTransactionExpectFailAsync(Charlie, changeOwnerTx)).to.be.rejected;
126
127 // Verifying that nothing bad happened (network is live, new collections can be created, etc.)
128 await createCollectionExpectSuccess();
129 });
130 });
86});131});
87132
modifiedtests/src/removeCollectionSponsor.test.tsdiffbeforeafterboth
17 removeCollectionSponsorExpectSuccess,17 removeCollectionSponsorExpectSuccess,
18 removeCollectionSponsorExpectFailure,18 removeCollectionSponsorExpectFailure,
19 normalizeAccountId,19 normalizeAccountId,
20 addCollectionAdminExpectSuccess,
20} from './util/helpers';21} from './util/helpers';
21import { Keyring } from '@polkadot/api';22import { Keyring } from '@polkadot/api';
22import { IKeyringPair } from '@polkadot/types/types';23import { IKeyringPair } from '@polkadot/types/types';
104 await removeCollectionSponsorExpectFailure(collectionId);105 await removeCollectionSponsorExpectFailure(collectionId);
105 });106 });
107
108 it('(!negative test!) Remove sponsor for a collection with collection admin permissions', async () => {
109 const collectionId = await createCollectionExpectSuccess();
110 await setCollectionSponsorExpectSuccess(collectionId, bob.address);
111 await addCollectionAdminExpectSuccess(alice, collectionId, bob);
112 await removeCollectionSponsorExpectFailure(collectionId, '//Bob');
113 });
114
115 it('(!negative test!) Remove sponsor for a collection by regular user', async () => {
116 const collectionId = await createCollectionExpectSuccess();
117 await setCollectionSponsorExpectSuccess(collectionId, bob.address);
118 await removeCollectionSponsorExpectFailure(collectionId, '//Bob');
119 });
106120
107 it('(!negative test!) Remove sponsor in a destroyed collection', async () => {121 it('(!negative test!) Remove sponsor in a destroyed collection', async () => {
108 const collectionId = await createCollectionExpectSuccess();122 const collectionId = await createCollectionExpectSuccess();
modifiedtests/src/removeFromWhiteList.test.tsdiffbeforeafterboth
17 removeFromWhiteListExpectFailure,17 removeFromWhiteListExpectFailure,
18 disableWhiteListExpectSuccess,18 disableWhiteListExpectSuccess,
19 normalizeAccountId,19 normalizeAccountId,
20 addCollectionAdminExpectSuccess,
20} from './util/helpers';21} from './util/helpers';
21import { IKeyringPair } from '@polkadot/types/types';22import { IKeyringPair } from '@polkadot/types/types';
22import privateKey from './substrate/privateKey';23import privateKey from './substrate/privateKey';
89 });90 });
90});91});
9192
93describe('Integration Test removeFromWhiteList with collection admin permissions', () => {
94 let alice: IKeyringPair;
95 let bob: IKeyringPair;
96 let charlie: IKeyringPair;
97
98 before(async () => {
99 await usingApi(async () => {
100 alice = privateKey('//Alice');
101 bob = privateKey('//Bob');
102 charlie = privateKey('//Charlie');
103 });
104 });
105
106 it('ensure address is not in whitelist after removal', async () => {
107 await usingApi(async () => {
108 const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
109 await enableWhiteListExpectSuccess(alice, collectionId);
110 await addCollectionAdminExpectSuccess(alice, collectionId, bob);
111 await addToWhiteListExpectSuccess(alice, collectionId, charlie.address);
112 await removeFromWhiteListExpectSuccess(bob, collectionId, normalizeAccountId(charlie.address));
113 expect(await isWhitelisted(collectionId, charlie.address)).to.be.false;
114 });
115 });
116
117 it('Collection admin allowed to remove from whitelist with unset whitelist status', async () => {
118 await usingApi(async () => {
119 const collectionWithoutWhitelistId = await createCollectionExpectSuccess();
120 await enableWhiteListExpectSuccess(alice, collectionWithoutWhitelistId);
121 await addCollectionAdminExpectSuccess(alice, collectionWithoutWhitelistId, bob);
122 await addToWhiteListExpectSuccess(alice, collectionWithoutWhitelistId, charlie.address);
123 await disableWhiteListExpectSuccess(alice, collectionWithoutWhitelistId);
124 await removeFromWhiteListExpectSuccess(bob, collectionWithoutWhitelistId, normalizeAccountId(charlie.address));
125 });
126 });
127
128 it('Regular user can`t remove from whitelist', async () => {
129 await usingApi(async () => {
130 const collectionWithoutWhitelistId = await createCollectionExpectSuccess();
131 await enableWhiteListExpectSuccess(alice, collectionWithoutWhitelistId);
132 await addToWhiteListExpectSuccess(alice, collectionWithoutWhitelistId, charlie.address);
133 await removeFromWhiteListExpectFailure(bob, collectionWithoutWhitelistId, normalizeAccountId(charlie.address));
134 });
135 });
136});
addedtests/src/setChainLimits.test.tsdiffbeforeafterboth

no changes

modifiedtests/src/setCollectionLimits.test.tsdiffbeforeafterboth
16 getDetailedCollectionInfo,16 getDetailedCollectionInfo,
17 setCollectionLimitsExpectFailure,17 setCollectionLimitsExpectFailure,
18 setCollectionLimitsExpectSuccess,18 setCollectionLimitsExpectSuccess,
19 addCollectionAdminExpectSuccess,
19} from './util/helpers';20} from './util/helpers';
2021
21chai.use(chaiAsPromised);22chai.use(chaiAsPromised);
150 await expect(submitTransactionExpectFailAsync(bob, tx)).to.be.rejected;151 await expect(submitTransactionExpectFailAsync(bob, tx)).to.be.rejected;
151 });152 });
152 });153 });
154 it('execute setCollectionLimits from admin collection', async () => {
155 await addCollectionAdminExpectSuccess(alice, collectionIdForTesting, bob);
156 await usingApi(async (api: ApiPromise) => {
157 tx = api.tx.nft.setCollectionLimits(
158 collectionIdForTesting,
159 {
160 accountTokenOwnershipLimit,
161 sponsoredDataSize,
162 sponsoredMintSize,
163 tokenLimit,
164 },
165 );
166 await expect(submitTransactionExpectFailAsync(bob, tx)).to.be.rejected;
167 });
168 });
153 it('execute setCollectionLimits with incorrect limits', async () => {169 it('execute setCollectionLimits with incorrect limits', async () => {
154 await usingApi(async (api: ApiPromise) => {170 await usingApi(async (api: ApiPromise) => {
155 tx = api.tx.nft.setCollectionLimits(171 tx = api.tx.nft.setCollectionLimits(
modifiedtests/src/setCollectionSponsor.test.tsdiffbeforeafterboth
9import { createCollectionExpectSuccess, setCollectionSponsorExpectSuccess, destroyCollectionExpectSuccess, setCollectionSponsorExpectFailure } from './util/helpers';9import { createCollectionExpectSuccess,
10 setCollectionSponsorExpectSuccess,
11 destroyCollectionExpectSuccess,
12 setCollectionSponsorExpectFailure,
13 addCollectionAdminExpectSuccess,
14} from './util/helpers';
10import { Keyring } from '@polkadot/api';15import { Keyring } from '@polkadot/api';
11import { IKeyringPair } from '@polkadot/types/types';16import { IKeyringPair } from '@polkadot/types/types';
1217
13chai.use(chaiAsPromised);18chai.use(chaiAsPromised);
1419
20let alice: IKeyringPair;
15let bob: IKeyringPair;21let bob: IKeyringPair;
22let charlie: IKeyringPair;
1623
17describe('integration test: ext. setCollectionSponsor():', () => {24describe('integration test: ext. setCollectionSponsor():', () => {
1825
19 before(async () => {26 before(async () => {
20 await usingApi(async () => {27 await usingApi(async () => {
21 const keyring = new Keyring({ type: 'sr25519' });28 const keyring = new Keyring({ type: 'sr25519' });
29 alice = keyring.addFromUri('//Alice');
22 bob = keyring.addFromUri('//Bob');30 bob = keyring.addFromUri('//Bob');
23 });31 });
24 });32 });
55 before(async () => {63 before(async () => {
56 await usingApi(async () => {64 await usingApi(async () => {
57 const keyring = new Keyring({ type: 'sr25519' });65 const keyring = new Keyring({ type: 'sr25519' });
66 alice = keyring.addFromUri('//Alice');
58 bob = keyring.addFromUri('//Bob');67 bob = keyring.addFromUri('//Bob');
68 charlie = keyring.addFromUri('//Charlie');
59 });69 });
60 });70 });
6171
77 await destroyCollectionExpectSuccess(collectionId);87 await destroyCollectionExpectSuccess(collectionId);
78 await setCollectionSponsorExpectFailure(collectionId, bob.address);88 await setCollectionSponsorExpectFailure(collectionId, bob.address);
79 });89 });
90 it('(!negative test!) Collection admin add sponsor', async () => {
91 const collectionId = await createCollectionExpectSuccess();
92 await addCollectionAdminExpectSuccess(alice, collectionId, bob);
93 await setCollectionSponsorExpectFailure(collectionId, charlie.address, '//Bob');
94 });
80});95});
8196
modifiedtests/src/setConstOnChainSchema.test.tsdiffbeforeafterboth
11import {11import {
12 createCollectionExpectSuccess,12 createCollectionExpectSuccess,
13 destroyCollectionExpectSuccess,13 destroyCollectionExpectSuccess,
14 addCollectionAdminExpectSuccess,
14} from './util/helpers';15} from './util/helpers';
1516
16chai.use(chaiAsPromised);17chai.use(chaiAsPromised);
43 });44 });
44 });45 });
46
47 it('Collection admin can set the scheme', async () => {
48 await usingApi(async (api) => {
49 const collectionId = await createCollectionExpectSuccess();
50 const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
51 expect(collection.Owner).to.be.eq(Alice.address);
52 await addCollectionAdminExpectSuccess(Alice, collectionId, Bob);
53 const setShema = api.tx.nft.setConstOnChainSchema(collectionId, Shema);
54 await submitTransactionAsync(Bob, setShema);
55 });
56 });
4557
46 it('Checking collection data using the ConstOnChainSchema parameter', async () => {58 it('Checking collection data using the ConstOnChainSchema parameter', async () => {
47 await usingApi(async (api) => {59 await usingApi(async (api) => {
modifiedtests/src/setMintPermission.test.tsdiffbeforeafterboth
16 findNotExistingCollection,16 findNotExistingCollection,
17 setMintPermissionExpectFailure,17 setMintPermissionExpectFailure,
18 setMintPermissionExpectSuccess,18 setMintPermissionExpectSuccess,
19 addCollectionAdminExpectSuccess,
19} from './util/helpers';20} from './util/helpers';
2021
21describe('Integration Test setMintPermission', () => {22describe('Integration Test setMintPermission', () => {
91 await setMintPermissionExpectFailure(bob, collectionId, true);92 await setMintPermissionExpectFailure(bob, collectionId, true);
92 });93 });
94
95 it('Collection admin fails on set', async () => {
96 await usingApi(async () => {
97 const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
98 await addCollectionAdminExpectSuccess(alice, collectionId, bob);
99 await setMintPermissionExpectFailure(bob, collectionId, true);
100 });
101 });
93102
94 it('ensure non-white-listed non-privileged address can\'t mint tokens', async () => {103 it('ensure non-white-listed non-privileged address can\'t mint tokens', async () => {
95 await usingApi(async () => {104 await usingApi(async () => {
modifiedtests/src/setOffchainSchema.test.tsdiffbeforeafterboth
15 queryCollectionExpectSuccess,15 queryCollectionExpectSuccess,
16 setOffchainSchemaExpectFailure,16 setOffchainSchemaExpectFailure,
17 setOffchainSchemaExpectSuccess,17 setOffchainSchemaExpectSuccess,
18 addCollectionAdminExpectSuccess,
18} from './util/helpers';19} from './util/helpers';
1920
20chai.use(chaiAsPromised);21chai.use(chaiAsPromised);
2425
25describe('Integration Test setOffchainSchema', () => {26describe('Integration Test setOffchainSchema', () => {
26 let alice: IKeyringPair;27 let alice: IKeyringPair;
28 let bob: IKeyringPair;
2729
28 before(async () => {30 before(async () => {
29 await usingApi(async () => {31 await usingApi(async () => {
30 alice = privateKey('//Alice');32 alice = privateKey('//Alice');
33 bob = privateKey('//Bob');
31 });34 });
32 });35 });
3336
39 expect(collection.OffchainSchema).to.be.equal('0x' + Buffer.from(DATA).toString('hex'));42 expect(collection.OffchainSchema).to.be.equal('0x' + Buffer.from(DATA).toString('hex'));
40 });43 });
44
45 it('execute setOffchainSchema (collection admin), verify data was set', async () => {
46 const collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
47 await addCollectionAdminExpectSuccess(alice, collectionId, bob);
48 await setOffchainSchemaExpectSuccess(bob, collectionId, DATA);
49 const collection = await queryCollectionExpectSuccess(collectionId);
50
51 expect(collection.OffchainSchema).to.be.equal('0x' + Buffer.from(DATA).toString('hex'));
52 });
41});53});
4254
43describe('Negative Integration Test setOffchainSchema', () => {55describe('Negative Integration Test setOffchainSchema', () => {
modifiedtests/src/setPublicAccessMode.test.tsdiffbeforeafterboth
18 enablePublicMintingExpectSuccess,18 enablePublicMintingExpectSuccess,
19 enableWhiteListExpectSuccess,19 enableWhiteListExpectSuccess,
20 normalizeAccountId,20 normalizeAccountId,
21 addCollectionAdminExpectSuccess,
21} from './util/helpers';22} from './util/helpers';
2223
23chai.use(chaiAsPromised);24chai.use(chaiAsPromised);
93 });94 });
94});95});
96
97describe('Negative Integration Test ext. collection admin setPublicAccessMode(): ', () => {
98 before(async () => {
99 await usingApi(async () => {
100 Alice = privateKey('//Alice');
101 Bob = privateKey('//Bob');
102 });
103 });
104 it('setPublicAccessMode by collection admin', async () => {
105 await usingApi(async (api: ApiPromise) => {
106 // tslint:disable-next-line: no-bitwise
107 const collectionId = await createCollectionExpectSuccess();
108 await addCollectionAdminExpectSuccess(Alice, collectionId, Bob);
109 const tx = api.tx.nft.setPublicAccessMode(collectionId, 'WhiteList');
110 await expect(submitTransactionExpectFailAsync(Bob, tx)).to.be.rejected;
111 });
112 });
113});
95114
modifiedtests/src/setSchemaVersion.test.tsdiffbeforeafterboth
16 getCreatedCollectionCount,16 getCreatedCollectionCount,
17 getCreateItemResult,17 getCreateItemResult,
18 getDetailedCollectionInfo,18 getDetailedCollectionInfo,
19 addCollectionAdminExpectSuccess,
19} from './util/helpers';20} from './util/helpers';
2021
21chai.use(chaiAsPromised);22chai.use(chaiAsPromised);
22const expect = chai.expect;23const expect = chai.expect;
2324
24let alice: IKeyringPair;25let alice: IKeyringPair;
26let bob: IKeyringPair;
27let charlie: IKeyringPair;
25let collectionIdForTesting: number;28let collectionIdForTesting: number;
2629
27/*30/*
44 });47 });
45});48});
49
50describe('setSchemaVersion positive', () => {
51 let tx;
52 before(async () => {
53 await usingApi(async () => {
54 const keyring = new Keyring({ type: 'sr25519' });
55 alice = keyring.addFromUri('//Alice');
56 });
57 });
58 it('execute setSchemaVersion with image url and unique ', async () => {
59 await usingApi(async (api: ApiPromise) => {
60 tx = api.tx.nft.setSchemaVersion(collectionIdForTesting, 'Unique');
61 const events = await submitTransactionAsync(alice, tx);
62 const result = getCreateItemResult(events);
63 const collectionInfo = await getDetailedCollectionInfo(api, collectionIdForTesting) as ICollectionInterface;
64 // tslint:disable-next-line:no-unused-expression
65 expect(result.success).to.be.true;
66 // tslint:disable-next-line:no-unused-expression
67 expect(collectionInfo).to.be.exist;
68 // tslint:disable-next-line:no-unused-expression
69 expect(collectionInfo ? collectionInfo.SchemaVersion.toString() : '').to.be.equal('Unique');
70 });
71 });
72});
4673
47describe('setSchemaVersion positive', () => {74describe('Collection admin setSchemaVersion positive', () => {
48 let tx;75 let tx;
49 before(async () => {76 before(async () => {
50 await usingApi(async () => {77 await usingApi(async () => {
51 const keyring = new Keyring({ type: 'sr25519' });78 const keyring = new Keyring({ type: 'sr25519' });
52 alice = keyring.addFromUri('//Alice');79 alice = keyring.addFromUri('//Alice');
80 bob = keyring.addFromUri('//Bob');
81 await addCollectionAdminExpectSuccess(alice, collectionIdForTesting, bob);
53 });82 });
54 });83 });
55 it('execute setSchemaVersion with image url and unique ', async () => {84 it('execute setSchemaVersion with image url and unique ', async () => {
56 await usingApi(async (api: ApiPromise) => {85 await usingApi(async (api: ApiPromise) => {
57 tx = api.tx.nft.setSchemaVersion(collectionIdForTesting, 'Unique');86 tx = api.tx.nft.setSchemaVersion(collectionIdForTesting, 'Unique');
58 const events = await submitTransactionAsync(alice, tx);87 const events = await submitTransactionAsync(bob, tx);
59 const result = getCreateItemResult(events);88 const result = getCreateItemResult(events);
60 const collectionInfo = await getDetailedCollectionInfo(api, collectionIdForTesting) as ICollectionInterface;89 const collectionInfo = await getDetailedCollectionInfo(api, collectionIdForTesting) as ICollectionInterface;
61 // tslint:disable-next-line:no-unused-expression90 // tslint:disable-next-line:no-unused-expression
70 it('validate schema version with just entered data', async () => {99 it('validate schema version with just entered data', async () => {
71 await usingApi(async (api: ApiPromise) => {100 await usingApi(async (api: ApiPromise) => {
72 tx = api.tx.nft.setSchemaVersion(collectionIdForTesting, 'ImageURL');101 tx = api.tx.nft.setSchemaVersion(collectionIdForTesting, 'ImageURL');
73 const events = await submitTransactionAsync(alice, tx);102 const events = await submitTransactionAsync(bob, tx);
74 const result = getCreateItemResult(events);103 const result = getCreateItemResult(events);
75 const collectionInfo = await getDetailedCollectionInfo(api, collectionIdForTesting) as ICollectionInterface;104 const collectionInfo = await getDetailedCollectionInfo(api, collectionIdForTesting) as ICollectionInterface;
76 // tslint:disable-next-line:no-unused-expression105 // tslint:disable-next-line:no-unused-expression
89 await usingApi(async () => {118 await usingApi(async () => {
90 const keyring = new Keyring({ type: 'sr25519' });119 const keyring = new Keyring({ type: 'sr25519' });
91 alice = keyring.addFromUri('//Alice');120 alice = keyring.addFromUri('//Alice');
121 charlie = keyring.addFromUri('//Charlie');
92 });122 });
93 });123 });
94 it('execute setSchemaVersion for not exists collection', async () => {124 it('execute setSchemaVersion for not exists collection', async () => {
123 await expect(submitTransactionExpectFailAsync(alice, tx)).to.be.rejected;151 await expect(submitTransactionExpectFailAsync(alice, tx)).to.be.rejected;
124 });152 });
125 });153 });
154 it('Regular user can`t execute setSchemaVersion with image url and unique ', async () => {
155 await usingApi(async (api: ApiPromise) => {
156 tx = api.tx.nft.setSchemaVersion(collectionIdForTesting, 'Unique');
157 await expect(submitTransactionAsync(charlie, tx)).to.be.rejected;
158 });
159 });
126});160});
127161
modifiedtests/src/setVariableMetaData.test.tsdiffbeforeafterboth
16 findNotExistingCollection,16 findNotExistingCollection,
17 setVariableMetaDataExpectFailure,17 setVariableMetaDataExpectFailure,
18 setVariableMetaDataExpectSuccess,18 setVariableMetaDataExpectSuccess,
19 addCollectionAdminExpectSuccess,
19} from './util/helpers';20} from './util/helpers';
2021
21chai.use(chaiAsPromised);22chai.use(chaiAsPromised);
48 });49 });
49});50});
51
52describe('Integration Test collection admin setVariableMetaData', () => {
53 const data = [1, 2, 254, 255];
54
55 let alice: IKeyringPair;
56 let bob: IKeyringPair;
57 let collectionId: number;
58 let tokenId: number;
59 before(async () => {
60 await usingApi(async () => {
61 alice = privateKey('//Alice');
62 bob = privateKey('//Bob');
63 collectionId = await createCollectionExpectSuccess({ mode: { type: 'NFT' } });
64 tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT');
65 await addCollectionAdminExpectSuccess(alice, collectionId, bob);
66 });
67 });
68
69 it('execute setVariableMetaData', async () => {
70 await setVariableMetaDataExpectSuccess(bob, collectionId, tokenId, data);
71 });
72
73 it('verify data was set', async () => {
74 await usingApi(async api => {
75 const item: any = (await api.query.nft.nftItemList(collectionId, tokenId) as any).unwrap();
76
77 expect(Array.from(item.VariableData)).to.deep.equal(Array.from(data));
78 });
79 });
80});
5081
51describe('Negative Integration Test setVariableMetaData', () => {82describe('Negative Integration Test setVariableMetaData', () => {
52 const data = [1];83 const data = [1];
modifiedtests/src/setVariableOnChainSchema.test.tsdiffbeforeafterboth
11import {11import {
12 createCollectionExpectSuccess,12 createCollectionExpectSuccess,
13 destroyCollectionExpectSuccess,13 destroyCollectionExpectSuccess,
14 addCollectionAdminExpectSuccess,
14} from './util/helpers';15} from './util/helpers';
1516
16chai.use(chaiAsPromised);17chai.use(chaiAsPromised);
55 });56 });
56});57});
58
59describe('Integration Test ext. collection admin setVariableOnChainSchema()', () => {
60
61 it('Run extrinsic with parameters of the collection id, set the scheme', async () => {
62 await usingApi(async (api) => {
63 const collectionId = await createCollectionExpectSuccess();
64 const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
65 expect(collection.Owner).to.be.eq(Alice.address);
66 await addCollectionAdminExpectSuccess(Alice, collectionId, Bob);
67 const setSchema = api.tx.nft.setVariableOnChainSchema(collectionId, Schema);
68 await submitTransactionAsync(Bob, setSchema);
69 });
70 });
71
72 it('Checking collection data using the setVariableOnChainSchema parameter', async () => {
73 await usingApi(async (api) => {
74 const collectionId = await createCollectionExpectSuccess();
75 await addCollectionAdminExpectSuccess(Alice, collectionId, Bob);
76 const setSchema = api.tx.nft.setVariableOnChainSchema(collectionId, Schema);
77 await submitTransactionAsync(Bob, setSchema);
78 const collection: any = (await api.query.nft.collectionById(collectionId)).toJSON();
79 expect(collection.VariableOnChainSchema.toString()).to.be.eq(Schema);
80
81 });
82 });
83});
5784
58describe('Negative Integration Test ext. setVariableOnChainSchema()', () => {85describe('Negative Integration Test ext. setVariableOnChainSchema()', () => {
5986
modifiedtests/src/substrate/get-balance.tsdiffbeforeafterboth
6import { ApiPromise } from '@polkadot/api';6import { ApiPromise } from '@polkadot/api';
7import {AccountInfo} from '@polkadot/types/interfaces/system';7import {AccountInfo} from '@polkadot/types/interfaces/system';
8import promisifySubstrate from './promisify-substrate';8import promisifySubstrate from './promisify-substrate';
9import { IKeyringPair } from '@polkadot/types/types';
10import { submitTransactionAsync } from './substrate-api';
11import { getGenericResult } from '../util/helpers';
12import { expect } from 'chai';
913
10export default async function getBalance(api: ApiPromise, accounts: string[]): Promise<Array<bigint>> {14export default async function getBalance(api: ApiPromise, accounts: string[]): Promise<Array<bigint>> {
11 const balance = promisifySubstrate(api, (acc: string[]) => api.query.system.account.multi(acc));15 const balance = promisifySubstrate(api, (acc: string[]) => api.query.system.account.multi(acc));
12 const responce = await balance(accounts) as unknown as AccountInfo[];16 const responce = await balance(accounts) as unknown as AccountInfo[];
13 return responce.map((r) => r.data.free.toBigInt().valueOf());17 return responce.map((r) => r.data.free.toBigInt().valueOf());
14}18}
1519
20export async function getBalanceSingle(api: ApiPromise, account: string): Promise<bigint> {
21 return (await getBalance(api, [account]))[0];
22}
23
24export async function transferBalanceExpectSuccess(api: ApiPromise, from: IKeyringPair, to: string, amount: bigint | string) {
25 const tx = api.tx.balances.transfer(to, amount);
26 const events = await submitTransactionAsync(from, tx);
27 const result = getGenericResult(events);
28 expect(result.success).to.be.true;
29}
modifiedtests/src/substrate/substrate-api.tsdiffbeforeafterboth
37 const consoleWarn = console.warn;37 const consoleWarn = console.warn;
3838
39 const outFn = (message: string) => {39 const outFn = (message: string) => {
40 if (typeof message !== 'string') {
41 consoleErr(message);
42 return;
43 }
40 if (!message.includes('StorageChangeSet:: WebSocket is not connected') && 44 if (!message.includes('StorageChangeSet:: WebSocket is not connected') &&
41 !message.includes('2021-') &&45 !message.includes('2021-') &&
42 !message.includes('StorageChangeSet:: Normal connection closure'))46 !message.includes('StorageChangeSet:: Normal connection closure'))
modifiedtests/src/transfer.test.tsdiffbeforeafterboth
18 getCreateItemResult,18 getCreateItemResult,
19 transferExpectFailure,19 transferExpectFailure,
20 transferExpectSuccess,20 transferExpectSuccess,
21 addCollectionAdminExpectSuccess,
21} from './util/helpers';22} from './util/helpers';
2223
23let Alice: IKeyringPair;24let Alice: IKeyringPair;
90 });91 });
91 });92 });
93
94 it('Collection admin can transfer owned token', async () => {
95 await usingApi(async () => {
96 const Alice = privateKey('//Alice');
97 const Bob = privateKey('//Bob');
98 // nft
99 const nftCollectionId = await createCollectionExpectSuccess();
100 await addCollectionAdminExpectSuccess(Alice, nftCollectionId, Bob);
101 const newNftTokenId = await createItemExpectSuccess(Bob, nftCollectionId, 'NFT', Bob.address);
102 await transferExpectSuccess(nftCollectionId, newNftTokenId, Bob, Alice, 1, 'NFT');
103 // fungible
104 const fungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
105 await addCollectionAdminExpectSuccess(Alice, fungibleCollectionId, Bob);
106 const newFungibleTokenId = await createItemExpectSuccess(Alice, fungibleCollectionId, 'Fungible', Bob.address);
107 await transferExpectSuccess(fungibleCollectionId, newFungibleTokenId, Bob, Alice, 1, 'Fungible');
108 // reFungible
109 const reFungibleCollectionId = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
110 await addCollectionAdminExpectSuccess(Alice, reFungibleCollectionId, Bob);
111 const newReFungibleTokenId = await createItemExpectSuccess(Bob, reFungibleCollectionId, 'ReFungible', Bob.address);
112 await transferExpectSuccess(
113 reFungibleCollectionId,
114 newReFungibleTokenId,
115 Bob,
116 Alice,
117 100,
118 'ReFungible',
119 );
120 });
121 });
92});122});
93123
94describe('Negative Integration Test Transfer(recipient, collection_id, item_id, value)', () => {124describe('Negative Integration Test Transfer(recipient, collection_id, item_id, value)', () => {
modifiedtests/src/util/helpers.tsdiffbeforeafterboth
5353
54export const U128_MAX = (1n << 128n) - 1n;54export const U128_MAX = (1n << 128n) - 1n;
55
56const MICROUNIQUE = 1_000_000_000n;
57const MILLIUNIQUE = 1_000n * MICROUNIQUE;
58const CENTIUNIQUE = 10n * MILLIUNIQUE;
59export const UNIQUE = 100n * CENTIUNIQUE;
5560
56type GenericResult = {61type GenericResult = {
57 success: boolean,62 success: boolean,
95 checkMsgSysMethod: string;100 checkMsgSysMethod: string;
96}101}
102
103export interface IFungibleTokenDataType {
104 Value: number;
105}
106
107export interface IChainLimits {
108 CollectionNumbersLimit: number;
109 AccountTokenOwnershipLimit: number;
110 CollectionsAdminsLimit: number;
111 CustomDataLimit: number;
112 NftSponsorTransferTimeout: number;
113 FungibleSponsorTransferTimeout: number;
114 RefungibleSponsorTransferTimeout: number;
115 OffchainSchemaLimit: number;
116 VariableOnChainSchemaLimit: number;
117 ConstOnChainSchemaLimit: number;
118}
97119
98export interface IReFungibleTokenDataType {120export interface IReFungibleTokenDataType {
99 Owner: IReFungibleOwner[];121 Owner: IReFungibleOwner[];
414 });436 });
415}437}
416438
417export async function setCollectionSponsorExpectSuccess(collectionId: number, sponsor: string) {439export async function setCollectionSponsorExpectSuccess(collectionId: number, sponsor: string, sender = '//Alice') {
418 await usingApi(async (api) => {440 await usingApi(async (api) => {
419441
420 // Run the transaction442 // Run the transaction
421 const alicePrivateKey = privateKey('//Alice');443 const senderPrivateKey = privateKey(sender);
422 const tx = api.tx.nft.setCollectionSponsor(collectionId, sponsor);444 const tx = api.tx.nft.setCollectionSponsor(collectionId, sponsor);
423 const events = await submitTransactionAsync(alicePrivateKey, tx);445 const events = await submitTransactionAsync(senderPrivateKey, tx);
424 const result = getGenericResult(events);446 const result = getGenericResult(events);
425447
426 // Get the collection448 // Get the collection
434 });456 });
435}457}
436458
437export async function removeCollectionSponsorExpectSuccess(collectionId: number) {459export async function removeCollectionSponsorExpectSuccess(collectionId: number, sender = '//Alice') {
438 await usingApi(async (api) => {460 await usingApi(async (api) => {
439461
440 // Run the transaction462 // Run the transaction
441 const alicePrivateKey = privateKey('//Alice');463 const alicePrivateKey = privateKey(sender);
442 const tx = api.tx.nft.removeCollectionSponsor(collectionId);464 const tx = api.tx.nft.removeCollectionSponsor(collectionId);
443 const events = await submitTransactionAsync(alicePrivateKey, tx);465 const events = await submitTransactionAsync(alicePrivateKey, tx);
444 const result = getGenericResult(events);466 const result = getGenericResult(events);
452 });474 });
453}475}
454476
455export async function removeCollectionSponsorExpectFailure(collectionId: number) {477export async function removeCollectionSponsorExpectFailure(collectionId: number, senderSeed = '//Alice') {
456 await usingApi(async (api) => {478 await usingApi(async (api) => {
457479
458 // Run the transaction480 // Run the transaction
459 const alicePrivateKey = privateKey('//Alice');481 const alicePrivateKey = privateKey(senderSeed);
460 const tx = api.tx.nft.removeCollectionSponsor(collectionId);482 const tx = api.tx.nft.removeCollectionSponsor(collectionId);
461 await expect(submitTransactionExpectFailAsync(alicePrivateKey, tx)).to.be.rejected;483 await expect(submitTransactionExpectFailAsync(alicePrivateKey, tx)).to.be.rejected;
462 });484 });
545 });567 });
546}568}
569
570export async function setTransferFlagExpectSuccess(sender: IKeyringPair, collectionId: number, enabled: boolean) {
571
572 await usingApi(async (api) => {
573
574 const tx = api.tx.nft.setTransfersEnabledFlag (collectionId, enabled);
575 const events = await submitTransactionAsync(sender, tx);
576 const result = getGenericResult(events);
577
578 expect(result.success).to.be.true;
579 });
580}
581
582export async function setTransferFlagExpectFailure(sender: IKeyringPair, collectionId: number, enabled: boolean) {
583
584 await usingApi(async (api) => {
585
586 const tx = api.tx.nft.setTransfersEnabledFlag (collectionId, enabled);
587 const events = await expect(submitTransactionExpectFailAsync(sender, tx)).to.be.rejected;
588 const result = getGenericResult(events);
589
590 expect(result.success).to.be.false;
591 });
592}
547593
548export async function setContractSponsoringRateLimitExpectSuccess(sender: IKeyringPair, contractAddress: AccountId | string, rateLimit: number) {594export async function setContractSponsoringRateLimitExpectSuccess(sender: IKeyringPair, contractAddress: AccountId | string, rateLimit: number) {
549 await usingApi(async (api) => {595 await usingApi(async (api) => {
763 });809 });
764}810}
811
812export async function addCollectionAdminExpectSuccess(sender: IKeyringPair, collectionId: number, address: IKeyringPair) {
813 await usingApi(async (api) => {
814 const changeAdminTx = api.tx.nft.addCollectionAdmin(collectionId, normalizeAccountId(address.address));
815 const events = await submitTransactionAsync(sender, changeAdminTx);
816 const result = getCreateCollectionResult(events);
817 expect(result.success).to.be.true;
818 });
819}
765820
766export async function821export async function
767scheduleTransferExpectSuccess(822scheduleTransferExpectSuccess(
978 });1033 });
979}1034}
1035
1036export async function setPublicAccessModeExpectFail(
1037 sender: IKeyringPair, collectionId: number,
1038 accessMode: 'Normal' | 'WhiteList',
1039) {
1040 await usingApi(async (api) => {
1041
1042 // Run the transaction
1043 const tx = api.tx.nft.setPublicAccessMode(collectionId, accessMode);
1044 const events = await expect(submitTransactionExpectFailAsync(sender, tx)).to.be.rejected;
1045 const result = getGenericResult(events);
1046
1047 // What to expect
1048 // tslint:disable-next-line:no-unused-expression
1049 expect(result.success).to.be.false;
1050 });
1051}
9801052
981export async function enableWhiteListExpectSuccess(sender: IKeyringPair, collectionId: number) {1053export async function enableWhiteListExpectSuccess(sender: IKeyringPair, collectionId: number) {
982 await setPublicAccessModeExpectSuccess(sender, collectionId, 'WhiteList');1054 await setPublicAccessModeExpectSuccess(sender, collectionId, 'WhiteList');
983}1055}
1056
1057export async function enableWhiteListExpectFail(sender: IKeyringPair, collectionId: number) {
1058 await setPublicAccessModeExpectFail(sender, collectionId, 'WhiteList');
1059}
9841060
985export async function disableWhiteListExpectSuccess(sender: IKeyringPair, collectionId: number) {1061export async function disableWhiteListExpectSuccess(sender: IKeyringPair, collectionId: number) {
986 await setPublicAccessModeExpectSuccess(sender, collectionId, 'Normal');1062 await setPublicAccessModeExpectSuccess(sender, collectionId, 'Normal');
1028 });1104 });
1029}1105}
1106
1107export async function setChainLimitsExpectFailure(sender: IKeyringPair, limits: IChainLimits) {
1108 await usingApi(async (api) => {
1109 // Run the transaction
1110 const tx = api.tx.nft.setChainLimits(limits);
1111 const events = await expect(submitTransactionExpectFailAsync(sender, tx)).to.be.rejected;
1112 const result = getCreateCollectionResult(events);
1113 // tslint:disable-next-line:no-unused-expression
1114 expect(result.success).to.be.false;
1115 });
1116}
10301117
1031export async function isWhitelisted(collectionId: number, address: string) {1118export async function isWhitelisted(collectionId: number, address: string) {
1032 let whitelisted = false;1119 let whitelisted = false;
1058 });1145 });
1059}1146}
1147
1148export async function addToWhiteListExpectFail(sender: IKeyringPair, collectionId: number, address: string | AccountId) {
1149 await usingApi(async (api) => {
1150 // Run the transaction
1151 const tx = api.tx.nft.addToWhiteList(collectionId, normalizeAccountId(address));
1152 const events = await expect(submitTransactionAsync(sender, tx)).to.be.rejected;
1153 const result = getGenericResult(events);
1154
1155 // What to expect
1156 // tslint:disable-next-line:no-unused-expression
1157 expect(result.success).to.be.false;
1158 });
1159}
10601160
1061export async function removeFromWhiteListExpectSuccess(sender: IKeyringPair, collectionId: number, address: CrossAccountId) {1161export async function removeFromWhiteListExpectSuccess(sender: IKeyringPair, collectionId: number, address: CrossAccountId) {
1062 await usingApi(async (api) => {1162 await usingApi(async (api) => {
1100 });1200 });
1101}1201}
11021202
1203export async function queryNftOwner(api: ApiPromise, collectionId: number, tokenId: number): Promise<CrossAccountId> {
1204 return normalizeAccountId((await api.query.nft.nftItemList(collectionId, tokenId) as any).toJSON().Owner);
1205}
modifiedtests/yarn.lockdiffbeforeafterboth
2# yarn lockfile v12# yarn lockfile v1
33
44
5"@babel/cli@^7.14.5":5"@babel/cli@^7.14.8":
6 version "7.14.5"6 version "7.14.8"
7 resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.14.5.tgz#9551b194f02360729de6060785bbdcce52c69f0a"7 resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.14.8.tgz#fac73c0e2328a8af9fd3560c06b096bfa3730933"
8 integrity sha512-poegjhRvXHWO0EAsnYajwYZuqcz7gyfxwfaecUESxDujrqOivf3zrjFbub8IJkrqEaz3fvJWh001EzxBub54fg==8 integrity sha512-lcy6Lymft9Rpfqmrqdd4oTDdUx9ZwaAhAfywVrHG4771Pa6PPT0danJ1kDHBXYqh4HHSmIdA+nlmfxfxSDPtBg==
9 dependencies:9 dependencies:
10 commander "^4.0.1"10 commander "^4.0.1"
11 convert-source-map "^1.1.0"11 convert-source-map "^1.1.0"
42 resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.7.tgz#7b047d7a3a89a67d2258dc61f604f098f1bc7e08"42 resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.7.tgz#7b047d7a3a89a67d2258dc61f604f098f1bc7e08"
43 integrity sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==43 integrity sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==
4444
45"@babel/core@^7.1.0", "@babel/core@^7.14.6", "@babel/core@^7.7.2", "@babel/core@^7.7.5":45"@babel/compat-data@^7.15.0":
46 version "7.15.0"
47 resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176"
48 integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==
49
50"@babel/core@^7.1.0", "@babel/core@^7.7.2", "@babel/core@^7.7.5":
46 version "7.14.6"51 version "7.14.6"
47 resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.6.tgz#e0814ec1a950032ff16c13a2721de39a8416fcab"52 resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.6.tgz#e0814ec1a950032ff16c13a2721de39a8416fcab"
48 integrity sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==53 integrity sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==
63 semver "^6.3.0"68 semver "^6.3.0"
64 source-map "^0.5.0"69 source-map "^0.5.0"
6570
71"@babel/core@^7.15.0":
72 version "7.15.0"
73 resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.15.0.tgz#749e57c68778b73ad8082775561f67f5196aafa8"
74 integrity sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw==
75 dependencies:
76 "@babel/code-frame" "^7.14.5"
77 "@babel/generator" "^7.15.0"
78 "@babel/helper-compilation-targets" "^7.15.0"
79 "@babel/helper-module-transforms" "^7.15.0"
80 "@babel/helpers" "^7.14.8"
81 "@babel/parser" "^7.15.0"
82 "@babel/template" "^7.14.5"
83 "@babel/traverse" "^7.15.0"
84 "@babel/types" "^7.15.0"
85 convert-source-map "^1.7.0"
86 debug "^4.1.0"
87 gensync "^1.0.0-beta.2"
88 json5 "^2.1.2"
89 semver "^6.3.0"
90 source-map "^0.5.0"
91
66"@babel/generator@^7.14.5", "@babel/generator@^7.7.2":92"@babel/generator@^7.14.5", "@babel/generator@^7.7.2":
67 version "7.14.5"93 version "7.14.5"
68 resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.5.tgz#848d7b9f031caca9d0cd0af01b063f226f52d785"94 resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.5.tgz#848d7b9f031caca9d0cd0af01b063f226f52d785"
72 jsesc "^2.5.1"98 jsesc "^2.5.1"
73 source-map "^0.5.0"99 source-map "^0.5.0"
74100
101"@babel/generator@^7.15.0":
102 version "7.15.0"
103 resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.0.tgz#a7d0c172e0d814974bad5aa77ace543b97917f15"
104 integrity sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==
105 dependencies:
106 "@babel/types" "^7.15.0"
107 jsesc "^2.5.1"
108 source-map "^0.5.0"
109
75"@babel/helper-annotate-as-pure@^7.0.0", "@babel/helper-annotate-as-pure@^7.14.5":110"@babel/helper-annotate-as-pure@^7.0.0", "@babel/helper-annotate-as-pure@^7.14.5":
76 version "7.14.5"111 version "7.14.5"
77 resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz#7bf478ec3b71726d56a8ca5775b046fc29879e61"112 resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz#7bf478ec3b71726d56a8ca5775b046fc29879e61"
97 browserslist "^4.16.6"132 browserslist "^4.16.6"
98 semver "^6.3.0"133 semver "^6.3.0"
99134
100"@babel/helper-create-class-features-plugin@^7.14.5", "@babel/helper-create-class-features-plugin@^7.14.6":135"@babel/helper-compilation-targets@^7.15.0":
136 version "7.15.0"
137 resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz#973df8cbd025515f3ff25db0c05efc704fa79818"
138 integrity sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==
139 dependencies:
140 "@babel/compat-data" "^7.15.0"
141 "@babel/helper-validator-option" "^7.14.5"
142 browserslist "^4.16.6"
143 semver "^6.3.0"
144
145"@babel/helper-create-class-features-plugin@^7.14.5":
101 version "7.14.6"146 version "7.14.6"
102 resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz#f114469b6c06f8b5c59c6c4e74621f5085362542"147 resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz#f114469b6c06f8b5c59c6c4e74621f5085362542"
103 integrity sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==148 integrity sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==
109 "@babel/helper-replace-supers" "^7.14.5"154 "@babel/helper-replace-supers" "^7.14.5"
110 "@babel/helper-split-export-declaration" "^7.14.5"155 "@babel/helper-split-export-declaration" "^7.14.5"
111156
157"@babel/helper-create-class-features-plugin@^7.15.0":
158 version "7.15.0"
159 resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.0.tgz#c9a137a4d137b2d0e2c649acf536d7ba1a76c0f7"
160 integrity sha512-MdmDXgvTIi4heDVX/e9EFfeGpugqm9fobBVg/iioE8kueXrOHdRDe36FAY7SnE9xXLVeYCoJR/gdrBEIHRC83Q==
161 dependencies:
162 "@babel/helper-annotate-as-pure" "^7.14.5"
163 "@babel/helper-function-name" "^7.14.5"
164 "@babel/helper-member-expression-to-functions" "^7.15.0"
165 "@babel/helper-optimise-call-expression" "^7.14.5"
166 "@babel/helper-replace-supers" "^7.15.0"
167 "@babel/helper-split-export-declaration" "^7.14.5"
168
112"@babel/helper-create-regexp-features-plugin@^7.14.5":169"@babel/helper-create-regexp-features-plugin@^7.14.5":
113 version "7.14.5"170 version "7.14.5"
114 resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz#c7d5ac5e9cf621c26057722fb7a8a4c5889358c4"171 resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz#c7d5ac5e9cf621c26057722fb7a8a4c5889358c4"
168 dependencies:225 dependencies:
169 "@babel/types" "^7.14.5"226 "@babel/types" "^7.14.5"
170227
228"@babel/helper-member-expression-to-functions@^7.15.0":
229 version "7.15.0"
230 resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz#0ddaf5299c8179f27f37327936553e9bba60990b"
231 integrity sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==
232 dependencies:
233 "@babel/types" "^7.15.0"
234
171"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5":235"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5":
172 version "7.14.5"236 version "7.14.5"
173 resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3"237 resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3"
189 "@babel/traverse" "^7.14.5"253 "@babel/traverse" "^7.14.5"
190 "@babel/types" "^7.14.5"254 "@babel/types" "^7.14.5"
191255
256"@babel/helper-module-transforms@^7.15.0":
257 version "7.15.0"
258 resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz#679275581ea056373eddbe360e1419ef23783b08"
259 integrity sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg==
260 dependencies:
261 "@babel/helper-module-imports" "^7.14.5"
262 "@babel/helper-replace-supers" "^7.15.0"
263 "@babel/helper-simple-access" "^7.14.8"
264 "@babel/helper-split-export-declaration" "^7.14.5"
265 "@babel/helper-validator-identifier" "^7.14.9"
266 "@babel/template" "^7.14.5"
267 "@babel/traverse" "^7.15.0"
268 "@babel/types" "^7.15.0"
269
192"@babel/helper-optimise-call-expression@^7.14.5":270"@babel/helper-optimise-call-expression@^7.14.5":
193 version "7.14.5"271 version "7.14.5"
194 resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz#f27395a8619e0665b3f0364cddb41c25d71b499c"272 resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz#f27395a8619e0665b3f0364cddb41c25d71b499c"
220 "@babel/traverse" "^7.14.5"298 "@babel/traverse" "^7.14.5"
221 "@babel/types" "^7.14.5"299 "@babel/types" "^7.14.5"
222300
301"@babel/helper-replace-supers@^7.15.0":
302 version "7.15.0"
303 resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz#ace07708f5bf746bf2e6ba99572cce79b5d4e7f4"
304 integrity sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==
305 dependencies:
306 "@babel/helper-member-expression-to-functions" "^7.15.0"
307 "@babel/helper-optimise-call-expression" "^7.14.5"
308 "@babel/traverse" "^7.15.0"
309 "@babel/types" "^7.15.0"
310
223"@babel/helper-simple-access@^7.14.5":311"@babel/helper-simple-access@^7.14.5":
224 version "7.14.5"312 version "7.14.5"
225 resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz#66ea85cf53ba0b4e588ba77fc813f53abcaa41c4"313 resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz#66ea85cf53ba0b4e588ba77fc813f53abcaa41c4"
226 integrity sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==314 integrity sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==
227 dependencies:315 dependencies:
228 "@babel/types" "^7.14.5"316 "@babel/types" "^7.14.5"
229317
318"@babel/helper-simple-access@^7.14.8":
319 version "7.14.8"
320 resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz#82e1fec0644a7e775c74d305f212c39f8fe73924"
321 integrity sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==
322 dependencies:
323 "@babel/types" "^7.14.8"
324
230"@babel/helper-skip-transparent-expression-wrappers@^7.14.5":325"@babel/helper-skip-transparent-expression-wrappers@^7.14.5":
231 version "7.14.5"326 version "7.14.5"
232 resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz#96f486ac050ca9f44b009fbe5b7d394cab3a0ee4"327 resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz#96f486ac050ca9f44b009fbe5b7d394cab3a0ee4"
246 resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8"341 resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8"
247 integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==342 integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==
248343
344"@babel/helper-validator-identifier@^7.14.9":
345 version "7.14.9"
346 resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz#6654d171b2024f6d8ee151bf2509699919131d48"
347 integrity sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==
348
249"@babel/helper-validator-option@^7.14.5":349"@babel/helper-validator-option@^7.14.5":
250 version "7.14.5"350 version "7.14.5"
251 resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3"351 resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3"
270 "@babel/traverse" "^7.14.5"370 "@babel/traverse" "^7.14.5"
271 "@babel/types" "^7.14.5"371 "@babel/types" "^7.14.5"
272372
373"@babel/helpers@^7.14.8":
374 version "7.15.3"
375 resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.15.3.tgz#c96838b752b95dcd525b4e741ed40bb1dc2a1357"
376 integrity sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g==
377 dependencies:
378 "@babel/template" "^7.14.5"
379 "@babel/traverse" "^7.15.0"
380 "@babel/types" "^7.15.0"
381
273"@babel/highlight@^7.10.4", "@babel/highlight@^7.14.5":382"@babel/highlight@^7.10.4", "@babel/highlight@^7.14.5":
274 version "7.14.5"383 version "7.14.5"
275 resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9"384 resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9"
284 resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.6.tgz#d85cc68ca3cac84eae384c06f032921f5227f4b2"393 resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.6.tgz#d85cc68ca3cac84eae384c06f032921f5227f4b2"
285 integrity sha512-oG0ej7efjEXxb4UgE+klVx+3j4MVo+A2vCzm7OUN4CLo6WhQ+vSOD2yJ8m7B+DghObxtLxt3EfgMWpq+AsWehQ==394 integrity sha512-oG0ej7efjEXxb4UgE+klVx+3j4MVo+A2vCzm7OUN4CLo6WhQ+vSOD2yJ8m7B+DghObxtLxt3EfgMWpq+AsWehQ==
286395
396"@babel/parser@^7.15.0":
397 version "7.15.3"
398 resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.3.tgz#3416d9bea748052cfcb63dbcc27368105b1ed862"
399 integrity sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==
400
287"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.14.5":401"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.14.5":
288 version "7.14.5"402 version "7.14.5"
289 resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz#4b467302e1548ed3b1be43beae2cc9cf45e0bb7e"403 resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz#4b467302e1548ed3b1be43beae2cc9cf45e0bb7e"
293 "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5"407 "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5"
294 "@babel/plugin-proposal-optional-chaining" "^7.14.5"408 "@babel/plugin-proposal-optional-chaining" "^7.14.5"
295409
296"@babel/plugin-proposal-async-generator-functions@^7.14.7":410"@babel/plugin-proposal-async-generator-functions@^7.14.9":
297 version "7.14.7"411 version "7.14.9"
298 resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.7.tgz#784a48c3d8ed073f65adcf30b57bcbf6c8119ace"412 resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.9.tgz#7028dc4fa21dc199bbacf98b39bab1267d0eaf9a"
299 integrity sha512-RK8Wj7lXLY3bqei69/cc25gwS5puEc3dknoFPFbqfy3XxYQBQFvu4ioWpafMBAB+L9NyptQK4nMOa5Xz16og8Q==413 integrity sha512-d1lnh+ZnKrFKwtTYdw320+sQWCTwgkB9fmUhNXRADA4akR6wLjaruSGnIEUjpt9HCOwTr4ynFTKu19b7rFRpmw==
300 dependencies:414 dependencies:
301 "@babel/helper-plugin-utils" "^7.14.5"415 "@babel/helper-plugin-utils" "^7.14.5"
302 "@babel/helper-remap-async-to-generator" "^7.14.5"416 "@babel/helper-remap-async-to-generator" "^7.14.5"
577 dependencies:691 dependencies:
578 "@babel/helper-plugin-utils" "^7.14.5"692 "@babel/helper-plugin-utils" "^7.14.5"
579693
580"@babel/plugin-transform-classes@^7.14.5":694"@babel/plugin-transform-classes@^7.14.9":
581 version "7.14.5"695 version "7.14.9"
582 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz#0e98e82097b38550b03b483f9b51a78de0acb2cf"696 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.9.tgz#2a391ffb1e5292710b00f2e2c210e1435e7d449f"
583 integrity sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA==697 integrity sha512-NfZpTcxU3foGWbl4wxmZ35mTsYJy8oQocbeIMoDAGGFarAmSQlL+LWMkDx/tj6pNotpbX3rltIA4dprgAPOq5A==
584 dependencies:698 dependencies:
585 "@babel/helper-annotate-as-pure" "^7.14.5"699 "@babel/helper-annotate-as-pure" "^7.14.5"
586 "@babel/helper-function-name" "^7.14.5"700 "@babel/helper-function-name" "^7.14.5"
665 "@babel/helper-plugin-utils" "^7.14.5"779 "@babel/helper-plugin-utils" "^7.14.5"
666 babel-plugin-dynamic-import-node "^2.3.3"780 babel-plugin-dynamic-import-node "^2.3.3"
667781
668"@babel/plugin-transform-modules-commonjs@^7.14.5":782"@babel/plugin-transform-modules-commonjs@^7.15.0":
669 version "7.14.5"783 version "7.15.0"
670 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz#7aaee0ea98283de94da98b28f8c35701429dad97"784 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.0.tgz#3305896e5835f953b5cdb363acd9e8c2219a5281"
671 integrity sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A==785 integrity sha512-3H/R9s8cXcOGE8kgMlmjYYC9nqr5ELiPkJn4q0mypBrjhYQoc+5/Maq69vV4xRPWnkzZuwJPf5rArxpB/35Cig==
672 dependencies:786 dependencies:
673 "@babel/helper-module-transforms" "^7.14.5"787 "@babel/helper-module-transforms" "^7.15.0"
674 "@babel/helper-plugin-utils" "^7.14.5"788 "@babel/helper-plugin-utils" "^7.14.5"
675 "@babel/helper-simple-access" "^7.14.5"789 "@babel/helper-simple-access" "^7.14.8"
676 babel-plugin-dynamic-import-node "^2.3.3"790 babel-plugin-dynamic-import-node "^2.3.3"
677791
678"@babel/plugin-transform-modules-systemjs@^7.14.5":792"@babel/plugin-transform-modules-systemjs@^7.14.5":
694 "@babel/helper-module-transforms" "^7.14.5"808 "@babel/helper-module-transforms" "^7.14.5"
695 "@babel/helper-plugin-utils" "^7.14.5"809 "@babel/helper-plugin-utils" "^7.14.5"
696810
697"@babel/plugin-transform-named-capturing-groups-regex@^7.14.7":811"@babel/plugin-transform-named-capturing-groups-regex@^7.14.9":
698 version "7.14.7"812 version "7.14.9"
699 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.7.tgz#60c06892acf9df231e256c24464bfecb0908fd4e"813 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz#c68f5c5d12d2ebaba3762e57c2c4f6347a46e7b2"
700 integrity sha512-DTNOTaS7TkW97xsDMrp7nycUVh6sn/eq22VaxWfEdzuEbRsiaOU0pqU7DlyUGHVsbQbSghvjKRpEl+nUCKGQSg==814 integrity sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA==
701 dependencies:815 dependencies:
702 "@babel/helper-create-regexp-features-plugin" "^7.14.5"816 "@babel/helper-create-regexp-features-plugin" "^7.14.5"
703817
777 dependencies:891 dependencies:
778 "@babel/helper-plugin-utils" "^7.14.5"892 "@babel/helper-plugin-utils" "^7.14.5"
779893
780"@babel/plugin-transform-runtime@^7.14.5":894"@babel/plugin-transform-runtime@^7.15.0":
781 version "7.14.5"895 version "7.15.0"
782 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.5.tgz#30491dad49c6059f8f8fa5ee8896a0089e987523"896 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.15.0.tgz#d3aa650d11678ca76ce294071fda53d7804183b3"
783 integrity sha512-fPMBhh1AV8ZyneiCIA+wYYUH1arzlXR1UMcApjvchDhfKxhy2r2lReJv8uHEyihi4IFIGlr1Pdx7S5fkESDQsg==897 integrity sha512-sfHYkLGjhzWTq6xsuQ01oEsUYjkHRux9fW1iUA68dC7Qd8BS1Unq4aZ8itmQp95zUzIcyR2EbNMTzAicFj+guw==
784 dependencies:898 dependencies:
785 "@babel/helper-module-imports" "^7.14.5"899 "@babel/helper-module-imports" "^7.14.5"
786 "@babel/helper-plugin-utils" "^7.14.5"900 "@babel/helper-plugin-utils" "^7.14.5"
825 dependencies:939 dependencies:
826 "@babel/helper-plugin-utils" "^7.14.5"940 "@babel/helper-plugin-utils" "^7.14.5"
827941
828"@babel/plugin-transform-typescript@^7.14.5":942"@babel/plugin-transform-typescript@^7.15.0":
829 version "7.14.6"943 version "7.15.0"
830 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.6.tgz#6e9c2d98da2507ebe0a883b100cde3c7279df36c"944 resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.15.0.tgz#553f230b9d5385018716586fc48db10dd228eb7e"
831 integrity sha512-XlTdBq7Awr4FYIzqhmYY80WN0V0azF74DMPyFqVHBvf81ZUgc4X7ZOpx6O8eLDK6iM5cCQzeyJw0ynTaefixRA==945 integrity sha512-WIIEazmngMEEHDaPTx0IZY48SaAmjVWe3TRSX7cmJXn0bEv9midFzAjxiruOWYIVf5iQ10vFx7ASDpgEO08L5w==
832 dependencies:946 dependencies:
833 "@babel/helper-create-class-features-plugin" "^7.14.6"947 "@babel/helper-create-class-features-plugin" "^7.15.0"
834 "@babel/helper-plugin-utils" "^7.14.5"948 "@babel/helper-plugin-utils" "^7.14.5"
835 "@babel/plugin-syntax-typescript" "^7.14.5"949 "@babel/plugin-syntax-typescript" "^7.14.5"
836950
849 "@babel/helper-create-regexp-features-plugin" "^7.14.5"963 "@babel/helper-create-regexp-features-plugin" "^7.14.5"
850 "@babel/helper-plugin-utils" "^7.14.5"964 "@babel/helper-plugin-utils" "^7.14.5"
851965
852"@babel/preset-env@^7.14.7":966"@babel/preset-env@^7.15.0":
853 version "7.14.7"967 version "7.15.0"
854 resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.14.7.tgz#5c70b22d4c2d893b03d8c886a5c17422502b932a"968 resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.15.0.tgz#e2165bf16594c9c05e52517a194bf6187d6fe464"
855 integrity sha512-itOGqCKLsSUl0Y+1nSfhbuuOlTs0MJk2Iv7iSH+XT/mR8U1zRLO7NjWlYXB47yhK4J/7j+HYty/EhFZDYKa/VA==969 integrity sha512-FhEpCNFCcWW3iZLg0L2NPE9UerdtsCR6ZcsGHUX6Om6kbCQeL5QZDqFDmeNHC6/fy6UH3jEge7K4qG5uC9In0Q==
856 dependencies:970 dependencies:
857 "@babel/compat-data" "^7.14.7"971 "@babel/compat-data" "^7.15.0"
858 "@babel/helper-compilation-targets" "^7.14.5"972 "@babel/helper-compilation-targets" "^7.15.0"
859 "@babel/helper-plugin-utils" "^7.14.5"973 "@babel/helper-plugin-utils" "^7.14.5"
860 "@babel/helper-validator-option" "^7.14.5"974 "@babel/helper-validator-option" "^7.14.5"
861 "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.14.5"975 "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.14.5"
862 "@babel/plugin-proposal-async-generator-functions" "^7.14.7"976 "@babel/plugin-proposal-async-generator-functions" "^7.14.9"
863 "@babel/plugin-proposal-class-properties" "^7.14.5"977 "@babel/plugin-proposal-class-properties" "^7.14.5"
864 "@babel/plugin-proposal-class-static-block" "^7.14.5"978 "@babel/plugin-proposal-class-static-block" "^7.14.5"
865 "@babel/plugin-proposal-dynamic-import" "^7.14.5"979 "@babel/plugin-proposal-dynamic-import" "^7.14.5"
892 "@babel/plugin-transform-async-to-generator" "^7.14.5"1006 "@babel/plugin-transform-async-to-generator" "^7.14.5"
893 "@babel/plugin-transform-block-scoped-functions" "^7.14.5"1007 "@babel/plugin-transform-block-scoped-functions" "^7.14.5"
894 "@babel/plugin-transform-block-scoping" "^7.14.5"1008 "@babel/plugin-transform-block-scoping" "^7.14.5"
895 "@babel/plugin-transform-classes" "^7.14.5"1009 "@babel/plugin-transform-classes" "^7.14.9"
896 "@babel/plugin-transform-computed-properties" "^7.14.5"1010 "@babel/plugin-transform-computed-properties" "^7.14.5"
897 "@babel/plugin-transform-destructuring" "^7.14.7"1011 "@babel/plugin-transform-destructuring" "^7.14.7"
898 "@babel/plugin-transform-dotall-regex" "^7.14.5"1012 "@babel/plugin-transform-dotall-regex" "^7.14.5"
903 "@babel/plugin-transform-literals" "^7.14.5"1017 "@babel/plugin-transform-literals" "^7.14.5"
904 "@babel/plugin-transform-member-expression-literals" "^7.14.5"1018 "@babel/plugin-transform-member-expression-literals" "^7.14.5"
905 "@babel/plugin-transform-modules-amd" "^7.14.5"1019 "@babel/plugin-transform-modules-amd" "^7.14.5"
906 "@babel/plugin-transform-modules-commonjs" "^7.14.5"1020 "@babel/plugin-transform-modules-commonjs" "^7.15.0"
907 "@babel/plugin-transform-modules-systemjs" "^7.14.5"1021 "@babel/plugin-transform-modules-systemjs" "^7.14.5"
908 "@babel/plugin-transform-modules-umd" "^7.14.5"1022 "@babel/plugin-transform-modules-umd" "^7.14.5"
909 "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.7"1023 "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.9"
910 "@babel/plugin-transform-new-target" "^7.14.5"1024 "@babel/plugin-transform-new-target" "^7.14.5"
911 "@babel/plugin-transform-object-super" "^7.14.5"1025 "@babel/plugin-transform-object-super" "^7.14.5"
912 "@babel/plugin-transform-parameters" "^7.14.5"1026 "@babel/plugin-transform-parameters" "^7.14.5"
921 "@babel/plugin-transform-unicode-escapes" "^7.14.5"1035 "@babel/plugin-transform-unicode-escapes" "^7.14.5"
922 "@babel/plugin-transform-unicode-regex" "^7.14.5"1036 "@babel/plugin-transform-unicode-regex" "^7.14.5"
923 "@babel/preset-modules" "^0.1.4"1037 "@babel/preset-modules" "^0.1.4"
924 "@babel/types" "^7.14.5"1038 "@babel/types" "^7.15.0"
925 babel-plugin-polyfill-corejs2 "^0.2.2"1039 babel-plugin-polyfill-corejs2 "^0.2.2"
926 babel-plugin-polyfill-corejs3 "^0.2.2"1040 babel-plugin-polyfill-corejs3 "^0.2.2"
927 babel-plugin-polyfill-regenerator "^0.2.2"1041 babel-plugin-polyfill-regenerator "^0.2.2"
928 core-js-compat "^3.15.0"1042 core-js-compat "^3.16.0"
929 semver "^6.3.0"1043 semver "^6.3.0"
9301044
931"@babel/preset-modules@^0.1.4":1045"@babel/preset-modules@^0.1.4":
951 "@babel/plugin-transform-react-jsx-development" "^7.14.5"1065 "@babel/plugin-transform-react-jsx-development" "^7.14.5"
952 "@babel/plugin-transform-react-pure-annotations" "^7.14.5"1066 "@babel/plugin-transform-react-pure-annotations" "^7.14.5"
9531067
954"@babel/preset-typescript@^7.14.5":1068"@babel/preset-typescript@^7.15.0":
955 version "7.14.5"1069 version "7.15.0"
956 resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.14.5.tgz#aa98de119cf9852b79511f19e7f44a2d379bcce0"1070 resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.15.0.tgz#e8fca638a1a0f64f14e1119f7fe4500277840945"
957 integrity sha512-u4zO6CdbRKbS9TypMqrlGH7sd2TAJppZwn3c/ZRLeO/wGsbddxgbPDUZVNrie3JWYLQ9vpineKlsrWFvO6Pwkw==1071 integrity sha512-lt0Y/8V3y06Wq/8H/u0WakrqciZ7Fz7mwPDHWUJAXlABL5hiUG42BNlRXiELNjeWjO5rWmnNKlx+yzJvxezHow==
958 dependencies:1072 dependencies:
959 "@babel/helper-plugin-utils" "^7.14.5"1073 "@babel/helper-plugin-utils" "^7.14.5"
960 "@babel/helper-validator-option" "^7.14.5"1074 "@babel/helper-validator-option" "^7.14.5"
961 "@babel/plugin-transform-typescript" "^7.14.5"1075 "@babel/plugin-transform-typescript" "^7.15.0"
9621076
963"@babel/register@^7.14.5":1077"@babel/register@^7.15.3":
964 version "7.14.5"1078 version "7.15.3"
965 resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.14.5.tgz#d0eac615065d9c2f1995842f85d6e56c345f3233"1079 resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.15.3.tgz#6b40a549e06ec06c885b2ec42c3dd711f55fe752"
966 integrity sha512-TjJpGz/aDjFGWsItRBQMOFTrmTI9tr79CHOK+KIvLeCkbxuOAk2M5QHjvruIMGoo9OuccMh5euplPzc5FjAKGg==1080 integrity sha512-mj4IY1ZJkorClxKTImccn4T81+UKTo4Ux0+OFSV9hME1ooqS9UV+pJ6BjD0qXPK4T3XW/KNa79XByjeEMZz+fw==
967 dependencies:1081 dependencies:
968 clone-deep "^4.0.1"1082 clone-deep "^4.0.1"
969 find-cache-dir "^2.0.0"1083 find-cache-dir "^2.0.0"
978 dependencies:1092 dependencies:
979 regenerator-runtime "^0.13.4"1093 regenerator-runtime "^0.13.4"
9801094
1095"@babel/runtime@^7.15.3":
1096 version "7.15.3"
1097 resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.3.tgz#2e1c2880ca118e5b2f9988322bd8a7656a32502b"
1098 integrity sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA==
1099 dependencies:
1100 regenerator-runtime "^0.13.4"
1101
981"@babel/template@^7.14.5", "@babel/template@^7.3.3":1102"@babel/template@^7.14.5", "@babel/template@^7.3.3":
982 version "7.14.5"1103 version "7.14.5"
983 resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4"1104 resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4"
1002 debug "^4.1.0"1123 debug "^4.1.0"
1003 globals "^11.1.0"1124 globals "^11.1.0"
10041125
1126"@babel/traverse@^7.15.0":
1127 version "7.15.0"
1128 resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.0.tgz#4cca838fd1b2a03283c1f38e141f639d60b3fc98"
1129 integrity sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==
1130 dependencies:
1131 "@babel/code-frame" "^7.14.5"
1132 "@babel/generator" "^7.15.0"
1133 "@babel/helper-function-name" "^7.14.5"
1134 "@babel/helper-hoist-variables" "^7.14.5"
1135 "@babel/helper-split-export-declaration" "^7.14.5"
1136 "@babel/parser" "^7.15.0"
1137 "@babel/types" "^7.15.0"
1138 debug "^4.1.0"
1139 globals "^11.1.0"
1140
1005"@babel/types@^7.0.0", "@babel/types@^7.14.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4":1141"@babel/types@^7.0.0", "@babel/types@^7.14.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4":
1006 version "7.14.5"1142 version "7.14.5"
1007 resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.5.tgz#3bb997ba829a2104cedb20689c4a5b8121d383ff"1143 resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.5.tgz#3bb997ba829a2104cedb20689c4a5b8121d383ff"
1010 "@babel/helper-validator-identifier" "^7.14.5"1146 "@babel/helper-validator-identifier" "^7.14.5"
1011 to-fast-properties "^2.0.0"1147 to-fast-properties "^2.0.0"
10121148
1149"@babel/types@^7.14.8", "@babel/types@^7.15.0":
1150 version "7.15.0"
1151 resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.0.tgz#61af11f2286c4e9c69ca8deb5f4375a73c72dcbd"
1152 integrity sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==
1153 dependencies:
1154 "@babel/helper-validator-identifier" "^7.14.9"
1155 to-fast-properties "^2.0.0"
1156
1013"@bcoe/v8-coverage@^0.2.3":1157"@bcoe/v8-coverage@^0.2.3":
1014 version "0.2.3"1158 version "0.2.3"
1015 resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"1159 resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
1016 integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==1160 integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
10171161
1018"@eslint/eslintrc@^0.4.2":1162"@eslint/eslintrc@^0.4.3":
1019 version "0.4.2"1163 version "0.4.3"
1020 resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.2.tgz#f63d0ef06f5c0c57d76c4ab5f63d3835c51b0179"1164 resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c"
1021 integrity sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==1165 integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==
1022 dependencies:1166 dependencies:
1023 ajv "^6.12.4"1167 ajv "^6.12.4"
1024 debug "^4.1.1"1168 debug "^4.1.1"
1236 resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98"1380 resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98"
1237 integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==1381 integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==
12381382
1239"@jest/console@^27.0.2":1383"@jest/console@^27.0.6":
1240 version "27.0.2"1384 version "27.0.6"
1241 resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.0.2.tgz#b8eeff8f21ac51d224c851e1729d2630c18631e6"1385 resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.0.6.tgz#3eb72ea80897495c3d73dd97aab7f26770e2260f"
1242 integrity sha512-/zYigssuHLImGeMAACkjI4VLAiiJznHgAl3xnFT19iWyct2LhrH3KXOjHRmxBGTkiPLZKKAJAgaPpiU9EZ9K+w==1386 integrity sha512-fMlIBocSHPZ3JxgWiDNW/KPj6s+YRd0hicb33IrmelCcjXo/pXPwvuiKFmZz+XuqI/1u7nbUK10zSsWL/1aegg==
1243 dependencies:1387 dependencies:
1244 "@jest/types" "^27.0.2"1388 "@jest/types" "^27.0.6"
1245 "@types/node" "*"1389 "@types/node" "*"
1246 chalk "^4.0.0"1390 chalk "^4.0.0"
1247 jest-message-util "^27.0.2"1391 jest-message-util "^27.0.6"
1248 jest-util "^27.0.2"1392 jest-util "^27.0.6"
1249 slash "^3.0.0"1393 slash "^3.0.0"
12501394
1251"@jest/core@^27.0.5":1395"@jest/core@^27.0.6":
1252 version "27.0.5"1396 version "27.0.6"
1253 resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.0.5.tgz#59e9e69e7374d65dbb22e3fc1bd52e80991eae72"1397 resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.0.6.tgz#c5f642727a0b3bf0f37c4b46c675372d0978d4a1"
1254 integrity sha512-g73//jF0VwsOIrWUC9Cqg03lU3QoAMFxVjsm6n6yNmwZcQPN/o8w+gLWODw5VfKNFZT38otXHWxc6b8eGDUpEA==1398 integrity sha512-SsYBm3yhqOn5ZLJCtccaBcvD/ccTLCeuDv8U41WJH/V1MW5eKUkeMHT9U+Pw/v1m1AIWlnIW/eM2XzQr0rEmow==
1255 dependencies:1399 dependencies:
1256 "@jest/console" "^27.0.2"1400 "@jest/console" "^27.0.6"
1257 "@jest/reporters" "^27.0.5"1401 "@jest/reporters" "^27.0.6"
1258 "@jest/test-result" "^27.0.2"1402 "@jest/test-result" "^27.0.6"
1259 "@jest/transform" "^27.0.5"1403 "@jest/transform" "^27.0.6"
1260 "@jest/types" "^27.0.2"1404 "@jest/types" "^27.0.6"
1261 "@types/node" "*"1405 "@types/node" "*"
1262 ansi-escapes "^4.2.1"1406 ansi-escapes "^4.2.1"
1263 chalk "^4.0.0"1407 chalk "^4.0.0"
1264 emittery "^0.8.1"1408 emittery "^0.8.1"
1265 exit "^0.1.2"1409 exit "^0.1.2"
1266 graceful-fs "^4.2.4"1410 graceful-fs "^4.2.4"
1267 jest-changed-files "^27.0.2"1411 jest-changed-files "^27.0.6"
1268 jest-config "^27.0.5"1412 jest-config "^27.0.6"
1269 jest-haste-map "^27.0.5"1413 jest-haste-map "^27.0.6"
1270 jest-message-util "^27.0.2"1414 jest-message-util "^27.0.6"
1271 jest-regex-util "^27.0.1"1415 jest-regex-util "^27.0.6"
1272 jest-resolve "^27.0.5"1416 jest-resolve "^27.0.6"
1273 jest-resolve-dependencies "^27.0.5"1417 jest-resolve-dependencies "^27.0.6"
1274 jest-runner "^27.0.5"1418 jest-runner "^27.0.6"
1275 jest-runtime "^27.0.5"1419 jest-runtime "^27.0.6"
1276 jest-snapshot "^27.0.5"1420 jest-snapshot "^27.0.6"
1277 jest-util "^27.0.2"1421 jest-util "^27.0.6"
1278 jest-validate "^27.0.2"1422 jest-validate "^27.0.6"
1279 jest-watcher "^27.0.2"1423 jest-watcher "^27.0.6"
1280 micromatch "^4.0.4"1424 micromatch "^4.0.4"
1281 p-each-series "^2.1.0"1425 p-each-series "^2.1.0"
1282 rimraf "^3.0.0"1426 rimraf "^3.0.0"
1283 slash "^3.0.0"1427 slash "^3.0.0"
1284 strip-ansi "^6.0.0"1428 strip-ansi "^6.0.0"
12851429
1286"@jest/environment@^27.0.5":1430"@jest/environment@^27.0.6":
1287 version "27.0.5"1431 version "27.0.6"
1288 resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.0.5.tgz#a294ad4acda2e250f789fb98dc667aad33d3adc9"1432 resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.0.6.tgz#ee293fe996db01d7d663b8108fa0e1ff436219d2"
1289 integrity sha512-IAkJPOT7bqn0GiX5LPio6/e1YpcmLbrd8O5EFYpAOZ6V+9xJDsXjdgN2vgv9WOKIs/uA1kf5WeD96HhlBYO+FA==1433 integrity sha512-4XywtdhwZwCpPJ/qfAkqExRsERW+UaoSRStSHCCiQTUpoYdLukj+YJbQSFrZjhlUDRZeNiU9SFH0u7iNimdiIg==
1290 dependencies:1434 dependencies:
1291 "@jest/fake-timers" "^27.0.5"1435 "@jest/fake-timers" "^27.0.6"
1292 "@jest/types" "^27.0.2"1436 "@jest/types" "^27.0.6"
1293 "@types/node" "*"1437 "@types/node" "*"
1294 jest-mock "^27.0.3"1438 jest-mock "^27.0.6"
12951439
1296"@jest/fake-timers@^27.0.5":1440"@jest/fake-timers@^27.0.6":
1297 version "27.0.5"1441 version "27.0.6"
1298 resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.0.5.tgz#304d5aedadf4c75cff3696995460b39d6c6e72f6"1442 resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.0.6.tgz#cbad52f3fe6abe30e7acb8cd5fa3466b9588e3df"
1299 integrity sha512-d6Tyf7iDoKqeUdwUKrOBV/GvEZRF67m7lpuWI0+SCD9D3aaejiOQZxAOxwH2EH/W18gnfYaBPLi0VeTGBHtQBg==1443 integrity sha512-sqd+xTWtZ94l3yWDKnRTdvTeZ+A/V7SSKrxsrOKSqdyddb9CeNRF8fbhAU0D7ZJBpTTW2nbp6MftmKJDZfW2LQ==
1300 dependencies:1444 dependencies:
1301 "@jest/types" "^27.0.2"1445 "@jest/types" "^27.0.6"
1302 "@sinonjs/fake-timers" "^7.0.2"1446 "@sinonjs/fake-timers" "^7.0.2"
1303 "@types/node" "*"1447 "@types/node" "*"
1304 jest-message-util "^27.0.2"1448 jest-message-util "^27.0.6"
1305 jest-mock "^27.0.3"1449 jest-mock "^27.0.6"
1306 jest-util "^27.0.2"1450 jest-util "^27.0.6"
13071451
1308"@jest/globals@^27.0.5":1452"@jest/globals@^27.0.6":
1309 version "27.0.5"1453 version "27.0.6"
1310 resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.0.5.tgz#f63b8bfa6ea3716f8df50f6a604b5c15b36ffd20"1454 resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.0.6.tgz#48e3903f99a4650673d8657334d13c9caf0e8f82"
1311 integrity sha512-qqKyjDXUaZwDuccpbMMKCCMBftvrbXzigtIsikAH/9ca+kaae8InP2MDf+Y/PdCSMuAsSpHS6q6M25irBBUh+Q==1455 integrity sha512-DdTGCP606rh9bjkdQ7VvChV18iS7q0IMJVP1piwTWyWskol4iqcVwthZmoJEf7obE1nc34OpIyoVGPeqLC+ryw==
1312 dependencies:1456 dependencies:
1313 "@jest/environment" "^27.0.5"1457 "@jest/environment" "^27.0.6"
1314 "@jest/types" "^27.0.2"1458 "@jest/types" "^27.0.6"
1315 expect "^27.0.2"1459 expect "^27.0.6"
13161460
1317"@jest/reporters@^27.0.5":1461"@jest/reporters@^27.0.6":
1318 version "27.0.5"1462 version "27.0.6"
1319 resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.0.5.tgz#cd730b77d9667b8ff700ad66d4edc293bb09716a"1463 resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.0.6.tgz#91e7f2d98c002ad5df94d5b5167c1eb0b9fd5b00"
1320 integrity sha512-4uNg5+0eIfRafnpgu3jCZws3NNcFzhu5JdRd1mKQ4/53+vkIqwB6vfZ4gn5BdGqOaLtYhlOsPaL5ATkKzyBrJw==1464 integrity sha512-TIkBt09Cb2gptji3yJXb3EE+eVltW6BjO7frO7NEfjI9vSIYoISi5R3aI3KpEDXlB1xwB+97NXIqz84qYeYsfA==
1321 dependencies:1465 dependencies:
1322 "@bcoe/v8-coverage" "^0.2.3"1466 "@bcoe/v8-coverage" "^0.2.3"
1323 "@jest/console" "^27.0.2"1467 "@jest/console" "^27.0.6"
1324 "@jest/test-result" "^27.0.2"1468 "@jest/test-result" "^27.0.6"
1325 "@jest/transform" "^27.0.5"1469 "@jest/transform" "^27.0.6"
1326 "@jest/types" "^27.0.2"1470 "@jest/types" "^27.0.6"
1327 chalk "^4.0.0"1471 chalk "^4.0.0"
1328 collect-v8-coverage "^1.0.0"1472 collect-v8-coverage "^1.0.0"
1329 exit "^0.1.2"1473 exit "^0.1.2"
1334 istanbul-lib-report "^3.0.0"1478 istanbul-lib-report "^3.0.0"
1335 istanbul-lib-source-maps "^4.0.0"1479 istanbul-lib-source-maps "^4.0.0"
1336 istanbul-reports "^3.0.2"1480 istanbul-reports "^3.0.2"
1337 jest-haste-map "^27.0.5"1481 jest-haste-map "^27.0.6"
1338 jest-resolve "^27.0.5"1482 jest-resolve "^27.0.6"
1339 jest-util "^27.0.2"1483 jest-util "^27.0.6"
1340 jest-worker "^27.0.2"1484 jest-worker "^27.0.6"
1341 slash "^3.0.0"1485 slash "^3.0.0"
1342 source-map "^0.6.0"1486 source-map "^0.6.0"
1343 string-length "^4.0.1"1487 string-length "^4.0.1"
1344 terminal-link "^2.0.0"1488 terminal-link "^2.0.0"
1345 v8-to-istanbul "^8.0.0"1489 v8-to-istanbul "^8.0.0"
13461490
1347"@jest/source-map@^27.0.1":1491"@jest/source-map@^27.0.6":
1348 version "27.0.1"1492 version "27.0.6"
1349 resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.0.1.tgz#2afbf73ddbaddcb920a8e62d0238a0a9e0a8d3e4"1493 resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.0.6.tgz#be9e9b93565d49b0548b86e232092491fb60551f"
1350 integrity sha512-yMgkF0f+6WJtDMdDYNavmqvbHtiSpwRN2U/W+6uztgfqgkq/PXdKPqjBTUF1RD/feth4rH5N3NW0T5+wIuln1A==1494 integrity sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g==
1351 dependencies:1495 dependencies:
1352 callsites "^3.0.0"1496 callsites "^3.0.0"
1353 graceful-fs "^4.2.4"1497 graceful-fs "^4.2.4"
1354 source-map "^0.6.0"1498 source-map "^0.6.0"
13551499
1356"@jest/test-result@^27.0.2":1500"@jest/test-result@^27.0.6":
1357 version "27.0.2"1501 version "27.0.6"
1358 resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.0.2.tgz#0451049e32ceb609b636004ccc27c8fa22263f10"1502 resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.0.6.tgz#3fa42015a14e4fdede6acd042ce98c7f36627051"
1359 integrity sha512-gcdWwL3yP5VaIadzwQtbZyZMgpmes8ryBAJp70tuxghiA8qL4imJyZex+i+USQH2H4jeLVVszhwntgdQ97fccA==1503 integrity sha512-ja/pBOMTufjX4JLEauLxE3LQBPaI2YjGFtXexRAjt1I/MbfNlMx0sytSX3tn5hSLzQsR3Qy2rd0hc1BWojtj9w==
1360 dependencies:1504 dependencies:
1361 "@jest/console" "^27.0.2"1505 "@jest/console" "^27.0.6"
1362 "@jest/types" "^27.0.2"1506 "@jest/types" "^27.0.6"
1363 "@types/istanbul-lib-coverage" "^2.0.0"1507 "@types/istanbul-lib-coverage" "^2.0.0"
1364 collect-v8-coverage "^1.0.0"1508 collect-v8-coverage "^1.0.0"
13651509
1366"@jest/test-sequencer@^27.0.5":1510"@jest/test-sequencer@^27.0.6":
1367 version "27.0.5"1511 version "27.0.6"
1368 resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.0.5.tgz#c58b21db49afc36c0e3921d7ddf1fb7954abfded"1512 resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.0.6.tgz#80a913ed7a1130545b1cd777ff2735dd3af5d34b"
1369 integrity sha512-opztnGs+cXzZ5txFG2+omBaV5ge/0yuJNKbhE3DREMiXE0YxBuzyEa6pNv3kk2JuucIlH2Xvgmn9kEEHSNt/SA==1513 integrity sha512-bISzNIApazYOlTHDum9PwW22NOyDa6VI31n6JucpjTVM0jD6JDgqEZ9+yn575nDdPF0+4csYDxNNW13NvFQGZA==
1370 dependencies:1514 dependencies:
1371 "@jest/test-result" "^27.0.2"1515 "@jest/test-result" "^27.0.6"
1372 graceful-fs "^4.2.4"1516 graceful-fs "^4.2.4"
1373 jest-haste-map "^27.0.5"1517 jest-haste-map "^27.0.6"
1374 jest-runtime "^27.0.5"1518 jest-runtime "^27.0.6"
13751519
1376"@jest/transform@^27.0.5":1520"@jest/transform@^27.0.6":
1377 version "27.0.5"1521 version "27.0.6"
1378 resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.0.5.tgz#2dcb78953708af713941ac845b06078bc74ed873"1522 resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.0.6.tgz#189ad7107413208f7600f4719f81dd2f7278cc95"
1379 integrity sha512-lBD6OwKXSc6JJECBNk4mVxtSVuJSBsQrJ9WCBisfJs7EZuYq4K6vM9HmoB7hmPiLIDGeyaerw3feBV/bC4z8tg==1523 integrity sha512-rj5Dw+mtIcntAUnMlW/Vju5mr73u8yg+irnHwzgtgoeI6cCPOvUwQ0D1uQtc/APmWgvRweEb1g05pkUpxH3iCA==
1380 dependencies:1524 dependencies:
1381 "@babel/core" "^7.1.0"1525 "@babel/core" "^7.1.0"
1382 "@jest/types" "^27.0.2"1526 "@jest/types" "^27.0.6"
1383 babel-plugin-istanbul "^6.0.0"1527 babel-plugin-istanbul "^6.0.0"
1384 chalk "^4.0.0"1528 chalk "^4.0.0"
1385 convert-source-map "^1.4.0"1529 convert-source-map "^1.4.0"
1386 fast-json-stable-stringify "^2.0.0"1530 fast-json-stable-stringify "^2.0.0"
1387 graceful-fs "^4.2.4"1531 graceful-fs "^4.2.4"
1388 jest-haste-map "^27.0.5"1532 jest-haste-map "^27.0.6"
1389 jest-regex-util "^27.0.1"1533 jest-regex-util "^27.0.6"
1390 jest-util "^27.0.2"1534 jest-util "^27.0.6"
1391 micromatch "^4.0.4"1535 micromatch "^4.0.4"
1392 pirates "^4.0.1"1536 pirates "^4.0.1"
1393 slash "^3.0.0"1537 slash "^3.0.0"
1394 source-map "^0.6.1"1538 source-map "^0.6.1"
1395 write-file-atomic "^3.0.0"1539 write-file-atomic "^3.0.0"
13961540
1397"@jest/types@^27.0.2":1541"@jest/types@^27.0.6":
1398 version "27.0.2"1542 version "27.0.6"
1399 resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.0.2.tgz#e153d6c46bda0f2589f0702b071f9898c7bbd37e"1543 resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.0.6.tgz#9a992bc517e0c49f035938b8549719c2de40706b"
1400 integrity sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==1544 integrity sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==
1401 dependencies:1545 dependencies:
1402 "@types/istanbul-lib-coverage" "^2.0.0"1546 "@types/istanbul-lib-coverage" "^2.0.0"
1403 "@types/istanbul-reports" "^3.0.0"1547 "@types/istanbul-reports" "^3.0.0"
1544 dependencies:1688 dependencies:
1545 "@octokit/openapi-types" "^7.3.2"1689 "@octokit/openapi-types" "^7.3.2"
15461690
1547"@polkadot/api-contract@5.0.1":1691"@polkadot/api-contract@5.5.1":
1548 version "5.0.1"1692 version "5.5.1"
1549 resolved "https://registry.yarnpkg.com/@polkadot/api-contract/-/api-contract-5.0.1.tgz#520a7b3cd990a76374b79e12eca5bf629cc565a1"1693 resolved "https://registry.yarnpkg.com/@polkadot/api-contract/-/api-contract-5.5.1.tgz#4cdd0d6f4352050c58464d5958bdb779770bd2dc"
1550 integrity sha512-qZ2wnXHDyU2c1/V9GKpbcZKBfVua4YFsU/LHKevZLkJfnGFBgNRdwAuKgVe5h2FCt2W2/pt618WgxG0UDWwjcw==1694 integrity sha512-/1O1AnpCu+LM2EKhRY83r36blG8KOr0JCVFeSfT0u52tM4wMdLlUy1XV/XTZayuCucdJ6I0pjUudCljm92aiGw==
1551 dependencies:1695 dependencies:
1552 "@babel/runtime" "^7.14.6"1696 "@babel/runtime" "^7.15.3"
1553 "@polkadot/api" "5.0.1"1697 "@polkadot/api" "5.5.1"
1554 "@polkadot/types" "5.0.1"1698 "@polkadot/types" "5.5.1"
1555 "@polkadot/util" "^7.0.1"1699 "@polkadot/util" "^7.2.1"
1556 rxjs "^7.2.0"1700 rxjs "^7.3.0"
15571701
1558"@polkadot/api-derive@5.0.1":1702"@polkadot/api-derive@5.5.1":
1559 version "5.0.1"1703 version "5.5.1"
1560 resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-5.0.1.tgz#08064c10ed159826ffd07013dcdde1d8b63186a0"1704 resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-5.5.1.tgz#6fdba748d90024f2fcdeb7827d178ff8d0ad308e"
1561 integrity sha512-JZpH1JVLu3PvX4+A71iDLtNr6LL103dAFou61DxyJF4obyTmS2lzigG3xXqUFShiPDb19ywxQpsE4gAOP6emuQ==1705 integrity sha512-dkpl3CnroBYAlLx571KoyjI72TqRweWI61z7tzNeR8qwniNyWDEILTErUfzy5jYAO7XrZpW1Gn4WMMH+kEcqZQ==
1562 dependencies:1706 dependencies:
1563 "@babel/runtime" "^7.14.6"1707 "@babel/runtime" "^7.15.3"
1564 "@polkadot/api" "5.0.1"1708 "@polkadot/api" "5.5.1"
1565 "@polkadot/rpc-core" "5.0.1"1709 "@polkadot/rpc-core" "5.5.1"
1566 "@polkadot/types" "5.0.1"1710 "@polkadot/types" "5.5.1"
1567 "@polkadot/util" "^7.0.1"1711 "@polkadot/util" "^7.2.1"
1568 "@polkadot/util-crypto" "^7.0.1"1712 "@polkadot/util-crypto" "^7.2.1"
1569 rxjs "^7.2.0"1713 rxjs "^7.3.0"
15701714
1571"@polkadot/api@5.0.1":1715"@polkadot/api@5.5.1":
1572 version "5.0.1"1716 version "5.5.1"
1573 resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-5.0.1.tgz#9607b53009322f9264f7dcc8705c466bd33aa516"1717 resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-5.5.1.tgz#0298c6d883c2264a68ae93a3b59b98263aed53d3"
1574 integrity sha512-5JDpM2Fjc80gHBju1B/rMBGDfAvY8UiU4XVlivJRk+mTVD3OTwbtTro4nmwJOub05xQCJvD/bnCuxG8eFSoq+Q==1718 integrity sha512-GS/MoRc7NB61jz7TzwX0WAA3JS7DSj3xH4ac39LcuPHXu0VMQw6LgT/5KIzYxTx+79Iwth62bKelW/Mgk23wUg==
1575 dependencies:1719 dependencies:
1576 "@babel/runtime" "^7.14.6"1720 "@babel/runtime" "^7.15.3"
1577 "@polkadot/api-derive" "5.0.1"1721 "@polkadot/api-derive" "5.5.1"
1578 "@polkadot/keyring" "^7.0.1"1722 "@polkadot/keyring" "^7.2.1"
1579 "@polkadot/rpc-core" "5.0.1"1723 "@polkadot/rpc-core" "5.5.1"
1580 "@polkadot/rpc-provider" "5.0.1"1724 "@polkadot/rpc-provider" "5.5.1"
1581 "@polkadot/types" "5.0.1"1725 "@polkadot/types" "5.5.1"
1582 "@polkadot/types-known" "5.0.1"1726 "@polkadot/types-known" "5.5.1"
1583 "@polkadot/util" "^7.0.1"1727 "@polkadot/util" "^7.2.1"
1584 "@polkadot/util-crypto" "^7.0.1"1728 "@polkadot/util-crypto" "^7.2.1"
1585 eventemitter3 "^4.0.7"1729 eventemitter3 "^4.0.7"
1586 rxjs "^7.2.0"1730 rxjs "^7.3.0"
15871731
1588"@polkadot/dev@0.62.43":1732"@polkadot/dev@0.62.60":
1589 version "0.62.43"1733 version "0.62.60"
1590 resolved "https://registry.yarnpkg.com/@polkadot/dev/-/dev-0.62.43.tgz#567591bf3c38dded4b4c1f3ec8bf3d3198a23b6d"1734 resolved "https://registry.yarnpkg.com/@polkadot/dev/-/dev-0.62.60.tgz#450007c189a8433d8627bcc1fc01d2ffb1becfc3"
1591 integrity sha512-ZSgYUbC6A+WtRSY5nq7yeGYW+wv3g8cds2zndL4GeClIdVHksgEW6+ch3Hx6LMkE3y4q9Kjvs50oHeemBDut4Q==1735 integrity sha512-VHZ4d/hhRSNFe0RXp3L/ZcAk1t2JQ1/lsznONAz4I9SZ2pn5kAQrWRF6eukgfQscrlqCH5njDAxwgXe6ODNVRw==
1592 dependencies:1736 dependencies:
1593 "@babel/cli" "^7.14.5"1737 "@babel/cli" "^7.14.8"
1594 "@babel/core" "^7.14.6"1738 "@babel/core" "^7.15.0"
1595 "@babel/plugin-proposal-class-properties" "^7.14.5"1739 "@babel/plugin-proposal-class-properties" "^7.14.5"
1596 "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.5"1740 "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.5"
1597 "@babel/plugin-proposal-numeric-separator" "^7.14.5"1741 "@babel/plugin-proposal-numeric-separator" "^7.14.5"
1603 "@babel/plugin-syntax-import-meta" "^7.10.4"1747 "@babel/plugin-syntax-import-meta" "^7.10.4"
1604 "@babel/plugin-syntax-top-level-await" "^7.14.5"1748 "@babel/plugin-syntax-top-level-await" "^7.14.5"
1605 "@babel/plugin-transform-regenerator" "^7.14.5"1749 "@babel/plugin-transform-regenerator" "^7.14.5"
1606 "@babel/plugin-transform-runtime" "^7.14.5"1750 "@babel/plugin-transform-runtime" "^7.15.0"
1607 "@babel/preset-env" "^7.14.7"1751 "@babel/preset-env" "^7.15.0"
1608 "@babel/preset-react" "^7.14.5"1752 "@babel/preset-react" "^7.14.5"
1609 "@babel/preset-typescript" "^7.14.5"1753 "@babel/preset-typescript" "^7.15.0"
1610 "@babel/register" "^7.14.5"1754 "@babel/register" "^7.15.3"
1611 "@babel/runtime" "^7.14.6"1755 "@babel/runtime" "^7.15.3"
1756 "@rollup/plugin-alias" "^3.1.5"
1757 "@rollup/plugin-commonjs" "^19.0.2"
1758 "@rollup/plugin-inject" "^4.0.2"
1759 "@rollup/plugin-json" "^4.1.0"
1760 "@rollup/plugin-node-resolve" "^13.0.4"
1612 "@rushstack/eslint-patch" "^1.0.6"1761 "@rushstack/eslint-patch" "^1.0.6"
1613 "@typescript-eslint/eslint-plugin" "4.28.0"1762 "@typescript-eslint/eslint-plugin" "4.29.2"
1614 "@typescript-eslint/parser" "4.28.0"1763 "@typescript-eslint/parser" "4.29.2"
1615 "@vue/component-compiler-utils" "^3.2.2"1764 "@vue/component-compiler-utils" "^3.2.2"
1616 babel-jest "^27.0.5"1765 babel-jest "^27.0.6"
1617 babel-plugin-module-extension-resolver "^1.0.0-rc.2"1766 babel-plugin-module-extension-resolver "^1.0.0-rc.2"
1618 babel-plugin-module-resolver "^4.1.0"1767 babel-plugin-module-resolver "^4.1.0"
1619 babel-plugin-styled-components "^1.12.0"1768 babel-plugin-styled-components "^1.13.2"
1620 browserslist "^4.16.6"1769 browserslist "^4.16.7"
1621 chalk "^4.1.1"1770 chalk "^4.1.2"
1622 coveralls "^3.1.0"1771 coveralls "^3.1.1"
1623 eslint "^7.29.0"1772 eslint "^7.32.0"
1624 eslint-config-standard "^16.0.3"1773 eslint-config-standard "^16.0.3"
1625 eslint-import-resolver-node "^0.3.4"1774 eslint-import-resolver-node "^0.3.6"
1626 eslint-plugin-header "^3.1.1"1775 eslint-plugin-header "^3.1.1"
1627 eslint-plugin-import "^2.23.4"1776 eslint-plugin-import "^2.24.0"
1777 eslint-plugin-import-newlines "^1.1.4"
1628 eslint-plugin-node "^11.1.0"1778 eslint-plugin-node "^11.1.0"
1629 eslint-plugin-promise "^5.1.0"1779 eslint-plugin-promise "^5.1.0"
1630 eslint-plugin-react "^7.24.0"1780 eslint-plugin-react "^7.24.0"
1636 gh-release "^6.0.0"1786 gh-release "^6.0.0"
1637 glob "^7.1.7"1787 glob "^7.1.7"
1638 glob2base "^0.0.12"1788 glob2base "^0.0.12"
1639 jest "^27.0.5"1789 jest "^27.0.6"
1640 jest-cli "^27.0.5"1790 jest-cli "^27.0.6"
1641 jest-config "^27.0.5"1791 jest-config "^27.0.6"
1642 jest-haste-map "^27.0.5"1792 jest-haste-map "^27.0.6"
1643 jest-resolve "^27.0.5"1793 jest-resolve "^27.0.6"
1644 madge "^4.0.2"1794 madge "^4.0.2"
1645 minimatch "^3.0.4"1795 minimatch "^3.0.4"
1646 mkdirp "^1.0.4"1796 mkdirp "^1.0.4"
1647 prettier "^2.3.1"1797 prettier "^2.3.2"
1648 rimraf "^3.0.2"1798 rimraf "^3.0.2"
1649 typescript "^4.3.4"1799 rollup "^2.56.2"
1800 typescript "^4.3.5"
1650 yargs "^17.0.1"1801 yargs "^17.1.1"
16511802
1652"@polkadot/keyring@^7.0.1":1803"@polkadot/keyring@^7.2.1":
1653 version "7.0.1"1804 version "7.2.1"
1654 resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-7.0.1.tgz#666e903661b98279dc16d512be69f5ace4b58d8d"1805 resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-7.2.1.tgz#5ed8e6c0edc61e3dd99ee647a227b9e3d955e8e6"
1655 integrity sha512-eSvG8Q4gUTRDFWj2lqTY/9NekGP8dtp+W6WmouKh0DDwHRawaVeDaq6UJYQv6XoBG1i+ZGPvErRQeGMPOn/mUQ==1806 integrity sha512-WmiTsHKELX16uZWLvebDBckZIAXeJFfbcOM6m/VbMOjSV5C6xIKqiV3232Mn8ZuPKgsOf25Q78/IwJW1Dq53Qg==
1656 dependencies:1807 dependencies:
1657 "@babel/runtime" "^7.14.6"1808 "@babel/runtime" "^7.15.3"
1658 "@polkadot/util" "7.0.1"1809 "@polkadot/util" "7.2.1"
1659 "@polkadot/util-crypto" "7.0.1"1810 "@polkadot/util-crypto" "7.2.1"
16601811
1661"@polkadot/networks@7.0.1", "@polkadot/networks@^7.0.1":1812"@polkadot/networks@7.2.1", "@polkadot/networks@^7.2.1":
1662 version "7.0.1"1813 version "7.2.1"
1663 resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-7.0.1.tgz#e07c4b88e25711433e76d24fce4c7273c25dd38b"1814 resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-7.2.1.tgz#20c8d81fba4b48162bf360759d8d54c55d30128b"
1664 integrity sha512-bJSvI7UgEpxmBKS8TMh+I1mfmCMwhClGdSs29kwU+K61IjBTKTt3yQJ/SflYIQV7QftGbz3oMfSkGbQbRHZqvQ==1815 integrity sha512-YX8oQ7QQ2oq3YowwOiv/C82l849V0ZEzpR26YrPgKSXbYFbasho3Akf0zalndZJZV1Bb8EiOkzGoJ3ffogSPxA==
1665 dependencies:1816 dependencies:
1666 "@babel/runtime" "^7.14.6"1817 "@babel/runtime" "^7.15.3"
16671818
1668"@polkadot/rpc-core@5.0.1":1819"@polkadot/rpc-core@5.5.1":
1669 version "5.0.1"1820 version "5.5.1"
1670 resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-5.0.1.tgz#8460287532fe61c31505564df53e92ef6feba875"1821 resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-5.5.1.tgz#4ce0646becabe7736dfb81eb902e5933158646c8"
1671 integrity sha512-JMNOVQijjyJZNu9B8CJwIrQzGYzAp03uCBSbqYfzWBFnYVLKh7JmvOlkLnODM8uUYq0gVN4BaDUSPc39GpELAQ==1822 integrity sha512-hP7a55iSpgZVqxAIpK+v63eV/nD14Tm7C1rUmfKIS6gGJFJf+sQbTmp6d7+fuKxvYfFqBrFLU8IraOhLOQ5W3Q==
1672 dependencies:1823 dependencies:
1673 "@babel/runtime" "^7.14.6"1824 "@babel/runtime" "^7.15.3"
1674 "@polkadot/rpc-provider" "5.0.1"1825 "@polkadot/rpc-provider" "5.5.1"
1675 "@polkadot/types" "5.0.1"1826 "@polkadot/types" "5.5.1"
1676 "@polkadot/util" "^7.0.1"1827 "@polkadot/util" "^7.2.1"
1677 rxjs "^7.2.0"1828 rxjs "^7.3.0"
16781829
1679"@polkadot/rpc-provider@5.0.1":1830"@polkadot/rpc-provider@5.5.1":
1680 version "5.0.1"1831 version "5.5.1"
1681 resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-5.0.1.tgz#ef022a123eb9073634b59c6e0f6e1705e96066a5"1832 resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-5.5.1.tgz#633f4a48605623092fb9017433f2b3cd70cd96bc"
1682 integrity sha512-t+VKhMtQfQVgkZDqYnP/44KlBDmcCVo1/MvJ+DoNd7RUWUIBJt3v71G5gDSNeGMTyvxn0KK0qL4j+Nqr6c4FUQ==1833 integrity sha512-wOCKeeyUa7Dw3nxKkQntnfOO471icdzqT2V7bwloBOo+G2MX8nHImO0mW3QMfJygn4qoARF1PBo1PLbDUEDgog==
1683 dependencies:1834 dependencies:
1684 "@babel/runtime" "^7.14.6"1835 "@babel/runtime" "^7.15.3"
1685 "@polkadot/types" "5.0.1"1836 "@polkadot/types" "5.5.1"
1686 "@polkadot/util" "^7.0.1"1837 "@polkadot/util" "^7.2.1"
1687 "@polkadot/util-crypto" "^7.0.1"1838 "@polkadot/util-crypto" "^7.2.1"
1688 "@polkadot/x-fetch" "^7.0.1"1839 "@polkadot/x-fetch" "^7.2.1"
1689 "@polkadot/x-global" "^7.0.1"1840 "@polkadot/x-global" "^7.2.1"
1690 "@polkadot/x-ws" "^7.0.1"1841 "@polkadot/x-ws" "^7.2.1"
1691 eventemitter3 "^4.0.7"1842 eventemitter3 "^4.0.7"
16921843
1693"@polkadot/ts@0.3.89":1844"@polkadot/ts@0.4.4":
1694 version "0.3.89"1845 version "0.4.4"
1695 resolved "https://registry.yarnpkg.com/@polkadot/ts/-/ts-0.3.89.tgz#c7a704ea284d04fcf4d581f5df156d5945480033"1846 resolved "https://registry.yarnpkg.com/@polkadot/ts/-/ts-0.4.4.tgz#e86aa47c2bcbc70ac8385b31014c81927c4b0a88"
1696 integrity sha512-GC0H8wmVKebkieN2MHScjDDonzigIzkjl1Q4V1OhoRcfQbeZZ7vijeiVwP8Hw3wIw4GLKxxXeDrkKPWl/bcaHw==1847 integrity sha512-lzB8lg8GfdJlA7RdeoOJVFopecN4i++JndbUs6jW7AgRz+joeXQIIRomVgCNE52nW1uWpXMELnlvEP812v7sVw==
1697 dependencies:1848 dependencies:
1698 "@types/chrome" "^0.0.144"1849 "@types/chrome" "^0.0.145"
16991850
1700"@polkadot/typegen@5.0.1":1851"@polkadot/typegen@5.5.1":
1701 version "5.0.1"1852 version "5.5.1"
1702 resolved "https://registry.yarnpkg.com/@polkadot/typegen/-/typegen-5.0.1.tgz#718b517f4f1578441911096603577bd0a2a968e0"1853 resolved "https://registry.yarnpkg.com/@polkadot/typegen/-/typegen-5.5.1.tgz#b31010716a142290d12f48ead6166851599055d0"
1703 integrity sha512-iFLJoWgIkn+J6MDw3AUWveP9qxVn1C+VeLJbpZ21St5WyeE148Tml0BmYnKLSXlaPMhZEwB+/IV3jpQ35dH4bw==1854 integrity sha512-ua55CVqT3+Y5fX9stpYUO+UhiJJ1RDTZ6vM2/Lndmsuda4lHQnUDrCnMmxKhM5OcyIlJlY5mF9dyO0kl5mTm+w==
1704 dependencies:1855 dependencies:
1705 "@babel/core" "^7.14.6"1856 "@babel/core" "^7.15.0"
1706 "@babel/register" "^7.14.5"1857 "@babel/register" "^7.15.3"
1707 "@babel/runtime" "^7.14.6"1858 "@babel/runtime" "^7.15.3"
1708 "@polkadot/api" "5.0.1"1859 "@polkadot/api" "5.5.1"
1709 "@polkadot/rpc-provider" "5.0.1"1860 "@polkadot/rpc-provider" "5.5.1"
1710 "@polkadot/types" "5.0.1"1861 "@polkadot/types" "5.5.1"
1711 "@polkadot/util" "^7.0.1"1862 "@polkadot/types-support" "5.5.1"
1863 "@polkadot/util" "^7.2.1"
1712 handlebars "^4.7.7"1864 handlebars "^4.7.7"
1713 websocket "^1.0.34"1865 websocket "^1.0.34"
1714 yargs "^17.0.1"1866 yargs "^17.1.0"
17151867
1716"@polkadot/types-known@5.0.1":1868"@polkadot/types-known@5.5.1":
1717 version "5.0.1"1869 version "5.5.1"
1718 resolved "https://registry.yarnpkg.com/@polkadot/types-known/-/types-known-5.0.1.tgz#21feb327fc4323733bf027c8d874a2aa3014b21f"1870 resolved "https://registry.yarnpkg.com/@polkadot/types-known/-/types-known-5.5.1.tgz#b00b0d45cbd07b4e0c3199f8ba00d10a1bd3f63d"
1719 integrity sha512-AIhPlN4r14ZW4wdwHZD2nIe1DE61ZO9PsyrCyAU3ysl6Cw6TI+txDCN3aS/8XYuC7wDLEgLB9vJv2sVWdCzqJg==1871 integrity sha512-bxBRmZ0a3lwEyWkWOKqmDJfpNKh3cp9xo6IidrQU2S5OPMjFFercB+HwJjkNE1cMtShwBYTvDheUImNkdm+FXA==
1720 dependencies:1872 dependencies:
1721 "@babel/runtime" "^7.14.6"1873 "@babel/runtime" "^7.15.3"
1722 "@polkadot/networks" "^7.0.1"1874 "@polkadot/networks" "^7.2.1"
1723 "@polkadot/types" "5.0.1"1875 "@polkadot/types" "5.5.1"
1724 "@polkadot/util" "^7.0.1"1876 "@polkadot/util" "^7.2.1"
17251877
1726"@polkadot/types@5.0.1":1878"@polkadot/types-support@5.5.1":
1727 version "5.0.1"1879 version "5.5.1"
1728 resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-5.0.1.tgz#2a4e23e452f999eeae175b595470df0e426a930d"1880 resolved "https://registry.yarnpkg.com/@polkadot/types-support/-/types-support-5.5.1.tgz#15556c2f31e79f0a6a821c7723f702757cb89462"
1729 integrity sha512-aN6JKeF7ZYi5irYAaUoDqth6qlOlB15C5vhlDOojEorYLfRs/R+GCrO+lPSs+bKmSxh7BSRh500ikI/xD4nx5A==1881 integrity sha512-57i1SdK8B+miGTAlDNdvbBuN6FguTnwzv2UPE2Zv3iQznTSZBkQZN16tIK/yMkQfhtO4ZzPcAnnSPZMncqh/Mg==
1730 dependencies:1882 dependencies:
1731 "@babel/runtime" "^7.14.6"1883 "@babel/runtime" "^7.15.3"
1732 "@polkadot/util" "^7.0.1"1884 "@polkadot/util" "^7.2.1"
1733 "@polkadot/util-crypto" "^7.0.1"
1734 rxjs "^7.2.0"
17351885
1736"@polkadot/util-crypto@7.0.1", "@polkadot/util-crypto@^7.0.1":1886"@polkadot/types@5.5.1":
1737 version "7.0.1"1887 version "5.5.1"
1738 resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-7.0.1.tgz#03109dc11323dad174fb2214d395855495def16a"1888 resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-5.5.1.tgz#057e8f0fc2369c0741c0f9b0224418e8f25a6938"
1739 integrity sha512-dbvdsICoyOVw/K45RmHOP7wXE/7vj+NzEKGcKbiDt39nglHm6g2BTJ947PwwyNusTTAx82Q2iJ9vIZ1Kl0xG+g==1889 integrity sha512-+Cm7Y6D/98WqL8ofONyZrVvE2CxzK3/z18bATIQIWhG2w9ir9PdWaFMZ3fLCRw2Ggaq88AknguK6kXeEPcKPrA==
1740 dependencies:1890 dependencies:
1741 "@babel/runtime" "^7.14.6"1891 "@babel/runtime" "^7.15.3"
1742 "@polkadot/networks" "7.0.1"1892 "@polkadot/util" "^7.2.1"
1893 "@polkadot/util-crypto" "^7.2.1"
1894 rxjs "^7.3.0"
1895
1896"@polkadot/util-crypto@7.2.1", "@polkadot/util-crypto@^7.2.1":
1743 "@polkadot/util" "7.0.1"1897 version "7.2.1"
1898 resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-7.2.1.tgz#7f1bbf031dac75090699083fc9e825c22e5d5f61"
1899 integrity sha512-X3iGba/1JTL/0MNzMNEIlO9DNyKlwFV839jfGLDKhPbCuDmWp0NdQjF3mBmbvNwkXvn07WmhE7g3q9n5iTzqvQ==
1900 dependencies:
1901 "@babel/runtime" "^7.15.3"
1902 "@polkadot/networks" "7.2.1"
1903 "@polkadot/util" "7.2.1"
1744 "@polkadot/wasm-crypto" "^4.1.2"1904 "@polkadot/wasm-crypto" "^4.1.2"
1745 "@polkadot/x-randomvalues" "7.0.1"1905 "@polkadot/x-randomvalues" "7.2.1"
1746 base-x "^3.0.8"1906 base-x "^3.0.8"
1747 base64-js "^1.5.1"1907 base64-js "^1.5.1"
1748 blakejs "^1.1.1"1908 blakejs "^1.1.1"
1749 bn.js "^4.11.9"1909 bn.js "^4.11.9"
1750 create-hash "^1.2.0"1910 create-hash "^1.2.0"
1911 ed2curve "^0.3.0"
1751 elliptic "^6.5.4"1912 elliptic "^6.5.4"
1752 hash.js "^1.1.7"1913 hash.js "^1.1.7"
1753 js-sha3 "^0.8.0"1914 js-sha3 "^0.8.0"
1754 scryptsy "^2.1.0"1915 scryptsy "^2.1.0"
1755 tweetnacl "^1.0.3"1916 tweetnacl "^1.0.3"
1756 xxhashjs "^0.2.2"1917 xxhashjs "^0.2.2"
17571918
1758"@polkadot/util@7.0.1", "@polkadot/util@^7.0.1":1919"@polkadot/util@7.2.1", "@polkadot/util@^7.2.1":
1759 version "7.0.1"1920 version "7.2.1"
1760 resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-7.0.1.tgz#79afd40473016876f51d65ebb9900a20108fe0a4"1921 resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-7.2.1.tgz#abcad49f884534ff042c37480f63b9750c69341d"
1761 integrity sha512-EtQlZL6ok0Ep+zRz2QHMUoJo/b3kFHVN2qqyD2+9sdqg0FGLmkzNFM+K6dasCMLXieJ1l0HoFsQppSo/leUeaA==1922 integrity sha512-GilFg3i5dmu0H6dHEyh5bUw3yywmnFpEHfxFmKghL1ABDEr4qD0d/XAJ9UrzLFCBKbdTZsR0MDjgjVI2N84J1A==
1762 dependencies:1923 dependencies:
1763 "@babel/runtime" "^7.14.6"1924 "@babel/runtime" "^7.15.3"
1764 "@polkadot/x-textdecoder" "7.0.1"1925 "@polkadot/x-textdecoder" "7.2.1"
1765 "@polkadot/x-textencoder" "7.0.1"1926 "@polkadot/x-textencoder" "7.2.1"
1766 "@types/bn.js" "^4.11.6"1927 "@types/bn.js" "^4.11.6"
1767 bn.js "^4.11.9"1928 bn.js "^4.11.9"
1768 camelcase "^5.3.1"1929 camelcase "^5.3.1"
1791 "@polkadot/wasm-crypto-asmjs" "^4.1.2"1952 "@polkadot/wasm-crypto-asmjs" "^4.1.2"
1792 "@polkadot/wasm-crypto-wasm" "^4.1.2"1953 "@polkadot/wasm-crypto-wasm" "^4.1.2"
17931954
1794"@polkadot/x-fetch@^7.0.1":1955"@polkadot/x-fetch@^7.2.1":
1795 version "7.0.1"1956 version "7.2.1"
1796 resolved "https://registry.yarnpkg.com/@polkadot/x-fetch/-/x-fetch-7.0.1.tgz#2db6fa19f4f4d9b2f4cf50ba78bf3aa947d7b982"1957 resolved "https://registry.yarnpkg.com/@polkadot/x-fetch/-/x-fetch-7.2.1.tgz#c9bee0316d31cd150b2cb6646ccdb77c6dc3d42d"
1797 integrity sha512-9R38FjtlJcvdpEA7tVGmTmH4aiBCTABuLJdVSn3cYkgWfxDHeFMqjdFzTJ6Asa5cY0Ds3ZKsh9uccTQBQzV/HQ==1958 integrity sha512-osdZNPfrB50d7tfjVs4QRjfsb6xqC09JEeYzbUl24hUXPwtkQE8/379jayu1usPe9/JI2wKYGscdf/nRl4pBkA==
1798 dependencies:1959 dependencies:
1799 "@babel/runtime" "^7.14.6"1960 "@babel/runtime" "^7.15.3"
1800 "@polkadot/x-global" "7.0.1"1961 "@polkadot/x-global" "7.2.1"
1801 "@types/node-fetch" "^2.5.11"1962 "@types/node-fetch" "^2.5.12"
1802 node-fetch "^2.6.1"1963 node-fetch "^2.6.1"
18031964
1804"@polkadot/x-global@7.0.1", "@polkadot/x-global@^7.0.1":1965"@polkadot/x-global@7.2.1", "@polkadot/x-global@^7.2.1":
1805 version "7.0.1"1966 version "7.2.1"
1806 resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-7.0.1.tgz#44fb248d3aaea557753318327149772969e96bff"1967 resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-7.2.1.tgz#32207936b7f939a21da608f82ca20535f9148cda"
1807 integrity sha512-gVVACSdRhHYRJejLEAL0mM9BZfY8N50VT2+15A7ALD1tVqwS4tz3P9vRW3Go7ZjfyAc83aEmh0PiQ8Nm1R+2Cg==1968 integrity sha512-VNW+76TxEPqvBy3XMNV05mJRPRGZcYh3k5HjW4+asYeFunMahH4zjmCulhtD9SRI/TqdfHTiqDOqKNKe2xJcVg==
1808 dependencies:1969 dependencies:
1809 "@babel/runtime" "^7.14.6"1970 "@babel/runtime" "^7.15.3"
18101971
1811"@polkadot/x-randomvalues@7.0.1":1972"@polkadot/x-randomvalues@7.2.1":
1812 version "7.0.1"1973 version "7.2.1"
1813 resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-7.0.1.tgz#32036ae5d48645a062f6a1c3ebbf227236c806b8"1974 resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-7.2.1.tgz#708b7a54bd90ec091ab54e125d8b52e0853ea86b"
1814 integrity sha512-UNoIFaz1xJPozruT+lo8BTeT8A3NM3PgWuru7Vs8OsIz0Phkg7lUWlpHu9PZHyQCyKlUryvkOA692IlVlNYy2Q==1975 integrity sha512-B4sjwX+gFweZ1YM1Cg/S9hAEx9E/gV/vqLW89PJB6+hyvsPS9eiVvfVpaOsohc7AgmuINm/bSQbNZvtC+BbbKw==
1815 dependencies:1976 dependencies:
1816 "@babel/runtime" "^7.14.6"1977 "@babel/runtime" "^7.15.3"
1817 "@polkadot/x-global" "7.0.1"1978 "@polkadot/x-global" "7.2.1"
18181979
1819"@polkadot/x-textdecoder@7.0.1":1980"@polkadot/x-textdecoder@7.2.1":
1820 version "7.0.1"1981 version "7.2.1"
1821 resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-7.0.1.tgz#bb9bba94b2eb1612dd35c299f43ab74515db74d9"1982 resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-7.2.1.tgz#c52074dba9943a12583f3f8672a49399f10e00f3"
1822 integrity sha512-CFRnpI0cp1h2N1+ec551BLVLwV6OHG6Gj62EYcIOXR+o/SX/6MXm3Qcehm2YvfTKqktyIUSWmTwbWjGjuqPrpA==1983 integrity sha512-yXSZ0P/D/8HT8gbkdTjw/1AKZIVbX3+mIfiDiN3VqUBzruV7ak5hA+D01I0woBGDqxWISoLQFtGrxPAQ8pwAcg==
1823 dependencies:1984 dependencies:
1824 "@babel/runtime" "^7.14.6"1985 "@babel/runtime" "^7.15.3"
1825 "@polkadot/x-global" "7.0.1"1986 "@polkadot/x-global" "7.2.1"
18261987
1827"@polkadot/x-textencoder@7.0.1":1988"@polkadot/x-textencoder@7.2.1":
1828 version "7.0.1"1989 version "7.2.1"
1829 resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-7.0.1.tgz#181d403c5dc1d94fd1e2147fd1c5c528d30d8805"1990 resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-7.2.1.tgz#2326b3b7f9a5e445d7e560c438effbe800e2b1f6"
1830 integrity sha512-m+QL1HNiu5GMz6cfr/udSA6fUTv3RyIybJb7v43EQCxqlj/L0J3cUHapFd6tqH9PElD6jPkH1pXcgYN8e7dWTQ==1991 integrity sha512-1aqfxmfKSOWeOxmGBmk+RYrpqGtWywS6t0y/R3FI+k+s8NfIfGdcjMcupKq7khPh92PvVGkur+CnM/y6chn4XA==
1831 dependencies:1992 dependencies:
1832 "@babel/runtime" "^7.14.6"1993 "@babel/runtime" "^7.15.3"
1833 "@polkadot/x-global" "7.0.1"1994 "@polkadot/x-global" "7.2.1"
18341995
1835"@polkadot/x-ws@^7.0.1":1996"@polkadot/x-ws@^7.2.1":
1836 version "7.0.1"1997 version "7.2.1"
1837 resolved "https://registry.yarnpkg.com/@polkadot/x-ws/-/x-ws-7.0.1.tgz#8c22a61c0dd9b82865c7631e22ac147c2b73b118"1998 resolved "https://registry.yarnpkg.com/@polkadot/x-ws/-/x-ws-7.2.1.tgz#5971ab630911cdecd0a46db6fb899e9086954e58"
1838 integrity sha512-VUn/6sCJUpvW9WhUK+DKo1uDrw4yO84twRcy5JSzvSiBTaSplhU9Q4qGFl2Atr3WIzAYYx1jQSm/j6AhPRji1w==1999 integrity sha512-sYnOF0qNdMuGFiRGWAtpkQQYIP44JFzGywap0CskhNEyCc+zDBi4l/ta3qHjeGta+h9rdVjDeYk2J86EsKlkSw==
1839 dependencies:2000 dependencies:
1840 "@babel/runtime" "^7.14.6"2001 "@babel/runtime" "^7.15.3"
1841 "@polkadot/x-global" "7.0.1"2002 "@polkadot/x-global" "7.2.1"
1842 "@types/websocket" "^1.0.3"2003 "@types/websocket" "^1.0.4"
1843 websocket "^1.0.34"2004 websocket "^1.0.34"
18442005
2006"@rollup/plugin-alias@^3.1.5":
2007 version "3.1.5"
2008 resolved "https://registry.yarnpkg.com/@rollup/plugin-alias/-/plugin-alias-3.1.5.tgz#73356a3a1eab2e1e2fd952f9f53cd89fc740d952"
2009 integrity sha512-yzUaSvCC/LJPbl9rnzX3HN7vy0tq7EzHoEiQl1ofh4n5r2Rd5bj/+zcJgaGA76xbw95/JjWQyvHg9rOJp2y0oQ==
2010 dependencies:
2011 slash "^3.0.0"
2012
2013"@rollup/plugin-commonjs@^19.0.2":
2014 version "19.0.2"
2015 resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-19.0.2.tgz#1ccc3d63878d1bc9846f8969f09dd3b3e4ecc244"
2016 integrity sha512-gBjarfqlC7qs0AutpRW/hrFNm+cd2/QKxhwyFa+srbg1oX7rDsEU3l+W7LAUhsAp9mPJMAkXDhLbQaVwEaE8bA==
2017 dependencies:
2018 "@rollup/pluginutils" "^3.1.0"
2019 commondir "^1.0.1"
2020 estree-walker "^2.0.1"
2021 glob "^7.1.6"
2022 is-reference "^1.2.1"
2023 magic-string "^0.25.7"
2024 resolve "^1.17.0"
2025
2026"@rollup/plugin-inject@^4.0.2":
2027 version "4.0.2"
2028 resolved "https://registry.yarnpkg.com/@rollup/plugin-inject/-/plugin-inject-4.0.2.tgz#55b21bb244a07675f7fdde577db929c82fc17395"
2029 integrity sha512-TSLMA8waJ7Dmgmoc8JfPnwUwVZgLjjIAM6MqeIFqPO2ODK36JqE0Cf2F54UTgCUuW8da93Mvoj75a6KAVWgylw==
2030 dependencies:
2031 "@rollup/pluginutils" "^3.0.4"
2032 estree-walker "^1.0.1"
2033 magic-string "^0.25.5"
2034
2035"@rollup/plugin-json@^4.1.0":
2036 version "4.1.0"
2037 resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-4.1.0.tgz#54e09867ae6963c593844d8bd7a9c718294496f3"
2038 integrity sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==
2039 dependencies:
2040 "@rollup/pluginutils" "^3.0.8"
2041
2042"@rollup/plugin-node-resolve@^13.0.4":
2043 version "13.0.4"
2044 resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.4.tgz#b10222f4145a019740acb7738402130d848660c0"
2045 integrity sha512-eYq4TFy40O8hjeDs+sIxEH/jc9lyuI2k9DM557WN6rO5OpnC2qXMBNj4IKH1oHrnAazL49C5p0tgP0/VpqJ+/w==
2046 dependencies:
2047 "@rollup/pluginutils" "^3.1.0"
2048 "@types/resolve" "1.17.1"
2049 builtin-modules "^3.1.0"
2050 deepmerge "^4.2.2"
2051 is-module "^1.0.0"
2052 resolve "^1.19.0"
2053
2054"@rollup/pluginutils@^3.0.4", "@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0":
2055 version "3.1.0"
2056 resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b"
2057 integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==
2058 dependencies:
2059 "@types/estree" "0.0.39"
2060 estree-walker "^1.0.1"
2061 picomatch "^2.2.2"
2062
1845"@rushstack/eslint-patch@^1.0.6":2063"@rushstack/eslint-patch@^1.0.6":
1846 version "1.0.6"2064 version "1.0.6"
1847 resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.0.6.tgz#023d72a5c4531b4ce204528971700a78a85a0c50"2065 resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.0.6.tgz#023d72a5c4531b4ce204528971700a78a85a0c50"
1930 resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.18.tgz#0c8e298dbff8205e2266606c1ea5fbdba29b46e4"2148 resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.18.tgz#0c8e298dbff8205e2266606c1ea5fbdba29b46e4"
1931 integrity sha512-rS27+EkB/RE1Iz3u0XtVL5q36MGDWbgYe7zWiodyKNUnthxY0rukK5V36eiUCtCisB7NN8zKYH6DO2M37qxFEQ==2149 integrity sha512-rS27+EkB/RE1Iz3u0XtVL5q36MGDWbgYe7zWiodyKNUnthxY0rukK5V36eiUCtCisB7NN8zKYH6DO2M37qxFEQ==
19322150
1933"@types/chrome@^0.0.144":2151"@types/chrome@^0.0.145":
1934 version "0.0.144"2152 version "0.0.145"
1935 resolved "https://registry.yarnpkg.com/@types/chrome/-/chrome-0.0.144.tgz#7dd9188e355aa17e3ad397f50b5cd3ad12caf788"2153 resolved "https://registry.yarnpkg.com/@types/chrome/-/chrome-0.0.145.tgz#6c53ae0af5f25350b07bfd24cf459b5fe65cd9b8"
1936 integrity sha512-BgoiO7/KP9hRNrCR2Wq+aKWT5Dh9bTofuWaRtcqPcj8YKhZojQgb6sSdIqvds2C+eO63BwaR9KHVMYYgZdGGBg==2154 integrity sha512-vLvTMmfc8mvwOZzkmn2UwlWSNu0t0txBkyuIv8NgihRkvFCe6XJX65YZAgAP/RdBit3enhU2GTxCr+prn4uZmA==
1937 dependencies:2155 dependencies:
1938 "@types/filesystem" "*"2156 "@types/filesystem" "*"
1939 "@types/har-format" "*"2157 "@types/har-format" "*"
19402158
1941"@types/eslint-visitor-keys@^1.0.0":2159"@types/estree@*":
1942 version "1.0.0"2160 version "0.0.50"
1943 resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d"2161 resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83"
1944 integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==2162 integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==
19452163
2164"@types/estree@0.0.39":
2165 version "0.0.39"
2166 resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"
2167 integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==
2168
1946"@types/filesystem@*":2169"@types/filesystem@*":
1947 version "0.0.30"2170 version "0.0.30"
1948 resolved "https://registry.yarnpkg.com/@types/filesystem/-/filesystem-0.0.30.tgz#a7373a2edf34d13e298baf7ee1101f738b2efb7e"2171 resolved "https://registry.yarnpkg.com/@types/filesystem/-/filesystem-0.0.30.tgz#a7373a2edf34d13e298baf7ee1101f738b2efb7e"
1986 dependencies:2209 dependencies:
1987 "@types/istanbul-lib-report" "*"2210 "@types/istanbul-lib-report" "*"
19882211
1989"@types/json-schema@^7.0.3":
1990 version "7.0.8"
1991 resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.8.tgz#edf1bf1dbf4e04413ca8e5b17b3b7d7d54b59818"
1992 integrity sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg==
1993
1994"@types/json-schema@^7.0.7":2212"@types/json-schema@^7.0.7":
1995 version "7.0.7"2213 version "7.0.7"
1996 resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad"2214 resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad"
2006 resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-8.2.2.tgz#91daa226eb8c2ff261e6a8cbf8c7304641e095e0"2224 resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-8.2.2.tgz#91daa226eb8c2ff261e6a8cbf8c7304641e095e0"
2007 integrity sha512-Lwh0lzzqT5Pqh6z61P3c3P5nm6fzQK/MMHl9UKeneAeInVflBSz1O2EkX6gM6xfJd7FBXBY5purtLx7fUiZ7Hw==2225 integrity sha512-Lwh0lzzqT5Pqh6z61P3c3P5nm6fzQK/MMHl9UKeneAeInVflBSz1O2EkX6gM6xfJd7FBXBY5purtLx7fUiZ7Hw==
20082226
2009"@types/node-fetch@^2.5.11":2227"@types/node-fetch@^2.5.12":
2010 version "2.5.11"2228 version "2.5.12"
2011 resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.11.tgz#ce22a2e65fc8999f4dbdb7ddbbcf187d755169e4"2229 resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.12.tgz#8a6f779b1d4e60b7a57fb6fd48d84fb545b9cc66"
2012 integrity sha512-2upCKaqVZETDRb8A2VTaRymqFBEgH8u6yr96b/u3+1uQEPDRo3mJLEiPk7vdXBHRtjwkjqzFYMJXrt0Z9QsYjQ==2230 integrity sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==
2013 dependencies:2231 dependencies:
2014 "@types/node" "*"2232 "@types/node" "*"
2015 form-data "^3.0.0"2233 form-data "^3.0.0"
2041 resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.3.0.tgz#2e8332cc7363f887d32ec5496b207d26ba8052bb"2259 resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.3.0.tgz#2e8332cc7363f887d32ec5496b207d26ba8052bb"
2042 integrity sha512-hkc1DATxFLQo4VxPDpMH1gCkPpBbpOoJ/4nhuXw4n63/0R6bCpQECj4+K226UJ4JO/eJQz+1mC2I7JsWanAdQw==2260 integrity sha512-hkc1DATxFLQo4VxPDpMH1gCkPpBbpOoJ/4nhuXw4n63/0R6bCpQECj4+K226UJ4JO/eJQz+1mC2I7JsWanAdQw==
20432261
2262"@types/resolve@1.17.1":
2263 version "1.17.1"
2264 resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6"
2265 integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==
2266 dependencies:
2267 "@types/node" "*"
2268
2044"@types/secp256k1@^4.0.1":2269"@types/secp256k1@^4.0.1":
2045 version "4.0.2"2270 version "4.0.2"
2046 resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.2.tgz#20c29a87149d980f64464e56539bf4810fdb5d1d"2271 resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.2.tgz#20c29a87149d980f64464e56539bf4810fdb5d1d"
2053 resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff"2278 resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff"
2054 integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==2279 integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==
20552280
2056"@types/websocket@^1.0.3":2281"@types/websocket@^1.0.4":
2057 version "1.0.3"2282 version "1.0.4"
2058 resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-1.0.3.tgz#49e09f939afd0ccdee4f7108d4712ec9feb0f153"2283 resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-1.0.4.tgz#1dc497280d8049a5450854dd698ee7e6ea9e60b8"
2059 integrity sha512-ZdoTSwmDsKR7l1I8fpfQtmTI/hUwlOvE3q0iyJsp4tXU0MkdrYowimDzwxjhQvxU4qjhHLd3a6ig0OXRbLgIdw==2284 integrity sha512-qn1LkcFEKK8RPp459jkjzsfpbsx36BBt3oC3pITYtkoBw/aVX+EZFa5j3ThCRTNpLFvIMr5dSTD4RaMdilIOpA==
2060 dependencies:2285 dependencies:
2061 "@types/node" "*"2286 "@types/node" "*"
20622287
2072 dependencies:2297 dependencies:
2073 "@types/yargs-parser" "*"2298 "@types/yargs-parser" "*"
20742299
2075"@typescript-eslint/eslint-plugin@4.28.0":2300"@typescript-eslint/eslint-plugin@4.29.2":
2076 version "4.28.0"2301 version "4.29.2"
2077 resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.0.tgz#1a66f03b264844387beb7dc85e1f1d403bd1803f"2302 resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.29.2.tgz#f54dc0a32b8f61c6024ab8755da05363b733838d"
2078 integrity sha512-KcF6p3zWhf1f8xO84tuBailV5cN92vhS+VT7UJsPzGBm9VnQqfI9AsiMUFUCYHTYPg1uCCo+HyiDnpDuvkAMfQ==2303 integrity sha512-x4EMgn4BTfVd9+Z+r+6rmWxoAzBaapt4QFqE+d8L8sUtYZYLDTK6VG/y/SMMWA5t1/BVU5Kf+20rX4PtWzUYZg==
2079 dependencies:2304 dependencies:
2080 "@typescript-eslint/experimental-utils" "4.28.0"2305 "@typescript-eslint/experimental-utils" "4.29.2"
2081 "@typescript-eslint/scope-manager" "4.28.0"2306 "@typescript-eslint/scope-manager" "4.29.2"
2082 debug "^4.3.1"2307 debug "^4.3.1"
2083 functional-red-black-tree "^1.0.1"2308 functional-red-black-tree "^1.0.1"
2084 regexpp "^3.1.0"2309 regexpp "^3.1.0"
2085 semver "^7.3.5"2310 semver "^7.3.5"
2086 tsutils "^3.21.0"2311 tsutils "^3.21.0"
20872312
2088"@typescript-eslint/eslint-plugin@^3.4.0":2313"@typescript-eslint/eslint-plugin@^4.28.5":
2089 version "3.10.1"2314 version "4.28.5"
2090 resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.10.1.tgz#7e061338a1383f59edc204c605899f93dc2e2c8f"2315 resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.5.tgz#8197f1473e7da8218c6a37ff308d695707835684"
2091 integrity sha512-PQg0emRtzZFWq6PxBcdxRH3QIQiyFO3WCVpRL3fgj5oQS3CDs3AeAKfv4DxNhzn8ITdNJGJ4D3Qw8eAJf3lXeQ==2316 integrity sha512-m31cPEnbuCqXtEZQJOXAHsHvtoDi9OVaeL5wZnO2KZTnkvELk+u6J6jHg+NzvWQxk+87Zjbc4lJS4NHmgImz6Q==
2092 dependencies:2317 dependencies:
2093 "@typescript-eslint/experimental-utils" "3.10.1"2318 "@typescript-eslint/experimental-utils" "4.28.5"
2094 debug "^4.1.1"2319 "@typescript-eslint/scope-manager" "4.28.5"
2320 debug "^4.3.1"
2095 functional-red-black-tree "^1.0.1"2321 functional-red-black-tree "^1.0.1"
2096 regexpp "^3.0.0"2322 regexpp "^3.1.0"
2097 semver "^7.3.2"2323 semver "^7.3.5"
2098 tsutils "^3.17.1"2324 tsutils "^3.21.0"
20992325
2100"@typescript-eslint/experimental-utils@3.10.1":2326"@typescript-eslint/experimental-utils@4.28.5":
2101 version "3.10.1"2327 version "4.28.5"
2102 resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz#e179ffc81a80ebcae2ea04e0332f8b251345a686"2328 resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.5.tgz#66c28bef115b417cf9d80812a713e0e46bb42a64"
2103 integrity sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==2329 integrity sha512-bGPLCOJAa+j49hsynTaAtQIWg6uZd8VLiPcyDe4QPULsvQwLHGLSGKKcBN8/lBxIX14F74UEMK2zNDI8r0okwA==
2104 dependencies:2330 dependencies:
2105 "@types/json-schema" "^7.0.3"2331 "@types/json-schema" "^7.0.7"
2106 "@typescript-eslint/types" "3.10.1"2332 "@typescript-eslint/scope-manager" "4.28.5"
2333 "@typescript-eslint/types" "4.28.5"
2107 "@typescript-eslint/typescript-estree" "3.10.1"2334 "@typescript-eslint/typescript-estree" "4.28.5"
2108 eslint-scope "^5.0.0"2335 eslint-scope "^5.1.1"
2109 eslint-utils "^2.0.0"2336 eslint-utils "^3.0.0"
21102337
2111"@typescript-eslint/experimental-utils@4.28.0":2338"@typescript-eslint/experimental-utils@4.29.2":
2112 version "4.28.0"2339 version "4.29.2"
2113 resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.0.tgz#13167ed991320684bdc23588135ae62115b30ee0"2340 resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.29.2.tgz#5f67fb5c5757ef2cb3be64817468ba35c9d4e3b7"
2114 integrity sha512-9XD9s7mt3QWMk82GoyUpc/Ji03vz4T5AYlHF9DcoFNfJ/y3UAclRsfGiE2gLfXtyC+JRA3trR7cR296TEb1oiQ==2341 integrity sha512-P6mn4pqObhftBBPAv4GQtEK7Yos1fz/MlpT7+YjH9fTxZcALbiiPKuSIfYP/j13CeOjfq8/fr9Thr2glM9ub7A==
2115 dependencies:2342 dependencies:
2116 "@types/json-schema" "^7.0.7"2343 "@types/json-schema" "^7.0.7"
2117 "@typescript-eslint/scope-manager" "4.28.0"2344 "@typescript-eslint/scope-manager" "4.29.2"
2118 "@typescript-eslint/types" "4.28.0"2345 "@typescript-eslint/types" "4.29.2"
2119 "@typescript-eslint/typescript-estree" "4.28.0"2346 "@typescript-eslint/typescript-estree" "4.29.2"
2120 eslint-scope "^5.1.1"2347 eslint-scope "^5.1.1"
2121 eslint-utils "^3.0.0"2348 eslint-utils "^3.0.0"
21222349
2123"@typescript-eslint/parser@4.28.0":2350"@typescript-eslint/parser@4.29.2":
2124 version "4.28.0"2351 version "4.29.2"
2125 resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.28.0.tgz#2404c16751a28616ef3abab77c8e51d680a12caa"2352 resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.29.2.tgz#1c7744f4c27aeb74610c955d3dce9250e95c370a"
2126 integrity sha512-7x4D22oPY8fDaOCvkuXtYYTQ6mTMmkivwEzS+7iml9F9VkHGbbZ3x4fHRwxAb5KeuSkLqfnYjs46tGx2Nour4A==2353 integrity sha512-WQ6BPf+lNuwteUuyk1jD/aHKqMQ9jrdCn7Gxt9vvBnzbpj7aWEf+aZsJ1zvTjx5zFxGCt000lsbD9tQPEL8u6g==
2127 dependencies:2354 dependencies:
2128 "@typescript-eslint/scope-manager" "4.28.0"2355 "@typescript-eslint/scope-manager" "4.29.2"
2129 "@typescript-eslint/types" "4.28.0"2356 "@typescript-eslint/types" "4.29.2"
2130 "@typescript-eslint/typescript-estree" "4.28.0"2357 "@typescript-eslint/typescript-estree" "4.29.2"
2131 debug "^4.3.1"2358 debug "^4.3.1"
21322359
2133"@typescript-eslint/parser@^3.4.0":2360"@typescript-eslint/parser@^4.28.5":
2134 version "3.10.1"2361 version "4.28.5"
2135 resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.10.1.tgz#1883858e83e8b442627e1ac6f408925211155467"2362 resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.28.5.tgz#9c971668f86d1b5c552266c47788a87488a47d1c"
2136 integrity sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw==2363 integrity sha512-NPCOGhTnkXGMqTznqgVbA5LqVsnw+i3+XA1UKLnAb+MG1Y1rP4ZSK9GX0kJBmAZTMIktf+dTwXToT6kFwyimbw==
2137 dependencies:2364 dependencies:
2138 "@types/eslint-visitor-keys" "^1.0.0"2365 "@typescript-eslint/scope-manager" "4.28.5"
2139 "@typescript-eslint/experimental-utils" "3.10.1"
2140 "@typescript-eslint/types" "3.10.1"2366 "@typescript-eslint/types" "4.28.5"
2141 "@typescript-eslint/typescript-estree" "3.10.1"2367 "@typescript-eslint/typescript-estree" "4.28.5"
2142 eslint-visitor-keys "^1.1.0"2368 debug "^4.3.1"
21432369
2144"@typescript-eslint/scope-manager@4.28.0":2370"@typescript-eslint/scope-manager@4.28.5":
2145 version "4.28.0"2371 version "4.28.5"
2146 resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.0.tgz#6a3009d2ab64a30fc8a1e257a1a320067f36a0ce"2372 resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.5.tgz#3a1b70c50c1535ac33322786ea99ebe403d3b923"
2147 integrity sha512-eCALCeScs5P/EYjwo6se9bdjtrh8ByWjtHzOkC4Tia6QQWtQr3PHovxh3TdYTuFcurkYI4rmFsRFpucADIkseg==2373 integrity sha512-PHLq6n9nTMrLYcVcIZ7v0VY1X7dK309NM8ya9oL/yG8syFINIMHxyr2GzGoBYUdv3NUfCOqtuqps0ZmcgnZTfQ==
2148 dependencies:2374 dependencies:
2149 "@typescript-eslint/types" "4.28.0"2375 "@typescript-eslint/types" "4.28.5"
2150 "@typescript-eslint/visitor-keys" "4.28.0"2376 "@typescript-eslint/visitor-keys" "4.28.5"
21512377
2152"@typescript-eslint/types@3.10.1":2378"@typescript-eslint/scope-manager@4.29.2":
2153 version "3.10.1"2379 version "4.29.2"
2154 resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.10.1.tgz#1d7463fa7c32d8a23ab508a803ca2fe26e758727"2380 resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.29.2.tgz#442b0f029d981fa402942715b1718ac7fcd5aa1b"
2155 integrity sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==2381 integrity sha512-mfHmvlQxmfkU8D55CkZO2sQOueTxLqGvzV+mG6S/6fIunDiD2ouwsAoiYCZYDDK73QCibYjIZmGhpvKwAB5BOA==
2382 dependencies:
2383 "@typescript-eslint/types" "4.29.2"
2384 "@typescript-eslint/visitor-keys" "4.29.2"
21562385
2157"@typescript-eslint/types@4.27.0":2386"@typescript-eslint/types@4.27.0":
2158 version "4.27.0"2387 version "4.27.0"
2159 resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.27.0.tgz#712b408519ed699baff69086bc59cd2fc13df8d8"2388 resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.27.0.tgz#712b408519ed699baff69086bc59cd2fc13df8d8"
2160 integrity sha512-I4ps3SCPFCKclRcvnsVA/7sWzh7naaM/b4pBO2hVxnM3wrU51Lveybdw5WoIktU/V4KfXrTt94V9b065b/0+wA==2389 integrity sha512-I4ps3SCPFCKclRcvnsVA/7sWzh7naaM/b4pBO2hVxnM3wrU51Lveybdw5WoIktU/V4KfXrTt94V9b065b/0+wA==
21612390
2162"@typescript-eslint/types@4.28.0":2391"@typescript-eslint/types@4.28.5":
2163 version "4.28.0"2392 version "4.28.5"
2164 resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.0.tgz#a33504e1ce7ac51fc39035f5fe6f15079d4dafb0"2393 resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.5.tgz#d33edf8e429f0c0930a7c3d44e9b010354c422e9"
2165 integrity sha512-p16xMNKKoiJCVZY5PW/AfILw2xe1LfruTcfAKBj3a+wgNYP5I9ZEKNDOItoRt53p4EiPV6iRSICy8EPanG9ZVA==2394 integrity sha512-MruOu4ZaDOLOhw4f/6iudyks/obuvvZUAHBDSW80Trnc5+ovmViLT2ZMDXhUV66ozcl6z0LJfKs1Usldgi/WCA==
21662395
2167"@typescript-eslint/typescript-estree@3.10.1":2396"@typescript-eslint/types@4.29.2":
2397 version "4.29.2"
2398 resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.29.2.tgz#fc0489c6b89773f99109fb0aa0aaddff21f52fcd"
2399 integrity sha512-K6ApnEXId+WTGxqnda8z4LhNMa/pZmbTFkDxEBLQAbhLZL50DjeY0VIDCml/0Y3FlcbqXZrABqrcKxq+n0LwzQ==
2400
2401"@typescript-eslint/typescript-estree@4.28.5":
2168 version "3.10.1"2402 version "4.28.5"
2169 resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz#fd0061cc38add4fad45136d654408569f365b853"2403 resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.5.tgz#4906d343de693cf3d8dcc301383ed638e0441cd1"
2170 integrity sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==2404 integrity sha512-FzJUKsBX8poCCdve7iV7ShirP8V+ys2t1fvamVeD1rWpiAnIm550a+BX/fmTHrjEpQJ7ZAn+Z7ZZwJjytk9rZw==
2171 dependencies:2405 dependencies:
2172 "@typescript-eslint/types" "3.10.1"2406 "@typescript-eslint/types" "4.28.5"
2173 "@typescript-eslint/visitor-keys" "3.10.1"2407 "@typescript-eslint/visitor-keys" "4.28.5"
2174 debug "^4.1.1"2408 debug "^4.3.1"
2175 glob "^7.1.6"2409 globby "^11.0.3"
2176 is-glob "^4.0.1"2410 is-glob "^4.0.1"
2177 lodash "^4.17.15"2411 semver "^7.3.5"
2178 semver "^7.3.2"
2179 tsutils "^3.17.1"2412 tsutils "^3.21.0"
21802413
2181"@typescript-eslint/typescript-estree@4.28.0":2414"@typescript-eslint/typescript-estree@4.29.2":
2182 version "4.28.0"2415 version "4.29.2"
2183 resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.0.tgz#e66d4e5aa2ede66fec8af434898fe61af10c71cf"2416 resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.2.tgz#a0ea8b98b274adbb2577100ba545ddf8bf7dc219"
2184 integrity sha512-m19UQTRtxMzKAm8QxfKpvh6OwQSXaW1CdZPoCaQuLwAq7VZMNuhJmZR4g5281s2ECt658sldnJfdpSZZaxUGMQ==2417 integrity sha512-TJ0/hEnYxapYn9SGn3dCnETO0r+MjaxtlWZ2xU+EvytF0g4CqTpZL48SqSNn2hXsPolnewF30pdzR9a5Lj3DNg==
2185 dependencies:2418 dependencies:
2186 "@typescript-eslint/types" "4.28.0"2419 "@typescript-eslint/types" "4.29.2"
2187 "@typescript-eslint/visitor-keys" "4.28.0"2420 "@typescript-eslint/visitor-keys" "4.29.2"
2188 debug "^4.3.1"2421 debug "^4.3.1"
2189 globby "^11.0.3"2422 globby "^11.0.3"
2190 is-glob "^4.0.1"2423 is-glob "^4.0.1"
2204 semver "^7.3.5"2437 semver "^7.3.5"
2205 tsutils "^3.21.0"2438 tsutils "^3.21.0"
22062439
2207"@typescript-eslint/visitor-keys@3.10.1":
2208 version "3.10.1"
2209 resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz#cd4274773e3eb63b2e870ac602274487ecd1e931"
2210 integrity sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==
2211 dependencies:
2212 eslint-visitor-keys "^1.1.0"
2213
2214"@typescript-eslint/visitor-keys@4.27.0":2440"@typescript-eslint/visitor-keys@4.27.0":
2215 version "4.27.0"2441 version "4.27.0"
2216 resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.27.0.tgz#f56138b993ec822793e7ebcfac6ffdce0a60cb81"2442 resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.27.0.tgz#f56138b993ec822793e7ebcfac6ffdce0a60cb81"
2219 "@typescript-eslint/types" "4.27.0"2445 "@typescript-eslint/types" "4.27.0"
2220 eslint-visitor-keys "^2.0.0"2446 eslint-visitor-keys "^2.0.0"
22212447
2222"@typescript-eslint/visitor-keys@4.28.0":2448"@typescript-eslint/visitor-keys@4.28.5":
2223 version "4.28.0"2449 version "4.28.5"
2224 resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.0.tgz#255c67c966ec294104169a6939d96f91c8a89434"2450 resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.5.tgz#ffee2c602762ed6893405ee7c1144d9cc0a29675"
2225 integrity sha512-PjJyTWwrlrvM5jazxYF5ZPs/nl0kHDZMVbuIcbpawVXaDPelp3+S9zpOz5RmVUfS/fD5l5+ZXNKnWhNYjPzCvw==2451 integrity sha512-dva/7Rr+EkxNWdJWau26xU/0slnFlkh88v3TsyTgRS/IIYFi5iIfpCFM4ikw0vQTFUR9FYSSyqgK4w64gsgxhg==
2226 dependencies:2452 dependencies:
2227 "@typescript-eslint/types" "4.28.0"2453 "@typescript-eslint/types" "4.28.5"
2228 eslint-visitor-keys "^2.0.0"2454 eslint-visitor-keys "^2.0.0"
22292455
2456"@typescript-eslint/visitor-keys@4.29.2":
2457 version "4.29.2"
2458 resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.2.tgz#d2da7341f3519486f50655159f4e5ecdcb2cd1df"
2459 integrity sha512-bDgJLQ86oWHJoZ1ai4TZdgXzJxsea3Ee9u9wsTAvjChdj2WLcVsgWYAPeY7RQMn16tKrlQaBnpKv7KBfs4EQag==
2460 dependencies:
2461 "@typescript-eslint/types" "4.29.2"
2462 eslint-visitor-keys "^2.0.0"
2463
2230"@ungap/promise-all-settled@1.1.2":2464"@ungap/promise-all-settled@1.1.2":
2231 version "1.1.2"2465 version "1.1.2"
2232 resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44"2466 resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44"
2592 resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"2826 resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
2593 integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==2827 integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
25942828
2595babel-jest@^27.0.5:2829babel-jest@^27.0.6:
2596 version "27.0.5"2830 version "27.0.6"
2597 resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.0.5.tgz#cd34c033ada05d1362211e5152391fd7a88080c8"2831 resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.0.6.tgz#e99c6e0577da2655118e3608b68761a5a69bd0d8"
2598 integrity sha512-bTMAbpCX7ldtfbca2llYLeSFsDM257aspyAOpsdrdSrBqoLkWCy4HPYTXtXWaSLgFPjrJGACL65rzzr4RFGadw==2832 integrity sha512-iTJyYLNc4wRofASmofpOc5NK9QunwMk+TLFgGXsTFS8uEqmd8wdI7sga0FPe2oVH3b5Agt/EAK1QjPEuKL8VfA==
2599 dependencies:2833 dependencies:
2600 "@jest/transform" "^27.0.5"2834 "@jest/transform" "^27.0.6"
2601 "@jest/types" "^27.0.2"2835 "@jest/types" "^27.0.6"
2602 "@types/babel__core" "^7.1.14"2836 "@types/babel__core" "^7.1.14"
2603 babel-plugin-istanbul "^6.0.0"2837 babel-plugin-istanbul "^6.0.0"
2604 babel-preset-jest "^27.0.1"2838 babel-preset-jest "^27.0.6"
2605 chalk "^4.0.0"2839 chalk "^4.0.0"
2606 graceful-fs "^4.2.4"2840 graceful-fs "^4.2.4"
2607 slash "^3.0.0"2841 slash "^3.0.0"
2624 istanbul-lib-instrument "^4.0.0"2858 istanbul-lib-instrument "^4.0.0"
2625 test-exclude "^6.0.0"2859 test-exclude "^6.0.0"
26262860
2627babel-plugin-jest-hoist@^27.0.1:2861babel-plugin-jest-hoist@^27.0.6:
2628 version "27.0.1"2862 version "27.0.6"
2629 resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.1.tgz#a6d10e484c93abff0f4e95f437dad26e5736ea11"2863 resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.6.tgz#f7c6b3d764af21cb4a2a1ab6870117dbde15b456"
2630 integrity sha512-sqBF0owAcCDBVEDtxqfYr2F36eSHdx7lAVGyYuOBRnKdD6gzcy0I0XrAYCZgOA3CRrLhmR+Uae9nogPzmAtOfQ==2864 integrity sha512-CewFeM9Vv2gM7Yr9n5eyyLVPRSiBnk6lKZRjgwYnGKSl9M14TMn2vkN02wTF04OGuSDLEzlWiMzvjXuW9mB6Gw==
2631 dependencies:2865 dependencies:
2632 "@babel/template" "^7.3.3"2866 "@babel/template" "^7.3.3"
2633 "@babel/types" "^7.3.3"2867 "@babel/types" "^7.3.3"
2674 dependencies:2908 dependencies:
2675 "@babel/helper-define-polyfill-provider" "^0.2.2"2909 "@babel/helper-define-polyfill-provider" "^0.2.2"
26762910
2677babel-plugin-styled-components@^1.12.0:2911babel-plugin-styled-components@^1.13.2:
2678 version "1.12.0"2912 version "1.13.2"
2679 resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.12.0.tgz#1dec1676512177de6b827211e9eda5a30db4f9b9"2913 resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.13.2.tgz#ebe0e6deff51d7f93fceda1819e9b96aeb88278d"
2680 integrity sha512-FEiD7l5ZABdJPpLssKXjBUJMYqzbcNzBowfXDCdJhOpbhWiewapUaY+LZGT8R4Jg2TwOjGjG4RKeyrO5p9sBkA==2914 integrity sha512-Vb1R3d4g+MUfPQPVDMCGjm3cDocJEUTR7Xq7QS95JWWeksN1wdFRYpD2kulDgI3Huuaf1CZd+NK4KQmqUFh5dA==
2681 dependencies:2915 dependencies:
2682 "@babel/helper-annotate-as-pure" "^7.0.0"2916 "@babel/helper-annotate-as-pure" "^7.0.0"
2683 "@babel/helper-module-imports" "^7.0.0"2917 "@babel/helper-module-imports" "^7.0.0"
2707 "@babel/plugin-syntax-optional-chaining" "^7.8.3"2941 "@babel/plugin-syntax-optional-chaining" "^7.8.3"
2708 "@babel/plugin-syntax-top-level-await" "^7.8.3"2942 "@babel/plugin-syntax-top-level-await" "^7.8.3"
27092943
2710babel-preset-jest@^27.0.1:2944babel-preset-jest@^27.0.6:
2711 version "27.0.1"2945 version "27.0.6"
2712 resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.0.1.tgz#7a50c75d16647c23a2cf5158d5bb9eb206b10e20"2946 resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.0.6.tgz#909ef08e9f24a4679768be2f60a3df0856843f9d"
2713 integrity sha512-nIBIqCEpuiyhvjQs2mVNwTxQQa2xk70p9Dd/0obQGBf8FBzbnI8QhQKzLsWMN2i6q+5B0OcWDtrboBX5gmOLyA==2947 integrity sha512-WObA0/Biw2LrVVwZkF/2GqbOdzhKD6Fkdwhoy9ASIrOWr/zodcSpQh72JOkEn6NWyjmnPDjNSqaGN4KnpKzhXw==
2714 dependencies:2948 dependencies:
2715 babel-plugin-jest-hoist "^27.0.1"2949 babel-plugin-jest-hoist "^27.0.6"
2716 babel-preset-current-node-syntax "^1.0.0"2950 babel-preset-current-node-syntax "^1.0.0"
27172951
2718balanced-match@^1.0.0:2952balanced-match@^1.0.0:
2952 escalade "^3.1.1"3186 escalade "^3.1.1"
2953 node-releases "^1.1.71"3187 node-releases "^1.1.71"
29543188
3189browserslist@^4.16.7:
3190 version "4.16.7"
3191 resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.7.tgz#108b0d1ef33c4af1b587c54f390e7041178e4335"
3192 integrity sha512-7I4qVwqZltJ7j37wObBe3SoTz+nS8APaNcrBOlgoirb6/HbEU2XxW/LpUDTCngM6iauwFqmRTuOMfyKnFGY5JA==
3193 dependencies:
3194 caniuse-lite "^1.0.30001248"
3195 colorette "^1.2.2"
3196 electron-to-chromium "^1.3.793"
3197 escalade "^3.1.1"
3198 node-releases "^1.1.73"
3199
2955bs58@^4.0.0:3200bs58@^4.0.0:
2956 version "4.0.1"3201 version "4.0.1"
2957 resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a"3202 resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a"
3010 resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"3255 resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
3011 integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=3256 integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=
30123257
3258builtin-modules@^3.1.0:
3259 version "3.2.0"
3260 resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887"
3261 integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==
3262
3013bytes@3.1.0:3263bytes@3.1.0:
3014 version "3.1.0"3264 version "3.1.0"
3015 resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"3265 resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
3071 resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001238.tgz#e6a8b45455c5de601718736d0242feef0ecdda15"3321 resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001238.tgz#e6a8b45455c5de601718736d0242feef0ecdda15"
3072 integrity sha512-bZGam2MxEt7YNsa2VwshqWQMwrYs5tR5WZQRYSuFxsBQunWjBuXhN4cS9nV5FFb1Z9y+DoQcQ0COyQbv6A+CKw==3322 integrity sha512-bZGam2MxEt7YNsa2VwshqWQMwrYs5tR5WZQRYSuFxsBQunWjBuXhN4cS9nV5FFb1Z9y+DoQcQ0COyQbv6A+CKw==
30733323
3324caniuse-lite@^1.0.30001248:
3325 version "1.0.30001251"
3326 resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz#6853a606ec50893115db660f82c094d18f096d85"
3327 integrity sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A==
3328
3074caseless@~0.12.0:3329caseless@~0.12.0:
3075 version "0.12.0"3330 version "0.12.0"
3076 resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"3331 resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
3120 ansi-styles "^4.1.0"3375 ansi-styles "^4.1.0"
3121 supports-color "^7.1.0"3376 supports-color "^7.1.0"
31223377
3378chalk@^4.1.2:
3379 version "4.1.2"
3380 resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
3381 integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
3382 dependencies:
3383 ansi-styles "^4.1.0"
3384 supports-color "^7.1.0"
3385
3123changelog-parser@^2.0.0:3386changelog-parser@^2.0.0:
3124 version "2.8.0"3387 version "2.8.0"
3125 resolved "https://registry.yarnpkg.com/changelog-parser/-/changelog-parser-2.8.0.tgz#c14293e3e8fab797913c722de965480198650108"3388 resolved "https://registry.yarnpkg.com/changelog-parser/-/changelog-parser-2.8.0.tgz#c14293e3e8fab797913c722de965480198650108"
3338 dependencies:3601 dependencies:
3339 delayed-stream "~1.0.0"3602 delayed-stream "~1.0.0"
33403603
3604command-exists@^1.2.8:
3605 version "1.2.9"
3606 resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69"
3607 integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==
3608
3609commander@3.0.2:
3610 version "3.0.2"
3611 resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e"
3612 integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==
3613
3341commander@^2.12.1, commander@^2.16.0, commander@^2.18.0, commander@^2.20.3, commander@^2.8.1:3614commander@^2.12.1, commander@^2.16.0, commander@^2.18.0, commander@^2.20.3, commander@^2.8.1:
3342 version "2.20.3"3615 version "2.20.3"
3343 resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"3616 resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
3448 browserslist "^4.16.6"3721 browserslist "^4.16.6"
3449 semver "7.0.0"3722 semver "7.0.0"
34503723
3451core-js-compat@^3.15.0:3724core-js-compat@^3.16.0:
3452 version "3.15.1"3725 version "3.16.1"
3453 resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.15.1.tgz#1afe233716d37ee021956ef097594071b2b585a7"3726 resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.16.1.tgz#c44b7caa2dcb94b673a98f27eee1c8312f55bc2d"
3454 integrity sha512-xGhzYMX6y7oEGQGAJmP2TmtBLvR4nZmRGEcFa3ubHOq5YEp51gGN9AovVa0AoujGZIq+Wm6dISiYyGNfdflYww==3727 integrity sha512-NHXQXvRbd4nxp9TEmooTJLUf94ySUG6+DSsscBpTftN1lQLQ4LjnWvc7AoIo4UjDsFF3hB8Uh5LLCRRdaiT5MQ==
3455 dependencies:3728 dependencies:
3456 browserslist "^4.16.6"3729 browserslist "^4.16.7"
3457 semver "7.0.0"3730 semver "7.0.0"
34583731
3459core-util-is@1.0.2, core-util-is@~1.0.0:3732core-util-is@1.0.2, core-util-is@~1.0.0:
3469 object-assign "^4"3742 object-assign "^4"
3470 vary "^1"3743 vary "^1"
34713744
3472coveralls@^3.1.0:3745coveralls@^3.1.1:
3473 version "3.1.0"3746 version "3.1.1"
3474 resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.1.0.tgz#13c754d5e7a2dd8b44fe5269e21ca394fb4d615b"3747 resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.1.1.tgz#f5d4431d8b5ae69c5079c8f8ca00d64ac77cf081"
3475 integrity sha512-sHxOu2ELzW8/NC1UP5XVLbZDzO4S3VxfFye3XYCznopHy02YjNkHcj5bKaVw2O7hVaBdBjEdQGpie4II1mWhuQ==3748 integrity sha512-+dxnG2NHncSD1NrqbSM3dn/lE57O6Qf/koe9+I7c+wzkqRmEvcp0kgJdxKInzYzkICKkFMZsX3Vct3++tsF9ww==
3476 dependencies:3749 dependencies:
3477 js-yaml "^3.13.1"3750 js-yaml "^3.13.1"
3478 lcov-parse "^1.0.0"3751 lcov-parse "^1.0.0"
3859 node-source-walk "^4.2.0"4132 node-source-walk "^4.2.0"
3860 typescript "^3.9.7"4133 typescript "^3.9.7"
38614134
3862diff-sequences@^27.0.1:4135diff-sequences@^27.0.6:
3863 version "27.0.1"4136 version "27.0.6"
3864 resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.0.1.tgz#9c9801d52ed5f576ff0a20e3022a13ee6e297e7c"4137 resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.0.6.tgz#3305cb2e55a033924054695cc66019fd7f8e5723"
3865 integrity sha512-XPLijkfJUh/PIBnfkcSHgvD6tlYixmcMAn3osTk6jt+H0v/mgURto1XUiD9DKuGX5NDoVS6dSlA23gd9FUaCFg==4138 integrity sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==
38664139
3867diff@5.0.0:4140diff@5.0.0:
3868 version "5.0.0"4141 version "5.0.0"
3946 jsbn "~0.1.0"4219 jsbn "~0.1.0"
3947 safer-buffer "^2.1.0"4220 safer-buffer "^2.1.0"
39484221
4222ed2curve@^0.3.0:
4223 version "0.3.0"
4224 resolved "https://registry.yarnpkg.com/ed2curve/-/ed2curve-0.3.0.tgz#322b575152a45305429d546b071823a93129a05d"
4225 integrity sha512-8w2fmmq3hv9rCrcI7g9hms2pMunQr1JINfcjwR9tAyZqhtyaMN991lF/ZfHfr5tzZQ8c7y7aBgZbjfbd0fjFwQ==
4226 dependencies:
4227 tweetnacl "1.x.x"
4228
3949ee-first@1.1.1:4229ee-first@1.1.1:
3950 version "1.1.1"4230 version "1.1.1"
3951 resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"4231 resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
3956 resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz#0728587f1b9b970ec9ffad932496429aef750d09"4236 resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz#0728587f1b9b970ec9ffad932496429aef750d09"
3957 integrity sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A==4237 integrity sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A==
39584238
4239electron-to-chromium@^1.3.793:
4240 version "1.3.807"
4241 resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.807.tgz#c2eb803f4f094869b1a24151184ffbbdbf688b1f"
4242 integrity sha512-p8uxxg2a23zRsvQ2uwA/OOI+O4BQxzaR7YKMIGGGQCpYmkFX2CVF5f0/hxLMV7yCr7nnJViCwHLhPfs52rIYCA==
4243
3959elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5.4:4244elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5.4:
3960 version "6.5.4"4245 version "6.5.4"
3961 resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb"4246 resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb"
4127 resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz#6c8761e544e96c531ff92642eeb87842b8488516"4412 resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz#6c8761e544e96c531ff92642eeb87842b8488516"
4128 integrity sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==4413 integrity sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==
41294414
4130eslint-import-resolver-node@^0.3.4:4415eslint-import-resolver-node@^0.3.5, eslint-import-resolver-node@^0.3.6:
4131 version "0.3.4"4416 version "0.3.6"
4132 resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717"4417 resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd"
4133 integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==4418 integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==
4134 dependencies:4419 dependencies:
4135 debug "^2.6.9"4420 debug "^3.2.7"
4136 resolve "^1.13.1"4421 resolve "^1.20.0"
41374422
4138eslint-module-utils@^2.6.1:4423eslint-module-utils@^2.6.2:
4139 version "2.6.1"4424 version "2.6.2"
4140 resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz#b51be1e473dd0de1c5ea638e22429c2490ea8233"4425 resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.2.tgz#94e5540dd15fe1522e8ffa3ec8db3b7fa7e7a534"
4141 integrity sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A==4426 integrity sha512-QG8pcgThYOuqxupd06oYTZoNOGaUdTY1PqK+oS6ElF6vs4pBdk/aYxFVQQXzcrAqp9m7cl7lb2ubazX+g16k2Q==
4142 dependencies:4427 dependencies:
4143 debug "^3.2.7"4428 debug "^3.2.7"
4144 pkg-dir "^2.0.0"4429 pkg-dir "^2.0.0"
4156 resolved "https://registry.yarnpkg.com/eslint-plugin-header/-/eslint-plugin-header-3.1.1.tgz#6ce512432d57675265fac47292b50d1eff11acd6"4441 resolved "https://registry.yarnpkg.com/eslint-plugin-header/-/eslint-plugin-header-3.1.1.tgz#6ce512432d57675265fac47292b50d1eff11acd6"
4157 integrity sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg==4442 integrity sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg==
41584443
4159eslint-plugin-import@^2.23.4:4444eslint-plugin-import-newlines@^1.1.4:
4160 version "2.23.4"4445 version "1.1.4"
4161 resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.23.4.tgz#8dceb1ed6b73e46e50ec9a5bb2411b645e7d3d97"4446 resolved "https://registry.yarnpkg.com/eslint-plugin-import-newlines/-/eslint-plugin-import-newlines-1.1.4.tgz#d69d03fe512b2f54bc781d1dfc51a4ad99df7a52"
4162 integrity sha512-6/wP8zZRsnQFiR3iaPFgh5ImVRM1WN5NUWfTIRqwOdeiGJlBcSk82o1FEVq8yXmy4lkIzTo7YhHCIxlU/2HyEQ==4447 integrity sha512-GCIM+524XQOFcEPinEyrvktQHkQq+k+kYCwbRrIioGBVGnk3RGDFWv5BPqBQCDci6SNZCVgIOi3/FmtDetbxvA==
4448
4449eslint-plugin-import@^2.24.0:
4450 version "2.24.0"
4451 resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.24.0.tgz#697ffd263e24da5e84e03b282f5fb62251777177"
4452 integrity sha512-Kc6xqT9hiYi2cgybOc0I2vC9OgAYga5o/rAFinam/yF/t5uBqxQbauNPMC6fgb640T/89P0gFoO27FOilJ/Cqg==
4163 dependencies:4453 dependencies:
4164 array-includes "^3.1.3"4454 array-includes "^3.1.3"
4165 array.prototype.flat "^1.2.4"4455 array.prototype.flat "^1.2.4"
4166 debug "^2.6.9"4456 debug "^2.6.9"
4167 doctrine "^2.1.0"4457 doctrine "^2.1.0"
4168 eslint-import-resolver-node "^0.3.4"4458 eslint-import-resolver-node "^0.3.5"
4169 eslint-module-utils "^2.6.1"4459 eslint-module-utils "^2.6.2"
4170 find-up "^2.0.0"4460 find-up "^2.0.0"
4171 has "^1.0.3"4461 has "^1.0.3"
4172 is-core-module "^2.4.0"4462 is-core-module "^2.4.0"
4229 dependencies:4519 dependencies:
4230 natural-compare-lite "^1.4.0"4520 natural-compare-lite "^1.4.0"
42314521
4232eslint-scope@^5.0.0, eslint-scope@^5.1.1:4522eslint-scope@^5.1.1:
4233 version "5.1.1"4523 version "5.1.1"
4234 resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"4524 resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
4235 integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==4525 integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
4261 resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"4551 resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
4262 integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==4552 integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
42634553
4264eslint@^7.28.0:4554eslint@^7.31.0:
4265 version "7.30.0"4555 version "7.31.0"
4266 resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.30.0.tgz#6d34ab51aaa56112fd97166226c9a97f505474f8"4556 resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.31.0.tgz#f972b539424bf2604907a970860732c5d99d3aca"
4267 integrity sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==4557 integrity sha512-vafgJpSh2ia8tnTkNUkwxGmnumgckLh5aAbLa1xRmIn9+owi8qBNGKL+B881kNKNTy7FFqTEkpNkUvmw0n6PkA==
4268 dependencies:4558 dependencies:
4269 "@babel/code-frame" "7.12.11"4559 "@babel/code-frame" "7.12.11"
4270 "@eslint/eslintrc" "^0.4.2"4560 "@eslint/eslintrc" "^0.4.3"
4271 "@humanwhocodes/config-array" "^0.5.0"4561 "@humanwhocodes/config-array" "^0.5.0"
4272 ajv "^6.10.0"4562 ajv "^6.10.0"
4273 chalk "^4.0.0"4563 chalk "^4.0.0"
4307 text-table "^0.2.0"4597 text-table "^0.2.0"
4308 v8-compile-cache "^2.0.3"4598 v8-compile-cache "^2.0.3"
43094599
4310eslint@^7.29.0:4600eslint@^7.32.0:
4311 version "7.29.0"4601 version "7.32.0"
4312 resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.29.0.tgz#ee2a7648f2e729485e4d0bd6383ec1deabc8b3c0"4602 resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d"
4313 integrity sha512-82G/JToB9qIy/ArBzIWG9xvvwL3R86AlCjtGw+A29OMZDqhTybz/MByORSukGxeI+YPCR4coYyITKk8BFH9nDA==4603 integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==
4314 dependencies:4604 dependencies:
4315 "@babel/code-frame" "7.12.11"4605 "@babel/code-frame" "7.12.11"
4316 "@eslint/eslintrc" "^0.4.2"4606 "@eslint/eslintrc" "^0.4.3"
4607 "@humanwhocodes/config-array" "^0.5.0"
4317 ajv "^6.10.0"4608 ajv "^6.10.0"
4318 chalk "^4.0.0"4609 chalk "^4.0.0"
4319 cross-spawn "^7.0.2"4610 cross-spawn "^7.0.2"
4390 resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880"4681 resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880"
4391 integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==4682 integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==
43924683
4684estree-walker@^1.0.1:
4685 version "1.0.1"
4686 resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700"
4687 integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==
4688
4689estree-walker@^2.0.1:
4690 version "2.0.2"
4691 resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
4692 integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
4693
4393esutils@^2.0.2:4694esutils@^2.0.2:
4394 version "2.0.3"4695 version "2.0.3"
4395 resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"4696 resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
4550 snapdragon "^0.8.1"4851 snapdragon "^0.8.1"
4551 to-regex "^3.0.1"4852 to-regex "^3.0.1"
45524853
4553expect@^27.0.2:4854expect@^27.0.6:
4554 version "27.0.2"4855 version "27.0.6"
4555 resolved "https://registry.yarnpkg.com/expect/-/expect-27.0.2.tgz#e66ca3a4c9592f1c019fa1d46459a9d2084f3422"4856 resolved "https://registry.yarnpkg.com/expect/-/expect-27.0.6.tgz#a4d74fbe27222c718fff68ef49d78e26a8fd4c05"
4556 integrity sha512-YJFNJe2+P2DqH+ZrXy+ydRQYO87oxRUonZImpDodR1G7qo3NYd3pL+NQ9Keqpez3cehczYwZDBC3A7xk3n7M/w==4857 integrity sha512-psNLt8j2kwg42jGBDSfAlU49CEZxejN1f1PlANWDZqIhBOVU/c2Pm888FcjWJzFewhIsNWfZJeLjUjtKGiPuSw==
4557 dependencies:4858 dependencies:
4558 "@jest/types" "^27.0.2"4859 "@jest/types" "^27.0.6"
4559 ansi-styles "^5.0.0"4860 ansi-styles "^5.0.0"
4560 jest-get-type "^27.0.1"4861 jest-get-type "^27.0.6"
4561 jest-matcher-utils "^27.0.2"4862 jest-matcher-utils "^27.0.6"
4562 jest-message-util "^27.0.2"4863 jest-message-util "^27.0.6"
4563 jest-regex-util "^27.0.1"4864 jest-regex-util "^27.0.6"
45644865
4565express@^4.14.0:4866express@^4.14.0:
4566 version "4.17.1"4867 version "4.17.1"
4860 resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b"5161 resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b"
4861 integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==5162 integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==
48625163
5164follow-redirects@^1.12.1:
5165 version "1.14.1"
5166 resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43"
5167 integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==
5168
4863for-in@^1.0.2:5169for-in@^1.0.2:
4864 version "1.0.2"5170 version "1.0.2"
4865 resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"5171 resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
4910 resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"5216 resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
4911 integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=5217 integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
49125218
5219fs-extra@^0.30.0:
5220 version "0.30.0"
5221 resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0"
5222 integrity sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=
5223 dependencies:
5224 graceful-fs "^4.1.2"
5225 jsonfile "^2.1.0"
5226 klaw "^1.0.0"
5227 path-is-absolute "^1.0.0"
5228 rimraf "^2.2.8"
5229
4913fs-extra@^10.0.0:5230fs-extra@^10.0.0:
4914 version "10.0.0"5231 version "10.0.0"
4915 resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.0.tgz#9ff61b655dde53fb34a82df84bb214ce802e17c1"5232 resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.0.tgz#9ff61b655dde53fb34a82df84bb214ce802e17c1"
5253 url-parse-lax "^1.0.0"5570 url-parse-lax "^1.0.0"
5254 url-to-options "^1.0.1"5571 url-to-options "^1.0.1"
52555572
5256graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4:5573graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.4:
5257 version "4.2.6"5574 version "4.2.6"
5258 resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee"5575 resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee"
5259 integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==5576 integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==
5817 resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e"6134 resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e"
5818 integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==6135 integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==
58196136
6137is-module@^1.0.0:
6138 version "1.0.0"
6139 resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591"
6140 integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=
6141
5820is-negative-zero@^2.0.1:6142is-negative-zero@^2.0.1:
5821 version "2.0.1"6143 version "2.0.1"
5822 resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24"6144 resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24"
5891 resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5"6213 resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5"
5892 integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==6214 integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==
58936215
6216is-reference@^1.2.1:
6217 version "1.2.1"
6218 resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7"
6219 integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==
6220 dependencies:
6221 "@types/estree" "*"
6222
5894is-regex@^1.1.3:6223is-regex@^1.1.3:
5895 version "1.1.3"6224 version "1.1.3"
5896 resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f"6225 resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f"
6048 has-to-string-tag-x "^1.2.0"6377 has-to-string-tag-x "^1.2.0"
6049 is-object "^1.0.1"6378 is-object "^1.0.1"
60506379
6051jest-changed-files@^27.0.2:6380jest-changed-files@^27.0.6:
6052 version "27.0.2"6381 version "27.0.6"
6053 resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.0.2.tgz#997253042b4a032950fc5f56abf3c5d1f8560801"6382 resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.0.6.tgz#bed6183fcdea8a285482e3b50a9a7712d49a7a8b"
6054 integrity sha512-eMeb1Pn7w7x3wue5/vF73LPCJ7DKQuC9wQUR5ebP9hDPpk5hzcT/3Hmz3Q5BOFpR3tgbmaWhJcMTVgC8Z1NuMw==6383 integrity sha512-BuL/ZDauaq5dumYh5y20sn4IISnf1P9A0TDswTxUi84ORGtVa86ApuBHqICL0vepqAnZiY6a7xeSPWv2/yy4eA==
6055 dependencies:6384 dependencies:
6056 "@jest/types" "^27.0.2"6385 "@jest/types" "^27.0.6"
6057 execa "^5.0.0"6386 execa "^5.0.0"
6058 throat "^6.0.1"6387 throat "^6.0.1"
60596388
6060jest-circus@^27.0.5:6389jest-circus@^27.0.6:
6061 version "27.0.5"6390 version "27.0.6"
6062 resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.0.5.tgz#b5e327f1d6857c8485126f8e364aefa4378debaa"6391 resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.0.6.tgz#dd4df17c4697db6a2c232aaad4e9cec666926668"
6063 integrity sha512-p5rO90o1RTh8LPOG6l0Fc9qgp5YGv+8M5CFixhMh7gGHtGSobD1AxX9cjFZujILgY8t30QZ7WVvxlnuG31r8TA==6392 integrity sha512-OJlsz6BBeX9qR+7O9lXefWoc2m9ZqcZ5Ohlzz0pTEAG4xMiZUJoacY8f4YDHxgk0oKYxj277AfOk9w6hZYvi1Q==
6064 dependencies:6393 dependencies:
6065 "@jest/environment" "^27.0.5"6394 "@jest/environment" "^27.0.6"
6066 "@jest/test-result" "^27.0.2"6395 "@jest/test-result" "^27.0.6"
6067 "@jest/types" "^27.0.2"6396 "@jest/types" "^27.0.6"
6068 "@types/node" "*"6397 "@types/node" "*"
6069 chalk "^4.0.0"6398 chalk "^4.0.0"
6070 co "^4.6.0"6399 co "^4.6.0"
6071 dedent "^0.7.0"6400 dedent "^0.7.0"
6072 expect "^27.0.2"6401 expect "^27.0.6"
6073 is-generator-fn "^2.0.0"6402 is-generator-fn "^2.0.0"
6074 jest-each "^27.0.2"6403 jest-each "^27.0.6"
6075 jest-matcher-utils "^27.0.2"6404 jest-matcher-utils "^27.0.6"
6076 jest-message-util "^27.0.2"6405 jest-message-util "^27.0.6"
6077 jest-runtime "^27.0.5"6406 jest-runtime "^27.0.6"
6078 jest-snapshot "^27.0.5"6407 jest-snapshot "^27.0.6"
6079 jest-util "^27.0.2"6408 jest-util "^27.0.6"
6080 pretty-format "^27.0.2"6409 pretty-format "^27.0.6"
6081 slash "^3.0.0"6410 slash "^3.0.0"
6082 stack-utils "^2.0.3"6411 stack-utils "^2.0.3"
6083 throat "^6.0.1"6412 throat "^6.0.1"
60846413
6085jest-cli@^27.0.5:6414jest-cli@^27.0.6:
6086 version "27.0.5"6415 version "27.0.6"
6087 resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.0.5.tgz#f359ba042624cffb96b713010a94bffb7498a37c"6416 resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.0.6.tgz#d021e5f4d86d6a212450d4c7b86cb219f1e6864f"
6088 integrity sha512-kZqY020QFOFQKVE2knFHirTBElw3/Q0kUbDc3nMfy/x+RQ7zUY89SUuzpHHJoSX1kX7Lq569ncvjNqU3Td/FCA==6417 integrity sha512-qUUVlGb9fdKir3RDE+B10ULI+LQrz+MCflEH2UJyoUjoHHCbxDrMxSzjQAPUMsic4SncI62ofYCcAvW6+6rhhg==
6089 dependencies:6418 dependencies:
6090 "@jest/core" "^27.0.5"6419 "@jest/core" "^27.0.6"
6091 "@jest/test-result" "^27.0.2"6420 "@jest/test-result" "^27.0.6"
6092 "@jest/types" "^27.0.2"6421 "@jest/types" "^27.0.6"
6093 chalk "^4.0.0"6422 chalk "^4.0.0"
6094 exit "^0.1.2"6423 exit "^0.1.2"
6095 graceful-fs "^4.2.4"6424 graceful-fs "^4.2.4"
6096 import-local "^3.0.2"6425 import-local "^3.0.2"
6097 jest-config "^27.0.5"6426 jest-config "^27.0.6"
6098 jest-util "^27.0.2"6427 jest-util "^27.0.6"
6099 jest-validate "^27.0.2"6428 jest-validate "^27.0.6"
6100 prompts "^2.0.1"6429 prompts "^2.0.1"
6101 yargs "^16.0.3"6430 yargs "^16.0.3"
61026431
6103jest-config@^27.0.5:6432jest-config@^27.0.6:
6104 version "27.0.5"6433 version "27.0.6"
6105 resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.0.5.tgz#683da3b0d8237675c29c817f6e3aba1481028e19"6434 resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.0.6.tgz#119fb10f149ba63d9c50621baa4f1f179500277f"
6106 integrity sha512-zCUIXag7QIXKEVN4kUKbDBDi9Q53dV5o3eNhGqe+5zAbt1vLs4VE3ceWaYrOub0L4Y7E9pGfM84TX/0ARcE+Qw==6435 integrity sha512-JZRR3I1Plr2YxPBhgqRspDE2S5zprbga3swYNrvY3HfQGu7p/GjyLOqwrYad97tX3U3mzT53TPHVmozacfP/3w==
6107 dependencies:6436 dependencies:
6108 "@babel/core" "^7.1.0"6437 "@babel/core" "^7.1.0"
6109 "@jest/test-sequencer" "^27.0.5"6438 "@jest/test-sequencer" "^27.0.6"
6110 "@jest/types" "^27.0.2"6439 "@jest/types" "^27.0.6"
6111 babel-jest "^27.0.5"6440 babel-jest "^27.0.6"
6112 chalk "^4.0.0"6441 chalk "^4.0.0"
6113 deepmerge "^4.2.2"6442 deepmerge "^4.2.2"
6114 glob "^7.1.1"6443 glob "^7.1.1"
6115 graceful-fs "^4.2.4"6444 graceful-fs "^4.2.4"
6116 is-ci "^3.0.0"6445 is-ci "^3.0.0"
6117 jest-circus "^27.0.5"6446 jest-circus "^27.0.6"
6118 jest-environment-jsdom "^27.0.5"6447 jest-environment-jsdom "^27.0.6"
6119 jest-environment-node "^27.0.5"6448 jest-environment-node "^27.0.6"
6120 jest-get-type "^27.0.1"6449 jest-get-type "^27.0.6"
6121 jest-jasmine2 "^27.0.5"6450 jest-jasmine2 "^27.0.6"
6122 jest-regex-util "^27.0.1"6451 jest-regex-util "^27.0.6"
6123 jest-resolve "^27.0.5"6452 jest-resolve "^27.0.6"
6124 jest-runner "^27.0.5"6453 jest-runner "^27.0.6"
6125 jest-util "^27.0.2"6454 jest-util "^27.0.6"
6126 jest-validate "^27.0.2"6455 jest-validate "^27.0.6"
6127 micromatch "^4.0.4"6456 micromatch "^4.0.4"
6128 pretty-format "^27.0.2"6457 pretty-format "^27.0.6"
61296458
6130jest-diff@^27.0.2:6459jest-diff@^27.0.6:
6131 version "27.0.2"6460 version "27.0.6"
6132 resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.0.2.tgz#f315b87cee5dc134cf42c2708ab27375cc3f5a7e"6461 resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.0.6.tgz#4a7a19ee6f04ad70e0e3388f35829394a44c7b5e"
6133 integrity sha512-BFIdRb0LqfV1hBt8crQmw6gGQHVDhM87SpMIZ45FPYKReZYG5er1+5pIn2zKqvrJp6WNox0ylR8571Iwk2Dmgw==6462 integrity sha512-Z1mqgkTCSYaFgwTlP/NUiRzdqgxmmhzHY1Tq17zL94morOHfHu3K4bgSgl+CR4GLhpV8VxkuOYuIWnQ9LnFqmg==
6134 dependencies:6463 dependencies:
6135 chalk "^4.0.0"6464 chalk "^4.0.0"
6136 diff-sequences "^27.0.1"6465 diff-sequences "^27.0.6"
6137 jest-get-type "^27.0.1"6466 jest-get-type "^27.0.6"
6138 pretty-format "^27.0.2"6467 pretty-format "^27.0.6"
61396468
6140jest-docblock@^27.0.1:6469jest-docblock@^27.0.6:
6141 version "27.0.1"6470 version "27.0.6"
6142 resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.0.1.tgz#bd9752819b49fa4fab1a50b73eb58c653b962e8b"6471 resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.0.6.tgz#cc78266acf7fe693ca462cbbda0ea4e639e4e5f3"
6143 integrity sha512-TA4+21s3oebURc7VgFV4r7ltdIJ5rtBH1E3Tbovcg7AV+oLfD5DcJ2V2vJ5zFA9sL5CFd/d2D6IpsAeSheEdrA==6472 integrity sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA==
6144 dependencies:6473 dependencies:
6145 detect-newline "^3.0.0"6474 detect-newline "^3.0.0"
61466475
6147jest-each@^27.0.2:6476jest-each@^27.0.6:
6148 version "27.0.2"6477 version "27.0.6"
6149 resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.0.2.tgz#865ddb4367476ced752167926b656fa0dcecd8c7"6478 resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.0.6.tgz#cee117071b04060158dc8d9a66dc50ad40ef453b"
6150 integrity sha512-OLMBZBZ6JkoXgUenDtseFRWA43wVl2BwmZYIWQws7eS7pqsIvePqj/jJmEnfq91ALk3LNphgwNK/PRFBYi7ITQ==6479 integrity sha512-m6yKcV3bkSWrUIjxkE9OC0mhBZZdhovIW5ergBYirqnkLXkyEn3oUUF/QZgyecA1cF1QFyTE8bRRl8Tfg1pfLA==
6151 dependencies:6480 dependencies:
6152 "@jest/types" "^27.0.2"6481 "@jest/types" "^27.0.6"
6153 chalk "^4.0.0"6482 chalk "^4.0.0"
6154 jest-get-type "^27.0.1"6483 jest-get-type "^27.0.6"
6155 jest-util "^27.0.2"6484 jest-util "^27.0.6"
6156 pretty-format "^27.0.2"6485 pretty-format "^27.0.6"
61576486
6158jest-environment-jsdom@^27.0.5:6487jest-environment-jsdom@^27.0.6:
6159 version "27.0.5"6488 version "27.0.6"
6160 resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.0.5.tgz#c36771977cf4490a9216a70473b39161d193c212"6489 resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.0.6.tgz#f66426c4c9950807d0a9f209c590ce544f73291f"
6161 integrity sha512-ToWhViIoTl5738oRaajTMgYhdQL73UWPoV4GqHGk2DPhs+olv8OLq5KoQW8Yf+HtRao52XLqPWvl46dPI88PdA==6490 integrity sha512-FvetXg7lnXL9+78H+xUAsra3IeZRTiegA3An01cWeXBspKXUhAwMM9ycIJ4yBaR0L7HkoMPaZsozCLHh4T8fuw==
6162 dependencies:6491 dependencies:
6163 "@jest/environment" "^27.0.5"6492 "@jest/environment" "^27.0.6"
6164 "@jest/fake-timers" "^27.0.5"6493 "@jest/fake-timers" "^27.0.6"
6165 "@jest/types" "^27.0.2"6494 "@jest/types" "^27.0.6"
6166 "@types/node" "*"6495 "@types/node" "*"
6167 jest-mock "^27.0.3"6496 jest-mock "^27.0.6"
6168 jest-util "^27.0.2"6497 jest-util "^27.0.6"
6169 jsdom "^16.6.0"6498 jsdom "^16.6.0"
61706499
6171jest-environment-node@^27.0.5:6500jest-environment-node@^27.0.6:
6172 version "27.0.5"6501 version "27.0.6"
6173 resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.0.5.tgz#b7238fc2b61ef2fb9563a3b7653a95fa009a6a54"6502 resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.0.6.tgz#a6699b7ceb52e8d68138b9808b0c404e505f3e07"
6174 integrity sha512-47qqScV/WMVz5OKF5TWpAeQ1neZKqM3ySwNveEnLyd+yaE/KT6lSMx/0SOx60+ZUcVxPiESYS+Kt2JS9y4PpkQ==6503 integrity sha512-+Vi6yLrPg/qC81jfXx3IBlVnDTI6kmRr08iVa2hFCWmJt4zha0XW7ucQltCAPhSR0FEKEoJ3i+W4E6T0s9is0w==
6175 dependencies:6504 dependencies:
6176 "@jest/environment" "^27.0.5"6505 "@jest/environment" "^27.0.6"
6177 "@jest/fake-timers" "^27.0.5"6506 "@jest/fake-timers" "^27.0.6"
6178 "@jest/types" "^27.0.2"6507 "@jest/types" "^27.0.6"
6179 "@types/node" "*"6508 "@types/node" "*"
6180 jest-mock "^27.0.3"6509 jest-mock "^27.0.6"
6181 jest-util "^27.0.2"6510 jest-util "^27.0.6"
61826511
6183jest-get-type@^27.0.1:6512jest-get-type@^27.0.6:
6184 version "27.0.1"6513 version "27.0.6"
6185 resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.0.1.tgz#34951e2b08c8801eb28559d7eb732b04bbcf7815"6514 resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.0.6.tgz#0eb5c7f755854279ce9b68a9f1a4122f69047cfe"
6186 integrity sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==6515 integrity sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==
61876516
6188jest-haste-map@^27.0.5:6517jest-haste-map@^27.0.6:
6189 version "27.0.5"6518 version "27.0.6"
6190 resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.0.5.tgz#2e1e55073b5328410a2c0d74b334e513d71f3470"6519 resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.0.6.tgz#4683a4e68f6ecaa74231679dca237279562c8dc7"
6191 integrity sha512-3LFryGSHxwPFHzKIs6W0BGA2xr6g1MvzSjR3h3D8K8Uqy4vbRm/grpGHzbPtIbOPLC6wFoViRrNEmd116QWSkw==6520 integrity sha512-4ldjPXX9h8doB2JlRzg9oAZ2p6/GpQUNAeiYXqcpmrKbP0Qev0wdZlxSMOmz8mPOEnt4h6qIzXFLDi8RScX/1w==
6192 dependencies:6521 dependencies:
6193 "@jest/types" "^27.0.2"6522 "@jest/types" "^27.0.6"
6194 "@types/graceful-fs" "^4.1.2"6523 "@types/graceful-fs" "^4.1.2"
6195 "@types/node" "*"6524 "@types/node" "*"
6196 anymatch "^3.0.3"6525 anymatch "^3.0.3"
6197 fb-watchman "^2.0.0"6526 fb-watchman "^2.0.0"
6198 graceful-fs "^4.2.4"6527 graceful-fs "^4.2.4"
6199 jest-regex-util "^27.0.1"6528 jest-regex-util "^27.0.6"
6200 jest-serializer "^27.0.1"6529 jest-serializer "^27.0.6"
6201 jest-util "^27.0.2"6530 jest-util "^27.0.6"
6202 jest-worker "^27.0.2"6531 jest-worker "^27.0.6"
6203 micromatch "^4.0.4"6532 micromatch "^4.0.4"
6204 walker "^1.0.7"6533 walker "^1.0.7"
6205 optionalDependencies:6534 optionalDependencies:
6206 fsevents "^2.3.2"6535 fsevents "^2.3.2"
62076536
6208jest-jasmine2@^27.0.5:6537jest-jasmine2@^27.0.6:
6209 version "27.0.5"6538 version "27.0.6"
6210 resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.0.5.tgz#8a6eb2a685cdec3af13881145c77553e4e197776"6539 resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.0.6.tgz#fd509a9ed3d92bd6edb68a779f4738b100655b37"
6211 integrity sha512-m3TojR19sFmTn79QoaGy1nOHBcLvtLso6Zh7u+gYxZWGcza4rRPVqwk1hciA5ZOWWZIJOukAcore8JRX992FaA==6540 integrity sha512-cjpH2sBy+t6dvCeKBsHpW41mjHzXgsavaFMp+VWRf0eR4EW8xASk1acqmljFtK2DgyIECMv2yCdY41r2l1+4iA==
6212 dependencies:6541 dependencies:
6213 "@babel/traverse" "^7.1.0"6542 "@babel/traverse" "^7.1.0"
6214 "@jest/environment" "^27.0.5"6543 "@jest/environment" "^27.0.6"
6215 "@jest/source-map" "^27.0.1"6544 "@jest/source-map" "^27.0.6"
6216 "@jest/test-result" "^27.0.2"6545 "@jest/test-result" "^27.0.6"
6217 "@jest/types" "^27.0.2"6546 "@jest/types" "^27.0.6"
6218 "@types/node" "*"6547 "@types/node" "*"
6219 chalk "^4.0.0"6548 chalk "^4.0.0"
6220 co "^4.6.0"6549 co "^4.6.0"
6221 expect "^27.0.2"6550 expect "^27.0.6"
6222 is-generator-fn "^2.0.0"6551 is-generator-fn "^2.0.0"
6223 jest-each "^27.0.2"6552 jest-each "^27.0.6"
6224 jest-matcher-utils "^27.0.2"6553 jest-matcher-utils "^27.0.6"
6225 jest-message-util "^27.0.2"6554 jest-message-util "^27.0.6"
6226 jest-runtime "^27.0.5"6555 jest-runtime "^27.0.6"
6227 jest-snapshot "^27.0.5"6556 jest-snapshot "^27.0.6"
6228 jest-util "^27.0.2"6557 jest-util "^27.0.6"
6229 pretty-format "^27.0.2"6558 pretty-format "^27.0.6"
6230 throat "^6.0.1"6559 throat "^6.0.1"
62316560
6232jest-leak-detector@^27.0.2:6561jest-leak-detector@^27.0.6:
6233 version "27.0.2"6562 version "27.0.6"
6234 resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.0.2.tgz#ce19aa9dbcf7a72a9d58907a970427506f624e69"6563 resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.0.6.tgz#545854275f85450d4ef4b8fe305ca2a26450450f"
6235 integrity sha512-TZA3DmCOfe8YZFIMD1GxFqXUkQnIoOGQyy4hFCA2mlHtnAaf+FeOMxi0fZmfB41ZL+QbFG6BVaZF5IeFIVy53Q==6564 integrity sha512-2/d6n2wlH5zEcdctX4zdbgX8oM61tb67PQt4Xh8JFAIy6LRKUnX528HulkaG6nD5qDl5vRV1NXejCe1XRCH5gQ==
6236 dependencies:6565 dependencies:
6237 jest-get-type "^27.0.1"6566 jest-get-type "^27.0.6"
6238 pretty-format "^27.0.2"6567 pretty-format "^27.0.6"
62396568
6240jest-matcher-utils@^27.0.2:6569jest-matcher-utils@^27.0.6:
6241 version "27.0.2"6570 version "27.0.6"
6242 resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.0.2.tgz#f14c060605a95a466cdc759acc546c6f4cbfc4f0"6571 resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.0.6.tgz#2a8da1e86c620b39459f4352eaa255f0d43e39a9"
6243 integrity sha512-Qczi5xnTNjkhcIB0Yy75Txt+Ez51xdhOxsukN7awzq2auZQGPHcQrJ623PZj0ECDEMOk2soxWx05EXdXGd1CbA==6572 integrity sha512-OFgF2VCQx9vdPSYTHWJ9MzFCehs20TsyFi6bIHbk5V1u52zJOnvF0Y/65z3GLZHKRuTgVPY4Z6LVePNahaQ+tA==
6244 dependencies:6573 dependencies:
6245 chalk "^4.0.0"6574 chalk "^4.0.0"
6246 jest-diff "^27.0.2"6575 jest-diff "^27.0.6"
6247 jest-get-type "^27.0.1"6576 jest-get-type "^27.0.6"
6248 pretty-format "^27.0.2"6577 pretty-format "^27.0.6"
62496578
6250jest-message-util@^27.0.2:6579jest-message-util@^27.0.6:
6251 version "27.0.2"6580 version "27.0.6"
6252 resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.0.2.tgz#181c9b67dff504d8f4ad15cba10d8b80f272048c"6581 resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.0.6.tgz#158bcdf4785706492d164a39abca6a14da5ab8b5"
6253 integrity sha512-rTqWUX42ec2LdMkoUPOzrEd1Tcm+R1KfLOmFK+OVNo4MnLsEaxO5zPDb2BbdSmthdM/IfXxOZU60P/WbWF8BTw==6582 integrity sha512-rBxIs2XK7rGy+zGxgi+UJKP6WqQ+KrBbD1YMj517HYN3v2BG66t3Xan3FWqYHKZwjdB700KiAJ+iES9a0M+ixw==
6254 dependencies:6583 dependencies:
6255 "@babel/code-frame" "^7.12.13"6584 "@babel/code-frame" "^7.12.13"
6256 "@jest/types" "^27.0.2"6585 "@jest/types" "^27.0.6"
6257 "@types/stack-utils" "^2.0.0"6586 "@types/stack-utils" "^2.0.0"
6258 chalk "^4.0.0"6587 chalk "^4.0.0"
6259 graceful-fs "^4.2.4"6588 graceful-fs "^4.2.4"
6260 micromatch "^4.0.4"6589 micromatch "^4.0.4"
6261 pretty-format "^27.0.2"6590 pretty-format "^27.0.6"
6262 slash "^3.0.0"6591 slash "^3.0.0"
6263 stack-utils "^2.0.3"6592 stack-utils "^2.0.3"
62646593
6265jest-mock@^27.0.3:6594jest-mock@^27.0.6:
6266 version "27.0.3"6595 version "27.0.6"
6267 resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.0.3.tgz#5591844f9192b3335c0dca38e8e45ed297d4d23d"6596 resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.0.6.tgz#0efdd40851398307ba16778728f6d34d583e3467"
6268 integrity sha512-O5FZn5XDzEp+Xg28mUz4ovVcdwBBPfAhW9+zJLO0Efn2qNbYcDaJvSlRiQ6BCZUCVOJjALicuJQI9mRFjv1o9Q==6597 integrity sha512-lzBETUoK8cSxts2NYXSBWT+EJNzmUVtVVwS1sU9GwE1DLCfGsngg+ZVSIe0yd0ZSm+y791esiuo+WSwpXJQ5Bw==
6269 dependencies:6598 dependencies:
6270 "@jest/types" "^27.0.2"6599 "@jest/types" "^27.0.6"
6271 "@types/node" "*"6600 "@types/node" "*"
62726601
6273jest-pnp-resolver@^1.2.2:6602jest-pnp-resolver@^1.2.2:
6274 version "1.2.2"6603 version "1.2.2"
6275 resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c"6604 resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c"
6276 integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==6605 integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==
62776606
6278jest-regex-util@^27.0.1:6607jest-regex-util@^27.0.6:
6279 version "27.0.1"6608 version "27.0.6"
6280 resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.0.1.tgz#69d4b1bf5b690faa3490113c47486ed85dd45b68"6609 resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.0.6.tgz#02e112082935ae949ce5d13b2675db3d8c87d9c5"
6281 integrity sha512-6nY6QVcpTgEKQy1L41P4pr3aOddneK17kn3HJw6SdwGiKfgCGTvH02hVXL0GU8GEKtPH83eD2DIDgxHXOxVohQ==6610 integrity sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ==
62826611
6283jest-resolve-dependencies@^27.0.5:6612jest-resolve-dependencies@^27.0.6:
6284 version "27.0.5"6613 version "27.0.6"
6285 resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.5.tgz#819ccdddd909c65acddb063aac3a49e4ba1ed569"6614 resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.6.tgz#3e619e0ef391c3ecfcf6ef4056207a3d2be3269f"
6286 integrity sha512-xUj2dPoEEd59P+nuih4XwNa4nJ/zRd/g4rMvjHrZPEBWeWRq/aJnnM6mug+B+Nx+ILXGtfWHzQvh7TqNV/WbuA==6615 integrity sha512-mg9x9DS3BPAREWKCAoyg3QucCr0n6S8HEEsqRCKSPjPcu9HzRILzhdzY3imsLoZWeosEbJZz6TKasveczzpJZA==
6287 dependencies:6616 dependencies:
6288 "@jest/types" "^27.0.2"6617 "@jest/types" "^27.0.6"
6289 jest-regex-util "^27.0.1"6618 jest-regex-util "^27.0.6"
6290 jest-snapshot "^27.0.5"6619 jest-snapshot "^27.0.6"
62916620
6292jest-resolve@^27.0.5:6621jest-resolve@^27.0.6:
6293 version "27.0.5"6622 version "27.0.6"
6294 resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.0.5.tgz#937535a5b481ad58e7121eaea46d1424a1e0c507"6623 resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.0.6.tgz#e90f436dd4f8fbf53f58a91c42344864f8e55bff"
6295 integrity sha512-Md65pngRh8cRuWVdWznXBB5eDt391OJpdBaJMxfjfuXCvOhM3qQBtLMCMTykhuUKiBMmy5BhqCW7AVOKmPrW+Q==6624 integrity sha512-yKmIgw2LgTh7uAJtzv8UFHGF7Dm7XfvOe/LQ3Txv101fLM8cx2h1QVwtSJ51Q/SCxpIiKfVn6G2jYYMDNHZteA==
6296 dependencies:6625 dependencies:
6297 "@jest/types" "^27.0.2"6626 "@jest/types" "^27.0.6"
6298 chalk "^4.0.0"6627 chalk "^4.0.0"
6299 escalade "^3.1.1"6628 escalade "^3.1.1"
6300 graceful-fs "^4.2.4"6629 graceful-fs "^4.2.4"
6301 jest-pnp-resolver "^1.2.2"6630 jest-pnp-resolver "^1.2.2"
6302 jest-util "^27.0.2"6631 jest-util "^27.0.6"
6303 jest-validate "^27.0.2"6632 jest-validate "^27.0.6"
6304 resolve "^1.20.0"6633 resolve "^1.20.0"
6305 slash "^3.0.0"6634 slash "^3.0.0"
63066635
6307jest-runner@^27.0.5:6636jest-runner@^27.0.6:
6308 version "27.0.5"6637 version "27.0.6"
6309 resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.0.5.tgz#b6fdc587e1a5056339205914294555c554efc08a"6638 resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.0.6.tgz#1325f45055539222bbc7256a6976e993ad2f9520"
6310 integrity sha512-HNhOtrhfKPArcECgBTcWOc+8OSL8GoFoa7RsHGnfZR1C1dFohxy9eLtpYBS+koybAHlJLZzNCx2Y/Ic3iEtJpQ==6639 integrity sha512-W3Bz5qAgaSChuivLn+nKOgjqNxM7O/9JOJoKDCqThPIg2sH/d4A/lzyiaFgnb9V1/w29Le11NpzTJSzga1vyYQ==
6311 dependencies:6640 dependencies:
6312 "@jest/console" "^27.0.2"6641 "@jest/console" "^27.0.6"
6313 "@jest/environment" "^27.0.5"6642 "@jest/environment" "^27.0.6"
6314 "@jest/test-result" "^27.0.2"6643 "@jest/test-result" "^27.0.6"
6315 "@jest/transform" "^27.0.5"6644 "@jest/transform" "^27.0.6"
6316 "@jest/types" "^27.0.2"6645 "@jest/types" "^27.0.6"
6317 "@types/node" "*"6646 "@types/node" "*"
6318 chalk "^4.0.0"6647 chalk "^4.0.0"
6319 emittery "^0.8.1"6648 emittery "^0.8.1"
6320 exit "^0.1.2"6649 exit "^0.1.2"
6321 graceful-fs "^4.2.4"6650 graceful-fs "^4.2.4"
6322 jest-docblock "^27.0.1"6651 jest-docblock "^27.0.6"
6323 jest-environment-jsdom "^27.0.5"6652 jest-environment-jsdom "^27.0.6"
6324 jest-environment-node "^27.0.5"6653 jest-environment-node "^27.0.6"
6325 jest-haste-map "^27.0.5"6654 jest-haste-map "^27.0.6"
6326 jest-leak-detector "^27.0.2"6655 jest-leak-detector "^27.0.6"
6327 jest-message-util "^27.0.2"6656 jest-message-util "^27.0.6"
6328 jest-resolve "^27.0.5"6657 jest-resolve "^27.0.6"
6329 jest-runtime "^27.0.5"6658 jest-runtime "^27.0.6"
6330 jest-util "^27.0.2"6659 jest-util "^27.0.6"
6331 jest-worker "^27.0.2"6660 jest-worker "^27.0.6"
6332 source-map-support "^0.5.6"6661 source-map-support "^0.5.6"
6333 throat "^6.0.1"6662 throat "^6.0.1"
63346663
6335jest-runtime@^27.0.5:6664jest-runtime@^27.0.6:
6336 version "27.0.5"6665 version "27.0.6"
6337 resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.0.5.tgz#cd5d1aa9754d30ddf9f13038b3cb7b95b46f552d"6666 resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.0.6.tgz#45877cfcd386afdd4f317def551fc369794c27c9"
6338 integrity sha512-V/w/+VasowPESbmhXn5AsBGPfb35T7jZPGZybYTHxZdP7Gwaa+A0EXE6rx30DshHKA98lVCODbCO8KZpEW3hiQ==6667 integrity sha512-BhvHLRVfKibYyqqEFkybsznKwhrsu7AWx2F3y9G9L95VSIN3/ZZ9vBpm/XCS2bS+BWz3sSeNGLzI3TVQ0uL85Q==
6339 dependencies:6668 dependencies:
6340 "@jest/console" "^27.0.2"6669 "@jest/console" "^27.0.6"
6341 "@jest/environment" "^27.0.5"6670 "@jest/environment" "^27.0.6"
6342 "@jest/fake-timers" "^27.0.5"6671 "@jest/fake-timers" "^27.0.6"
6343 "@jest/globals" "^27.0.5"6672 "@jest/globals" "^27.0.6"
6344 "@jest/source-map" "^27.0.1"6673 "@jest/source-map" "^27.0.6"
6345 "@jest/test-result" "^27.0.2"6674 "@jest/test-result" "^27.0.6"
6346 "@jest/transform" "^27.0.5"6675 "@jest/transform" "^27.0.6"
6347 "@jest/types" "^27.0.2"6676 "@jest/types" "^27.0.6"
6348 "@types/yargs" "^16.0.0"6677 "@types/yargs" "^16.0.0"
6349 chalk "^4.0.0"6678 chalk "^4.0.0"
6350 cjs-module-lexer "^1.0.0"6679 cjs-module-lexer "^1.0.0"
6351 collect-v8-coverage "^1.0.0"6680 collect-v8-coverage "^1.0.0"
6352 exit "^0.1.2"6681 exit "^0.1.2"
6353 glob "^7.1.3"6682 glob "^7.1.3"
6354 graceful-fs "^4.2.4"6683 graceful-fs "^4.2.4"
6355 jest-haste-map "^27.0.5"6684 jest-haste-map "^27.0.6"
6356 jest-message-util "^27.0.2"6685 jest-message-util "^27.0.6"
6357 jest-mock "^27.0.3"6686 jest-mock "^27.0.6"
6358 jest-regex-util "^27.0.1"6687 jest-regex-util "^27.0.6"
6359 jest-resolve "^27.0.5"6688 jest-resolve "^27.0.6"
6360 jest-snapshot "^27.0.5"6689 jest-snapshot "^27.0.6"
6361 jest-util "^27.0.2"6690 jest-util "^27.0.6"
6362 jest-validate "^27.0.2"6691 jest-validate "^27.0.6"
6363 slash "^3.0.0"6692 slash "^3.0.0"
6364 strip-bom "^4.0.0"6693 strip-bom "^4.0.0"
6365 yargs "^16.0.3"6694 yargs "^16.0.3"
63666695
6367jest-serializer@^27.0.1:6696jest-serializer@^27.0.6:
6368 version "27.0.1"6697 version "27.0.6"
6369 resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.0.1.tgz#2464d04dcc33fb71dc80b7c82e3c5e8a08cb1020"6698 resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.0.6.tgz#93a6c74e0132b81a2d54623251c46c498bb5bec1"
6370 integrity sha512-svy//5IH6bfQvAbkAEg1s7xhhgHTtXu0li0I2fdKHDsLP2P2MOiscPQIENQep8oU2g2B3jqLyxKKzotZOz4CwQ==6699 integrity sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA==
6371 dependencies:6700 dependencies:
6372 "@types/node" "*"6701 "@types/node" "*"
6373 graceful-fs "^4.2.4"6702 graceful-fs "^4.2.4"
63746703
6375jest-snapshot@^27.0.5:6704jest-snapshot@^27.0.6:
6376 version "27.0.5"6705 version "27.0.6"
6377 resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.0.5.tgz#6e3b9e8e193685372baff771ba34af631fe4d4d5"6706 resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.0.6.tgz#f4e6b208bd2e92e888344d78f0f650bcff05a4bf"
6378 integrity sha512-H1yFYdgnL1vXvDqMrnDStH6yHFdMEuzYQYc71SnC/IJnuuhW6J16w8GWG1P+qGd3Ag3sQHjbRr0TcwEo/vGS+g==6707 integrity sha512-NTHaz8He+ATUagUgE7C/UtFcRoHqR2Gc+KDfhQIyx+VFgwbeEMjeP+ILpUTLosZn/ZtbNdCF5LkVnN/l+V751A==
6379 dependencies:6708 dependencies:
6380 "@babel/core" "^7.7.2"6709 "@babel/core" "^7.7.2"
6381 "@babel/generator" "^7.7.2"6710 "@babel/generator" "^7.7.2"
6382 "@babel/parser" "^7.7.2"6711 "@babel/parser" "^7.7.2"
6383 "@babel/plugin-syntax-typescript" "^7.7.2"6712 "@babel/plugin-syntax-typescript" "^7.7.2"
6384 "@babel/traverse" "^7.7.2"6713 "@babel/traverse" "^7.7.2"
6385 "@babel/types" "^7.0.0"6714 "@babel/types" "^7.0.0"
6386 "@jest/transform" "^27.0.5"6715 "@jest/transform" "^27.0.6"
6387 "@jest/types" "^27.0.2"6716 "@jest/types" "^27.0.6"
6388 "@types/babel__traverse" "^7.0.4"6717 "@types/babel__traverse" "^7.0.4"
6389 "@types/prettier" "^2.1.5"6718 "@types/prettier" "^2.1.5"
6390 babel-preset-current-node-syntax "^1.0.0"6719 babel-preset-current-node-syntax "^1.0.0"
6391 chalk "^4.0.0"6720 chalk "^4.0.0"
6392 expect "^27.0.2"6721 expect "^27.0.6"
6393 graceful-fs "^4.2.4"6722 graceful-fs "^4.2.4"
6394 jest-diff "^27.0.2"6723 jest-diff "^27.0.6"
6395 jest-get-type "^27.0.1"6724 jest-get-type "^27.0.6"
6396 jest-haste-map "^27.0.5"6725 jest-haste-map "^27.0.6"
6397 jest-matcher-utils "^27.0.2"6726 jest-matcher-utils "^27.0.6"
6398 jest-message-util "^27.0.2"6727 jest-message-util "^27.0.6"
6399 jest-resolve "^27.0.5"6728 jest-resolve "^27.0.6"
6400 jest-util "^27.0.2"6729 jest-util "^27.0.6"
6401 natural-compare "^1.4.0"6730 natural-compare "^1.4.0"
6402 pretty-format "^27.0.2"6731 pretty-format "^27.0.6"
6403 semver "^7.3.2"6732 semver "^7.3.2"
64046733
6405jest-util@^27.0.2:6734jest-util@^27.0.6:
6406 version "27.0.2"6735 version "27.0.6"
6407 resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.0.2.tgz#fc2c7ace3c75ae561cf1e5fdb643bf685a5be7c7"6736 resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.0.6.tgz#e8e04eec159de2f4d5f57f795df9cdc091e50297"
6408 integrity sha512-1d9uH3a00OFGGWSibpNYr+jojZ6AckOMCXV2Z4K3YXDnzpkAaXQyIpY14FOJPiUmil7CD+A6Qs+lnnh6ctRbIA==6737 integrity sha512-1JjlaIh+C65H/F7D11GNkGDDZtDfMEM8EBXsvd+l/cxtgQ6QhxuloOaiayt89DxUvDarbVhqI98HhgrM1yliFQ==
6409 dependencies:6738 dependencies:
6410 "@jest/types" "^27.0.2"6739 "@jest/types" "^27.0.6"
6411 "@types/node" "*"6740 "@types/node" "*"
6412 chalk "^4.0.0"6741 chalk "^4.0.0"
6413 graceful-fs "^4.2.4"6742 graceful-fs "^4.2.4"
6414 is-ci "^3.0.0"6743 is-ci "^3.0.0"
6415 picomatch "^2.2.3"6744 picomatch "^2.2.3"
64166745
6417jest-validate@^27.0.2:6746jest-validate@^27.0.6:
6418 version "27.0.2"6747 version "27.0.6"
6419 resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.0.2.tgz#7fe2c100089449cd5cbb47a5b0b6cb7cda5beee5"6748 resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.0.6.tgz#930a527c7a951927df269f43b2dc23262457e2a6"
6420 integrity sha512-UgBF6/oVu1ofd1XbaSotXKihi8nZhg0Prm8twQ9uCuAfo59vlxCXMPI/RKmrZEVgi3Nd9dS0I8A0wzWU48pOvg==6749 integrity sha512-yhZZOaMH3Zg6DC83n60pLmdU1DQE46DW+KLozPiPbSbPhlXXaiUTDlhHQhHFpaqIFRrInko1FHXjTRpjWRuWfA==
6421 dependencies:6750 dependencies:
6422 "@jest/types" "^27.0.2"6751 "@jest/types" "^27.0.6"
6423 camelcase "^6.2.0"6752 camelcase "^6.2.0"
6424 chalk "^4.0.0"6753 chalk "^4.0.0"
6425 jest-get-type "^27.0.1"6754 jest-get-type "^27.0.6"
6426 leven "^3.1.0"6755 leven "^3.1.0"
6427 pretty-format "^27.0.2"6756 pretty-format "^27.0.6"
64286757
6429jest-watcher@^27.0.2:6758jest-watcher@^27.0.6:
6430 version "27.0.2"6759 version "27.0.6"
6431 resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.0.2.tgz#dab5f9443e2d7f52597186480731a8c6335c5deb"6760 resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.0.6.tgz#89526f7f9edf1eac4e4be989bcb6dec6b8878d9c"
6432 integrity sha512-8nuf0PGuTxWj/Ytfw5fyvNn/R80iXY8QhIT0ofyImUvdnoaBdT6kob0GmhXR+wO+ALYVnh8bQxN4Tjfez0JgkA==6761 integrity sha512-/jIoKBhAP00/iMGnTwUBLgvxkn7vsOweDrOTSPzc7X9uOyUtJIDthQBTI1EXz90bdkrxorUZVhJwiB69gcHtYQ==
6433 dependencies:6762 dependencies:
6434 "@jest/test-result" "^27.0.2"6763 "@jest/test-result" "^27.0.6"
6435 "@jest/types" "^27.0.2"6764 "@jest/types" "^27.0.6"
6436 "@types/node" "*"6765 "@types/node" "*"
6437 ansi-escapes "^4.2.1"6766 ansi-escapes "^4.2.1"
6438 chalk "^4.0.0"6767 chalk "^4.0.0"
6439 jest-util "^27.0.2"6768 jest-util "^27.0.6"
6440 string-length "^4.0.1"6769 string-length "^4.0.1"
64416770
6442jest-worker@^27.0.2:6771jest-worker@^27.0.6:
6443 version "27.0.2"6772 version "27.0.6"
6444 resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.0.2.tgz#4ebeb56cef48b3e7514552f80d0d80c0129f0b05"6773 resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.0.6.tgz#a5fdb1e14ad34eb228cfe162d9f729cdbfa28aed"
6445 integrity sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg==6774 integrity sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA==
6446 dependencies:6775 dependencies:
6447 "@types/node" "*"6776 "@types/node" "*"
6448 merge-stream "^2.0.0"6777 merge-stream "^2.0.0"
6449 supports-color "^8.0.0"6778 supports-color "^8.0.0"
64506779
6451jest@^27.0.5:6780jest@^27.0.6:
6452 version "27.0.5"6781 version "27.0.6"
6453 resolved "https://registry.yarnpkg.com/jest/-/jest-27.0.5.tgz#141825e105514a834cc8d6e44670509e8d74c5f2"6782 resolved "https://registry.yarnpkg.com/jest/-/jest-27.0.6.tgz#10517b2a628f0409087fbf473db44777d7a04505"
6454 integrity sha512-4NlVMS29gE+JOZvgmSAsz3eOjkSsHqjTajlIsah/4MVSmKvf3zFP/TvgcLoWe2UVHiE9KF741sReqhF0p4mqbQ==6783 integrity sha512-EjV8aETrsD0wHl7CKMibKwQNQc3gIRBXlTikBmmHUeVMKaPFxdcUIBfoDqTSXDoGJIivAYGqCWVlzCSaVjPQsA==
6455 dependencies:6784 dependencies:
6456 "@jest/core" "^27.0.5"6785 "@jest/core" "^27.0.6"
6457 import-local "^3.0.2"6786 import-local "^3.0.2"
6458 jest-cli "^27.0.5"6787 jest-cli "^27.0.6"
64596788
6460js-sha3@0.5.7, js-sha3@^0.5.7:6789js-sha3@0.5.7, js-sha3@^0.5.7:
6461 version "0.5.7"6790 version "0.5.7"
6462 resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7"6791 resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7"
6463 integrity sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=6792 integrity sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=
64646793
6465js-sha3@^0.8.0:6794js-sha3@0.8.0, js-sha3@^0.8.0:
6466 version "0.8.0"6795 version "0.8.0"
6467 resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840"6796 resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840"
6468 integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==6797 integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==
6594 dependencies:6923 dependencies:
6595 minimist "^1.2.5"6924 minimist "^1.2.5"
65966925
6926jsonfile@^2.1.0:
6927 version "2.4.0"
6928 resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"
6929 integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug=
6930 optionalDependencies:
6931 graceful-fs "^4.1.6"
6932
6597jsonfile@^4.0.0:6933jsonfile@^4.0.0:
6598 version "4.0.0"6934 version "4.0.0"
6599 resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"6935 resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
6667 resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"7003 resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
6668 integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==7004 integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
66697005
7006klaw@^1.0.0:
7007 version "1.3.1"
7008 resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
7009 integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk=
7010 optionalDependencies:
7011 graceful-fs "^4.1.9"
7012
6670kleur@^3.0.3:7013kleur@^3.0.3:
6671 version "3.0.3"7014 version "3.0.3"
6672 resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"7015 resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
6785 resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193"7128 resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193"
6786 integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=7129 integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=
67877130
6788lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.21, lodash@^4.7.0:7131lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.21, lodash@^4.7.0:
6789 version "4.17.21"7132 version "4.17.21"
6790 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"7133 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
6791 integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==7134 integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
6877 typescript "^3.9.5"7220 typescript "^3.9.5"
6878 walkdir "^0.4.1"7221 walkdir "^0.4.1"
68797222
7223magic-string@^0.25.5, magic-string@^0.25.7:
7224 version "0.25.7"
7225 resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051"
7226 integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==
7227 dependencies:
7228 sourcemap-codec "^1.4.4"
7229
6880make-dir@^2.0.0, make-dir@^2.1.0:7230make-dir@^2.0.0, make-dir@^2.1.0:
6881 version "2.1.0"7231 version "2.1.0"
6882 resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"7232 resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
6930 resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"7280 resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
6931 integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=7281 integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
69327282
7283memorystream@^0.3.1:
7284 version "0.3.1"
7285 resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2"
7286 integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI=
7287
6933merge-descriptors@1.0.1:7288merge-descriptors@1.0.1:
6934 version "1.0.1"7289 version "1.0.1"
6935 resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"7290 resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
7307 resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20"7662 resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20"
7308 integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==7663 integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==
73097664
7665node-releases@^1.1.73:
7666 version "1.1.74"
7667 resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.74.tgz#e5866488080ebaa70a93b91144ccde06f3c3463e"
7668 integrity sha512-caJBVempXZPepZoZAPCWRTNxYQ+xtG/KAi4ozTA5A+nJ7IU+kLQCbqaUjb5Rwy14M9upBWiQ4NutcmW04LJSRw==
7669
7310node-source-walk@^4.0.0, node-source-walk@^4.2.0:7670node-source-walk@^4.0.0, node-source-walk@^4.2.0:
7311 version "4.2.0"7671 version "4.2.0"
7312 resolved "https://registry.yarnpkg.com/node-source-walk/-/node-source-walk-4.2.0.tgz#c2efe731ea8ba9c03c562aa0a9d984e54f27bc2c"7672 resolved "https://registry.yarnpkg.com/node-source-walk/-/node-source-walk-4.2.0.tgz#c2efe731ea8ba9c03c562aa0a9d984e54f27bc2c"
7753 resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"8113 resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
7754 integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=8114 integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
77558115
7756picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3:8116picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3:
7757 version "2.3.0"8117 version "2.3.0"
7758 resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"8118 resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"
7759 integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==8119 integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==
7935 resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb"8295 resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb"
7936 integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==8296 integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==
79378297
7938prettier@^2.3.1:8298prettier@^2.3.2:
7939 version "2.3.1"8299 version "2.3.2"
7940 resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.1.tgz#76903c3f8c4449bc9ac597acefa24dc5ad4cbea6"8300 resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.2.tgz#ef280a05ec253712e486233db5c6f23441e7342d"
7941 integrity sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==8301 integrity sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==
79428302
7943pretty-format@^27.0.2:8303pretty-format@^27.0.6:
7944 version "27.0.2"8304 version "27.0.6"
7945 resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.0.2.tgz#9283ff8c4f581b186b2d4da461617143dca478a4"8305 resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.0.6.tgz#ab770c47b2c6f893a21aefc57b75da63ef49a11f"
7946 integrity sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==8306 integrity sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==
7947 dependencies:8307 dependencies:
7948 "@jest/types" "^27.0.2"8308 "@jest/types" "^27.0.6"
7949 ansi-regex "^5.0.0"8309 ansi-regex "^5.0.0"
7950 ansi-styles "^5.0.0"8310 ansi-styles "^5.0.0"
7951 react-is "^17.0.1"8311 react-is "^17.0.1"
8345 resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"8705 resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
8346 integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=8706 integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
83478707
8348require-from-string@^2.0.2:8708require-from-string@^2.0.0, require-from-string@^2.0.2:
8349 version "2.0.2"8709 version "2.0.2"
8350 resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"8710 resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
8351 integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==8711 integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
8395 resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"8755 resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
8396 integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=8756 integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
83978757
8398resolve@^1.1.6, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.3.2:8758resolve@^1.1.6, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.3.2:
8399 version "1.20.0"8759 version "1.20.0"
8400 resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975"8760 resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975"
8401 integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==8761 integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==
8436 resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"8796 resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
8437 integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==8797 integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
84388798
8799rimraf@^2.2.8:
8800 version "2.7.1"
8801 resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
8802 integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
8803 dependencies:
8804 glob "^7.1.3"
8805
8439rimraf@^3.0.0, rimraf@^3.0.2:8806rimraf@^3.0.0, rimraf@^3.0.2:
8440 version "3.0.2"8807 version "3.0.2"
8441 resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"8808 resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
8458 dependencies:8825 dependencies:
8459 bn.js "^4.11.1"8826 bn.js "^4.11.1"
84608827
8828rollup@^2.56.2:
8829 version "2.56.2"
8830 resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.56.2.tgz#a045ff3f6af53ee009b5f5016ca3da0329e5470f"
8831 integrity sha512-s8H00ZsRi29M2/lGdm1u8DJpJ9ML8SUOpVVBd33XNeEeL3NVaTiUcSBHzBdF3eAyR0l7VSpsuoVUGrRHq7aPwQ==
8832 optionalDependencies:
8833 fsevents "~2.3.2"
8834
8461run-async@^2.4.0:8835run-async@^2.4.0:
8462 version "2.4.1"8836 version "2.4.1"
8463 resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"8837 resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
8477 dependencies:8851 dependencies:
8478 tslib "^1.9.0"8852 tslib "^1.9.0"
84798853
8480rxjs@^7.2.0:8854rxjs@^7.3.0:
8481 version "7.2.0"8855 version "7.3.0"
8482 resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.2.0.tgz#5cd12409639e9514a71c9f5f9192b2c4ae94de31"8856 resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.3.0.tgz#39fe4f3461dc1e50be1475b2b85a0a88c1e938c6"
8483 integrity sha512-aX8w9OpKrQmiPKfT1bqETtUr9JygIz6GZ+gql8v7CijClsP0laoFUdKzxFAoWuRdSlOdU2+crss+cMf+cqMTnw==8857 integrity sha512-p2yuGIg9S1epc3vrjKf6iVb3RCaAYjYskkO+jHIaV0IjOPlJop4UnodOoFb2xeNwlguqLYvGw1b1McillYb5Gw==
8484 dependencies:8858 dependencies:
8485 tslib "~2.1.0"8859 tslib "~2.1.0"
84868860
8546 dependencies:8920 dependencies:
8547 semver "^6.3.0"8921 semver "^6.3.0"
85488922
8549"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.6.0:8923"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.6.0:
8550 version "5.7.1"8924 version "5.7.1"
8551 resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"8925 resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
8552 integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==8926 integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
8762 source-map-resolve "^0.5.0"9136 source-map-resolve "^0.5.0"
8763 use "^3.1.0"9137 use "^3.1.0"
87649138
9139solc@^0.8.6:
9140 version "0.8.6"
9141 resolved "https://registry.yarnpkg.com/solc/-/solc-0.8.6.tgz#e4341fa6780137df97b94a0cfbd59b3f2037d0e0"
9142 integrity sha512-miiDaWdaUnD7A6Cktb/2ug9f+ajcOCDYRr7vgbPEsMoutSlBtp5rca57oMg8iHSuM7jilwdxePujWI/+rbNftQ==
9143 dependencies:
9144 command-exists "^1.2.8"
9145 commander "3.0.2"
9146 follow-redirects "^1.12.1"
9147 fs-extra "^0.30.0"
9148 js-sha3 "0.8.0"
9149 memorystream "^0.3.1"
9150 require-from-string "^2.0.0"
9151 semver "^5.5.0"
9152 tmp "0.0.33"
9153
8765sort-keys@^4.0.0:9154sort-keys@^4.0.0:
8766 version "4.2.0"9155 version "4.2.0"
8767 resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-4.2.0.tgz#6b7638cee42c506fff8c1cecde7376d21315be18"9156 resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-4.2.0.tgz#6b7638cee42c506fff8c1cecde7376d21315be18"
8813 resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"9202 resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
8814 integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==9203 integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
88159204
9205sourcemap-codec@^1.4.4:
9206 version "1.4.8"
9207 resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4"
9208 integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==
9209
8816spdx-correct@^3.0.0:9210spdx-correct@^3.0.0:
8817 version "3.1.1"9211 version "3.1.1"
8818 resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9"9212 resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9"
9210 resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f"9604 resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f"
9211 integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=9605 integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=
92129606
9213tmp@^0.0.33:9607tmp@0.0.33, tmp@^0.0.33:
9214 version "0.0.33"9608 version "0.0.33"
9215 resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"9609 resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
9216 integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==9610 integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
9358 dependencies:9752 dependencies:
9359 tslib "^1.8.1"9753 tslib "^1.8.1"
93609754
9361tsutils@^3.17.1, tsutils@^3.21.0:9755tsutils@^3.21.0:
9362 version "3.21.0"9756 version "3.21.0"
9363 resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"9757 resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
9364 integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==9758 integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==
9372 dependencies:9766 dependencies:
9373 safe-buffer "^5.0.1"9767 safe-buffer "^5.0.1"
93749768
9769tweetnacl@1.x.x, tweetnacl@^1.0.3:
9770 version "1.0.3"
9771 resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596"
9772 integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==
9773
9375tweetnacl@^0.14.3, tweetnacl@~0.14.0:9774tweetnacl@^0.14.3, tweetnacl@~0.14.0:
9376 version "0.14.5"9775 version "0.14.5"
9377 resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"9776 resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
9378 integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=9777 integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
93799778
9380tweetnacl@^1.0.3:
9381 version "1.0.3"
9382 resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596"
9383 integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==
9384
9385type-check@^0.4.0, type-check@~0.4.0:9779type-check@^0.4.0, type-check@~0.4.0:
9386 version "0.4.0"9780 version "0.4.0"
9387 resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"9781 resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
9446 resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8"9840 resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8"
9447 integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==9841 integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==
94489842
9449typescript@^4.2.4, typescript@^4.3.4:9843typescript@^4.2.4:
9450 version "4.3.4"9844 version "4.3.4"
9451 resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.4.tgz#3f85b986945bcf31071decdd96cf8bfa65f9dcbc"9845 resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.4.tgz#3f85b986945bcf31071decdd96cf8bfa65f9dcbc"
9452 integrity sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew==9846 integrity sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew==
94539847
9848typescript@^4.3.5:
9849 version "4.3.5"
9850 resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.5.tgz#4d1c37cc16e893973c45a06886b7113234f119f4"
9851 integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==
9852
9454uglify-js@^3.1.4:9853uglify-js@^3.1.4:
9455 version "3.13.9"9854 version "3.13.9"
9456 resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.9.tgz#4d8d21dcd497f29cfd8e9378b9df123ad025999b"9855 resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.9.tgz#4d8d21dcd497f29cfd8e9378b9df123ad025999b"
10258 y18n "^5.0.5"10657 y18n "^5.0.5"
10259 yargs-parser "^20.2.2"10658 yargs-parser "^20.2.2"
1026010659
10261yargs@^17.0.0, yargs@^17.0.1:10660yargs@^17.0.0:
10262 version "17.0.1"10661 version "17.0.1"
10263 resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.0.1.tgz#6a1ced4ed5ee0b388010ba9fd67af83b9362e0bb"10662 resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.0.1.tgz#6a1ced4ed5ee0b388010ba9fd67af83b9362e0bb"
10264 integrity sha512-xBBulfCc8Y6gLFcrPvtqKz9hz8SO0l1Ni8GgDekvBX2ro0HRQImDGnikfc33cgzcYUSncapnNcZDjVFIH3f6KQ==10663 integrity sha512-xBBulfCc8Y6gLFcrPvtqKz9hz8SO0l1Ni8GgDekvBX2ro0HRQImDGnikfc33cgzcYUSncapnNcZDjVFIH3f6KQ==
10664 dependencies:
10665 cliui "^7.0.2"
10666 escalade "^3.1.1"
10667 get-caller-file "^2.0.5"
10668 require-directory "^2.1.1"
10669 string-width "^4.2.0"
10670 y18n "^5.0.5"
10671 yargs-parser "^20.2.2"
10672
10673yargs@^17.1.0, yargs@^17.1.1:
10674 version "17.1.1"
10675 resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.1.1.tgz#c2a8091564bdb196f7c0a67c1d12e5b85b8067ba"
10676 integrity sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==
10265 dependencies:10677 dependencies:
10266 cliui "^7.0.2"10678 cliui "^7.0.2"
10267 escalade "^3.1.1"10679 escalade "^3.1.1"